Pular para o conteúdo
Sursa Developers

POST/v1/cards/archive

Enviar um arquivo compactado de documentos

upload_card_archive

Envie um arquivo compactado ZIP no campo file de um formulário multipart/form-data. Cada arquivo suportado dentro dele vira um documento separado, como nos uploads individuais (POST /v1/cards). Os contêineres de assinatura ASiC (.asice, .sce, .bdoc, .asics) também são arquivos compactados: os arquivos de dados deles viram documentos, META-INF/ é ignorado, e a assinatura não é conferida. Os campos do formulário são os mesmos do upload de um arquivo (coleção, etiquetas, responsável, categoria, confidencialidade), sem prévia.

O arquivo compactado é conferido pela assinatura (um documento do Office renomeado não conta como arquivo compactado e retorna 415 files.type_mismatch), o limite de upload da instalação se aplica, e a varredura antivírus cobre o arquivo compactado inteiro.

A lista de conteúdo do arquivo compactado é conferida de forma síncrona. A resposta contém o plano (quais arquivos viram documentos, quais são ignorados e por quê) e o job de extração (job_id, batch_id). O job abre os arquivos compactados aninhados (até 3 níveis por padrão), confere cada documento pela assinatura e pelo antivírus e o coloca na fila da indexação normal com o mesmo batch_id (progresso dos documentos: GET /v1/jobs?batch=). O resultado fica disponível em GET /v1/archives/{job_id}.

Limites (padrões da instalação): até 1000 arquivos na árvore inteira (mais que isso retorna 413 cards.archive_too_many_files), até 2048 MB descompactados (mais que isso retorna 413 cards.archive_too_large) e não mais que o armazenamento restante da organização no plano dela (402 limits.storage), o limite de upload por arquivo para cada arquivo interno e uma taxa de compressão de no máximo 100:1 por entrada. Entradas com “..”, um caminho absoluto ou uma letra de unidade, links simbólicos, entradas criptografadas e formatos não suportados são ignorados, com um motivo (skipped[].reason). Os arquivos de sistema do SO, os diretórios e os arquivos vazios são ignorados sem aviso (ignored). Os nomes que não estão em UTF-8 são lidos como cp866 ou cp1251. Um arquivo que não é ZIP retorna 400 cards.archive_invalid, um arquivo compactado totalmente criptografado retorna 400 cards.archive_encrypted, e um arquivo compactado sem nenhum documento retorna 400 cards.archive_empty.

Cada documento guarda o arquivo compactado de origem: CardVersion.archive e Card.source_archive (o cartão mostra o arquivo compactado da versão atual dele).

Em vez do formulário, você pode enviar um corpo application/json (ArchiveUploadFromUpload, desde a versão 1.62.0): o arquivo compactado é um upload em partes já pronto, upload_id (a finalidade archive), os campos são os mesmos do formulário, e tags é uma lista de strings. O arquivo compactado já foi conferido no complete, e o limite de tamanho é o do upload em partes, e não o do upload em uma única requisição. O upload é usado uma única vez, na mesma transação que coloca o job de extração na fila; os códigos de erro do upload são os mesmos de POST /v1/cards.

Autenticação

Envie uma chave de API no cabeçalho Authorization: Authorization: Bearer <chave>.

Parâmetros de cabeçalho

  • Idempotency-Keystring

    Chave para uma nova tentativa segura de uma gravação: de 1 a 255 caracteres ASCII imprimíveis; recomenda-se um UUID v4 por operação lógica. Uma nova tentativa com a mesma chave dentro de 24 horas não executa a operação de novo: retorna a resposta salva (status, cabeçalhos e corpo) com o cabeçalho Idempotency-Replayed: true. A mesma chave com outro método, caminho, Content-Type ou corpo retorna 409 api.idempotency_mismatch; enquanto a primeira requisição ainda está em execução, 409 api.idempotency_in_progress com Retry-After: 1. Depois de uma resposta 5xx ou 429, a chave é liberada, e uma nova tentativa executa a operação de novo. A chave vale para a organização e para quem faz a chamada (chave de API, usuário ou chave de fonte personalizada).

    length ≥ 1, length ≤ 255

  • X-View-Asstring

    Só para chaves de API com a função admin. Faz a requisição como o perfil de dados <profile>[:viewer|verifier|editor], por exemplo, employee:viewer. A chave de instalação não pode usar este cabeçalho (403).

Parâmetros de cookie

  • kb_view_asstring

    Cookie do modo “View as” (ver a base como um perfil de dados a vê) de uma sessão. POST /auth/view-as o define e DELETE /auth/view-as o remove.

