For AI agents: markdown of this page — /docs-content-en/entities/warehouses/list.md documentation index — /llms.txt
List warehouses
GET /v1/warehouses
Returns the list of warehouses in the Bitrix24 account. Paginated output is controlled by the limit and offset parameters.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
limit |
number | 50 |
Number of records (up to 5000). When limit > 50, the response is automatically assembled from several Bitrix24 pages. When limit ≤ 50, extra records are trimmed on the Vibecode side (Bitrix24 returns a page of up to 50 records regardless of the value) |
offset |
number | 0 |
Offset from the start of the result set. Page-granular: the list is returned in pages of 50 records, so offset is floored to a multiple of 50 — offset=25 returns the same page as offset=0, and offset=50 returns the next one. When offset ≥ 2500, keep limit ≤ 500 |
Examples
curl — personal key
curl "https://vibecode.bitrix24.com/v1/warehouses" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl "https://vibecode.bitrix24.com/v1/warehouses" \
-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/warehouses', {
headers: {
'X-Api-Key': 'YOUR_API_KEY',
},
})
const { success, data, meta } = await res.json()
console.log(`Warehouses: ${meta.total}`)
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/warehouses', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { success, data, meta } = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
success |
boolean | Always true on success |
data |
array | Array of warehouses — fields of a single warehouse below |
meta.total |
number | Total number of warehouses in the Bitrix24 account |
meta.hasMore |
boolean | Whether there are records beyond the current page (offset + data.length < total). When true, raise limit (up to 5000) or move offset |
Warehouse fields
| Field | Type | Description |
|---|---|---|
id |
number | Warehouse identifier |
title |
string | Warehouse name |
address |
string | Warehouse address |
active |
string | Active flag: "Y" / "N" |
issuingCenter |
string | Order pickup point flag: "Y" / "N" |
description |
string | null | Warehouse description. null if not set |
phone |
string | null | Contact phone. null if not set |
email |
string | null | Contact email. null if not set |
schedule |
string | null | Working hours. null if not set |
sort |
number | Sort order |
code |
string | null | Symbolic code. null if not set |
xmlId |
string | null | External identifier. null if not set |
gpsN |
number | null | Geographic latitude. null if not set |
gpsS |
number | null | Geographic longitude. null if not set |
imageId |
object | null | Warehouse image: { "id", "url" } or null |
userId |
number | null | Responsible employee. null for system warehouses, populated when created via the API |
modifiedBy |
number | null | Identifier of the user who last modified the warehouse. null for system warehouses, populated when created via the API |
dateCreate |
datetime | null | Creation date. null for some system warehouses (for example, marketplaces) |
dateModify |
datetime | Last modification date |
Response example
{
"success": true,
"data": [
{
"id": 1,
"title": "Main warehouse",
"address": "1 Harbour Street, Amsterdam",
"active": "Y",
"issuingCenter": "N",
"description": null,
"phone": null,
"email": null,
"schedule": null,
"sort": 100,
"code": null,
"xmlId": null,
"gpsN": null,
"gpsS": null,
"imageId": null,
"userId": 1,
"modifiedBy": 1,
"dateCreate": "2024-01-15T09:00:00+00:00",
"dateModify": "2024-06-20T14:30:00+00:00"
},
{
"id": 2,
"title": "North pickup point",
"address": "8 Station Road, Rotterdam",
"active": "Y",
"issuingCenter": "Y",
"description": null,
"phone": "+12025550123",
"email": null,
"schedule": "Mon–Fri 10:00–20:00",
"sort": 200,
"code": "pickup-north",
"xmlId": null,
"gpsN": 51.924420,
"gpsS": 4.477733,
"imageId": null,
"userId": 1,
"modifiedBy": 1,
"dateCreate": "2024-03-10T11:00:00+00:00",
"dateModify": "2024-03-10T11:00:00+00:00"
}
],
"meta": {
"total": 2,
"hasMore": false
}
}
Error response example
400 — invalid limit value:
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "limit must be a positive integer"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| 400 | INVALID_PARAMS |
limit is not a positive integer or offset is negative |
| 401 | TOKEN_MISSING |
The API key has no configured tokens |
| 403 | SCOPE_DENIED |
The API key does not have the catalog scope |
| 502 | BITRIX_UNAVAILABLE |
Bitrix24 is unavailable |
The full list of common API errors — Errors.
Known specifics
Paginated output only. The list accepts only limit and offset. Filtering, sorting, and selecting individual fields (filter, sort, select) are not supported on this endpoint — all warehouses in the Bitrix24 account are returned. Pick the warehouse you need on the client side using a field from the response.
Fetch all warehouses in one request. In a Bitrix24 account with more than 50 warehouses, set limit above the actual number (for example ?limit=5000) — the response is assembled from several Bitrix24 pages and returns everything at once. An incomplete response is indicated by meta.hasMore: true (the default limit=50 response returns it too when there are more than 50 warehouses). You no longer need to compare data.length against meta.total by hand.
offset granularity is 50. The list is returned in pages of 50 records, so offset moves by a whole page (floored to a multiple of 50), not row by row. For a row-level slice, use an offset that is a multiple of 50 and pick the rows you need on the client side.