Skip to content
Vai integrar a API REST da Zarv com ajuda de IA? Copie a instrução que aponta o modelo para esta documentação.
Ver a instrução
Você vai integrar a API REST da Zarv. Use a documentação oficial como fonte da verdade.

- Página desta integração: https://developers.zarv.com/api/id-v3/enrichment-batch
- Autenticação Bearer JWT e hosts: https://developers.zarv.com/setup
- Índice das APIs: https://developers.zarv.com/api
- Índice da documentação em markdown: https://developers.zarv.com/llms.txt
- Documentação completa em um arquivo: https://developers.zarv.com/llms-full.txt

Os specs OpenAPI publicados são a fonte da verdade para rotas e schemas — use o spec da API que você escolher antes de escrever qualquer request.

Antes de escrever qualquer código, leia a página desta integração. Siga exatamente os nomes de campos, endpoints, callbacks e formatos que estiverem documentados — não invente parâmetros nem endpoints, e não deduza comportamento a partir de outras APIs que você conhece. Se algo de que você precisa não estiver na documentação, diga que não está em vez de supor.

Minha tarefa: [ex.: escolher a API certa e fazer a primeira chamada autenticada]

Enriquecimento em lote ​

Visão Geral ​

POST /api/v3/enrichments/batch cria até 500 enriquecimentos de uma vez, todos com o mesmo perfil. É a rota para processar uma base de documentos sem fazer um POST /api/v3/enrichments por documento.

Diferente da criação unitária, o lote não espera o resultado: a resposta é sempre 202, assim que os itens estão gravados. O andamento é acompanhado pelos próprios enriquecimentos (veja Ler os resultados).

Os lotes rodam numa fila própria, separada da fila das consultas unitárias. Um lote grande não atrasa as consultas feitas por POST /api/v3/enrichments.

Requisição ​

Para mais de 500 documentos, divida o arquivo em blocos de até 500 e envie os requests em sequência. Acima de 500 itens, o request inteiro é recusado com 413 batch_too_large.

CampoTipoObrigatórioDescrição
profileIdstringSimUm perfil para todos os itens.
itemsarraySimDe 1 a 500 itens, cada um com document (obrigatório) e metadata (opcional).
optionsobjectNãoAs mesmas opções da criação unitária (add-ons e deadline).
callbackobjectNãoVeja Webhook. Copiado para cada item: cada enriquecimento que não termina logo envia o seu próprio callback.
metadataobjectNãoObjeto livre, copiado para cada item.

Perfil, options, callback e metadata valem para o request inteiro. O metadata de um item sobrescreve, chave a chave, o metadata do lote para aquele item (só no primeiro nível: o valor de uma chave é substituído por inteiro).

json
{
  "profileId": "8f14e45f-ceea-4e7a-9c1a-2b3c4d5e6f70",
  "metadata": { "campanha": "out-2026", "origem": "carga-1" },
  "callback": { "url": "https://sua-empresa.com/webhooks/zarv" },
  "items": [
    { "document": "111.444.777-35" },
    { "document": "529.982.247-25", "metadata": { "origem": "carga-2" } },
    { "document": "123" }
  ]
}

Neste exemplo, o metadata gravado em cada item criado fica:

Itemmetadata do enriquecimento
0{"campanha":"out-2026","origem":"carga-1"}
1{"campanha":"out-2026","origem":"carga-2"}

O item 2 não é criado (invalid_document), então não tem metadata.

Envie um Idempotency-Key por request (por bloco). Veja Reenvio seguro.

Resposta ​

A resposta 202 traz uma entrada por item enviado, na ordem do request, cada uma com o seu index (posição do item no array items, começando em 0) e o seu document: o documento exatamente como enviado, sem normalização, tanto no item criado quanto no item com erro. Assim o seu sistema liga cada documento que enviou ao id gerado (ou ao error) sem depender da posição.

