Documentação da API

Referência da API

Cada rota, com os parâmetros que aceita e os campos que devolve.

Autenticação

Toda rota exige Authorization: Bearer cxd_live_.... A chave é criada no portal, em Conta › Chaves de API, e vale para a conta inteira.

Tabelas

get /v1/tabelas/ncm

Procura um NCM por código ou por descrição

Um termo só: dígitos e pontuação valem como prefixo de código, qualquer outra coisa como texto da descrição. A busca por texto ignora acentos, então 'valvula' acha 'Válvulas'. Sem o parâmetro q, pagina a tabela inteira em ordem de código, que é a ordem da hierarquia. Pela API, cobra cada código devolvido na página, e uma busca sem resultado conta como um; o parâmetro limite é o que controla o custo.

Parâmetros
qquery
Termo de busca. Dígitos e pontuação são lidos como prefixo de código; qualquer outra coisa, como texto da descrição. Sem o parâmetro, pagina a tabela inteira.
paginaquery
Página da listagem, começando em 1.
limitequery
Quantos códigos por página, de 1 a 200. O padrão é 10.
Resposta
itemslista de object
Códigos desta página. Vazio quando nada casou com o termo, o que não é erro.
totalnumber
Quantos códigos casaram no total, contando todas as páginas.
paginanumber
Página devolvida, começando em 1.
limitenumber
Quantos códigos cabem por página. O padrão é 10 e o máximo é 200.
interpretado_comostring
Como o termo foi lido: 'lista' quando não houve termo e a tabela inteira está sendo paginada, 'codigo' quando o termo só tinha dígitos e pontuação, 'descricao' quando tinha texto. Devolvido para o consumidor entender por que veio o que veio.
tabelaobject
De quando é a tabela consultada.
cobrancaobject
O que esta requisição custou.
get /v1/tabelas/ncm/{codigo}

Um código com a linhagem e os desdobramentos

Aceita o código com ou sem pontuação. Devolve 404 quando o código não existe na tabela carregada. Pela API, cobra um código por consulta, inclusive quando a resposta é 404: saber que o código não existe é a resposta que quem valida uma lista veio buscar.

Parâmetros
codigopath · obrigatório
O código NCM, com ou sem pontuação: 8482.10.10 e 84821010 valem o mesmo.
Resposta
codigostring
Código com a pontuação oficial da Receita (0101.21.00). É a forma de exibir, e a pontuação mostra a hierarquia.
codigo_normalizadostring
Código só com dígitos (01012100). É a forma de comparar: o mesmo código aparece pontuado de várias maneiras nos documentos.
descricaostring
Descrição oficial da posição, já sem a marcação HTML que o arquivo da Receita traz.
nivelnumber
Quantidade de dígitos significativos: 2 é capítulo, 4 é posição, 6 é subposição, 8 é item. A tabela também tem códigos de 5 e 7 dígitos.
data_fimobject · pode vir null
Data em que o código deixou de valer, em ISO 8601. null quando vigente por prazo indeterminado, que é o caso da grande maioria.
linhagemlista de object
Caminho hierárquico até este código, do capítulo ao nível imediatamente acima. A descrição isolada quase nunca se explica sozinha: 'Outros' é uma descrição real, e só o caminho diz outros o quê.
filhoslista de object
Desdobramentos diretos e indiretos abaixo deste código, no máximo 200. Vazio num item de 8 dígitos, que é folha.
tabelaobject
De quando é a tabela consultada.
cobrancaobject
O que esta requisição custou.
get /v1/tabelas/onu

Procura produtos perigosos por número ONU ou por nome

Um termo só: dígitos, com ou sem UN na frente, valem como prefixo do número; qualquer outra coisa, como pedaço do nome em inglês. Sem termo, pagina a lista inteira na ordem do número. Pela API, cobra cada número ONU distinto devolvido na página (as três entradas do 1133 contam como um), e uma busca sem resultado conta como um.

Parâmetros
qquery
Número ONU (prefixo, com ou sem UN na frente) ou pedaço do nome em inglês. Sem o parâmetro, pagina a lista inteira.
paginaquery
Página da listagem, começando em 1.
limitequery
Quantas entradas por página, de 1 a 200. O padrão é 10.
Resposta
itemslista de object
Entradas desta página. Vazio quando nada casou com o termo, o que não é erro.
totalnumber
Quantas entradas casaram no total, contando todas as páginas.
paginanumber
Página devolvida, começando em 1.
limitenumber
Quantas entradas cabem por página. O padrão é 10 e o máximo é 200.
interpretado_comolista | numero | nome
Como o termo foi lido: 'lista' sem termo (a tabela inteira, na ordem do número), 'numero' quando o termo tinha só dígitos, com ou sem UN na frente, e 'nome' quando tinha texto.
tabelaobject
De qual edição é a tabela consultada.
cobrancaobject
O que esta requisição custou.
post /v1/tabelas/onu/lote

