For AI agents: markdown of this page — /docs-content-en/disk/uploads-list.md documentation index — /llms.txt
List upload operations
GET /v1/disk/uploads
Returns Bitrix24 Drive file upload operations created in the key context: unfinished or recently finished. Helps recover a lost operation ID and find records with an unknown outcome.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Parameterfilter (query) |
Typestring | Requiredyes | Default— | Descriptionpending — operations in progress: phase is prepared or submitting, or application is unknown. recent — finished operations with application equal to applied or not_applied, created within the last 90 days |
Parameterlimit (query) |
Typenumber | Requiredno | Default50 |
DescriptionRecords per page, an integer from 1 to 100 |
Parametercursor (query) |
Typestring | Requiredno | Default— | DescriptionThe nextCursor value from the previous response. Omit it in the first request |
The request accepts no other parameters: an unknown parameter returns 400 INVALID_PARAMS.
Records are sorted from oldest to newest. While the response has hasMore: true, request the next page with cursor set to nextCursor and the same filter.
Examples
curl — personal key
curl "https://vibecode.bitrix24.com/v1/disk/uploads?filter=recent&limit=2" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl "https://vibecode.bitrix24.com/v1/disk/uploads?filter=recent&limit=2" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — personal key
const items = []
let cursor
do {
const params = new URLSearchParams({ filter: 'recent', limit: '2' })
if (cursor) params.set('cursor', cursor)
const res = await fetch(`https://vibecode.bitrix24.com/v1/disk/uploads?${params}`, {
headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})
const { success, data, error } = await res.json()
if (!success) throw new Error(error.code)
items.push(...data.items)
cursor = data.hasMore ? data.nextCursor : undefined
} while (cursor)
console.log(items.map(item => `${item.intentSummary.effectiveFilename}: ${item.application}`))
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/disk/uploads?filter=recent&limit=2', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { success, data, error } = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | Descriptiontrue on a successful read |
Fielddata.items |
Typearray | DescriptionOperations on the page. An empty array if nothing matches filter |
Fielddata.items[].operationId |
Typestring | DescriptionOperation ID. Details: GET /v1/disk/uploads/:operationId |
Fielddata.items[].phase |
Typestring | DescriptionOperation phase: prepared, submitting or settled |
Fielddata.items[].application |
Typestring | DescriptionWrite outcome: applied, not_applied or unknown |
Fielddata.items[].verification |
Typestring | DescriptionResult of the last check against the current file: matched, superseded or unavailable |
Fielddata.items[].intentSummary.mode |
Typestring | DescriptionMode from the reservation: create or version |
Fielddata.items[].intentSummary.targetId |
Typestring | DescriptionFolder ID for create or file ID for version |
Fielddata.items[].intentSummary.effectiveFilename |
Typestring | DescriptionFile name from the reservation |
Fielddata.items[].intentSummary.contentSize |
Typestring | DescriptionFile size in bytes |
Fielddata.items[].intentSummary.intentHash |
Typestring | DescriptionThe operation's intentHash — required by POST /v1/disk/uploads |
Fielddata.items[].priorOperationId |
Typestring | DescriptionThe previous operation this one was reserved from. Returned for operations with lineage.kind equal to successor or retry |
Fielddata.hasMore |
Typeboolean | Descriptiontrue if there is a next page |
Fielddata.nextCursor |
Typestring | DescriptionCursor of the next page. Returned when hasMore: true |
Response example
First page of filter=recent&limit=2:
{
"success": true,
"data": {
"items": [
{
"operationId": "zSTFAm53NusAWc94THbRTOfbe-OIoHwlDIJTQ6E2Z7o",
"phase": "settled",
"application": "applied",
"verification": "matched",
"intentSummary": {
"mode": "create",
"targetId": "1",
"effectiveFilename": "vibe-disk-docs-check.txt",
"contentSize": "27",
"intentHash": "3e55280c097b92721a6c58da586363f1169e7dec15990fe3fa7f44f543b8331a"
}
},
{
"operationId": "xykPPgOlNBiKMTlAV3SfBoGJhG6Hi6AX57Ede4rAFoU",
"phase": "settled",
"application": "applied",
"verification": "superseded",
"intentSummary": {
"mode": "create",
"targetId": "1",
"effectiveFilename": "vibe-disk-docs-check-2.txt",
"contentSize": "29",
"intentHash": "3e10ae1152a0e4b4e89d3b312bfacafc1f3e0cf22d8a5eae3e231fa8bc274498"
}
}
],
"hasMore": true,
"nextCursor": "xykPPgOlNBiKMTlAV3SfBoGJhG6Hi6AX57Ede4rAFoU"
}
}
The next page with cursor — the operation for a new file version carries priorOperationId:
{
"success": true,
"data": {
"items": [
{
"operationId": "dlbBsp01PqU2VBXjA8VigHPCXE_T01lBJgCp_gNfypY",
"phase": "settled",
"application": "applied",
"verification": "matched",
"intentSummary": {
"mode": "version",
"targetId": "10901",
"effectiveFilename": "vibe-disk-docs-check-2.txt",
"contentSize": "32",
"intentHash": "07b6444b0eb202f1c7c11b50d5617a86790e80e6bb9d487c0e90776d1a0f0a75"
},
"priorOperationId": "xykPPgOlNBiKMTlAV3SfBoGJhG6Hi6AX57Ede4rAFoU"
},
{
"operationId": "QSCV6zB59O811A1pNO9HfekQdMvGifw4_E9-y1OZs48",
"phase": "settled",
"application": "not_applied",
"verification": "unavailable",
"intentSummary": {
"mode": "version",
"targetId": "10901",
"effectiveFilename": "vibe-disk-docs-check-2.txt",
"contentSize": "16",
"intentHash": "76d560e3bf0b2bfabb85152474db537ebb08225558e37537f9ff86fbafebe0ad"
}
}
],
"hasMore": false
}
}
Error response example
400 — limit is greater than 100:
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "Disk request unavailable",
"retrySafe": false
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP400 | CodeINVALID_PARAMS |
Descriptionfilter is missing or is neither pending nor recent, limit is not an integer from 1 to 100, cursor is longer than 512 characters, or an unknown parameter is passed |
| HTTP401 | CodeMISSING_API_KEY |
DescriptionThe X-Api-Key header is missing |
| HTTP401 | CodeINVALID_API_KEY |
DescriptionThe key is not recognized |
| HTTP401 | CodeTOKEN_MISSING |
DescriptionThe key has no connection to Bitrix24 |
| HTTP401 | CodeDISK_AUTH_UNAVAILABLE |
DescriptionThe Bitrix24 user could not be confirmed: an application key was passed without Authorization: Bearer, the session does not belong to the key's application, or the key is not supported by the Drive agent |
| HTTP401 | CodeTOKEN_REFRESH_FAILED |
DescriptionThe portal authorization for the key could not be refreshed. A retry does not help until the key is authorized again |
| HTTP403 | CodeSCOPE_DENIED |
DescriptionThe key lacks the disk scope |
| HTTP403 | CodeDISK_ACCESS_DENIED |
DescriptionBitrix24 denied access while checking the user |
| HTTP409 | CodeDISK_OPERATION_CONFLICT |
Descriptioncursor is not an operation ID in the key context |
| HTTP502 | CodeDISK_READ_UNAVAILABLE |
DescriptionBitrix24 returned an error that Vibecode did not recognize |
| HTTP503 | CodeQUERY_LIMIT_EXCEEDED |
DescriptionBitrix24 throttled the request rate. Retry later |
| HTTP503 | CodeBITRIX_TIMEOUT |
DescriptionBitrix24 did not respond in time |
| HTTP503 | CodeQUEUE_OVERFLOW, QUEUE_TIMEOUT |
DescriptionThe portal call queue is full. The Retry-After header gives the pause before a retry |
| HTTP503 | CodeRATE_LIMITED |
DescriptionThe portal responded with HTTP 429. The Retry-After header gives the pause before a retry |
| HTTP503 | CodeERROR_LOOP_DETECTED |
DescriptionRepeated errors from this key on this method have temporarily stopped calls. The Retry-After header gives the pause |
| HTTP503 | Codeuser_self_deletion_pending |
DescriptionThe key owner requested deletion of their account — Drive calls are stopped |
Full list of common API errors — Errors.
Known specifics
verificationis not recomputed in the list. The field carries the result of the last check. To check an operation against the current file, requestGET /v1/disk/uploads/:operationId.