Corpo da requisição

multipart/form-data

Objeto: ArchiveUploadForm

  • filestring (application/zip)obrigatório
  • collectionstring

    Padrão: "default"

  • tagsstring

    Padrão: ""

  • forceboolean

    Padrão: false

  • owner_idinteger | null
  • verify_interval_daysinteger | null
  • categorystring | null
  • sensitiveboolean | null
  • folder_idstring | null

    Pasta da collection em que todos os documentos do arquivo compactado são colocados. Uma pasta de outra coleção retorna 400 folders.card_collection_mismatch, uma pasta inexistente retorna 404 folders.not_found, e a falta da permissão COLLECTION_EDIT_CARDS na pasta retorna 403 authz.forbidden. A conferência é feita antes de o arquivo compactado ser salvo. Duplicatas de arquivos já enviados não são movidas para a pasta.

    length ≤ 64

  • collection_idinteger | null

    Coleção pelo ID. Quando collection também é passado, prevalece collection_id. Uma coleção que não existe na organização ou não está visível retorna 404 collections.not_found.

application/json

Objeto: ArchiveUploadFromUpload

  • upload_idstringobrigatório

    Um upload pronto (ready) com a finalidade archive; ele é usado uma única vez.

  • collectionstring

    Padrão: "default"

  • collection_idinteger | null

    Coleção por ID. Quando collection também é enviado, prevalece collection_id. Uma coleção que não existe na organização, não está visível ou está fora das coleções da chave retorna 404 collections.not_found.

  • tagsarray of string

    items ≤ 30

  • forceboolean

    Padrão: false

  • owner_idinteger | null
  • verify_interval_daysinteger | null
  • categorystring | null
  • sensitiveboolean | null
  • folder_idstring | null

    length ≤ 64

Respostas

200Plano de extração e job

Cabeçalhos da resposta

  • RateLimit-Policy

    Limites em vigor, no formato do rascunho da IETF draft-ietf-httpapi-ratelimit-headers: itens separados por vírgula "<name>";q=<quota>;w=<window in seconds>. key é a taxa de requisições da chave de API (a cota é a rajada, a janela é o tempo para reabastecê-la por completo; para uma sessão é user, sem credenciais é ip); minute, day e month são as cotas da organização para o minuto, o dia e o mês do calendário em UTC.

  • RateLimit

    O que resta de cada limite de RateLimit-Policy: "<name>";r=<remaining>;t=<seconds until reset>.

  • X-RateLimit-Limit

    Limite da entrada mais restritiva de RateLimit-Policy (a que tem menos requisições restantes).

  • X-RateLimit-Remaining

    Requisições restantes no limite mais restritivo.

  • X-RateLimit-Reset

    Segundos até o limite mais restritivo ser reiniciado.

  • Idempotency-Replayed

    true significa que a resposta foi reproduzida a partir da resposta salva para esta Idempotency-Key: a operação não foi executada de novo.

application/json

Objeto: ArchiveUploadResult

  • job_idintegerobrigatório
  • batch_idstringobrigatório

    Lote de jobs de indexação dos documentos do arquivo compactado (GET /v1/jobs?batch=).

  • statusstringobrigatório

    Valores permitidos: queued

  • archiveArchiveInfoobrigatório
  • plannedarray of stringobrigatório

    Caminhos dos arquivos de todos os níveis que se tornarão documentos, inclusive os arquivos de arquivos compactados aninhados (b.zip/c.pdf).

  • documentsintegerobrigatório

    Número de documentos de todos os níveis, inclusive os arquivos de arquivos compactados aninhados. O resultado da extração soma o mesmo número: criados + duplicatas + rejeitados pela conferência do conteúdo (ArchiveJob).

  • nested_archivesintegerobrigatório
  • skippedarray of ArchiveSkipobrigatório
  • ignoredintegerobrigatório

    Entradas de sistema (arquivos do sistema operacional, diretórios, arquivos vazios, assinaturas de contêiner).

400A requisição é inválida: o valor de um parâmetro ou o estado do objeto não permite a ação (`detail` é uma mensagem).

