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/lens/reference
- 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]

O Lens organiza a investigação de um sinistro de seguro auto em três etapas: Coleta (o caso, os envolvidos e os documentos), Análise (as nove dimensões que cruzam o que foi coletado) e Investigação (a diligência que responde aos alertas e o desfecho do caso).

Tudo gira em torno de um caso (research): ele tem envolvidos (entity — pessoa, empresa ou veículo) e documentos (document — o BO, a apólice, a CNH, o CRLV, as fotos do veículo). O caso sempre ocupa uma raia do quadro kanban do workspace, e o Lens o move sozinho a cada acontecimento.

As rotas longas são assíncronas: o envio dos documentos e o pedido de análise respondem 202 e um worker trabalha depois. O andamento das duas sempre sai no GET do caso, em documents e analysis.

Todas as rotas ficam em https://services.zarv.com e usam token Bearer JWT. O workspace do token precisa ser o do caminho.

Contact​

Servers​

https://services.zarv.comProdução

Coleta​


Listar casos do workspace​

GET
/api/v1/lens/{workspaceId}/research

Lista os casos do workspace, do mais recentemente editado para o mais antigo, com total do filtro inteiro e a página em data.

Todos os filtros são opcionais e se combinam. kanbanId é a página de uma raia do quadro — é com ele que o front monta cada coluna. A raia Abertura traz também os casos antigos, que nasceram antes de o caso guardar a raia.

search procura pelo value de um envolvido: uma placa (que sempre tem letra) ou um CPF/CNPJ (que só tem dígito). Uma busca nunca acha a outra.

Cada item traz as contagens de filhos (vehicleCount, entityCount, documentCount), que saem da mesma fonte do detalhe — a lista e o card nunca divergem.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"

Query Parameters

userId

Filtra pelos casos abertos por este usuário.

Type
string
Format
"uuid"
domain

Filtra pelo domínio do caso (por exemplo, auto).

Type
string
Example"auto"
objective

Filtra pelo objetivo do caso.

Type
string
Example"sinistro"
status

Filtra pelo status do caso.

Type
string
Valid values
"CREATED""PROCESSING""COMPLETED""FAILED"
Example"CREATED"
search

Placa ou CPF/CNPJ de um envolvido. Devolve os casos em que esse envolvido aparece.

Type
string
Example"TST1A23"
kanbanId

Devolve só os casos nesta raia do quadro. O total passa a ser o da raia.

Type
string
Format
"uuid"
limit

Tamanho da página. Ausente, zero ou negativo vale 10.

Type
integer
Example20
Default
10
offset

Quantos itens pular. Negativo vale zero; além do fim devolve uma página vazia, com o total intacto.

Type
integer
Example0
Default
0

Responses​

A página de casos e o total do filtro.

application/json
JSON
{
  
"data": [
  
  
{
  
  
  
"id": "string",
  
  
  
"workspaceId": "string",
  
  
  
"userId": "string",
  
  
  
"domain": "auto",
  
  
  
"objective": "sinistro",
  
  
  
"reportAddress": "string",
  
  
  
"reportText": "string",
  
  
  
"doubts": [
  
  
  
  
"string"
  
  
  
],
  
  
  
"status": "CREATED",
  
  
  
"incidentType": "colisao",
  
  
  
"bot": {
  
  
  
  
"additionalProperties": "string"
  
  
  
},
  
  
  
"kanbanId": "string",
  
  
  
"createdAt": "string",
  
  
  
"updatedAt": "string",
  
  
  
"reportTime": "2026-11-03 23:48",
  
  
  
"vehicleCount": 1,
  
  
  
"entityCount": 2,
  
  
  
"documentCount": 7
  
  
}
  
],
  
"total": 42
}

Playground​

Authorization
Variables
Key
Value

Samples​


Abrir um caso​

POST
/api/v1/lens/{workspaceId}/research

Abre um caso no workspace e o põe na raia Abertura do quadro.

O autor do caso é o usuário do token, nunca o userId do corpo — esse campo é ignorado. Abrir um caso sem usuário autenticado é recusado com 401 antes de qualquer gravação.

incidentType decide quais análises rodam depois: a dimensão de posse só roda em roubo e furto, a de croqui só em colisão. Deixá-lo vazio continua valendo — o fluxo o deduz do relato —, mas um tipo declarado é sempre melhor que um deduzido.

reportTime é o instante do fato. Mande-o com o fuso do lugar do fato: um furto declarado às 23:48 em Ribeirão Pires é 02:48Z do dia seguinte, e quem formatar sem saber onde o fato aconteceu imprime o dia errado.

Idempotência

Mande o header Idempotency-Key com um valor único por caso (um UUID, por exemplo). Repetir a requisição com a mesma chave e o mesmo corpo devolve o caso que já existe, com 200 e o header Idempotent-Replayed: true, sem abrir um segundo. A mesma chave com um corpo diferente responde 409 IDEMPOTENCY_KEY_REUSED.

Sem a chave, duas chamadas abrem dois casos — nunca se deduplica por conteúdo.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Header Parameters

Idempotency-Key

Chave única por caso (um UUID, por exemplo). Repetir a requisição com a mesma chave e o mesmo corpo devolve o caso que já existe, com 200 e Idempotent-Replayed: true.

Type
string
Example"6f1c2a9e-4b7d-4e2a-9c3f-0a1b2c3d4e5f"

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"

Request Body​

application/json
JSON
{
  
"domain": "auto",
  
"objective": "sinistro",
  
"status": "CREATED",
  
"incidentType": "colisao",
  
"reportAddress": "Av. Paulista, 1000 - São Paulo/SP",
  
"reportTime": "2026-11-03T23:48:00-03:00",
  
"reportText": "Colisão traseira no cruzamento, sem vítimas.",
  
"doubts": [
  
  
[
  
  
  
"O condutor estava autorizado a dirigir?"
  
  
]
  
],
  
"bot": {
  
  
"additionalProperties": "string"
  
},
  
"userId": "string"
}

Responses​

Replay da mesma Idempotency-Key com o mesmo corpo: o caso que já existia, sem abrir outro.