Consulta vários números ONU numa requisição

Para validar a lista de um sistema de uma vez: até 500 números, com ou sem UN na frente. Cada item volta com as entradas daquele número, ou encontrado: false. Pela API, cobra um código por número distinto pedido, encontrado ou não; repetidos contam uma vez.

Corpo da requisição (application/json)
numeroslista de string · obrigatório
Números ONU a consultar, de 1 a 500. Aceita UN1219, UN 1219 ou 1219. Repetidos são consultados e cobrados uma vez só.
Resposta
itemslista de object
Um item por número pedido, na ordem do pedido, sem repetidos.
tabelaobject
De qual edição é a tabela consultada.
cobrancaobject
O que esta requisição custou: um código por número distinto pedido, encontrado ou não.
get /v1/tabelas/onu/{numero}

Todas as entradas de um número ONU

Devolve cada entrada do número na lista, uma por grupo de embalagem, com todas as colunas. Responde 404 quando o número não existe na tabela carregada. Pela API, cobra um código por consulta, inclusive no 404: saber que o número não existe é a resposta que quem valida uma lista veio buscar.

Parâmetros
numeropath · obrigatório
O número ONU, com ou sem UN na frente: UN1219, UN 1219 e 1219 valem o mesmo.
Resposta
numerostring
O número consultado, normalizado para quatro dígitos.
entradaslista de object
Todas as entradas deste número, na ordem do documento: uma por grupo de embalagem ou por variação de nome.
tabelaobject
De qual edição é a tabela consultada.
cobrancaobject
O que esta requisição custou.

Navios

get /v1/navios

Procura navios por número IMO ou por nome

Procura na base de navios já validados no registro da IMO. Dígitos, com ou sem IMO na frente, valem como prefixo do número; texto, como pedaço do nome. Para um navio que ainda não está na base, use POST /v1/navios/verificar, que pede a consulta ao registro. Pela API, cobra cada navio devolvido na página, e uma busca sem resultado conta como um.

Parâmetros
qquery
Número IMO (prefixo, com ou sem IMO na frente) ou pedaço do nome do navio. Sem o parâmetro, pagina a base inteira em ordem de nome.
paginaquery
Página da listagem, começando em 1.
limitequery
Quantos navios por página, de 1 a 200. O padrão é 10.
Resposta
itemslista de object
Navios desta página. Vazio quando nada casou com o termo, o que não é erro.
totalnumber
Quantos navios casaram no total, contando todas as páginas.
paginanumber
Página devolvida, começando em 1.
limitenumber
Quantos navios cabem por página. O padrão é 10 e o máximo é 200.
interpretado_comolista | imo | nome
Como o termo foi lido: 'lista' sem termo, 'imo' quando o termo tinha só dígitos, com ou sem IMO na frente (prefixo do número), e 'nome' quando tinha texto (pedaço do nome).
fontestring
De onde vêm os dados: o registro de navios da International Maritime Organization.
cobrancaobject
O que esta requisição custou.
post /v1/navios/verificar

Confere se um navio consta no registro da IMO

Recebe o nome, o número IMO ou os dois, como estão no documento, e diz se o navio consta no registro da IMO. Quando a base ainda não tem o navio, a consulta ao registro é pedida em segundo plano e a resposta vem com estado pendente; repita a mesma chamada em alguns minutos. Pela API, cobra um navio por verificação.

