For AI agents: markdown of this page — /docs-content-en/entities/folders/search.md documentation index — /llms.txt
Folder search
POST /v1/folders/search
Lists folder contents via a POST request with a filter in the body. It behaves the same as GET /v1/folders, except that parameters are passed in the body rather than in the query string. The folder ID goes in filter.parentId or in a top-level parentId field of the body.
Request fields (body)
| Field | Type | Required | Description |
|---|---|---|---|
filter |
object | no | Selection conditions. parentId — the ID of the folder whose contents are listed. Required here or at the top level of the body.Filtering syntax. Example: {"parentId":27,"type":"folder"} |
parentId |
number | no | The folder ID at the top level of the body — instead of filter.parentId. If both are passed, this value is used. A single value only: arrays, objects and null are rejected |
select |
array | no | List of fields to return. Example: ["id","name"] |
order |
object | no | Sort by field. Example: {"name":"asc"} |
limit |
number | no | How many records to return. Default 50, maximum 5000 |
offset |
number | no | Offset for pagination |
Examples
curl — personal key
curl -X POST "https://vibecode.bitrix24.com/v1/folders/search" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"filter":{"parentId":27,"type":"folder"},"limit":10}'
curl — OAuth application
curl -X POST "https://vibecode.bitrix24.com/v1/folders/search" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{"filter":{"parentId":27,"type":"folder"},"limit":10}'
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/folders/search', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({ filter: { parentId: 27, type: 'folder' }, limit: 10 }),
})
const { success, data, meta } = await res.json()
console.log('Found:', data.length)
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/folders/search', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({ filter: { parentId: 27, type: 'folder' }, limit: 10 }),
})
const { success, data, meta } = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
success |
boolean | Always true on success |
data |
array | Array of records — subfolders and files. All fields — see Folder fields |
data[].type |
string | Record type: "folder" or "file" |
meta.total |
number | Number of records matching the filter |
meta.hasMore |
boolean | Whether more records exist beyond limit |
meta.durationMs |
number | Request duration in milliseconds |
The meta fields sit next to data, not inside it. Paginate using meta.hasMore: a data length equal to limit does not rule out this being the last page.
Response example
{
"success": true,
"data": [
{
"id": 9301,
"name": "Documents",
"code": null,
"storageId": 1,
"type": "folder",
"realObjectId": 9301,
"parentId": 27,
"deletedType": 0,
"createdAt": "2026-06-25T12:10:00.000Z",
"updatedAt": "2026-06-25T12:10:00.000Z",
"deletedAt": null,
"createdBy": 1,
"updatedBy": 1,
"deletedBy": null,
"detailUrl": "https://<portal>.bitrix24.com/company/personal/user/1/disk/path/Documents"
}
],
"meta": { "total": 1, "hasMore": false, "durationMs": 125 }
}
Error response example
403 — no disk scope:
{
"success": false,
"error": {
"code": "SCOPE_DENIED",
"message": "This endpoint requires 'disk' scope"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| 400 | MISSING_REQUIRED_PARAMS |
The folder ID is passed in neither filter.parentId nor parentId. Arrays, objects and null are treated as missing. The same code is returned when one of the fields is an empty string, even if the other one carries an ID. message lists the missing fields |
| 400 | INVALID_FILTER_OPERATOR |
One of parentId and filter.parentId holds a single ID, and the other holds an array, an object or null. The request is rejected before Bitrix24 Drive is called |
| 403 | SCOPE_DENIED |
The API key does not have the disk scope |
| 401 | TOKEN_MISSING |
The API key has no configured portal tokens |
| 429 | RATE_LIMITED |
Rate limit exceeded: 300 requests per minute per portal, all API keys of the portal share one limit. The exact value arrives in the x-ratelimit-limit header (the cap is divided across replicas). Retry after the delay in the Retry-After header |
Full list of common API errors — Errors.
Known specifics
Search lists the contents of a single folder specified via parentId, rather than searching across the whole storage. For one-off queries it is simpler to use GET /v1/folders with the same set of parameters in the query string.