application/json
JSON
{
  
"id": "string",
  
"workspaceId": "string",
  
"userId": "string",
  
"domain": "auto",
  
"objective": "sinistro",
  
"reportAddress": "string",
  
"reportText": "string",
  
"doubts": [
  
  
"string"
  
],
  
"status": "CREATED",
  
"incidentType": "colisao",
  
"bot": {
  
  
"additionalProperties": "string"
  
},
  
"kanbanId": "string",
  
"createdAt": "string",
  
"updatedAt": "string",
  
"reportTime": "string"
}

Playground​

Authorization
Headers
Variables
Key
Value
Body

Samples​


Listar casos de um usuário​

GET
/api/v1/lens/{workspaceId}/{userId}/research

Lista os casos abertos por um usuário dentro do workspace, com o mesmo envelope { data, total } da listagem do workspace. O userId do caminho é filtro dentro do workspace autorizado, não identidade: quem autentica continua sendo o token.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
userId*

O autor dos casos.

Type
string
Required
Format
"uuid"

Query Parameters

limit

Tamanho da página. Ausente, zero ou negativo vale 10.

Type
integer
Default
10
offset

Quantos itens pular.

Type
integer
Default
0

Responses​

A página de casos do usuário e o total.

application/json
JSON
{
  
"data": [
  
  
{
  
  
  
"id": "string",
  
  
  
"workspaceId": "string",
  
  
  
"userId": "string",
  
  
  
"domain": "auto",
  
  
  
"objective": "sinistro",
  
  
  
"reportAddress": "string",
  
  
  
"reportText": "string",
  
  
  
"doubts": [
  
  
  
  
"string"
  
  
  
],
  
  
  
"status": "CREATED",
  
  
  
"incidentType": "colisao",
  
  
  
"bot": {
  
  
  
  
"additionalProperties": "string"
  
  
  
},
  
  
  
"kanbanId": "string",
  
  
  
"createdAt": "string",
  
  
  
"updatedAt": "string"
  
  
}
  
],
  
"total": 7
}

Playground​

Authorization
Variables
Key
Value

Samples​


Consultar um caso​

GET
/api/v1/lens/{workspaceId}/research/{id}

O caso inteiro: o relato, as contagens de filhos, a raia do quadro e — o que mais importa para quem integra — o andamento das duas rotas assíncronas.

  • documents é o envio dos documentos: o status, o progresso de 0 a 100, o resultado de cada arquivo (saved, read, read_failed ou left_out, com o motivo) e a montagem do caso (documents.assembly), em que a reconciliação transforma as leituras em envolvidos e preenche o relato.
  • analysis é a análise: o status, o código do erro quando falhou e o result, com um campo por dimensão (dimdocumental, dimchronology, …).

Caso sem envio tem documents com a mesma forma, vazia; caso sem análise tem analysis.status vazio e result nulo. Nenhuma lista sai null.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
id*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"

Responses​

O caso, com o envio dos documentos e a análise.

application/json
JSON
{
  
"id": "string",
  
"workspaceId": "string",
  
"userId": "string",
  
"domain": "auto",
  
"objective": "sinistro",
  
"reportAddress": "string",
  
"reportText": "string",
  
"doubts": [
  
  
"string"
  
],
  
"status": "CREATED",
  
"incidentType": "colisao",
  
"bot": {
  
  
"additionalProperties": "string"
  
},
  
"kanbanId": "string",
  
"createdAt": "string",
  
"updatedAt": "string",
  
"reportTime": "2026-11-03 23:48",
  
"vehicleCount": 1,
  
"entityCount": 2,
  
"documentCount": 7,
  
"documents": {
  
  
"status": "DONE",
  
  
"total": 7,
  
  
"progress": 100,
  
  
"errorCode": "",
  
  
"results": [
  
  
  
{
  
  
  
  
"index": 0,
  
  
  
  
"fileName": "bo.pdf",
  
  
  
  
"declaredType": "",
  
  
  
  
"type": "BOLETIM_OCORRENCIA",
  
  
  
  
"documentId": "b41c9f27-8d3e-4a16-9c5b-2e7f80a1d3c4",
  
  
  
  
"target": "BOLETIM_OCORRENCIA",
  
  
  
  
"position": "",
  
  
  
  
"outcome": "read",
  
  
  
  
"reason": ""
  
  
  
}
  
  
],
  
  
"assembly": {
  
  
  
"status": "DONE",
  
  
  
"errorCode": "",
  
  
  
"reason": "",
  
  
  
"documents": [
  
  
  
  
{
  
  
  
  
  
"documentId": "string",
  
  
  
  
  
"outcome": "used",
  
  
  
  
  
"reason": "string"
  
  
  
  
}
  
  
  
],
  
  
  
"entities": [
  
  
  
  
{
  
  
  
  
  
"key": "VEHICLE:TST1A23",
  
  
  
  
  
"type": "PERSON",
  
  
  
  
  
"value": "TST1A23",
  
  
  
  
  
"name": "FIAT ARGO DRIVE 1.0",
  
  
  
  
  
"roles": [
  
  
  
  
  
  
"SEGURADO"
  
  
  
  
  
],
  
  
  
  
  
"entityId": "5e9a3c71-2b4d-4e8f-a9c0-6d1b7f2e8a35",
  
  
  
  
  
"outcome": "created",
  
  
  
  
  
"reason": ""
  
  
  
  
}
  
  
  
],
  
  
  
"institutional": 2,
  
  
  
"fields": [
  
  
  
  
[
  
  
  
  
  
"incidentType",
  
  
  
  
  
"reportAddress",
  
  
  
  
  
"reportTime"
  
  
  
  
]
  
  
  
],
  
  
  
"notes": [
  
  
  
  
"string"
  
  
  
]
  
  
}
  
},
  
"analysis": {
  
  
"status": "DONE",
  
  
"errorCode": "",
  
  
"startedAt": "string",
  
  
"finishedAt": "string",
  
  
"result": {
  
  
  
"dimdocumental": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
},
  
  
  
"dimchronology": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
},
  
  
  
"dimcoverage": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
},
  
  
  
"dimpossession": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
},
  
  
  
"dimimagery": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
},
  
  
  
"dimterritory": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
},
  
  
  
"dimeconomic": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
},
  
  
  
"dimnetwork": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
},
  
  
  
"dimphysical": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
}
  
  
}
  
}
}