Corpo da requisição (application/json)
nomestring
Nome do navio como está no documento ("M/V XIN WEI HAI" ou "Xin Wei Hai" valem o mesmo). Obrigatório quando não houver imo.
imostring
Número IMO do navio, com ou sem o prefixo IMO. Quando válido, ganha do nome: identifica o navio sem ambiguidade.
Resposta
estadoconfere_imo | confere_nome | confere_nome_varios | nao_encontrado | pendente | indisponivel | sem_navio
O resultado. confere_imo: o número IMO está no registro. confere_nome: um navio com esse nome está no registro. confere_nome_varios: mais de um navio tem esse nome, todos em navios. nao_encontrado: o registro da IMO não tem esse nome nem esse número. pendente: o navio ainda não estava na base e a consulta ao registro foi pedida; repita em alguns minutos. indisponivel: a consulta ao registro está parada no momento; repita mais tarde. sem_navio: nem nome nem número válidos foram enviados.
nome_consultadostring · pode vir null
O nome como foi enviado. null quando não veio.
imo_consultadostring · pode vir null
O número IMO como foi enviado. null quando não veio.
imo_validoboolean · pode vir null
Se o número IMO enviado tem sete dígitos com o dígito verificador certo. null quando não veio número. Número inválido não é consultado, e vale o nome.
navioslista de object
Os navios do registro que correspondem. Vazio quando o estado não é de conferência.
nome_difereboolean
true quando o número IMO está no registro com um nome diferente do enviado. Pode ser navio renomeado, ou o número de outro navio: vale conferir.
fontestring
De onde vêm os dados: o registro de navios da International Maritime Organization.
cobrancaobject
O que esta requisição custou: um navio por verificação.
get /v1/navios/{imo}

Um navio pelo número IMO

Devolve o navio da base pelo número IMO. Responde 404 quando o número não tem sete dígitos com o verificador certo, ou quando o navio ainda não está na base; neste caso a consulta ao registro é pedida em segundo plano. Pela API, cobra um navio por consulta, inclusive no 404.

Parâmetros
imopath · obrigatório
O número IMO do navio, com ou sem o prefixo: IMO9312573 e 9312573 valem o mesmo.
Resposta
navioobject
O navio.
fontestring
De onde vêm os dados: o registro de navios da International Maritime Organization.
cobrancaobject
O que esta requisição custou.

eBL

get /v1/ebl/documents

Lista as leituras da conta

Da mais recente para a mais antiga. Filtra por status quando informado. Paginado: pagina começa em 1 e limite vai até 200, com padrão 10. O campo total conta o filtro inteiro, não só a página.

Parâmetros
statusquery
Devolve só as leituras neste estado. Sem o parâmetro, devolve todas.
paginaquery
Página da listagem, começando em 1.
limitequery
Quantas leituras por página, de 1 a 200. O padrão é 10.
Resposta
schema_versionstring
Versão do formato da resposta. Campo novo pode aparecer sem aviso dentro da mesma versão; campo existente não muda de significado.
itemslista de object
As leituras desta página, da mais recente para a mais antiga.
totalnumber
Quantas leituras existem no filtro inteiro, contando todas as páginas.
paginanumber
Página devolvida, começando em 1.
limitenumber
Quantas leituras cabem por página. O padrão é 10 e o máximo é 200.
post /v1/ebl/documents

Envia um BL para leitura

O arquivo vai como multipart/form-data, no campo file: o arquivo cru, não base64 e não JSON. Responde 202 na hora, com um job_id, e o resultado chega por consulta ou por webhook em cerca de dois minutos. Mande o cabeçalho Idempotency-Key para um retry de rede não virar uma segunda leitura.

Corpo da requisição (multipart/form-data)
filearquivo
O arquivo do BL, enviado como parte de um multipart/form-data. Não é base64 nem JSON: é o arquivo cru, no campo chamado file. Aceita PDF, JPEG e PNG, até 5 MB e 5 páginas.
webhook_urlstring
Endereço que recebe o resultado desta leitura, quando você quer um diferente do destino cadastrado no portal. Opcional.
Parâmetros
Idempotency-Keyheader
Um UUID seu, um por arquivo. Repetir a requisição com a mesma chave devolve o mesmo job em vez de ler o documento outra vez. Vale por 24 horas.
Resposta
schema_versionstring
Versão do formato desta resposta. Campo novo pode aparecer dentro da mesma versão; campo existente não muda de significado.
job_idstring
Identificador desta leitura. É a chave da consulta, do download do arquivo e da deduplicação do webhook.
statusstring
Situação da leitura no momento do aceite. É sempre queued, exceto quando a mesma Idempotency-Key já tinha sido usada: aí devolve a situação do job original.
document_hashobject · pode vir null
Identificador do conteúdo do arquivo. Dois envios do mesmo documento têm o mesmo hash e job_id diferentes.
status_urlstring
Endereço para consultar o resultado desta leitura.
created_atstring
Momento do aceite, em ISO 8601 UTC.
get /v1/ebl/documents/{jobId}

Consulta o resultado de uma leitura

Enquanto a leitura corre, status é queued ou processing e data vem null. Uma leitura de outra conta responde 404.

