POST/v1/cards/archive
Качване на архив с документи
upload_card_archive
Изпратете ZIP архив в полето file на форма multipart/form-data. Всеки поддържан файл в него става отделен документ, както при единичните качвания (POST /v1/cards). Контейнерите за подписи ASiC (.asice, .sce, .bdoc, .asics) също са архиви: файловете с данни в тях стават документи, META-INF/ се пропуска, а подписът не се проверява. Полетата на формата са същите като при качване на файл (колекция, етикети, отговорник, категория, чувствителност), без преглед.
Архивът се проверява по сигнатура (преименуван документ на Office не се счита за архив и връща 415 files.type_mismatch), прилага се лимитът за качване на инсталацията, а антивирусната проверка обхваща целия архив.
Съдържанието на архива се проверява синхронно. Отговорът съдържа плана (кои файлове стават документи, кои се пропускат и защо) и заданието за разархивиране (job_id, batch_id). Заданието отваря вложените архиви (по подразбиране до 3 нива), проверява всеки документ по сигнатура и с антивирусна проверка и го поставя в опашката за обичайно индексиране със същия batch_id (напредък по документите: GET /v1/jobs?batch=). Резултатът е достъпен от GET /v1/archives/{job_id}.
Лимити (по подразбиране за инсталацията): до 1000 файла в цялото дърво (повече връща 413 cards.archive_too_many_files), до 2048 MB в разархивиран вид (повече връща 413 cards.archive_too_large) и не повече от оставащото хранилище на организацията по плана ѝ (402 limits.storage), лимитът за качване на файл – за всеки файл вътре, и степен на компресия най-много 100:1 за запис. Записите с „..“, абсолютен път или буква на устройство, символните връзки, шифрираните записи и неподдържаните формати се пропускат с причина (skipped[].reason). Системните файлове на ОС, директориите и празните файлове се пропускат без съобщение (ignored). Имената, които не са в UTF-8, се четат като cp866 или cp1251. Файл, който не е ZIP, връща 400 cards.archive_invalid, изцяло шифриран архив връща 400 cards.archive_encrypted, а архив без нито един документ връща 400 cards.archive_empty.
Всеки документ помни архива си: CardVersion.archive и Card.source_archive (картата показва архива на текущата си версия).
Вместо формата можете да изпратите тяло application/json (ArchiveUploadFromUpload, от версия 1.62.0): архивът е готово качване на части upload_id (предназначение archive), полетата са същите като във формата, а tags е списък от низове. Архивът вече е проверен при complete, а лимитът за размер е лимитът за качване на части вместо лимита за качване с една заявка. Качването се използва веднъж, в същата транзакция, която поставя заданието за разархивиране в опашката; кодовете на грешки за качването са същите като при POST /v1/cards.
Удостоверяване
Изпратете API ключ в заглавката Authorization: Authorization: Bearer <ключ>.
Параметри в заглавката
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
X-View-AsstringСамо за API ключове с ролята
admin. Изпълнява заявката от името на профила за достъп<profile>[:viewer|verifier|editor], напримерemployee:viewer. Ключът на инсталацията не може да използва тази заглавка (403).
Параметри в бисквитка
kb_view_asstringБисквитка на режима „View as“ за сесия.
POST /auth/view-asя задава, аDELETE /auth/view-asя изчиства.
Тяло на заявката
multipart/form-data
filestring (application/zip)задължителноcollectionstringПо подразбиране: "default"
tagsstringПо подразбиране: ""
forcebooleanПо подразбиране: false
owner_idinteger | nullverify_interval_daysinteger | nullcategorystring | nullsensitiveboolean | nullfolder_idstring | nullПапка на
collection, в която да се поставят всички документи от архива. Папка от друга колекция връща400 folders.card_collection_mismatch, несъществуваща папка връща404 folders.not_found, а липсата на правотоCOLLECTION_EDIT_CARDSвърху папката връща403 authz.forbidden. Проверката се извършва преди записването на архива. Дубликатите на вече качени файлове не се преместват в папката.length ≤ 64
collection_idinteger | nullКолекция по ID. Ако е подадено и
collection, предимство имаcollection_id. Колекция, която не съществува в организацията или не е видима, връща404 collections.not_found.
application/json
Обект: ArchiveUploadFromUpload
upload_idstringзадължителноГотово качване (
ready) с предназначениеarchive; използва се еднократно.collectionstringПо подразбиране: "default"
collection_idinteger | nullКолекция по ID. Когато е подадено и
collection, предимство имаcollection_id. Колекция, която не съществува в организацията, не е видима или е извън колекциите на ключа, връща404 collections.not_found.tagsarray of stringitems ≤ 30
forcebooleanПо подразбиране: false
owner_idinteger | nullverify_interval_daysinteger | nullcategorystring | nullsensitiveboolean | nullfolder_idstring | nulllength ≤ 64
Отговори
200План за разархивиране и задание
Заглавки на отговора
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
job_idintegerзадължителноbatch_idstringзадължителноПакет от задания за индексиране на документите от архива (
GET /v1/jobs?batch=).statusstringзадължителноДопустими стойности:
queuedplannedarray of stringзадължителноПътищата на файловете на всички нива, които ще станат документи, включително файловете във вложени архиви (
b.zip/c.pdf).documentsintegerзадължителноБрой документи на всички нива, включително файловете във вложени архиви. Резултатът от разархивирането дава същото число: създадени + дубликати + отхвърлени при проверката на съдържанието (
ArchiveJob).nested_archivesintegerзадължителноignoredintegerзадължителноСистемни записи (файлове на ОС, директории, празни файлове, сигнатури на контейнери).
400Заявката е невалидна: стойност на параметър или състоянието на обекта не позволява действието (`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
401Не са изпратени идентификационни данни (нито бисквитка на сесията, нито 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
402Организацията е достигнала лимит на плана (карти, хранилище или потребители). `error.details` съдържа `kind`, `limit` и `used`.
Заглавки на отговора
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
413Тялото на заявката надвишава допустимия размер.
Заглавки на отговора
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
415Форматът на файла не се поддържа.
Заглавки на отговора
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
503Услуга, от която зависи тази заявка, временно не е достъпна. Опитайте отново по-късно.
Заглавки на отговора
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, освен общите кодове на всяка заявка.
- 409api.idempotency_in_progress
- 400api.idempotency_key_invalid
- 409api.idempotency_mismatch
- 401auth.not_authenticated
- 403auth.system_scope
- 403authz.forbidden
- 400cards.archive_empty
- 400cards.archive_encrypted
- 400cards.archive_invalid
- 413cards.archive_too_large
- 413cards.archive_too_many_files
- 400categories.unknown
- 400collections.invalid_name
- 403collections.no_write_access
- 404collections.not_found
- 422files.infected
- 503files.scan_unavailable
- 413files.too_large
- 415files.type_mismatch
- 400folders.card_collection_mismatch
- 404folders.not_found
- 402limits.storage
- 403org.deleted
- 403org.suspended
- 409uploads.already_used
- 410uploads.expired
- 404uploads.not_found
- 409uploads.not_ready
- 422uploads.purpose_mismatch
- 422uploads.rejected
- 400users.not_in_org
- 422validation.failed
- 403view_as.read_only
Безопасни повторни опити
Изпращайте заглавката Idempotency-Key (например UUID) с всяка заявка POST и PATCH. Повторен опит със същия ключ в рамките на 24 часа връща запазения отговор, вместо да изпълни заявката отново.
Лимити на честотата
Отговорите съдържат заглавките RateLimit и RateLimit-Policy, както и по-ранните X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset. Отговорът 429 съдържа Retry-After в секунди: изчакайте и опитайте отново.