POST/v1/uploads/{upload_id}/complete
Завершити завантаження
complete_upload
Коли всі частини отримано, Sursa збирає файл, порівнює SHA-256 усього файлу з sha256 у тілі та виконує ті самі перевірки, що й для завантаження одним запитом: формат за сигнатурою вмісту та антивірусну перевірку. Результат — ready або rejected з reject_reason (checksum_mismatch, type_mismatch, unsupported_format, infected, scan_unavailable, unsafe_content). Кожне відхилення перевіркою формату або антивірусом записується до журналу аудиту як file.rejected.
Відповідь 200 означає, що результат готовий; 202 — файл ще перевіряється (processing), а результат надасть GET /v1/uploads/{upload_id}. Якщо статус повертається до pending (перевірку перервав перезапуск екземпляра API), надішліть complete знову. Повторний complete після отримання результату повертає той самий результат. Відсутні частини повертають 409 uploads.incomplete (details.missing). sha256, що відрізняється від оголошеного під час створення, або parts[].etag, що відрізняється від отриманої частини, повертає 422 uploads.checksum_mismatch. Готове завантаження, яке не використано, діє 24 години. Додано в 1.62.0.
Автентифікація
Передайте ключ API в заголовку Authorization: Authorization: Bearer <ключ>.
Параметри шляху
upload_idstringобов’язковоID завантаження (
upl_, а за ним 32 шістнадцяткові символи).length ≤ 64
Параметри заголовка
Idempotency-KeystringКлюч для безпечного повтору операції запису: від 1 до 255 друкованих символів ASCII; рекомендовано окремий UUID v4 для кожної логічної операції. Повтор із тим самим ключем протягом 24 годин не виконує операцію знову: він повертає збережену відповідь (статус, заголовки й тіло) із заголовком
Idempotency-Replayed: true. Той самий ключ з іншим методом, шляхом,Content-Typeабо тілом повертає409 api.idempotency_mismatch; поки перший запит ще виконується —409 api.idempotency_in_progressзRetry-After: 1. Після відповіді 5xx або 429 ключ звільняється, і повтор знову виконує операцію. Ключ діє в межах організації та того, хто викликає (ключ API, користувач або ключ власного джерела).length ≥ 1, length ≤ 255
Тіло запиту
application/json
sha256stringобов’язковоSHA-256 усього файлу.
partsarray of UploadPartRefНеобов’язкова перевірка частин: ETag кожної частини в тому вигляді, у якому його повернув
PUT …/parts/{n}.items ≤ 1000
Відповіді
200Результат готовий: `ready` або `rejected`.
Заголовки відповіді
RateLimit-PolicyЧинні ліміти у форматі чернетки IETF
draft-ietf-httpapi-ratelimit-headers: елементи через кому"<name>";q=<quota>;w=<window in seconds>.key— частота запитів ключа API (квота — це сплеск, вікно — час, за який квота повністю відновлюється; для сесії цей елемент називаєтьсяuser, без облікових даних —ip);minute,dayіmonth— квоти організації на календарну хвилину, день і місяць за UTC.RateLimitСкільки лишилося за кожним лімітом із
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛіміт найсуворішого елемента в
RateLimit-Policy(того, за яким лишилося найменше запитів).X-RateLimit-RemainingСкільки запитів лишилося за найсуворішим лімітом.
X-RateLimit-ResetКількість секунд до скидання найсуворішого ліміту.
Idempotency-Replayedtrueозначає, що відповідь відтворено зі збереженої для цьогоIdempotency-Key: операцію не виконано повторно.
application/json
idstringобов’язковоID завантаження (
upl_, а за ним 32 шістнадцяткові символи).filenamestringобов’язковоІм’я файлу (без папок).
content_typestringобов’язковоЗаявлений тип вмісту; порожній, якщо його не заявлено.
sizeinteger (int64)обов’язковоРозмір файлу в байтах.
sha256string | nullобов’язковоSHA-256 файлу, заявлений під час створення або в
complete;null, якщо він ще не відомий.part_sizeinteger (int64)обов’язковоРозмір кожної частини, крім останньої (від 5 до 100 МіБ).
part_countintegerобов’язковоКількість частин.
≥ 1, ≤ 1000
parts_receivedintegerобов’язковоКількість отриманих частин.
≥ 0
Отримані частини за номерами (порожньо у відповіді
POST /v1/uploads).reject_reasonstring | nullобов’язковоПричина відхилення (
rejected):checksum_mismatch,type_mismatch,unsupported_format,infected,scan_unavailable,unsafe_content. Перелік може розширюватися;null, якщо завантаження не відхилено.reject_detailsobject | nullобов’язковоПодробиці відхилення (розширення, заявлений і визначений формат, контрольні суми);
null, якщо завантаження не відхилено.created_atstring (date-time)обов’язковоКоли створено завантаження.
expires_atstring (date-time)обов’язковоКінцевий строк, до якого завантаження треба завершити, а коли воно готове, — використати.
completed_atstring (date-time) | nullобов’язковоКоли завершилася перевірка (
readyабоrejected).consumed_atstring (date-time) | nullобов’язковоКоли завантаження використано (карткою, архівом або імпортом).
202Файл ще перевіряється (`processing`).
Заголовки відповіді
RateLimit-PolicyЧинні ліміти у форматі чернетки IETF
draft-ietf-httpapi-ratelimit-headers: елементи через кому"<name>";q=<quota>;w=<window in seconds>.key— частота запитів ключа API (квота — це сплеск, вікно — час, за який квота повністю відновлюється; для сесії цей елемент називаєтьсяuser, без облікових даних —ip);minute,dayіmonth— квоти організації на календарну хвилину, день і місяць за UTC.RateLimitСкільки лишилося за кожним лімітом із
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛіміт найсуворішого елемента в
RateLimit-Policy(того, за яким лишилося найменше запитів).X-RateLimit-RemainingСкільки запитів лишилося за найсуворішим лімітом.
X-RateLimit-ResetКількість секунд до скидання найсуворішого ліміту.
Idempotency-Replayedtrueозначає, що відповідь відтворено зі збереженої для цьогоIdempotency-Key: операцію не виконано повторно.
application/json
idstringобов’язковоID завантаження (
upl_, а за ним 32 шістнадцяткові символи).filenamestringобов’язковоІм’я файлу (без папок).
content_typestringобов’язковоЗаявлений тип вмісту; порожній, якщо його не заявлено.
sizeinteger (int64)обов’язковоРозмір файлу в байтах.
sha256string | nullобов’язковоSHA-256 файлу, заявлений під час створення або в
complete;null, якщо він ще не відомий.part_sizeinteger (int64)обов’язковоРозмір кожної частини, крім останньої (від 5 до 100 МіБ).
part_countintegerобов’язковоКількість частин.
≥ 1, ≤ 1000
parts_receivedintegerобов’язковоКількість отриманих частин.
≥ 0
Отримані частини за номерами (порожньо у відповіді
POST /v1/uploads).reject_reasonstring | nullобов’язковоПричина відхилення (
rejected):checksum_mismatch,type_mismatch,unsupported_format,infected,scan_unavailable,unsafe_content. Перелік може розширюватися;null, якщо завантаження не відхилено.reject_detailsobject | nullобов’язковоПодробиці відхилення (розширення, заявлений і визначений формат, контрольні суми);
null, якщо завантаження не відхилено.created_atstring (date-time)обов’язковоКоли створено завантаження.
expires_atstring (date-time)обов’язковоКінцевий строк, до якого завантаження треба завершити, а коли воно готове, — використати.
completed_atstring (date-time) | nullобов’язковоКоли завершилася перевірка (
readyабоrejected).consumed_atstring (date-time) | nullобов’язковоКоли завантаження використано (карткою, архівом або імпортом).
401Облікові дані не надіслано (ні cookie сесії, ні ключа API) або ключ не знайдено.
Заголовки відповіді
RateLimit-PolicyЧинні ліміти у форматі чернетки IETF
draft-ietf-httpapi-ratelimit-headers: елементи через кому"<name>";q=<quota>;w=<window in seconds>.key— частота запитів ключа API (квота — це сплеск, вікно — час, за який квота повністю відновлюється; для сесії цей елемент називаєтьсяuser, без облікових даних —ip);minute,dayіmonth— квоти організації на календарну хвилину, день і місяць за UTC.RateLimitСкільки лишилося за кожним лімітом із
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛіміт найсуворішого елемента в
RateLimit-Policy(того, за яким лишилося найменше запитів).X-RateLimit-RemainingСкільки запитів лишилося за найсуворішим лімітом.
X-RateLimit-ResetКількість секунд до скидання найсуворішого ліміту.
application/json
403Дію не дозволено: роль не має достатніх прав, немає доступу до колекції чи картки, запит виконується в режимі «View as» або організацію призупинено чи видалено (`detail` — об’єкт із `code: org_suspended | org_deleted`).
Заголовки відповіді
RateLimit-PolicyЧинні ліміти у форматі чернетки IETF
draft-ietf-httpapi-ratelimit-headers: елементи через кому"<name>";q=<quota>;w=<window in seconds>.key— частота запитів ключа API (квота — це сплеск, вікно — час, за який квота повністю відновлюється; для сесії цей елемент називаєтьсяuser, без облікових даних —ip);minute,dayіmonth— квоти організації на календарну хвилину, день і місяць за UTC.RateLimitСкільки лишилося за кожним лімітом із
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛіміт найсуворішого елемента в
RateLimit-Policy(того, за яким лишилося найменше запитів).X-RateLimit-RemainingСкільки запитів лишилося за найсуворішим лімітом.
X-RateLimit-ResetКількість секунд до скидання найсуворішого ліміту.
application/json
404Об’єкт не існує або недоступний вам. API не підтверджує існування об’єкта з обмеженим доступом.
Заголовки відповіді
RateLimit-PolicyЧинні ліміти у форматі чернетки IETF
draft-ietf-httpapi-ratelimit-headers: елементи через кому"<name>";q=<quota>;w=<window in seconds>.key— частота запитів ключа API (квота — це сплеск, вікно — час, за який квота повністю відновлюється; для сесії цей елемент називаєтьсяuser, без облікових даних —ip);minute,dayіmonth— квоти організації на календарну хвилину, день і місяць за UTC.RateLimitСкільки лишилося за кожним лімітом із
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛіміт найсуворішого елемента в
RateLimit-Policy(того, за яким лишилося найменше запитів).X-RateLimit-RemainingСкільки запитів лишилося за найсуворішим лімітом.
X-RateLimit-ResetКількість секунд до скидання найсуворішого ліміту.
application/json
409Стан об’єкта не дозволяє виконати дію: наприклад, це дублікат, індексація ще триває або завдання вже оброблено.
Заголовки відповіді
RateLimit-PolicyЧинні ліміти у форматі чернетки IETF
draft-ietf-httpapi-ratelimit-headers: елементи через кому"<name>";q=<quota>;w=<window in seconds>.key— частота запитів ключа API (квота — це сплеск, вікно — час, за який квота повністю відновлюється; для сесії цей елемент називаєтьсяuser, без облікових даних —ip);minute,dayіmonth— квоти організації на календарну хвилину, день і місяць за UTC.RateLimitСкільки лишилося за кожним лімітом із
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛіміт найсуворішого елемента в
RateLimit-Policy(того, за яким лишилося найменше запитів).X-RateLimit-RemainingСкільки запитів лишилося за найсуворішим лімітом.
X-RateLimit-ResetКількість секунд до скидання найсуворішого ліміту.
application/json
410Об’єкт існував, але більше не доступний: посилання вже використано або строк його дії сплив, або файл видалено після закінчення строку зберігання.
Заголовки відповіді
RateLimit-PolicyЧинні ліміти у форматі чернетки IETF
draft-ietf-httpapi-ratelimit-headers: елементи через кому"<name>";q=<quota>;w=<window in seconds>.key— частота запитів ключа API (квота — це сплеск, вікно — час, за який квота повністю відновлюється; для сесії цей елемент називаєтьсяuser, без облікових даних —ip);minute,dayіmonth— квоти організації на календарну хвилину, день і місяць за UTC.RateLimitСкільки лишилося за кожним лімітом із
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛіміт найсуворішого елемента в
RateLimit-Policy(того, за яким лишилося найменше запитів).X-RateLimit-RemainingСкільки запитів лишилося за найсуворішим лімітом.
X-RateLimit-ResetКількість секунд до скидання найсуворішого ліміту.
application/json
422Помилка валідації: тіло або параметри не відповідають схемі (`detail` — список помилок валідації) або значення параметра виходить за допустимі межі (`detail` — повідомлення).
Заголовки відповіді
RateLimit-PolicyЧинні ліміти у форматі чернетки IETF
draft-ietf-httpapi-ratelimit-headers: елементи через кому"<name>";q=<quota>;w=<window in seconds>.key— частота запитів ключа API (квота — це сплеск, вікно — час, за який квота повністю відновлюється; для сесії цей елемент називаєтьсяuser, без облікових даних —ip);minute,dayіmonth— квоти організації на календарну хвилину, день і місяць за UTC.RateLimitСкільки лишилося за кожним лімітом із
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛіміт найсуворішого елемента в
RateLimit-Policy(того, за яким лишилося найменше запитів).X-RateLimit-RemainingСкільки запитів лишилося за найсуворішим лімітом.
X-RateLimit-ResetКількість секунд до скидання найсуворішого ліміту.
application/json
429Забагато запитів (`api.rate_limited`), квоту організації на хвилину, день або місяць вичерпано (`api.quota_exceeded`; `error.details` містить `quota`, `limit` і `reset_at`), досягнуто ліміту організації або сервіс відповідей зайнятий (`answers.engine_busy`). Зачекайте стільки, скільки вказано в заголовку `Retry-After`.
Заголовки відповіді
Retry-AfterКількість секунд, які слід зачекати перед повторним запитом.
RateLimit-PolicyЧинні ліміти у форматі чернетки IETF
draft-ietf-httpapi-ratelimit-headers: елементи через кому"<name>";q=<quota>;w=<window in seconds>.key— частота запитів ключа API (квота — це сплеск, вікно — час, за який квота повністю відновлюється; для сесії цей елемент називаєтьсяuser, без облікових даних —ip);minute,dayіmonth— квоти організації на календарну хвилину, день і місяць за UTC.RateLimitСкільки лишилося за кожним лімітом із
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitЛіміт найсуворішого елемента в
RateLimit-Policy(того, за яким лишилося найменше запитів).X-RateLimit-RemainingСкільки запитів лишилося за найсуворішим лімітом.
X-RateLimit-ResetКількість секунд до скидання найсуворішого ліміту.
application/json
Коди помилок
Коди, які ця операція може повернути в error.code, крім загальних кодів будь-якого запиту.
Безпечні повтори
Надсилайте заголовок Idempotency-Key (наприклад, UUID) з кожним POST і PATCH. Повтор із тим самим ключем протягом 24 годин повертає збережену відповідь, а не виконує запит знову.
Ліміти частоти
Відповіді містять заголовки RateLimit і RateLimit-Policy, а також давніші X-RateLimit-Limit, X-RateLimit-Remaining і X-RateLimit-Reset. Відповідь 429 містить Retry-After у секундах: зачекайте й повторіть запит.