Parâmetros
jobIdpath · obrigatório
O job_id devolvido no envio.
includequery
Blocos extras, separados por vírgula. Hoje só "extraction": traz o registro completo de como a leitura foi feita — página de origem de cada campo, endereço como impresso, base de cada vínculo, correções automáticas e o texto que não coube em campo nenhum. Sem ele vem só um resumo com as contagens e a URL para pedir o detalhe.
omit_nullquery
true remove as chaves de valor nulo da resposta. Não é o padrão: a chave presente com null afirma que o campo foi procurado e não estava no documento, e sem ela não dá para distinguir isso de um campo que saiu da API. Lista vazia e texto vazio continuam, porque já são um valor.
Resposta
schema_versionstring
Versão do formato desta resposta.
job_idstring
Identificador desta leitura.
document_hashobject · pode vir null
Identificador do conteúdo do arquivo lido.
statusstring
Situação: queued, processing, completed, review_required, reviewed ou failed. review_required não é erro: vem com HTTP 200 e o JSON completo.
dataobject · pode vir null
Dados extraídos do documento, no formato de Docs/extracao-bl.md §4. null enquanto a leitura não terminou.
error_codeobject · pode vir null
Código do erro quando a leitura falhou: not_a_bill_of_lading, multiple_bls_detected, unreadable. null quando não falhou.
billed_amountobject · pode vir null
Valor em reais debitado por esta leitura, com quatro casas decimais. null enquanto a leitura não terminou. A chave não aparece quando quem consulta não tem permissão para ver valores.
corrected_fieldslista de string
Caminhos dos campos que uma pessoa corrigiu na conferência, como containers.0.container_number. O valor destes campos veio de gente, não do modelo. Vem vazio enquanto ninguém corrigiu nada.
reviewobject
Por que esta leitura foi ou não para a fila de conferência: a nota, o limiar da conta e os problemas encontrados.
file_urlstring
Endereço para baixar o arquivo original enviado.
patch /v1/ebl/documents/{jobId}

Confere uma leitura

Corrige campos e marca a leitura como conferida. Qualquer campo pode ser corrigido, e o corpo pode vir sem nenhuma correção, quando a conferência é só uma confirmação de que está tudo certo. Não existe desfazer: corrija por cima, que o histórico guarda as duas passagens. Conferência não é cobrada.

Corpo da requisição (application/json)
correctionsobject
Campos a corrigir, em uma de duas formas. RECOMENDADA: uma lista de alvos, cada um endereçado pelo que o documento tem de próprio — { target, container_number | cargo_id | role, field, value }. ANTIGA, ainda aceita: um objeto do caminho pontilhado no JSON para o valor, como { "containers.0.container_number": "TCLU7654322" }. A lista existe porque o caminho pontilhado é a estrutura interna da extração, e na resposta 2.0 o cliente não a enxerga mais. Mande vazio para apenas confirmar que a leitura está certa.
reviewed_bystring
Quem respondeu pela conferência, quando ela vem por chave de API. Texto livre, guardado no histórico. Ignorado no portal, onde quem responde é o usuário logado.
Parâmetros
jobIdpath · obrigatório
O job_id da leitura a conferir.
Resposta
schema_versionstring
Versão do formato desta resposta.
job_idstring
Identificador desta leitura.
document_hashobject · pode vir null
Identificador do conteúdo do arquivo lido.
statusstring
Situação: queued, processing, completed, review_required, reviewed ou failed. review_required não é erro: vem com HTTP 200 e o JSON completo.
dataobject · pode vir null
Dados extraídos do documento, no formato de Docs/extracao-bl.md §4. null enquanto a leitura não terminou.
error_codeobject · pode vir null
Código do erro quando a leitura falhou: not_a_bill_of_lading, multiple_bls_detected, unreadable. null quando não falhou.
billed_amountobject · pode vir null
Valor em reais debitado por esta leitura, com quatro casas decimais. null enquanto a leitura não terminou. A chave não aparece quando quem consulta não tem permissão para ver valores.
corrected_fieldslista de string
Caminhos dos campos que uma pessoa corrigiu na conferência, como containers.0.container_number. O valor destes campos veio de gente, não do modelo. Vem vazio enquanto ninguém corrigiu nada.
reviewobject
Por que esta leitura foi ou não para a fila de conferência: a nota, o limiar da conta e os problemas encontrados.
file_urlstring
Endereço para baixar o arquivo original enviado.
put /v1/ebl/documents/{jobId}/alocacoes

Refaz o vínculo entre cargas e contêineres

