Для AI-агентов: markdown этой страницы — /docs-content/storage/objects.md индекс документации — /llms.txt
Объекты
Операции с объектами хранилища: список, скачивание, получение метаданных, удаление и публичный доступ.
Скоуп: vibe:storage | Базовый URL: https://vibecode.bitrix24.tech/v1 | Авторизация: API-ключ (X-Api-Key); публичные эндпоинты работают без авторизации
Список объектов
GET /v1/storage/objects
Возвращает список завершённых, не удалённых объектов хранилища с фильтрацией по буквальному префиксу ключа и навигацией по курсору. Без prefix объекты отсортированы по id от большего к меньшему. С prefix порядок побайтовый: key по возрастанию, затем id по убыванию для одинаковых ключей.
Личный ключ разработчика видит все объекты своего владельца на портале. Ключ приложения без пользовательского токена видит только общие объекты этого приложения. Ключ приложения с пользовательским токеном видит только объекты соответствующего сотрудника Битрикс24.
Параметры
| Параметр | Тип | По умолч. | Описание |
|---|---|---|---|
limit |
number | 50 |
Количество объектов на страницу. Максимум 500; значения выше 500 усекаются без ошибки |
prefix |
string | — | Фильтр по началу ключа. Пример: prefix=reports/2024 вернёт все объекты, ключи которых начинаются с reports/2024 |
cursor |
string | — | Курсор из предыдущего ответа. Передавайте без изменений. Новые непрозрачные курсоры привязаны к владельцу, префиксу и порядку сортировки; старый CUID-курсор такой привязки не содержит |
withTotal |
boolean | false |
При true добавляет точное число объектов по всему фильтру без учёта курсора. Полный подсчёт может быть дорогим на большом наборе, поэтому запрашивайте его только на нужных страницах |
Обход завершён только при cursor: null. Не разбирайте курсор и не вычисляйте его самостоятельно. Старый курсор в виде CUID принимается только для обхода без prefix, не содержит привязки и всегда применяется внутри текущей области доступа к хранилищу. При добавлении prefix начните обход заново без старого курсора.
Примеры
curl — личный ключ
curl "https://vibecode.bitrix24.tech/v1/storage/objects?limit=10&prefix=reports/2024" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth-приложение
curl "https://vibecode.bitrix24.tech/v1/storage/objects?limit=10&prefix=reports/2024" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — личный ключ
const res = await fetch(
'https://vibecode.bitrix24.tech/v1/storage/objects?limit=10&prefix=reports%2F2024',
{ headers: { 'X-Api-Key': 'YOUR_API_KEY' } }
)
const { data, cursor } = await res.json()
console.log(`На странице: ${data.length}, следующая страница: ${cursor !== null}`)
JavaScript — OAuth-приложение
const res = await fetch(
'https://vibecode.bitrix24.tech/v1/storage/objects?limit=10&prefix=reports%2F2024',
{
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
}
)
const { data, cursor } = await res.json()
Поля ответа
Ответ не содержит обёртку success — возвращается объект напрямую.
| Поле | Тип | Описание |
|---|---|---|
data |
array | Массив объектов |
data[].id |
string | Идентификатор объекта (CUID) |
data[].key |
string | Ключ объекта в хранилище |
data[].contentType |
string | MIME-тип содержимого |
data[].sizeBytes |
string | Размер в байтах. Передаётся строкой из-за ограничений JSON на большие числа |
data[].sha256 |
string | null | SHA-256 хэш содержимого, если был вычислен при загрузке |
data[].visibility |
string | Видимость: PRIVATE или PUBLIC |
data[].uploadStatus |
string | Статус загрузки. В списке всегда COMPLETED |
data[].createdAt |
string | Дата создания в формате ISO 8601 |
data[].deletedAt |
null | Всегда null — удалённые объекты в список не попадают |
data[].contentUpdatedAt |
string (ISO 8601) | Когда содержимое последний раз стало актуальным: замена или первое завершение загрузки. null у объектов, записанных до появления поля |
cursor |
string | null | Непрозрачный курсор для следующей страницы. null, если объектов больше нет |
total |
number | Точное количество объектов по всему фильтру. Поле присутствует только при withTotal=true |
Пример ответа
{
"data": [
{
"id": "cmabcdef1234567890abcdef",
"key": "reports/2024/annual.pdf",
"contentType": "application/pdf",
"sizeBytes": "204800",
"sha256": null,
"visibility": "PRIVATE",
"uploadStatus": "COMPLETED",
"createdAt": "2024-06-15T10:30:00.000Z",
"deletedAt": null
}
],
"cursor": null
}
Пример ответа при ошибке
400 — некорректный limit:
{
"success": false,
"error": {
"code": "STORAGE_INVALID_LIMIT",
"message": "limit must be a positive integer"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | STORAGE_INVALID_LIMIT |
Параметр limit не является положительным целым числом |
| 400 | STORAGE_INVALID_CURSOR |
Новый непрозрачный курсор повреждён, изменён, слишком велик либо относится к другому владельцу, префиксу или порядку; старый CUID-курсор имеет неверный формат, слишком велик либо используется вместе с prefix |
| 401 | MISSING_API_KEY |
API-ключ не передан |
| 403 | STORAGE_SCOPE_REQUIRED |
У API-ключа нет скоупа vibe:storage |
Полный список общих ошибок — Ошибки.