Playground​

Authorization
Variables
Key
Value

Samples​


Editar o caso e movê-lo no quadro​

PUT
/api/v1/lens/{workspaceId}/research/{id}

Um PATCH do caso: o campo ausente (ou null) não muda, e string vazia não apaga. status, userId, domain e workspaceId não são campos editáveis — vindos no corpo, são ignorados.

kanbanId move o caso para outra raia do quadro. A raia precisa ser uma linha ACTIVE do quadro deste workspace; qualquer outra coisa é 400. Com o envio dos documentos ou a análise rodando, o movimento é 409: naquele momento, o caso é do worker.

É por aqui que o analista dá o desfecho: mover para Aprovado ou Reprovado (fase DESFECHO), ou devolver o caso para Dados pendentes quando falta material.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
id*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"

Request Body​

application/json
JSON
{
  
"objective": "sinistro",
  
"incidentType": "colisao",
  
"reportAddress": "string",
  
"reportTime": "string",
  
"reportText": "string",
  
"doubts": [
  
  
"string"
  
],
  
"kanbanId": "9d4a1c83-7e26-5f40-ab58-2c6d9e0f4a71"
}

Responses​

O caso depois da edição, já na raia nova.

application/json
JSON
{
  
"id": "string",
  
"workspaceId": "string",
  
"userId": "string",
  
"domain": "auto",
  
"objective": "sinistro",
  
"reportAddress": "string",
  
"reportText": "string",
  
"doubts": [
  
  
"string"
  
],
  
"status": "CREATED",
  
"incidentType": "colisao",
  
"bot": {
  
  
"additionalProperties": "string"
  
},
  
"kanbanId": "string",
  
"createdAt": "string",
  
"updatedAt": "string",
  
"reportTime": "string"
}

Playground​

Authorization
Variables
Key
Value
Body

Samples​


Apagar um caso​

DELETE
/api/v1/lens/{workspaceId}/research/{id}

Apaga o caso e tudo que pende dele. É irreversível, e só o dono do caso — o workspace do token — pode apagar.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
id*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"

Responses​

O caso foi apagado. Sem corpo.

Playground​

Authorization
Variables
Key
Value

Samples​


Listar os documentos do caso​

GET
/api/v1/lens/{workspaceId}/research/{researchId}/document

Lista os documentos já gravados no caso, num array.

Use ?content=false sempre que não precisar do arquivo: a listagem leve devolve os mesmos itens sem o base64. Com 40 documentos de até 10 MB, a diferença entre as duas é de centenas de megabytes.

O que os agentes leram de cada arquivo fica no metadata, na chave do agente.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
researchId*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"

Query Parameters

content

false devolve a listagem leve, sem o base64 de cada documento. Qualquer outro valor (ou a ausência) devolve o arquivo.

Type
string
Valid values
"false"
Example"false"

Responses​

Os documentos do caso.

application/json
JSON
[
  
{
  
  
"id": "string",
  
  
"researchId": "string",
  
  
"researchEntityId": "",
  
  
"type": "BOLETIM_OCORRENCIA",
  
  
"fileName": "bo.pdf",
  
  
"contentType": "application/pdf",
  
  
"base64": "string",
  
  
"metadata": {
  
  
  
"additionalProperties": "string"
  
  
},
  
  
"createdAt": "string",
  
  
"updatedAt": "string"
  
}
]

Playground​

Authorization
Variables
Key
Value

Samples​


Enviar os documentos do caso​

POST
/api/v1/lens/{workspaceId}/research/{researchId}/document

Envia todos os arquivos do caso de uma vez e responde 202 sem chamar modelo nenhum. Os arquivos ficam na fila e um worker os identifica, lê e grava depois. É a rota que substituiu o antigo create de um arquivo por vez.

O que o worker faz com cada arquivo

  1. Sem type, o identificador de documento diz o que o arquivo é (target): apólice, BO, aviso de sinistro, termo de terceiro, CNH, CRLV, foto do local, foto do veículo ou OUTRO. O OUTRO fica fora do caso.
  2. Foto de veículo passa também pelo OCR Veículo, e a posição da foto (frente, traseira, lateral, interior, cofre do motor) é que dá o tipo do documento.
  3. Com agentReader: true, o OCR do tipo lê o arquivo e grava os campos extraídos no metadata do documento, na chave do agente.
  4. Com autoCreate: true, a leitura entra na montagem do caso: o agente de reconciliação transforma as leituras em envolvidos e preenche o relato (veja documents.assembly no GET do caso). autoCreate exige agentReader — sem leitura não há o que montar.

Limites

Limite Valor
Arquivos por envio 40
Tamanho de um arquivo (decodificado) 10 MB
Soma dos arquivos (decodificados) 50 MB
Formatos application/pdf, image/jpeg, image/png, image/webp

O corpo inteiro é cortado em cerca de 67,7 MB antes de ser lido — o Base64 dos 50 MB mais folga para o resto do JSON. Passar disso é 413.

Um envio por vez

Há um envio por caso. Mandar outro com um em andamento é 409 RESEARCH_DOCUMENTS_IN_PROGRESS. O andamento sai no GET do caso, em documents.

Um arquivo recusado leva o índice dele no corpo do erro (index), para o front saber qual corrigir sem ler a frase.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
researchId*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"

Request Body​

application/json
JSON
{
  
"files": [
  
  
{
  
  
  
"fileName": "bo.pdf",
  
  
  
"contentType": "application/pdf",
  
  
  
"base64": "JVBERi0xLjQKJeLjz9MK...",
  
  
  
"agentReader": true,
  
  
  
"autoCreate": true
  
  
},
  
  
{
  
  
  
"fileName": "apolice.pdf",
  
  
  
"contentType": "application/pdf",
  
  
  
"base64": "JVBERi0xLjQKJeLjz9MK...",
  
  
  
"agentReader": true,
  
  
  
"autoCreate": true
  
  
},
  
  
{
  
  
  
"fileName": "frente.jpg",
  
  
  
"contentType": "image/jpeg",
  
  
  
"base64": "/9j/4AAQSkZJRgABAQAA...",
  
  
  
"agentReader": true
  
  
}
  
]
}

Responses​

O envio entrou na fila.

