For AI agents: markdown of this page — /docs-content-en/entities/catalog-documents/list.md documentation index — /llms.txt
List inventory documents
GET /v1/catalog-documents
Returns the Bitrix24 account's inventory documents with filtering, sorting and pagination. Use it to find documents of a given type or conducting status before working with their items.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
Parameterfilter (query) |
Typeobject | Default— | DescriptionFiltering by the fields of GET /v1/catalog-documents/fields.Filtering syntax. Example: ?filter[docType]=S&filter[status]=N |
Parameterselect (query) |
Typestring | Default— | DescriptionComma-separated fields in the response: ?select=id,title,docType,status. Field names come from GET /v1/catalog-documents/fields |
Parameterorder (query) |
Typeobject | Default— | DescriptionSorting: ?order[id]=desc. Short form — ?sort=-id, where a leading minus means descending. Without the parameter, documents are sorted by id ascending |
Parameterlimit (query) |
Typenumber | Default50 |
DescriptionNumber of records, from 1 to 5000. A value above 5000 is capped at 5000, a non-numeric value is replaced with 50 |
Parameteroffset (query) |
Typenumber | Default0 |
DescriptionHow many records to skip. The offset counts records: offset=7 starts the output at the eighth document |
ParameterwithTotal (query) |
Typestring | Default— | Descriptiontrue or false. The exact value false omits meta.total, but Bitrix24 still counts the documents, so this option does not make the request cheaper. Without it or with true, the existing counted behavior applies |
Pagination. When limit > 50, Vibecode assembles the response from several pages automatically. To walk the whole result set, increase offset by limit while meta.hasMore is true.
Examples
curl — personal key
curl "https://vibecode.bitrix24.com/v1/catalog-documents?limit=2" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl "https://vibecode.bitrix24.com/v1/catalog-documents?limit=2" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/catalog-documents?limit=2', {
headers: {
'X-Api-Key': 'YOUR_API_KEY',
},
})
const { success, data, meta } = await res.json()
console.log(`Documents matching the filter: ${meta.total}`)
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/catalog-documents?limit=2', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { success, data, meta } = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | DescriptionAlways true on success |
Fielddata |
Typearray | DescriptionArray of inventory documents (all fields — see Inventory document fields) |
Fieldmeta.total |
Typenumber | DescriptionTotal number of documents matching the filter. Optional: absent when withTotal=false |
Fieldmeta.hasMore |
Typeboolean | DescriptionWhether there are more documents beyond limit |
Fieldmeta.warnings |
Typearray | DescriptionRequest warnings. Returned when select contains a name that is not among the document fields: code UNKNOWN_SELECT_FIELD, the name in the field field. The request still runs and the other fields are returned |
The document's products and warehouses are not included in the response — the item list with filter[docId] returns them.
Response example
{
"success": true,
"data": [
{
"commentary": null,
"createdBy": 1,
"currency": "USD",
"dateCreate": "2025-01-10T11:49:37.000Z",
"dateDocument": null,
"dateModify": "2025-01-10T11:49:59.000Z",
"dateStatus": "2025-01-10T11:49:59.000Z",
"docNumber": null,
"docType": "S",
"id": 1,
"modifiedBy": 1,
"responsibleId": 1,
"siteId": "s1",
"status": "Y",
"statusBy": 1,
"title": "Stock adjustment #2",
"total": 275000
},
{
"commentary": null,
"createdBy": 1,
"currency": "USD",
"dateCreate": "2025-06-27T05:00:47.000Z",
"dateDocument": "2025-06-27T05:00:47.000Z",
"dateModify": "2025-06-27T05:00:47.000Z",
"dateStatus": "2025-06-27T05:00:47.000Z",
"docNumber": null,
"docType": "A",
"id": 3,
"modifiedBy": 1,
"responsibleId": 1,
"siteId": "s1",
"status": "Y",
"statusBy": 1,
"title": "Goods receipt #12",
"total": 5940
}
],
"meta": {
"total": 143,
"hasMore": true
}
}
Error response example
400 — filter by a field the document does not have:
{
"success": false,
"error": {
"code": "UNKNOWN_FILTER_FIELD",
"message": "Unknown filter field 'bogus' for entity 'catalog-documents'. Available: id, docType, currency, responsibleId, status, dateStatus, createdBy, dateCreate, title, docNumber, commentary, dateDocument, siteId, total, modifiedBy, statusBy, dateModify"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP400 | CodeUNKNOWN_FILTER_FIELD |
DescriptionFilter by a field the document does not have. The message lists the allowed fields |
| HTTP400 | CodeUNKNOWN_SORT_FIELD |
DescriptionSorting by a field the document does not have. The message lists the allowed fields |
| HTTP400 | CodeINVALID_FILTER |
DescriptionThe filter value is not recognized: pass it in bracket notation ?filter[docType]=S or as a JSON object ?filter={"docType":"S"}. Both notations in one request are also rejected |
| HTTP400 | CodeINVALID_FILTER_OPERATOR |
DescriptionThe filter contains an unsupported operator. The message lists the supported ones |
| HTTP403 | CodeSCOPE_DENIED |
DescriptionThe API key does not have the catalog scope |
| HTTP401 | CodeMISSING_API_KEY |
DescriptionThe X-Api-Key header is missing |
| HTTP401 | CodeINVALID_API_KEY |
DescriptionThe API key passed was not found |
| HTTP401 | CodeTOKEN_MISSING |
DescriptionThe API key has no configured tokens |
| HTTP429 | CodeRATE_LIMITED |
DescriptionRate limit exceeded: 300 requests per minute per portal, all API keys of the portal share one limit. The effective value is in the x-ratelimit-limit header. Retry after the delay in the Retry-After header |
Full list of common API errors — Errors.