Pular para o conteúdo principal

Codigos de Erro

Toda resposta de erro usa o envelope detail; o conteúdo pode ser uma string (código do erro) ou um objeto estruturado com code e message:

{"detail": "codigo_do_erro"}

HTTP Status Codes​

StatusUso
200Sucesso
201Recurso criado
202Aceito (processamento assincrono)
204Sucesso sem body (delete)
401Nao autenticado
403Autenticado, mas sem permissao: scope insuficiente ou limite de policy (ver Scopes e Limites e Taxas)
404Recurso nao encontrado
409Conflito de estado
422Validacao falhou
423Conta bloqueada
429Rate limit excedido
502Falha no provedor externo de assinatura (so nas rotas de contrato)
503Servico indisponivel

Cada operacao declara no openapi.json exatamente quais destes status ela pode devolver, com a lista de codigos possiveis na descricao da resposta — prefira o contrato a esta pagina quando quiser saber o que UMA rota especifica retorna.

Nao ha 400 em nenhuma rota publica: erro de corpo/parametro sai sempre como 422.

502 e 503 sao coisas diferentes e nao se substituem: 503 e uma dependencia NOSSA indisponivel; 502 e o provedor externo de assinatura que falhou ou nao respondeu, e so aparece nas rotas de contrato (/v1/operations/{id}/contract/* — ver Assinatura embedded). Os dois sao re-tentaveis com backoff.

Formatos de validacao (422)​

Algumas validacoes manuais da regra de negocio retornam detail como string:

{
"detail": "some_stock_items_not_found"
}

Falhas de schema (campo ausente, tipo errado, valor fora de faixa, JSON malformado) retornam detail como objeto, no mesmo envelope aninhado dos demais erros estruturados da API — code + message + chaves especificas. Aqui o code e sempre validation_error e o detalhe por campo vem em errors:

{
"detail": {
"code": "validation_error",
"message": "Request validation failed for body.fees.floating_days: Input should be greater than or equal to 0",
"errors": [
{
"loc": ["body", "fees", "floating_days"],
"msg": "Input should be greater than or equal to 0",
"type": "greater_than_equal"
}
]
}
}

Cada item de errors traz obrigatoriamente loc (caminho do campo), msg (mensagem) e type (tipo da falha) — os mesmos campos de antes, agora sob detail.errors. O Pydantic pode acrescentar input (valor recebido) e ctx (parametros da regra); trate-os como opcionais.

Rotas de autenticacao: input vem redigido

Nas rotas sob /v1/auth/ (POST /v1/auth/token, POST /v1/auth/login) o corpo carrega credencial — e num erro de campo ausente o input traria o corpo inteiro, com client_secret / password. Nessas rotas, e so nelas, o valor de input e substituido por "[REDACTED]":

{
"detail": {
"code": "validation_error",
"message": "Request validation failed for body.client_id: Field required",
"errors": [
{
"loc": ["body", "client_id"],
"msg": "Field required",
"type": "missing",
"input": "[REDACTED]"
}
]
}
}

O diagnostico nao muda: loc diz qual campo falhou, msg e type dizem por que, e o ctx de restricao (min_length, max_length) continua vindo. Some so o valor. Nas demais rotas o input segue ecoando o valor recebido, para depuracao.

Mudanca de formato

Ate a versao anterior, falhas de schema devolviam detail como lista crua ({"detail": [{"loc": ..., "msg": ..., "type": ...}]}). O conteudo e o mesmo — mudou so o envelope: detail virou objeto e a lista passou para detail.errors.

Se voce le os erros por campo direto de detail, ajuste para detail.errors. Os SDKs oficiais (Node e Python) ja aceitam os dois formatos: continue usando err.fieldErrors / err.errors.

Ao tratar 422, o detail pode assumir tres formas — e o schema HTTPValidationError do OpenAPI declara as tres:

FormaQuandoComo identificar
Objeto com code: "validation_error" + errorsFalha de schemadetail.code === "validation_error"
Objeto com code + message, sem errorsRegra de negocio estruturada (limite, CET, scopes, idempotencia)detail.code presente e detail.errors ausente
StringRegra de negocio legadatypeof detail === "string"

Apenas a primeira forma foi unificada nesta versao; as outras duas seguem em formato livre. Os objetos de limite, CET e scopes aparecem nas secoes abaixo.

O loc de validation_error aponta o nome DEPRECADO do campo

Vale tambem para a primeira forma: o loc de cada item de detail.errors traz o nome deprecado, mesmo quando o seu payload usou so o canonico — porque quem esta na lista required do contrato ainda e o nome antigo. Ex.: omitir requested_net_future_value num POST /v1/stock/simulate-anticipation devolve

{"detail": {"code": "validation_error", "errors": [
{"loc": ["requested_advance_value"], "type": "missing"}
]}}

— e nao loc: ["requested_net_future_value"]. Se voce mapeia loc para os campos do seu formulario, mapeie a partir do nome deprecado (ou normalize pelo de-para de Valores do Recebivel).

Vocabulario publico (*_future_value / *_present_value)​

Cada valor monetario da API tem dois nomes aceitos: o canonico (net_future_value, gross_future_value, requested_net_future_value, ...) e o deprecado (net_face_value, gross_face_value, requested_advance_value, ...) — mesmo numero, mesma semantica. Os quatro codigos abaixo existem para que a convivencia nunca seja resolvida em silencio: nenhum deles escolhe um valor por voce, todos recusam o pedido inteiro antes de qualquer efeito.

CodigoHTTPDescricao
VOCABULARY_CONFLICT422O nome canonico e o deprecado do MESMO valor vieram no payload com numeros diferentes. Sao sinonimos: envie um dos dois, ou os dois com o mesmo valor ("10000" e 10000.00 sao o mesmo numero). detail.fields lista cada par em conflito com public_field, public_value, deprecated_field e deprecated_value. Enviar so um dos nomes, ou null no que voce nao usa, nunca gera este erro
DEDUCTIONS_REQUIRED_WITH_GROSS422gross_future_value foi usado sem gross_future_value_deductions no mesmo payload. Usar o nome canonico do BRUTO obriga a declarar a diferenca para o net_future_value — envie 0 se nao houver deducoes. O nome deprecado gross_face_value segue aceito sozinho, exatamente como antes. detail.fields nomeia os dois campos
VALUE_DECOMPOSITION_MISMATCH422Vieram os tres valores e a conta nao fecha: net_future_value tem que ser EXATAMENTE gross_future_value menos gross_future_value_deductions, sem tolerancia de centavo (os tres sao declarados por voce). detail traz os tres valores recebidos mais expected_net_future_value
REQUESTED_VALUE_AMBIGUOUS422requested_net_future_value_percent veio junto do valor ABSOLUTO solicitado (requested_net_future_value ou requested_advance_value). Os dois sao mutuamente exclusivos: informe o percentual do NFV ou o valor em BRL. detail.fields lista os campos envolvidos. So existe em POST /v1/simulate e POST /v1/operations/direct — as portas de /v1/stock/* antecipam sempre 100% dos itens e nao aceitam percentual
Dentro do detail de um erro, os campos usam os nomes DEPRECADOS

O espelhamento canonico vale para os requests e para as respostas de sucesso. O corpo de um erro nao entra nessa regra: as chaves e as mensagens dos detail das secoes abaixo citam net_face_value, gross_face_value, requested_advance_value, discount_brl e total_net_face_value, e nao trazem a versao canonica ao lado — mesmo quando voce enviou o payload no vocabulario canonico.

Na pratica: ao ler um erro, procure detail.net_face_value, nao detail.net_future_value (que nao existe). A excecao sao os quatro codigos desta secao, que nasceram no vocabulario novo e nomeiam os campos canonicos em detail.fields. Todos os exemplos de detail nesta pagina estao no vocabulario que a API realmente emite.

Onde cada um pode ocorrer esta declarado na propria operacao, em "Codigos possiveis nesta operacao" (openapi.json): VOCABULARY_CONFLICT nas seis portas que aceitam o vocabulario novo; DEDUCTIONS_REQUIRED_WITH_GROSS e VALUE_DECOMPOSITION_MISMATCH nas que aceitam gross_future_value_deductions (POST /v1/stock, PATCH /v1/stock/{item_id}, POST /v1/simulate, POST /v1/operations/direct); REQUESTED_VALUE_AMBIGUOUS nas duas que aceitam o percentual.

Exemplo de VOCABULARY_CONFLICT:

{
"detail": {
"code": "VOCABULARY_CONFLICT",
"message": "O mesmo valor foi informado nos dois vocabularios com numeros DIFERENTES. Os nomes novo e deprecado sao sinonimos exatos: envie apenas um deles, ou os dois com o MESMO valor. O pedido foi recusado sem efeito colateral — nada e escolhido em silencio.",
"fields": [
{
"public_field": "net_future_value",
"public_value": "1000000.00",
"deprecated_field": "net_face_value",
"deprecated_value": "100.00"
}
]
}
}

Auth​

CodigoHTTPDescricao
not_authenticated401Nenhuma credencial enviada
invalid_credentials401Email/senha incorretos — inclui a conta bloqueada quando a senha não é provada. E-mail inexistente, senha errada e conta bloqueada com senha errada devolvem o mesmo status e o mesmo corpo (ver Protecao contra brute force)
invalid_client_credentials401Credencial de API invalida, revogada ou expirada — nao so no token exchange: sai tambem em qualquer rota autenticada por Bearer (a credencial por tras do token e relida a cada request) e no caminho legado por X-Client-Id/X-Client-Secret
token_expired401JWT expirado
invalid_token401JWT malformado
user_locked423Senha correta e conta bloqueada (30 min apos 5 falhas). Com senha errada a resposta e 401 invalid_credentials. Passados os 30 min o desbloqueio e automatico e o contador zera
invalid_client_credentials num endpoint de negocio

Receber este codigo fora do POST /v1/auth/token significa que a credencial que emitiu o token deixou de valer (revogacao ou expiracao) — a revogacao e imediata, nao espera o token expirar. Renovar o token nao resolve: o proprio token exchange vai recusar. Emita uma credencial nova. Ver Autenticacao.

Scopes​

Os endpoints da API exigem scopes granulares no token — veja a tabela completa de scopes. Os erros de scope retornam um objeto estruturado em detail (em vez do formato simples {"detail": "codigo"}):

CodigoHTTPQuandoCampos em detail
scope_not_allowed403POST /v1/auth/token pedindo scope fora do permitido para a credencialcode, message, allowed_scopes
scope_insufficient403Endpoint chamado sem o scope exigido no tokencode, required, granted, message

Exemplo (scope_insufficient):

{
"detail": {
"code": "scope_insufficient",
"required": "operation:create",
"granted": ["operation:read", "simulation:create"],
"message": "Token lacks required scope: operation:create"
}
}

Estoque​

CodigoHTTPDescricao
stock_item_not_found404Item nao encontrado
stock_item_not_in_stock409Item nao esta IN_STOCK
stock_item_cannot_be_cancelled409Item nao pode ser cancelado
some_stock_items_not_found422Alguns IDs nao existem
stock_item_{id}_not_available409Item especifico nao disponivel
STOCK_REQUESTED_VALUE_MISMATCH422requested_advance_value diferente da soma dos net_face_value dos itens em stock_item_ids — veja abaixo
STOCK_ITEM_NFV_NOT_POSITIVE422Algum item de stock_item_ids tem net_face_value menor ou igual a zero e nao e antecipavel (o NFV e a base do desagio). detail.items lista stock_item_id, external_id e o valor de cada item recusado; corrija com PATCH /v1/stock/{item_id} ou tire o item do lote
STOCK_ITEM_NFV_ABOVE_GROSS422Item com net_face_value maior que gross_face_value. O NFV e o valor de face BRUTO menos os descontos ja aplicados ao lastro, entao nunca o supera. Vale em PATCH /v1/stock/{item_id} (avaliado contra os valores RESULTANTES — o campo enviado cruzado com o que ja esta gravado) e nas 2 rotas de antecipacao, que rejeitam item JA GRAVADO nesse estado (detail.items nomeia cada um). Em POST /v1/stock o mesmo invariante e falha de schema (validation_error)
STOCK_ITEM_DISCOUNT_EXCEEDS_BASE422O desagio calculado para algum item ficou maior ou igual ao seu net_face_value — a antecipacao teria valor liquido zero ou negativo. Emitido por POST /v1/stock/request-anticipation e POST /v1/stock/simulate-anticipation (mesmo veredito nas duas). Acontece tipicamente com fixed_discount_brl (desconto NOMINAL, que nao escala com o valor do item) sobre item pequeno, ou com fees.total_liquid_value_brl proximo de zero. detail.items nomeia cada item recusado com stock_item_id, external_id, net_face_value (a base) e discount_brl (o desagio calculado)

STOCK_REQUESTED_VALUE_MISMATCH retorna um objeto estruturado em detail. O fluxo de estoque antecipa sempre 100% dos itens selecionados, entao requested_advance_value so pode confirmar o total do lastro; pedir uma fracao (ou mais que o total) e recusado em vez de ser ignorado. Para antecipacao parcial, use POST /v1/operations/direct.

{
"detail": {
"code": "STOCK_REQUESTED_VALUE_MISMATCH",
"message": "requested_advance_value deve ser igual a soma do net_face_value (Net Face Value) dos itens em stock_item_ids: o fluxo de estoque antecipa 100% dos itens selecionados e nao implementa antecipacao parcial. Para antecipar uma fracao do NFV use POST /v1/operations/direct.",
"requested_advance_value": "6000.00",
"total_net_face_value": "10000.00",
"stock_item_count": 1
}
}

Vale nas duas portas do estoque (POST /v1/stock/request-anticipation e POST /v1/stock/simulate-anticipation), com o mesmo veredito: o que a simulacao recusa, o create tambem recusa.

Simulacao e criacao direta​

Estas duas portas (POST /v1/simulate e POST /v1/operations/direct) compartilham tres validacoes de valor por recebivel — para elas, o MESMO payload recebe o MESMO 422 com o MESMO detail nas duas, e a simulacao nao cota o que o create recusa:

  1. teto requested_advance_value <= net_face_value;
  2. fees.total_liquid_value_brl acima do face total da operacao;
  3. desagio maior ou igual a base do recebivel (RECEIVABLE_DISCOUNT_EXCEEDS_BASE).

A simulacao nao e um espelho completo do create — fora dessas tres, as portas divergem por design:

  • Faixa de taxa da policy (CET): no create e enforcement (422 CET_OUT_OF_BOUNDS); na simulacao e consultivo — ela responde 200 com os numeros, e o /v1/portal/simulate ainda devolve o bloco policy_verdict para o wizard decidir. Deliberado: o objetivo e mostrar o preco fora da faixa, nao esconde-lo.
  • Cardinalidade do lote: too_many_receivables_max_<N> existe so no create (o limite vem do numero de linhas que o contrato assinado comporta, que a simulacao nao gera). Um lote acima do limite simula normalmente e so e recusado na criacao.
  • Limites agregados de exposicao, gates de estoque e exclusao mutua de fees: enforcement apenas no create.
CodigoHTTPDescricao
originator_policy_not_configured422Originador sem policy de taxas
(string) total_liquid_value_brl exceeds total face value422fees.total_liquid_value_brl acima da soma dos requested_advance_value — o desagio resultante seria NEGATIVO. detail e uma string (shape legado, preservado)
(string) Receivable <external_id>: requested_advance_value (...) cannot exceed net_face_value (...)422Teto do antecipavel: nao se antecipa mais que o net_face_value (NFV) do recebivel. detail e uma string (shape legado, preservado). Reporta o PRIMEIRO recebivel ofensor na ordem do payload
RECEIVABLE_DISCOUNT_EXCEEDS_BASE422O desagio calculado para algum recebivel ficou maior ou igual ao seu requested_advance_value — a antecipacao teria valor liquido zero ou negativo. Acontece tipicamente com fixed_discount_brl (desconto NOMINAL, que nao escala com o valor do recebivel) ou com fees.total_liquid_value_brl proximo de zero. detail.receivables nomeia cada ofensor com external_id, requested_advance_value (a base) e discounted_value (o desagio calculado). Avaliado DEPOIS da redistribuicao do alvo liquido

Operacoes​

CodigoHTTPDescricao
operation_not_found404Operacao nao existe
operation_cannot_be_cancelled409Operacao ja em andamento
operation_cannot_be_approved409Status nao permite aprovacao
operation_cannot_be_denied409Status nao permite negacao

Contrato e assinatura​

Rotas /v1/operations/{id}/contract/* — ver Assinatura embedded.

CodigoHTTPDescricao
operation_not_in_signable_state409O estado da operacao nao permite disparar o contrato. Voce so dispara em PRE_APPROVED, APPROVED_DIRECT ou CONTRACT_ERROR (re-disparo apos falha) — em WAITING_APPROVAL, espere a aprovacao
contract_already_exists409O contrato ja foi despachado (em geral pelo envio automatico). Nao e falha: leia as URLs em GET /v1/operations/{id}/contract/signers
contract_not_found404A operacao nao tem contrato ativo (ainda nao foi despachado, ou a operacao e de outro originador)
contract_not_dispatched409Ha registro do contrato, mas o documento ainda nao existe no provedor. Estado TRANSITORIO da janela de despacho — re-tente com backoff
zapsign_unavailable502O provedor de assinatura falhou ou nao respondeu ao consultar os signatarios. Re-tentavel

O disparo (POST .../send-for-signature) tambem pode devolver 502 com zapsign_create_failed, zapsign_add_signer_failed, zapsign_update_signer_failed ou zapsign_template_inventory_failed. Em todos eles nenhum documento parcial fica vivo: o despacho e contido (o documento e removido no provedor) e a operacao fica CONTRACT_ERROR, re-disparavel pela mesma rota.

Limites e Taxas​

Erros de limite/CET retornam um objeto estruturado em detail (em vez do formato simples {"detail": "codigo"}).

Os codigos desta secao se dividem em duas familias, e a diferenca muda o que voce faz com a resposta:

FamiliaO que aconteceuO que resolve
VALOR (LIMIT_MAX_OPERATION_VALUE, LIMIT_MIN_OPERATION_VALUE, LIMIT_AGGREGATE_EXPOSURE)a operacao existe e nao cabe: o numero pedido esta fora do permitido, ou a exposicao em aberto do recorte estouroumudar o numero (ou esperar a liquidacao, no caso do agregado)
CONFIGURACAO (LIMIT_CONFIG_MISSING, LIMIT_ENTITY_CONFIG_MISSING)falta limite configurado na policy — nao ha o que compararacao humana no Backoffice; re-tentar sem configurar da o mesmo 403

As duas familias tem detail.code e detail.message; os outros campos diferem, e por isso vem um exemplo de cada abaixo. Quando os dois defeitos coexistem, o de configuracao e reportado primeiro (ele nao depende do numero da operacao).

Familia VALOR​

{
"detail": {
"code": "LIMIT_MAX_OPERATION_VALUE",
"source": "assignor",
"max_allowed_brl": "50000.00",
"requested_brl": "75000.00",
"message": "Valor da operacao R$75000.00 excede o limite (assignor) R$50000.00"
}
}

O LIMIT_AGGREGATE_EXPOSURE e da mesma familia, com os campos do recorte que estourou (source, scope, limit_brl, limit_origin, open_exposure_brl, requested_brl):

{
"detail": {
"code": "LIMIT_AGGREGATE_EXPOSURE",
"source": "assignor",
"scope": "assignor:3f2a1c88-...",
"limit_brl": "200000.00",
"limit_origin": "entity_override",
"open_exposure_brl": "190000.00",
"requested_brl": "30000.00",
"message": "Exposicao em aberto do recorte assignor:3f2a1c88-... (R$190000.00) somada a operacao (R$30000.00) excede o limite do recorte R$200000.00 (assignor)"
}
}

limit_origin — de onde veio o teto que travou​

source diz qual recorte travou; limit_origin diz de onde saiu o numero. Os dois juntos sao o que distingue "voce estourou um teto" de "este ente esta bloqueado", que sao situacoes com remediacoes opostas:

limit_originSignificadoO que fazer
configuredO numero veio do default da policy para aquele lado (entity_default_limit_brl / payer_default_limit_brl).Operar dentro do teto, ou pedir aumento do default no Backoffice.
entity_overrideO numero veio do limite proprio daquele ente, no vinculo. Manda sempre — maior ou menor que o default, inclusive 0.Ajustar o limite individual do ente no Backoffice.
anchored_side_closedNao ha numero configurado. A policy ancora o risco naquele lado e ninguem definiu o default do lado, entao o ente entra travado (limit_brl: "0").Definir o default do lado, ou dar limite proprio ao ente.
side_default_zeroO default daquele lado foi configurado como 0 — bloqueio deliberado (limit_brl: "0").Se a trava foi intencional, dar limite proprio apenas aos entes que devem operar (allowlist).
Ancoragem de risco: ausencia significa coisas opostas em cada lado

Numa policy sem ancoragem (o default de hoje), ausencia de teto num ente significa "sem limite por aqui".

Numa policy com ancoragem, isso vale so para o lado nao ancorado — e o que estiver configurado nele continua valendo. No lado ancorado, ausencia significa bloqueio: o ente entra com limit_brl: "0" e nada passa por ele (limit_origin diz se foi anchored_side_closed ou side_default_zero).

E assim que se escreve uma allowlist: default do lado ancorado em 0 ou ausente, e limite proprio apenas nos entes que devem operar.

Familia CONFIGURACAO​

Estes NAO tem source nem max_allowed_brl

Nao ha limite para citar — e disso que eles falam. Um cliente que le detail.source sem checar o code primeiro quebra aqui.

LIMIT_ENTITY_CONFIG_MISSING — a policy tem limite agregado, mas nenhum por ente (cedente ou sacado) valendo para esta operacao:

{
"detail": {
"code": "LIMIT_ENTITY_CONFIG_MISSING",
"configured_levels": ["policy_total"],
"entity_levels_required": ["assignor", "payer", "policy_entity_default", "policy_payer_default"],
"message": "Nenhum limite POR ENTE (cedente ou sacado) vale para esta operacao: o teto da tese inteira (policy-total) e o teto por operacao controlam o agregado, mas nao substituem o limite do ente. Configure o limite individual do cedente ou do sacado (ou o default por cedente da policy) no Backoffice — e, sob ancoragem de risco, no lado em que o risco esta ancorado."
}
}

configured_levels diz quais recortes de limite chegaram a esta operacao; entity_levels_required, quais deles satisfazem a regra — um basta, seja o limite proprio do cedente ou de um sacado, seja o default por lado da policy.

Este codigo NAO tem variante "por ancoragem"

Sob ancoragem de risco o lado ancorado sempre entra na conta com um numero — o teto configurado, ou 0 quando nao ha teto (ver limit_origin acima). Como sempre existe recorte por ente, este codigo nao aparece nesse caminho: a recusa vem como LIMIT_AGGREGATE_EXPOSURE com limit_brl: "0", que e uma recusa de limite e nao de configuracao.

Versoes anteriores desta pagina descreviam aqui um detail com missing_entity_scopes listando os entes descobertos do lado ancorado. Esse campo nao existe mais e aquela resposta nao e mais produzida.

LIMIT_CONFIG_MISSING e o caso extremo da mesma familia: nenhum limite agregado configurado (nem a tese). Mesmo formato, sem os campos de recorte.

Tabela​

CodigoHTTPFamiliaDescricao
LIMIT_MAX_OPERATION_VALUE403valorValor da operacao acima do maximo permitido (cedente, sacado ou originador). source indica a camada mais restritiva
LIMIT_MIN_OPERATION_VALUE403valorValor da operacao abaixo do minimo exigido por alguma camada
LIMIT_AGGREGATE_EXPOSURE403valorExposicao em aberto do recorte, somada a esta operacao, excede o limite daquele recorte. scope diz QUAL recorte e limit_origin DE ONDE veio o teto. Com limit_brl: "0" significa ente travado (lado ancorado sem teto)
LIMIT_CONFIG_MISSING403configuracaoNenhum limite agregado configurado na policy — nada a comparar (fail-closed)
LIMIT_ENTITY_CONFIG_MISSING403configuracaoHa limite agregado, mas falta limite POR ENTE valendo para a operacao. Desde a 1.4.0
CET_OUT_OF_BOUNDS422—Taxa efetiva resultante fora do intervalo [min, max] da policy do originador

Rate limit​

Ha dois limites e ambos valem (veja Rate Limits). Os dois respondem 429 com o header Retry-After e com o mesmo formato de detail — objeto com code, scope, limit_rpm, retry_after_seconds e message. O campo scope diz qual bucket negou:

CodigoHTTPQuandodetail.scope
rate_limit_exceeded429Credencial de integracao estourou o teto de requisicoes/minutotoken
rate_limit_exceeded429IP de origem estourou o teto da rotaip

Exemplo (por token — o de origem so muda scope, limit_rpm e message):

{
"detail": {
"code": "rate_limit_exceeded",
"scope": "token",
"limit_rpm": 120,
"retry_after_seconds": 60,
"message": "Token excedeu o limite de 120 requisicoes por minuto. Aguarde 60s antes de retentar."
}
}

Titulos​

CodigoHTTPDescricao
title_not_found404Titulo nao encontrado
title_balance_locked409Saldo do titulo bloqueado

Idempotencia​

CodigoHTTPDescricao
idempotency_key_reused_with_different_body409Mesma chave, body diferente

Payables​

CodigoHTTPDescricao
payable_not_found404Payable nao encontrado
payable_already_settled409Payable ja liquidado