application/json
JSON
{
  
"researchId": "string",
  
"status": "QUEUED",
  
"total": 3,
  
"progress": 0
}

Playground​

Authorization
Variables
Key
Value
Body

Samples​


Consultar um documento​

GET
/api/v1/lens/{workspaceId}/research/{researchId}/document/{id}

Um documento do caso, com o base64 do arquivo e o metadata — onde ficam os campos que os OCRs extraíram, na chave de cada agente.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
researchId*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"
id*

O id do documento.

Type
string
Required
Example"b41c9f27-8d3e-4a16-9c5b-2e7f80a1d3c4"
Format
"uuid"

Responses​

O documento.

application/json
JSON
{
  
"id": "string",
  
"researchId": "string",
  
"researchEntityId": "",
  
"type": "BOLETIM_OCORRENCIA",
  
"fileName": "bo.pdf",
  
"contentType": "application/pdf",
  
"base64": "string",
  
"metadata": {
  
  
"additionalProperties": "string"
  
},
  
"createdAt": "string",
  
"updatedAt": "string"
}

Playground​

Authorization
Variables
Key
Value

Samples​


Substituir um documento​

PUT
/api/v1/lens/{workspaceId}/research/{researchId}/document/{id}

Substitui o documento inteiro: type, fileName, contentType e base64 são obrigatórios, e o que não vier no corpo é apagado. Não é um PATCH.

É por aqui que se corrige o tipo que o agente errou, ou se amarra o documento a um envolvido pelo researchEntityId. O metadata é gravado como veio — para preservar o que os OCRs leram, releia o documento e reenvie o metadata inteiro com a sua chave a mais.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
researchId*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"
id*

O id do documento.

Type
string
Required
Example"b41c9f27-8d3e-4a16-9c5b-2e7f80a1d3c4"
Format
"uuid"

Request Body​

application/json
JSON
{
  
"researchEntityId": "string",
  
"type": "BOLETIM_OCORRENCIA",
  
"fileName": "string",
  
"contentType": "string",
  
"base64": "string",
  
"metadata": {
  
  
"additionalProperties": "string"
  
}
}

Responses​

O documento depois da troca.

application/json
JSON
{
  
"id": "string",
  
"researchId": "string",
  
"researchEntityId": "",
  
"type": "BOLETIM_OCORRENCIA",
  
"fileName": "bo.pdf",
  
"contentType": "application/pdf",
  
"base64": "string",
  
"metadata": {
  
  
"additionalProperties": "string"
  
},
  
"createdAt": "string",
  
"updatedAt": "string"
}

Playground​

Authorization
Variables
Key
Value
Body

Samples​


Apagar um documento​

DELETE
/api/v1/lens/{workspaceId}/research/{researchId}/document/{id}

Tira o documento do caso. O que o agente já leu dele continua gravado no resultado do envio e na análise que já rodou — apagar o arquivo não reescreve o passado.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
researchId*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"
id*

O id do documento.

Type
string
Required
Example"b41c9f27-8d3e-4a16-9c5b-2e7f80a1d3c4"
Format
"uuid"

Responses​

O documento foi apagado. Sem corpo.

Playground​

Authorization
Variables
Key
Value

Samples​


Listar os envolvidos do caso​

GET
/api/v1/lens/{workspaceId}/research/{researchId}/entity

Todos os envolvidos do caso, num array: as pessoas, as empresas e os veículos, cada um com os papéis, o cadastro consultado (profile) e o parentId que forma a árvore.

manual diz quem o pôs ali: true é declaração de quem abriu o caso; false é achado da apuração — a diferença é de peso probatório.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
researchId*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"

Responses​

Os envolvidos do caso.

application/json
JSON
[
  
{
  
  
"id": "string",
  
  
"researchId": "string",
  
  
"parentId": "",
  
  
"externalId": "",
  
  
"type": "PERSON",
  
  
"value": "TST1A23",
  
  
"roles": [
  
  
  
"SEGURADO"
  
  
],
  
  
"reason": "string",
  
  
"profile": {
  
  
  
"additionalProperties": "string"
  
  
},
  
  
"manual": true,
  
  
"metadata": {
  
  
  
"additionalProperties": "string"
  
  
},
  
  
"createdAt": "string",
  
  
"updatedAt": "string"
  
}
]

Playground​

Authorization
Variables
Key
Value

Samples​


Incluir um envolvido​

POST
/api/v1/lens/{workspaceId}/research/{researchId}/entity

Põe uma pessoa, uma empresa ou um veículo no caso, com os papéis dela.

A consulta do cadastro

Criar um envolvido consulta um provedor pago e guarda o resultado em profile:

Tipo value Consulta Chave em profile
PERSON CPF Dataset do Zarv ID v3 (PF) dataset
COMPANY CNPJ Dataset do Zarv ID v3 (PJ) dataset
VEHICLE Placa Zarv Asset asset

O CPF ou o CNPJ é conferido (tamanho e dígito verificador) antes da consulta: um erro de digitação é 400, e não uma consulta cobrada. A consulta vem depois de todas as conferências e antes de gravar — o que seria recusado não é cobrado, e uma consulta que falha não grava nada (502).

As regras da árvore

  • O VEHICLE é sempre raiz: ele não tem parentId.
  • A COMPANY só fica sob um VEHICLE.
  • O parentId tem de ser um envolvido deste caso.

Duas regras que evitam caso duplicado

  • Dentro do caso: se já existe um envolvido com esse value, a chamada devolve o que já está lá, sem gravar de novo e sem consultar.
  • Entre casos: uma placa que já está num caso em aberto do mesmo workspace é recusada com 409 VEHICLE_IN_OPEN_RESEARCH, e o corpo traz o researchId daquele caso — é para onde as evidências devem ir.

value é obrigatório no VEHICLE (a placa). Em PERSON e COMPANY o documento é opcional: uma testemunha pode não ter.

O envolvido criado por aqui nasce manual: true — foi declarado, não descoberto. O que a montagem do caso cria a partir das leituras nasce manual: false.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
researchId*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"

Request Body​

application/json
JSON
{
  
"type": "VEHICLE",
  
"value": "TST1A23",
  
"roles": [
  
  
"PRINCIPAL"
  
],
  
"reason": "Veículo segurado, declarado na abertura."
}