Cabeçalhos da resposta

  • RateLimit-Policy

    Limites em vigor, no formato do rascunho da IETF draft-ietf-httpapi-ratelimit-headers: itens separados por vírgula "<name>";q=<quota>;w=<window in seconds>. key é a taxa de requisições da chave de API (a cota é a rajada, a janela é o tempo para reabastecê-la por completo; para uma sessão é user, sem credenciais é ip); minute, day e month são as cotas da organização para o minuto, o dia e o mês do calendário em UTC.

  • RateLimit

    O que resta de cada limite de RateLimit-Policy: "<name>";r=<remaining>;t=<seconds until reset>.

  • X-RateLimit-Limit

    Limite da entrada mais restritiva de RateLimit-Policy (a que tem menos requisições restantes).

  • X-RateLimit-Remaining

    Requisições restantes no limite mais restritivo.

  • X-RateLimit-Reset

    Segundos até o limite mais restritivo ser reiniciado.

application/json

Objeto: Error

401Nenhuma credencial foi enviada (nem cookie de sessão nem chave de API), ou a chave não foi encontrada.

Cabeçalhos da resposta

  • RateLimit-Policy

    Limites em vigor, no formato do rascunho da IETF draft-ietf-httpapi-ratelimit-headers: itens separados por vírgula "<name>";q=<quota>;w=<window in seconds>. key é a taxa de requisições da chave de API (a cota é a rajada, a janela é o tempo para reabastecê-la por completo; para uma sessão é user, sem credenciais é ip); minute, day e month são as cotas da organização para o minuto, o dia e o mês do calendário em UTC.

  • RateLimit

    O que resta de cada limite de RateLimit-Policy: "<name>";r=<remaining>;t=<seconds until reset>.

  • X-RateLimit-Limit

    Limite da entrada mais restritiva de RateLimit-Policy (a que tem menos requisições restantes).

  • X-RateLimit-Remaining

    Requisições restantes no limite mais restritivo.

  • X-RateLimit-Reset

    Segundos até o limite mais restritivo ser reiniciado.

application/json

Objeto: Error

402A organização atingiu um limite do plano (cartões, armazenamento ou usuários). `error.details` contém `kind`, `limit` e `used`.

Cabeçalhos da resposta

  • RateLimit-Policy

    Limites em vigor, no formato do rascunho da IETF draft-ietf-httpapi-ratelimit-headers: itens separados por vírgula "<name>";q=<quota>;w=<window in seconds>. key é a taxa de requisições da chave de API (a cota é a rajada, a janela é o tempo para reabastecê-la por completo; para uma sessão é user, sem credenciais é ip); minute, day e month são as cotas da organização para o minuto, o dia e o mês do calendário em UTC.

  • RateLimit

    O que resta de cada limite de RateLimit-Policy: "<name>";r=<remaining>;t=<seconds until reset>.

  • X-RateLimit-Limit

    Limite da entrada mais restritiva de RateLimit-Policy (a que tem menos requisições restantes).

  • X-RateLimit-Remaining

    Requisições restantes no limite mais restritivo.

  • X-RateLimit-Reset

    Segundos até o limite mais restritivo ser reiniciado.

application/json

Objeto: Error

403A ação não é permitida: a função é insuficiente, não há acesso à coleção ou ao cartão, a requisição é executada no modo “View as” ou a organização está suspensa ou excluída (`detail` é um objeto com `code: org_suspended | org_deleted`).

Cabeçalhos da resposta

  • RateLimit-Policy

    Limites em vigor, no formato do rascunho da IETF draft-ietf-httpapi-ratelimit-headers: itens separados por vírgula "<name>";q=<quota>;w=<window in seconds>. key é a taxa de requisições da chave de API (a cota é a rajada, a janela é o tempo para reabastecê-la por completo; para uma sessão é user, sem credenciais é ip); minute, day e month são as cotas da organização para o minuto, o dia e o mês do calendário em UTC.

  • RateLimit

    O que resta de cada limite de RateLimit-Policy: "<name>";r=<remaining>;t=<seconds until reset>.

  • X-RateLimit-Limit

    Limite da entrada mais restritiva de RateLimit-Policy (a que tem menos requisições restantes).

  • X-RateLimit-Remaining

    Requisições restantes no limite mais restritivo.

  • X-RateLimit-Reset

    Segundos até o limite mais restritivo ser reiniciado.

application/json

Objeto: Error

404O objeto não existe ou não está disponível para você. A API não confirma que um objeto restrito existe.