Substitui a lista inteira de vínculos carga x contêiner. Rota separada da conferência de campos porque vínculo é relação e não campo: a correção por caminho troca o valor de uma chave existente, e não cria vínculo onde não havia — que é exatamente o caso de um BL cujo emissor não repartiu a carga. Manda o conjunto completo, não um delta. Não marca a leitura como conferida: vincular é uma etapa, e o Confirmar continua sendo o que tira o documento da fila.

Corpo da requisição (application/json)
allocationslista de object · obrigatório
A lista COMPLETA de vínculos que passa a valer. Lista vazia desfaz todos os vínculos.
reviewed_bystring
Quem respondeu pelo vínculo, quando vem por chave de API. Ignorado no portal.
Parâmetros
jobIdpath · obrigatório
O job_id da leitura.
Resposta
schema_versionstring
Versão do formato desta resposta.
job_idstring
Identificador desta leitura.
document_hashobject · pode vir null
Identificador do conteúdo do arquivo lido.
statusstring
Situação: queued, processing, completed, review_required, reviewed ou failed. review_required não é erro: vem com HTTP 200 e o JSON completo.
dataobject · pode vir null
Dados extraídos do documento, no formato de Docs/extracao-bl.md §4. null enquanto a leitura não terminou.
error_codeobject · pode vir null
Código do erro quando a leitura falhou: not_a_bill_of_lading, multiple_bls_detected, unreadable. null quando não falhou.
billed_amountobject · pode vir null
Valor em reais debitado por esta leitura, com quatro casas decimais. null enquanto a leitura não terminou. A chave não aparece quando quem consulta não tem permissão para ver valores.
corrected_fieldslista de string
Caminhos dos campos que uma pessoa corrigiu na conferência, como containers.0.container_number. O valor destes campos veio de gente, não do modelo. Vem vazio enquanto ninguém corrigiu nada.
reviewobject
Por que esta leitura foi ou não para a fila de conferência: a nota, o limiar da conta e os problemas encontrados.
file_urlstring
Endereço para baixar o arquivo original enviado.
get /v1/ebl/documents/{jobId}/history

Histórico de alterações de uma leitura

A linha do tempo do documento: a leitura da máquina e cada correção humana depois dela, com valor anterior, valor novo, autor e momento. Como não existe desfazer, é aqui que se reconstrói qualquer estado anterior. Somente leitura, e não é cobrado.

Parâmetros
jobIdpath · obrigatório
O job_id da leitura.
Resposta
schema_versionstring
Versão do formato desta resposta.
job_idstring
Identificador da leitura consultada.
historylista de object
A linha do tempo do documento, do evento mais antigo para o mais novo.
get /v1/ebl/documents/{jobId}/file

Baixa o arquivo original

Devolve o arquivo exatamente como foi enviado. Ele não expira.

Parâmetros
jobIdpath · obrigatório
O job_id devolvido no envio.
get /v1/ebl/webhooks

Lista as entregas do cliente

Sem filtro, devolve as que ainda não chegaram: failed e exhausted. Use status=delivered para as concluídas, status=pending para as que estão na fila, status=all para todas.

Parâmetros
statusquery
failed e exhausted quando omitido. Aceita delivered, pending ou all.
paginaquery
Página da listagem, começando em 1.
limitequery
Quantas entregas por página, de 1 a 200. O padrão é 10.
Resposta
itemslista de object
As entregas desta página, da mais recente para a mais antiga.
totalnumber
Quantas entregas existem no filtro inteiro, contando todas as páginas.
paginanumber
Página devolvida, começando em 1.
limitenumber
Quantas entregas cabem por página. O padrão é 10 e o máximo é 200.
post /v1/ebl/webhooks/resend-all

Devolve todas as entregas esgotadas para a fila

Devolve para a fila todas as entregas que esgotaram as tentativas. Elas saem aos poucos, e não todas de uma vez, para não sobrecarregar o seu servidor. Reenvio não é cobrado.

Resposta
reenfileiradasnumber
Quantas entregas voltaram para a fila. Elas ainda não foram entregues: saem aos poucos.
post /v1/ebl/webhooks/{jobId}/resend

Reenvia uma entrega agora

Faz uma tentativa agora, sem reiniciar a escala automática. Reenvio não é cobrado.

Parâmetros
jobIdpath · obrigatório
O job_id da entrega a reenviar.
Resposta
entregueboolean
true quando o seu servidor respondeu 2xx nesta tentativa.
erroobject · pode vir null
Motivo da falha, em texto legível. null quando entregou.