Responses​

O envolvido entrou no caso.

application/json
JSON
{
  
"id": "string",
  
"researchId": "string",
  
"parentId": "",
  
"externalId": "",
  
"type": "PERSON",
  
"value": "TST1A23",
  
"roles": [
  
  
"SEGURADO"
  
],
  
"reason": "string",
  
"profile": {
  
  
"additionalProperties": "string"
  
},
  
"manual": true,
  
"metadata": {
  
  
"additionalProperties": "string"
  
},
  
"createdAt": "string",
  
"updatedAt": "string"
}

Playground​

Authorization
Variables
Key
Value
Body

Samples​


Consultar um envolvido​

GET
/api/v1/lens/{workspaceId}/research/{researchId}/entity/{id}

Um envolvido do caso, com os papéis, o cadastro consultado e o vínculo com o veículo.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
researchId*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"
id*

O id do envolvido.

Type
string
Required
Example"5e9a3c71-2b4d-4e8f-a9c0-6d1b7f2e8a35"
Format
"uuid"

Responses​

O envolvido.

application/json
JSON
{
  
"id": "string",
  
"researchId": "string",
  
"parentId": "",
  
"externalId": "",
  
"type": "PERSON",
  
"value": "TST1A23",
  
"roles": [
  
  
"SEGURADO"
  
],
  
"reason": "string",
  
"profile": {
  
  
"additionalProperties": "string"
  
},
  
"manual": true,
  
"metadata": {
  
  
"additionalProperties": "string"
  
},
  
"createdAt": "string",
  
"updatedAt": "string"
}

Playground​

Authorization
Variables
Key
Value

Samples​


Editar um envolvido​

PUT
/api/v1/lens/{workspaceId}/research/{researchId}/entity/{id}

Um PATCH: muda os papéis, o motivo, o cadastro, os metadados e o vínculo com um veículo do caso.

  • parentId: null não mexe, "" desliga o vínculo, um id amarra ao veículo.
  • reason: null não mexe, "" apaga.
  • value é imutável. Se vier, tem de ser exatamente o que está gravado; qualquer outro valor é 400 IDENTITY_IS_IMMUTABLE. A placa e o CPF/CNPJ são a chave pela qual o Asset, o Zarv ID e as dimensões foram consultados — corrigir é remover e incluir de novo.
  • externalId, type e manual não são editáveis e são ignorados no corpo.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
researchId*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"
id*

O id do envolvido.

Type
string
Required
Example"5e9a3c71-2b4d-4e8f-a9c0-6d1b7f2e8a35"
Format
"uuid"

Request Body​

application/json
JSON
{
  
"roles": [
  
  
"SEGURADO"
  
],
  
"reason": "string",
  
"parentId": "string",
  
"profile": {
  
  
"additionalProperties": "string"
  
},
  
"metadata": {
  
  
"additionalProperties": "string"
  
},
  
"value": "string"
}

Responses​

O envolvido depois da edição.

application/json
JSON
{
  
"id": "string",
  
"researchId": "string",
  
"parentId": "",
  
"externalId": "",
  
"type": "PERSON",
  
"value": "TST1A23",
  
"roles": [
  
  
"SEGURADO"
  
],
  
"reason": "string",
  
"profile": {
  
  
"additionalProperties": "string"
  
},
  
"manual": true,
  
"metadata": {
  
  
"additionalProperties": "string"
  
},
  
"createdAt": "string",
  
"updatedAt": "string"
}

Playground​

Authorization
Variables
Key
Value
Body

Samples​


Remover um envolvido​

DELETE
/api/v1/lens/{workspaceId}/research/{researchId}/entity/{id}

Tira o envolvido do caso. Remover e incluir de novo é também como se corrige uma placa ou um CPF digitado errado — e a inclusão nova consulta o cadastro outra vez, com a cobrança que vem com ela.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
researchId*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"
id*

O id do envolvido.

Type
string
Required
Example"5e9a3c71-2b4d-4e8f-a9c0-6d1b7f2e8a35"
Format
"uuid"

Responses​

O envolvido foi removido. Sem corpo.

Playground​

Authorization
Variables
Key
Value

Samples​


Análise​

Rodar as nove dimensões sobre o caso coletado e acompanhar o resultado. O pedido responde 202 e um worker roda a análise; o veredito de cada dimensão sai no GET do caso.


Consultar um caso​

GET
/api/v1/lens/{workspaceId}/research/{id}

O caso inteiro: o relato, as contagens de filhos, a raia do quadro e — o que mais importa para quem integra — o andamento das duas rotas assíncronas.

  • documents é o envio dos documentos: o status, o progresso de 0 a 100, o resultado de cada arquivo (saved, read, read_failed ou left_out, com o motivo) e a montagem do caso (documents.assembly), em que a reconciliação transforma as leituras em envolvidos e preenche o relato.
  • analysis é a análise: o status, o código do erro quando falhou e o result, com um campo por dimensão (dimdocumental, dimchronology, …).

Caso sem envio tem documents com a mesma forma, vazia; caso sem análise tem analysis.status vazio e result nulo. Nenhuma lista sai null.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
id*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"

Responses​

O caso, com o envio dos documentos e a análise.

