For AI agents: markdown of this page — /docs-content-en/note/collections/list.md documentation index — /llms.txt
List knowledge bases
GET /v1/note/collections
Returns the knowledge bases available to the current API key in the Bitrix24 account. Supports cursor pagination for traversing large lists.
The generic filter parameter is not applied by this endpoint. By default, the API preserves the previous HTTP 200 response and data, adds Warning: 299 - "filter is not supported on this endpoint and was ignored", and records unsupported-filter use in the server log.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
Parameterlimit (query) |
Typeinteger | Requiredno | DescriptionPage size, from 1 to 200. Defaults to 50 |
ParameterafterPosition (query) |
Typeinteger | Requiredno | DescriptionThe position value from meta.nextCursor of the previous response. Pass together with afterId |
ParameterafterId (query) |
Typeinteger | Requiredno | DescriptionThe id value from meta.nextCursor of the previous response. Pass together with afterPosition |
Pagination. Cursor-based. limit sets the page size. For the next page, pass afterPosition and afterId from meta.nextCursor of the previous response. When meta.nextCursor is null, there are no more pages.
Examples
curl — personal key
curl https://vibecode.bitrix24.com/v1/note/collections \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl https://vibecode.bitrix24.com/v1/note/collections \
-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/note/collections', {
headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})
const { data } = await res.json()
console.log('Knowledge bases:', data)
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/note/collections', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { data } = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | DescriptionAlways true on success |
Fielddata |
Typearray | DescriptionArray of knowledge bases |
Fielddata[].id |
Typenumber | DescriptionKnowledge base identifier |
Fielddata[].name |
Typestring | DescriptionKnowledge base name |
Fielddata[].position |
Typenumber | DescriptionNumeric position of the knowledge base |
Fielddata[].policyLevel |
Typestring | DescriptionAccess policy of the knowledge base. On the Bitrix24 account we checked — portal for the shared company knowledge base and private for the rest |
Fielddata[].accessLevel |
Typestring | DescriptionAccess level to the knowledge base. On the knowledge bases we checked — full |
Fielddata[].isArchived |
Typeboolean | Descriptiontrue for an archived knowledge base |
Fielddata[].createdBy |
Typenumber | DescriptionIdentifier of the employee who created the knowledge base. List: GET /v1/users |
Fielddata[].createdAt |
Typestring | DescriptionCreation date in ISO 8601 format |
Fielddata[].updatedBy |
Typenumber | DescriptionIdentifier of the employee who last modified the knowledge base. List: GET /v1/users |
Fielddata[].updatedAt |
Typestring | DescriptionLast modification date in ISO 8601 format |
Fielddata[].markdownDescription |
Typestring or null | DescriptionKnowledge base description in Markdown. On the knowledge bases we checked — null |
Fieldmeta.nextCursor |
Typeobject or null | DescriptionNext page cursor — an object with position and id fields. null when there are no more pages |
Response example
{
"success": true,
"data": [
{
"id": 1,
"name": "My company",
"position": 1000,
"policyLevel": "portal",
"accessLevel": "full",
"isArchived": false,
"createdBy": 0,
"createdAt": "2026-05-21T17:36:10Z",
"updatedBy": 0,
"updatedAt": "2026-05-21T17:36:10Z",
"markdownDescription": null
},
{
"id": 9,
"name": "Product documentation",
"position": 100,
"policyLevel": "private",
"accessLevel": "full",
"isArchived": false,
"createdBy": 1269,
"createdAt": "2026-06-23T19:01:03Z",
"updatedBy": 1269,
"updatedAt": "2026-06-23T19:05:39Z",
"markdownDescription": null
},
{
"id": 7,
"name": "KB test",
"position": 100,
"policyLevel": "private",
"accessLevel": "full",
"isArchived": false,
"createdBy": 1269,
"createdAt": "2026-06-22T09:16:33Z",
"updatedBy": 1269,
"updatedAt": "2026-06-22T09:16:33Z",
"markdownDescription": null
}
],
"meta": { "nextCursor": null }
}
Error response example
400 — invalid limit:
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "`limit` must be an integer between 1 and 200"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP200 | CodeWarning: 299 |
DescriptionThe filter is ignored by default; previous data is preserved and the warning is sent in the Warning header. |
| HTTP400 (strict mode only) | CodeUNSUPPORTED_FILTER |
DescriptionThe server mode is disabled by default; until it is enabled, the endpoint preserves HTTP 200 and the previous data. |
| HTTP400 | CodeINVALID_PARAMS |
Descriptionlimit outside the range from 1 to 200, or only one of afterPosition / afterId was passed |
| HTTP403 | CodeSCOPE_DENIED |
DescriptionThe key lacks the note scope |
| HTTP401 | CodeTOKEN_MISSING |
DescriptionThe key has no configured tokens |
Full list of common API errors — Errors.
Known specifics
Archived knowledge bases are not listed. After archiving, a knowledge base disappears from the results but stays available by identifier via GET /v1/note/collections/:id — its response carries isArchived: true.