json
{
  "batchId": "bat_0199a0b2-7c1e-7d4a-9f0e-3b1c2d4e5f60",
  "total": 3,
  "created": 2,
  "failed": 1,
  "items": [
    {
      "index": 0,
      "id": "enr_0199a0b2-7c1f-7a31-8c2d-5e6f7a8b9c0d",
      "document": "111.444.777-35"
    },
    {
      "index": 1,
      "id": "enr_0199a0b2-7c20-7b42-9d3e-6f7a8b9c0d1e",
      "document": "529.982.247-25"
    },
    {
      "index": 2,
      "document": "123",
      "error": {
        "code": "invalid_document",
        "message": "document is not a valid CPF or CNPJ"
      }
    }
  ]
}
CampoDescrição
batchIdIdentifica o lote. Use para listar os itens.
totalQuantos itens o request trouxe.
createdQuantos enriquecimentos foram criados.
failedQuantos itens não foram criados (têm error).
items{index, id, document} para o item criado ou {index, document, error} para o item recusado.

O document de cada entrada é o único lugar onde o documento aparece na resposta: a message de um erro nunca o traz.

Não há estado do lote, endpoint de progresso nem aviso de "lote concluído": acompanhe pelos itens.

Erros ​

Erros do request inteiro ​

Nada é criado nem cobrado. A resposta usa o envelope de erro de sempre e os mesmos códigos da criação unitária para perfil, contrato e opções (400 invalid_body, 404 profile_not_found, 402 contract_required ou action_not_contracted, 422 module_not_in_profile, 422 profile_kind_mismatch, 422 profile_not_billable, 503 profiles_unavailable, entre outros), além de:

StatusCódigoQuando
400batch_emptyO request não tem nenhum item.
413batch_too_largeMais de 500 itens. Divida em requests sequenciais.
422idempotency_key_reusedA mesma Idempotency-Key foi usada com um corpo diferente.

Erros por item ​

O request responde 202 e o item recusado traz error na própria entrada. Um item com erro não é criado nem cobrado; os demais seguem normalmente.

CódigoQuando
invalid_documentO document não é um CPF ou CNPJ válido.
profile_entity_mismatchO documento não é do tipo do perfil (CPF num perfil de CNPJ, ou o contrário).
duplicate_in_requestO mesmo documento (já normalizado) aparece mais de uma vez no request. O primeiro é criado; os seguintes recebem este erro.
invalid_metadataO metadata do item é inválido.

O mesmo documento em requests diferentes gera enriquecimentos diferentes, como na criação unitária.

Reenvio seguro ​

Mande um Idempotency-Key por request (por bloco, por exemplo um UUID gravado junto do bloco). Se a conexão cair ou o resultado ficar incerto, reenvie o mesmo bloco com a mesma chave: a resposta original é devolvida, sem duplicar nem cobrar de novo. O replay traz os mesmos id e o mesmo document de cada item, como enviado no corpo reenviado. A mesma chave com um corpo diferente é 422 idempotency_key_reused.

Ler os resultados ​

Cada item criado é um enriquecimento comum:

  • leitura por GET /api/v3/enrichments/{id}, GET /api/v3/enrichments/{id}/modules/{module} e a rede de processos, como em qualquer outro;
  • callback por item, quando o request trouxe callback (Webhook);
  • cobrança por item criado.

Para listar os itens de um lote, filtre pelo batchId:

GET /api/v3/enrichments?batchId=bat_0199a0b2-7c1e-7d4a-9f0e-3b1c2d4e5f60

Para casar cada item da listagem com o que você enviou, use o mapa documento → id da resposta do lote: cada enriquecimento listado traz o seu id. O document da listagem vem normalizado (só dígitos, ou maiúsculas no CNPJ alfanumérico), então compare por id, ou normalize o documento enviado antes de comparar pelo documento.

A listagem aceita também lane=batch (ou lane=interactive) para separar o que veio de lote do que veio da criação unitária. Cada enriquecimento traz lane e, quando criado por um lote, batchId.