application/json
JSON
{
  
"id": "string",
  
"workspaceId": "string",
  
"userId": "string",
  
"domain": "auto",
  
"objective": "sinistro",
  
"reportAddress": "string",
  
"reportText": "string",
  
"doubts": [
  
  
"string"
  
],
  
"status": "CREATED",
  
"incidentType": "colisao",
  
"bot": {
  
  
"additionalProperties": "string"
  
},
  
"kanbanId": "string",
  
"createdAt": "string",
  
"updatedAt": "string",
  
"reportTime": "2026-11-03 23:48",
  
"vehicleCount": 1,
  
"entityCount": 2,
  
"documentCount": 7,
  
"documents": {
  
  
"status": "DONE",
  
  
"total": 7,
  
  
"progress": 100,
  
  
"errorCode": "",
  
  
"results": [
  
  
  
{
  
  
  
  
"index": 0,
  
  
  
  
"fileName": "bo.pdf",
  
  
  
  
"declaredType": "",
  
  
  
  
"type": "BOLETIM_OCORRENCIA",
  
  
  
  
"documentId": "b41c9f27-8d3e-4a16-9c5b-2e7f80a1d3c4",
  
  
  
  
"target": "BOLETIM_OCORRENCIA",
  
  
  
  
"position": "",
  
  
  
  
"outcome": "read",
  
  
  
  
"reason": ""
  
  
  
}
  
  
],
  
  
"assembly": {
  
  
  
"status": "DONE",
  
  
  
"errorCode": "",
  
  
  
"reason": "",
  
  
  
"documents": [
  
  
  
  
{
  
  
  
  
  
"documentId": "string",
  
  
  
  
  
"outcome": "used",
  
  
  
  
  
"reason": "string"
  
  
  
  
}
  
  
  
],
  
  
  
"entities": [
  
  
  
  
{
  
  
  
  
  
"key": "VEHICLE:TST1A23",
  
  
  
  
  
"type": "PERSON",
  
  
  
  
  
"value": "TST1A23",
  
  
  
  
  
"name": "FIAT ARGO DRIVE 1.0",
  
  
  
  
  
"roles": [
  
  
  
  
  
  
"SEGURADO"
  
  
  
  
  
],
  
  
  
  
  
"entityId": "5e9a3c71-2b4d-4e8f-a9c0-6d1b7f2e8a35",
  
  
  
  
  
"outcome": "created",
  
  
  
  
  
"reason": ""
  
  
  
  
}
  
  
  
],
  
  
  
"institutional": 2,
  
  
  
"fields": [
  
  
  
  
[
  
  
  
  
  
"incidentType",
  
  
  
  
  
"reportAddress",
  
  
  
  
  
"reportTime"
  
  
  
  
]
  
  
  
],
  
  
  
"notes": [
  
  
  
  
"string"
  
  
  
]
  
  
}
  
},
  
"analysis": {
  
  
"status": "DONE",
  
  
"errorCode": "",
  
  
"startedAt": "string",
  
  
"finishedAt": "string",
  
  
"result": {
  
  
  
"dimdocumental": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
},
  
  
  
"dimchronology": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
},
  
  
  
"dimcoverage": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
},
  
  
  
"dimpossession": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
},
  
  
  
"dimimagery": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
},
  
  
  
"dimterritory": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
},
  
  
  
"dimeconomic": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
},
  
  
  
"dimnetwork": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
},
  
  
  
"dimphysical": {
  
  
  
  
"status": "apurado",
  
  
  
  
"verdict": "atencao",
  
  
  
  
"reason": "",
  
  
  
  
"alerts": [
  
  
  
  
  
{
  
  
  
  
  
  
"code": "DOC_OWNER_MISMATCH",
  
  
  
  
  
  
"level": "atencao",
  
  
  
  
  
  
"entities": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"PERSON:11144477735"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"documents": [
  
  
  
  
  
  
  
"string"
  
  
  
  
  
  
],
  
  
  
  
  
  
"evidence": [
  
  
  
  
  
  
  
[
  
  
  
  
  
  
  
  
"CRLV: MARIA DA SILVA",
  
  
  
  
  
  
  
  
"Apólice: JOÃO DA SILVA"
  
  
  
  
  
  
  
]
  
  
  
  
  
  
],
  
  
  
  
  
  
"message": "O titular do CRLV não é o segurado da apólice."
  
  
  
  
  
}
  
  
  
  
],
  
  
  
  
"summary": "Os documentos fecham entre si, com uma divergência de titularidade a esclarecer."
  
  
  
}
  
  
}
  
}
}

Playground​

Authorization
Variables
Key
Value

Samples​


Pedir a análise do caso​

POST
/api/v1/lens/{workspaceId}/research/{researchId}/analyze

Põe a análise do caso na fila e responde 202 na hora. Não tem corpo.

Um worker dentro da API enriquece o segurado e o terceiro (ZarvID e Asset) e roda as nove dimensões sobre o caso montado — os documentos, as leituras e os envolvidos. Cada dimensão grava o resultado dela assim que termina, então uma análise parcial já é legível. Isso leva minutos: nada disso cabe no tempo de uma requisição HTTP.

O andamento e o resultado saem no GET do caso, em analysis. O caso vai para a raia Analisando no pedido, e para Analisado ou Análise falhou no fim.

Uma análise por vez. Pedir outra com uma em andamento é 409. Pedir com o envio dos documentos rodando também é 409: a análise lê o caso que o envio ainda está gravando. Pedir uma análise num caso já analisado é permitido — ela substitui a anterior, e cada dimensão sobrescreve o campo dela.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
researchId*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"

Responses​

A análise entrou na fila.

application/json
JSON
{
  
"researchId": "string",
  
"status": "QUEUED"
}

Playground​

Authorization
Variables
Key
Value

Samples​


Investigação​

A etapa depois da análise: anexar a evidência que responde a um alerta, incluir o envolvido que a apuração revelou, pedir uma nova análise e mover o caso para o desfecho (Aprovado ou Reprovado).


Editar o caso e movê-lo no quadro​

PUT
/api/v1/lens/{workspaceId}/research/{id}

Um PATCH do caso: o campo ausente (ou null) não muda, e string vazia não apaga. status, userId, domain e workspaceId não são campos editáveis — vindos no corpo, são ignorados.

kanbanId move o caso para outra raia do quadro. A raia precisa ser uma linha ACTIVE do quadro deste workspace; qualquer outra coisa é 400. Com o envio dos documentos ou a análise rodando, o movimento é 409: naquele momento, o caso é do worker.

É por aqui que o analista dá o desfecho: mover para Aprovado ou Reprovado (fase DESFECHO), ou devolver o caso para Dados pendentes quando falta material.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
id*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"

Request Body​

application/json
JSON
{
  
"objective": "sinistro",
  
"incidentType": "colisao",
  
"reportAddress": "string",
  
"reportTime": "string",
  
"reportText": "string",
  
"doubts": [
  
  
"string"
  
],
  
"kanbanId": "9d4a1c83-7e26-5f40-ab58-2c6d9e0f4a71"
}

Responses​

O caso depois da edição, já na raia nova.

