For AI agents: markdown of this page — /docs-content-en/note/documents/list.md documentation index — /llms.txt

List documents

GET /v1/note/documents

Returns a flat list of accessible documents, paginated with a continuation cursor. To traverse a large knowledge base in full, use this method: the document tree of a single knowledge base is not paginated.

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
ParameterafterCursor (query) Typestring Requiredno DescriptionThe previous response's meta.nextCursor object as URL-encoded JSON. Fields: stream, collectionId, id

Pass the cursor fields unchanged. collectionId may be null. Stop the traversal only when meta.nextCursor is null: an empty data array with a non-null cursor means you must request the next page.

Examples

curl — personal key

Terminal
curl -G https://vibecode.bitrix24.com/v1/note/documents \
  --data-urlencode "limit=20" \
  -H "X-Api-Key: YOUR_API_KEY"

curl — OAuth application

Terminal
curl -G https://vibecode.bitrix24.com/v1/note/documents \
  --data-urlencode "limit=20" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"

JavaScript — personal key

javascript
let cursor = null
do {
  const params = new URLSearchParams({ limit: '20' })
  if (cursor) params.set('afterCursor', JSON.stringify(cursor))
  const res = await fetch(`https://vibecode.bitrix24.com/v1/note/documents?${params}`, {
    headers: { 'X-Api-Key': 'YOUR_API_KEY' },
  })
  if (!res.ok) throw new Error(`HTTP ${res.status}`)
  const { data, meta } = await res.json()
  for (const document of data) console.log(document.id)
  cursor = meta.nextCursor
} while (cursor !== null)

JavaScript — OAuth application

javascript
let cursor = null
do {
  const params = new URLSearchParams({ limit: '20' })
  if (cursor) params.set('afterCursor', JSON.stringify(cursor))
  const res = await fetch(`https://vibecode.bitrix24.com/v1/note/documents?${params}`, {
    headers: {
      'X-Api-Key': 'YOUR_APP_KEY',
      'Authorization': 'Bearer USER_SESSION_TOKEN',
    },
  })
  if (!res.ok) throw new Error(`HTTP ${res.status}`)
  const { data, meta } = await res.json()
  for (const document of data) console.log(document.id)
  cursor = meta.nextCursor
} while (cursor !== null)

Response fields

Field Type Description
Fieldsuccess Typeboolean DescriptionAlways true on success
Fielddata Typearray DescriptionDocuments on this page. The array may be empty while meta.nextCursor is not null
Fielddata[].id Typenumber DescriptionDocument identifier
Fielddata[].collectionId Typenumber DescriptionThe knowledge base the document belongs to. List: GET /v1/note/collections
Fielddata[].parentId Typenumber or null DescriptionParent document in the knowledge base tree. null for a top-level document
Fielddata[].title Typestring DescriptionDocument title
Fielddata[].position Typenumber DescriptionSort order among sibling documents
Fielddata[].createdBy Typenumber DescriptionCreator identifier. List: GET /v1/users
Fielddata[].updatedBy Typenumber DescriptionIdentifier of the last editor. List: GET /v1/users
Fielddata[].createdAt Typestring DescriptionCreation date in ISO 8601 format
Fielddata[].updatedAt Typestring DescriptionLast modification date in ISO 8601 format
Fielddata[].contentUpdatedAt Typestring or null DescriptionDate of the last content change in ISO 8601 format, or null. A title-only edit does not change it
Fielddata[].state Typestring DescriptionDocument state. live for an active document
Fielddata[].isArchived Typeboolean Descriptiontrue for an archived document
Fielddata[].isTrashed Typeboolean Descriptiontrue for a document in the trash
Fielddata[].isOrphan Typeboolean Descriptiontrue for a document that belongs to no knowledge base
Fieldmeta.nextCursor Typeobject or null DescriptionNext-page cursor { stream, collectionId, id }, or null at the end

Response example

A page of two documents with a continuation cursor:

JSON
{
  "success": true,
  "data": [
    {
      "id": 11,
      "collectionId": 9,
      "parentId": null,
      "title": "Chapter 1",
      "position": 1000,
      "createdBy": 1269,
      "updatedBy": 1269,
      "createdAt": "2026-06-23T22:07:29+00:00",
      "updatedAt": "2026-06-23T22:07:29+00:00",
      "contentUpdatedAt": null,
      "state": "live",
      "isArchived": false,
      "isTrashed": false,
      "isOrphan": false
    },
    {
      "id": 5,
      "collectionId": 7,
      "parentId": null,
      "title": "Chapter 1 (updated)",
      "position": 1000,
      "createdBy": 1269,
      "updatedBy": 1269,
      "createdAt": "2026-06-22T12:17:40+00:00",
      "updatedAt": "2026-07-06T12:03:47+00:00",
      "contentUpdatedAt": null,
      "state": "live",
      "isArchived": false,
      "isTrashed": false,
      "isOrphan": false
    }
  ],
  "meta": {
    "nextCursor": { "stream": "collections", "collectionId": 7, "id": 5 }
  }
}

Error response example

400 — limit is outside the range from 1 to 200:

JSON
{
  "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 1…200 or malformed afterCursor
HTTP403 CodeSCOPE_DENIED DescriptionThe key lacks the note scope
HTTP401 CodeTOKEN_MISSING DescriptionThe API key has no tokens configured

Full list of common API errors — Errors.

See also