Cabeçalhos da resposta

  • RateLimit-Policy

    Limites em vigor, no formato do rascunho da IETF draft-ietf-httpapi-ratelimit-headers: itens separados por vírgula "<name>";q=<quota>;w=<window in seconds>. key é a taxa de requisições da chave de API (a cota é a rajada, a janela é o tempo para reabastecê-la por completo; para uma sessão é user, sem credenciais é ip); minute, day e month são as cotas da organização para o minuto, o dia e o mês do calendário em UTC.

  • RateLimit

    O que resta de cada limite de RateLimit-Policy: "<name>";r=<remaining>;t=<seconds until reset>.

  • X-RateLimit-Limit

    Limite da entrada mais restritiva de RateLimit-Policy (a que tem menos requisições restantes).

  • X-RateLimit-Remaining

    Requisições restantes no limite mais restritivo.

  • X-RateLimit-Reset

    Segundos até o limite mais restritivo ser reiniciado.

application/json

Objeto: Error

409O estado do objeto não permite a ação, por exemplo, uma duplicata, uma indexação em andamento ou um job já processado.

Cabeçalhos da resposta

  • RateLimit-Policy

    Limites em vigor, no formato do rascunho da IETF draft-ietf-httpapi-ratelimit-headers: itens separados por vírgula "<name>";q=<quota>;w=<window in seconds>. key é a taxa de requisições da chave de API (a cota é a rajada, a janela é o tempo para reabastecê-la por completo; para uma sessão é user, sem credenciais é ip); minute, day e month são as cotas da organização para o minuto, o dia e o mês do calendário em UTC.

  • RateLimit

    O que resta de cada limite de RateLimit-Policy: "<name>";r=<remaining>;t=<seconds until reset>.

  • X-RateLimit-Limit

    Limite da entrada mais restritiva de RateLimit-Policy (a que tem menos requisições restantes).

  • X-RateLimit-Remaining

    Requisições restantes no limite mais restritivo.

  • X-RateLimit-Reset

    Segundos até o limite mais restritivo ser reiniciado.

application/json

Objeto: Error

410O objeto existiu, mas não está mais disponível: o link foi usado ou expirou, ou o arquivo foi excluído no fim do período de retenção.

Cabeçalhos da resposta

  • RateLimit-Policy

    Limites em vigor, no formato do rascunho da IETF draft-ietf-httpapi-ratelimit-headers: itens separados por vírgula "<name>";q=<quota>;w=<window in seconds>. key é a taxa de requisições da chave de API (a cota é a rajada, a janela é o tempo para reabastecê-la por completo; para uma sessão é user, sem credenciais é ip); minute, day e month são as cotas da organização para o minuto, o dia e o mês do calendário em UTC.

  • RateLimit

    O que resta de cada limite de RateLimit-Policy: "<name>";r=<remaining>;t=<seconds until reset>.

  • X-RateLimit-Limit

    Limite da entrada mais restritiva de RateLimit-Policy (a que tem menos requisições restantes).

  • X-RateLimit-Remaining

    Requisições restantes no limite mais restritivo.

  • X-RateLimit-Reset

    Segundos até o limite mais restritivo ser reiniciado.

application/json

Objeto: Error

413O corpo da requisição excede o tamanho permitido.

Cabeçalhos da resposta

  • RateLimit-Policy

    Limites em vigor, no formato do rascunho da IETF draft-ietf-httpapi-ratelimit-headers: itens separados por vírgula "<name>";q=<quota>;w=<window in seconds>. key é a taxa de requisições da chave de API (a cota é a rajada, a janela é o tempo para reabastecê-la por completo; para uma sessão é user, sem credenciais é ip); minute, day e month são as cotas da organização para o minuto, o dia e o mês do calendário em UTC.

  • RateLimit

    O que resta de cada limite de RateLimit-Policy: "<name>";r=<remaining>;t=<seconds until reset>.

  • X-RateLimit-Limit

    Limite da entrada mais restritiva de RateLimit-Policy (a que tem menos requisições restantes).

  • X-RateLimit-Remaining

    Requisições restantes no limite mais restritivo.

  • X-RateLimit-Reset

    Segundos até o limite mais restritivo ser reiniciado.

application/json

Objeto: Error

415O formato do arquivo não é suportado.

Cabeçalhos da resposta

  • RateLimit-Policy

    Limites em vigor, no formato do rascunho da IETF draft-ietf-httpapi-ratelimit-headers: itens separados por vírgula "<name>";q=<quota>;w=<window in seconds>. key é a taxa de requisições da chave de API (a cota é a rajada, a janela é o tempo para reabastecê-la por completo; para uma sessão é user, sem credenciais é ip); minute, day e month são as cotas da organização para o minuto, o dia e o mês do calendário em UTC.

  • RateLimit

    O que resta de cada limite de RateLimit-Policy: "<name>";r=<remaining>;t=<seconds until reset>.

  • X-RateLimit-Limit

    Limite da entrada mais restritiva de RateLimit-Policy (a que tem menos requisições restantes).

  • X-RateLimit-Remaining

    Requisições restantes no limite mais restritivo.

  • X-RateLimit-Reset

    Segundos até o limite mais restritivo ser reiniciado.