application/json
JSON
{
  
"id": "string",
  
"workspaceId": "string",
  
"userId": "string",
  
"domain": "auto",
  
"objective": "sinistro",
  
"reportAddress": "string",
  
"reportText": "string",
  
"doubts": [
  
  
"string"
  
],
  
"status": "CREATED",
  
"incidentType": "colisao",
  
"bot": {
  
  
"additionalProperties": "string"
  
},
  
"kanbanId": "string",
  
"createdAt": "string",
  
"updatedAt": "string",
  
"reportTime": "string"
}

Playground​

Authorization
Variables
Key
Value
Body

Samples​


Pedir a análise do caso​

POST
/api/v1/lens/{workspaceId}/research/{researchId}/analyze

Põe a análise do caso na fila e responde 202 na hora. Não tem corpo.

Um worker dentro da API enriquece o segurado e o terceiro (ZarvID e Asset) e roda as nove dimensões sobre o caso montado — os documentos, as leituras e os envolvidos. Cada dimensão grava o resultado dela assim que termina, então uma análise parcial já é legível. Isso leva minutos: nada disso cabe no tempo de uma requisição HTTP.

O andamento e o resultado saem no GET do caso, em analysis. O caso vai para a raia Analisando no pedido, e para Analisado ou Análise falhou no fim.

Uma análise por vez. Pedir outra com uma em andamento é 409. Pedir com o envio dos documentos rodando também é 409: a análise lê o caso que o envio ainda está gravando. Pedir uma análise num caso já analisado é permitido — ela substitui a anterior, e cada dimensão sobrescreve o campo dela.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
researchId*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"

Responses​

A análise entrou na fila.

application/json
JSON
{
  
"researchId": "string",
  
"status": "QUEUED"
}

Playground​

Authorization
Variables
Key
Value

Samples​


Enviar os documentos do caso​

POST
/api/v1/lens/{workspaceId}/research/{researchId}/document

Envia todos os arquivos do caso de uma vez e responde 202 sem chamar modelo nenhum. Os arquivos ficam na fila e um worker os identifica, lê e grava depois. É a rota que substituiu o antigo create de um arquivo por vez.

O que o worker faz com cada arquivo

  1. Sem type, o identificador de documento diz o que o arquivo é (target): apólice, BO, aviso de sinistro, termo de terceiro, CNH, CRLV, foto do local, foto do veículo ou OUTRO. O OUTRO fica fora do caso.
  2. Foto de veículo passa também pelo OCR Veículo, e a posição da foto (frente, traseira, lateral, interior, cofre do motor) é que dá o tipo do documento.
  3. Com agentReader: true, o OCR do tipo lê o arquivo e grava os campos extraídos no metadata do documento, na chave do agente.
  4. Com autoCreate: true, a leitura entra na montagem do caso: o agente de reconciliação transforma as leituras em envolvidos e preenche o relato (veja documents.assembly no GET do caso). autoCreate exige agentReader — sem leitura não há o que montar.

Limites

Limite Valor
Arquivos por envio 40
Tamanho de um arquivo (decodificado) 10 MB
Soma dos arquivos (decodificados) 50 MB
Formatos application/pdf, image/jpeg, image/png, image/webp

O corpo inteiro é cortado em cerca de 67,7 MB antes de ser lido — o Base64 dos 50 MB mais folga para o resto do JSON. Passar disso é 413.

Um envio por vez

Há um envio por caso. Mandar outro com um em andamento é 409 RESEARCH_DOCUMENTS_IN_PROGRESS. O andamento sai no GET do caso, em documents.

Um arquivo recusado leva o índice dele no corpo do erro (index), para o front saber qual corrigir sem ler a frase.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
researchId*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"

Request Body​

application/json
JSON
{
  
"files": [
  
  
{
  
  
  
"fileName": "bo.pdf",
  
  
  
"contentType": "application/pdf",
  
  
  
"base64": "JVBERi0xLjQKJeLjz9MK...",
  
  
  
"agentReader": true,
  
  
  
"autoCreate": true
  
  
},
  
  
{
  
  
  
"fileName": "apolice.pdf",
  
  
  
"contentType": "application/pdf",
  
  
  
"base64": "JVBERi0xLjQKJeLjz9MK...",
  
  
  
"agentReader": true,
  
  
  
"autoCreate": true
  
  
},
  
  
{
  
  
  
"fileName": "frente.jpg",
  
  
  
"contentType": "image/jpeg",
  
  
  
"base64": "/9j/4AAQSkZJRgABAQAA...",
  
  
  
"agentReader": true
  
  
}
  
]
}

Responses​

O envio entrou na fila.

application/json
JSON
{
  
"researchId": "string",
  
"status": "QUEUED",
  
"total": 3,
  
"progress": 0
}

Playground​

Authorization
Variables
Key
Value
Body

Samples​


Incluir um envolvido​

POST
/api/v1/lens/{workspaceId}/research/{researchId}/entity

Põe uma pessoa, uma empresa ou um veículo no caso, com os papéis dela.

A consulta do cadastro

Criar um envolvido consulta um provedor pago e guarda o resultado em profile:

Tipo value Consulta Chave em profile
PERSON CPF Dataset do Zarv ID v3 (PF) dataset
COMPANY CNPJ Dataset do Zarv ID v3 (PJ) dataset
VEHICLE Placa Zarv Asset asset

O CPF ou o CNPJ é conferido (tamanho e dígito verificador) antes da consulta: um erro de digitação é 400, e não uma consulta cobrada. A consulta vem depois de todas as conferências e antes de gravar — o que seria recusado não é cobrado, e uma consulta que falha não grava nada (502).

As regras da árvore

  • O VEHICLE é sempre raiz: ele não tem parentId.
  • A COMPANY só fica sob um VEHICLE.
  • O parentId tem de ser um envolvido deste caso.

Duas regras que evitam caso duplicado

  • Dentro do caso: se já existe um envolvido com esse value, a chamada devolve o que já está lá, sem gravar de novo e sem consultar.
  • Entre casos: uma placa que já está num caso em aberto do mesmo workspace é recusada com 409 VEHICLE_IN_OPEN_RESEARCH, e o corpo traz o researchId daquele caso — é para onde as evidências devem ir.

value é obrigatório no VEHICLE (a placa). Em PERSON e COMPANY o documento é opcional: uma testemunha pode não ter.

