Skip to content

List, filter and search records

GET
/data/delivery/v1/records
curl --request GET \
--url https://api.ebitex.io/data/delivery/v1/records \
--header 'Authorization: Bearer <token>'

Lists records, one page at a time. Without model it lists every readable model’s records; with model=<key> it lists that model’s records and those of every model that inherits from it.

search matches the start of a record’s name, or the start of any word in it, without regard to case: fly finds Drakeshead Flycatcher, ly does not. filter[field]=value (or filter[field][op]=value) narrows by a declared field; several filters are combined with AND. The operators are eq (the default), in (comma-separated), prefix (text), gt, gte, lt, lte (numbers and dates), and exists (true or false). A reference field filters by the key of the record it points at with eq or in: filter[sire]=rex-of-drakeshead lists a sire’s offspring. Dates are RFC 3339 instants such as 2026-06-01T00:00:00Z, unless the field is a calendar date (2026-06-01) or a time of day (16:00 or 16:00:30), which take their own form and have no time zone. Filters, field sorts and facets need model.

sort is name (the default) or updated, or a field the model declared sortable; prefix - for descending. Records with no value for the sort field come last in either direction. limit is 1 to 100 and defaults to 25. nextCursor is null on the last page; send it back as cursor with the same query for the next. A cursor is bound to its query and stays valid while records change: no record repeats or is skipped because another was added.

facets=breed,colour (at most 5 fields the model declared facetable) adds facets: for each field the 20 most common values with their counts, over every record the filters match, not just the page. The built-in facet model counts the matches per concrete model (facets=model with model=animal counts the birds and the cats), for when the kind of record is the model and not a field.

keys=a,b,c reads up to 50 records by key in one round trip, in the order asked, with the keys that could not be read listed under missing. It cannot be combined with the other query parameters except generations and expand, which work as they do on GET /records/{key} and apply to every item.

Only fields a model declared queryable can be filtered, sorted or faceted, and only the kinds it declared. A field that is private, undeclared or absent answers the same 400 field_not_queryable.

What a key sees depends on how it is restricted. A key with no origin or IP restriction is a server key and reads every model and field in its partition. A key restricted to origins or addresses is browser-safe and reads only the models their owners marked public, and only the fields marked public inside them. Something a key may not see answers exactly as something that does not exist. Folders and their access rules govern who may edit a record, not what a key reads.

Key: a Data delivery key (data.delivery.read), minted for one partition in Data. A key with an origin or IP restriction is browser-safe and sees only what models mark public.

OK

field_not_queryable, invalid_filter, invalid_limit, invalid_generations, invalid_keys, model_required, invalid_search, or invalid_cursor: the cursor belongs to a different query.

missing_api_key or invalid_api_key: no key was sent, or it is unknown, revoked or expired, or its partition binding was removed.

payment_required: the organization’s subscription needs attention.

scope_denied: the key lacks data.delivery.read. app_not_available: Data is not enabled for the organization. origin_denied or ip_denied: the key was used from an origin or address outside its restrictions.

model_not_found: no model has that key, or the key may not read it.

rate_limited: the key spent its requests-per-minute budget; Retry-After says how long to wait. too_many_failed_authentications: too many bad keys from this address.