application/json

Objeto: Error

422Erro de validação: o corpo ou os parâmetros não correspondem ao esquema (`detail` é uma lista de erros de validação), ou o valor de um parâmetro está fora do intervalo (`detail` é uma mensagem).

Cabeçalhos da resposta

  • RateLimit-Policy

    Limites em vigor, no formato do rascunho da IETF draft-ietf-httpapi-ratelimit-headers: itens separados por vírgula "<name>";q=<quota>;w=<window in seconds>. key é a taxa de requisições da chave de API (a cota é a rajada, a janela é o tempo para reabastecê-la por completo; para uma sessão é user, sem credenciais é ip); minute, day e month são as cotas da organização para o minuto, o dia e o mês do calendário em UTC.

  • RateLimit

    O que resta de cada limite de RateLimit-Policy: "<name>";r=<remaining>;t=<seconds until reset>.

  • X-RateLimit-Limit

    Limite da entrada mais restritiva de RateLimit-Policy (a que tem menos requisições restantes).

  • X-RateLimit-Remaining

    Requisições restantes no limite mais restritivo.

  • X-RateLimit-Reset

    Segundos até o limite mais restritivo ser reiniciado.

application/json

Objeto: Error

429Requisições demais (`api.rate_limited`), a cota da organização para o minuto, o dia ou o mês se esgotou (`api.quota_exceeded`; `error.details` contém `quota`, `limit` e `reset_at`), o limite da organização foi atingido ou o serviço de respostas está ocupado (`answers.engine_busy`). Aguarde o tempo indicado no cabeçalho `Retry-After`.

Cabeçalhos da resposta

  • Retry-After

    Número de segundos a esperar antes de tentar a requisição novamente.

  • RateLimit-Policy

    Limites em vigor, no formato do rascunho da IETF draft-ietf-httpapi-ratelimit-headers: itens separados por vírgula "<name>";q=<quota>;w=<window in seconds>. key é a taxa de requisições da chave de API (a cota é a rajada, a janela é o tempo para reabastecê-la por completo; para uma sessão é user, sem credenciais é ip); minute, day e month são as cotas da organização para o minuto, o dia e o mês do calendário em UTC.

  • RateLimit

    O que resta de cada limite de RateLimit-Policy: "<name>";r=<remaining>;t=<seconds until reset>.

  • X-RateLimit-Limit

    Limite da entrada mais restritiva de RateLimit-Policy (a que tem menos requisições restantes).

  • X-RateLimit-Remaining

    Requisições restantes no limite mais restritivo.

  • X-RateLimit-Reset

    Segundos até o limite mais restritivo ser reiniciado.

application/json

Objeto: Error

503Um serviço do qual esta requisição depende está temporariamente indisponível. Tente novamente mais tarde.

Cabeçalhos da resposta

  • RateLimit-Policy

    Limites em vigor, no formato do rascunho da IETF draft-ietf-httpapi-ratelimit-headers: itens separados por vírgula "<name>";q=<quota>;w=<window in seconds>. key é a taxa de requisições da chave de API (a cota é a rajada, a janela é o tempo para reabastecê-la por completo; para uma sessão é user, sem credenciais é ip); minute, day e month são as cotas da organização para o minuto, o dia e o mês do calendário em UTC.

  • RateLimit

    O que resta de cada limite de RateLimit-Policy: "<name>";r=<remaining>;t=<seconds until reset>.

  • X-RateLimit-Limit

    Limite da entrada mais restritiva de RateLimit-Policy (a que tem menos requisições restantes).

  • X-RateLimit-Remaining

    Requisições restantes no limite mais restritivo.

  • X-RateLimit-Reset

    Segundos até o limite mais restritivo ser reiniciado.

application/json

Objeto: Error

Códigos de erro

Códigos que este endpoint pode retornar em error.code, além dos códigos gerais de qualquer requisição.

Novas tentativas seguras

Envie um cabeçalho Idempotency-Key (por exemplo, um UUID) em cada POST e PATCH. Uma nova tentativa com a mesma chave em até 24 horas retorna a resposta salva, em vez de executar a requisição de novo.

Limites de taxa

As respostas trazem os cabeçalhos RateLimit e RateLimit-Policy e os anteriores X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset. Uma resposta 429 traz Retry-After em segundos: aguarde e tente de novo.

← cards · Referência da API