O envolvido criado por aqui nasce manual: true — foi declarado, não descoberto. O que a montagem do caso cria a partir das leituras nasce manual: false.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
researchId*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"

Request Body​

application/json
JSON
{
  
"type": "VEHICLE",
  
"value": "TST1A23",
  
"roles": [
  
  
"PRINCIPAL"
  
],
  
"reason": "Veículo segurado, declarado na abertura."
}

Responses​

O envolvido entrou no caso.

application/json
JSON
{
  
"id": "string",
  
"researchId": "string",
  
"parentId": "",
  
"externalId": "",
  
"type": "PERSON",
  
"value": "TST1A23",
  
"roles": [
  
  
"SEGURADO"
  
],
  
"reason": "string",
  
"profile": {
  
  
"additionalProperties": "string"
  
},
  
"manual": true,
  
"metadata": {
  
  
"additionalProperties": "string"
  
},
  
"createdAt": "string",
  
"updatedAt": "string"
}

Playground​

Authorization
Variables
Key
Value
Body

Samples​


Editar um envolvido​

PUT
/api/v1/lens/{workspaceId}/research/{researchId}/entity/{id}

Um PATCH: muda os papéis, o motivo, o cadastro, os metadados e o vínculo com um veículo do caso.

  • parentId: null não mexe, "" desliga o vínculo, um id amarra ao veículo.
  • reason: null não mexe, "" apaga.
  • value é imutável. Se vier, tem de ser exatamente o que está gravado; qualquer outro valor é 400 IDENTITY_IS_IMMUTABLE. A placa e o CPF/CNPJ são a chave pela qual o Asset, o Zarv ID e as dimensões foram consultados — corrigir é remover e incluir de novo.
  • externalId, type e manual não são editáveis e são ignorados no corpo.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
researchId*

O id do caso.

Type
string
Required
Example"7d2f8e10-4c3b-4a5d-9e8f-1a2b3c4d5e6f"
Format
"uuid"
id*

O id do envolvido.

Type
string
Required
Example"5e9a3c71-2b4d-4e8f-a9c0-6d1b7f2e8a35"
Format
"uuid"

Request Body​

application/json
JSON
{
  
"roles": [
  
  
"SEGURADO"
  
],
  
"reason": "string",
  
"parentId": "string",
  
"profile": {
  
  
"additionalProperties": "string"
  
},
  
"metadata": {
  
  
"additionalProperties": "string"
  
},
  
"value": "string"
}

Responses​

O envolvido depois da edição.

application/json
JSON
{
  
"id": "string",
  
"researchId": "string",
  
"parentId": "",
  
"externalId": "",
  
"type": "PERSON",
  
"value": "TST1A23",
  
"roles": [
  
  
"SEGURADO"
  
],
  
"reason": "string",
  
"profile": {
  
  
"additionalProperties": "string"
  
},
  
"manual": true,
  
"metadata": {
  
  
"additionalProperties": "string"
  
},
  
"createdAt": "string",
  
"updatedAt": "string"
}

Playground​

Authorization
Variables
Key
Value
Body

Samples​


Quadro​

As raias do quadro kanban do workspace, nas três fases (COLETA, ANALISE e DESFECHO). O quadro nasce pronto, com nove raias, na primeira leitura.


Listar as raias do quadro​

GET
/api/v1/lens/{workspaceId}/kanban

As raias do quadro do workspace, num array na ordem do quadro: primeiro a fase (COLETA, ANALISE, DESFECHO), depois o order dentro da fase e, no empate, a criação. Não há paginação — o quadro tem poucas raias.

O quadro nasce na primeira leitura. Um workspace que nunca leu o quadro recebe as nove raias padrão gravadas nesta chamada, com o autor system:

Fase Raias
COLETA Abertura · Dados pendentes · Dados inconsistentes · Pronto para análise
ANALISE Analisando · Análise falhou · Analisado
DESFECHO Reprovado · Aprovado

Os ids das nove são estáveis: derivam do workspace, da fase e do nome, então são os mesmos em toda leitura. Duas chamadas simultâneas gravam cada raia uma única vez.

Use o id da raia no ?kanbanId= da listagem de casos para montar cada coluna, e no kanbanId do PUT do caso para mover um caso.

Raias INACTIVE continuam na lista: esconder é decisão do cliente.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"

Responses​

As raias do quadro, na ordem.

application/json
JSON
[
  
{
  
  
"id": "string",
  
  
"workspaceId": "string",
  
  
"userId": "system",
  
  
"phase": "COLETA",
  
  
"step": "Abertura",
  
  
"description": "",
  
  
"order": 1,
  
  
"status": "ACTIVE",
  
  
"createdAt": "string",
  
  
"updatedAt": "string"
  
}
]

Playground​

Authorization
Variables
Key
Value

Samples​


Consultar uma raia​

GET
/api/v1/lens/{workspaceId}/kanban/{id}

Uma raia do quadro do workspace. Uma raia de outro workspace responde 403, como um caso de outro workspace.

Authorizations​

BearerAuth

Token Bearer JWT obtido em POST /api/v1/authentication. O workspace do token precisa ser o mesmo do caminho.

Type
HTTP (bearer)

Parameters​

Path Parameters

workspaceId*

O workspace dono do caso. Tem de ser o workspace do token.

Type
string
Required
Example"3f1a2b4c-5d6e-4f70-8a91-b2c3d4e5f607"
Format
"uuid"
id*

O id da raia.

Type
string
Required
Format
"uuid"

Responses​

A raia.

application/json
JSON
{
  
"id": "string",
  
"workspaceId": "string",
  
"userId": "system",
  
"phase": "COLETA",
  
"step": "Abertura",
  
"description": "",
  
"order": 1,
  
"status": "ACTIVE",
  
"createdAt": "string",
  
"updatedAt": "string"
}

Playground​

Authorization
Variables
Key
Value

Samples​


Operação​

Saúde do serviço.


Saúde do serviço​

GET
/api/lens/health

Diz se o Lens está no ar e enxergando o banco. É a única rota sem autenticação.

Responses​

O serviço está no ar.

application/json
JSON
{
  
"status": "ok"
}

Playground​

Samples​


Powered by VitePress OpenAPI