Documentação

Erros da API

Todo erro da API v1 traz um código estável, um status HTTP e uma instrução de nova tentativa (retry); a lista de códigos é aberta, então seu código deve tratar um código desconhecido pelo status HTTP.

Como ler um erro

Todos os erros da API usam o mesmo envelope, em REST e em MCP. Os códigos são a parte estável; o texto de message está em espanhol, é para pessoas e pode mudar.

Envelope de erro
{  "ok": false,  "status": 400,  "request_id": "req_3z6y1wUd",  "error": {    "type": "invalid_request_error",    "code": "invalid_amount_format",    "message": "«abc» no es un monto válido. Usa un número positivo como texto con hasta 6 decimales, por ejemplo \"4.80\".",    "param": "amount",    "retry": "after_fixing",    "retry_after_ms": null,    "outcome_unknown": false  }}
Campo
CampoO que é
`ok`Sempre false em um erro.
`status`O status HTTP da resposta.
`request_id`Identificador da requisição; também vai no cabeçalho Request-Id.
`error.type`A família do erro (autenticação, permissão, limite de taxa, idempotência, requisição, serviço).
`error.code`O código estável.
`error.param`O campo culpado, ou null.
`error.retry`O que fazer com a mesma intenção: no, as_is ou after_fixing.
`error.retry_after_ms`Espera mínima antes de repetir, ou null.
`error.outcome_unknown`true se o pagamento pode ter sido feito mesmo que a chamada tenha falhado.

O que significa retry

  • no: Não repita a requisição: não vai funcionar sozinha.
  • as_is: Repita a MESMA requisição, com a mesma chave de idempotência, depois de Retry-After se houver.
  • after_fixing: Corrija primeiro o que dizem message e param, e então repita.

A lista de códigos é aberta

Podem aparecer códigos novos sem mudar a versão da API. Seu código não deve usar um switch fechado sobre error.code: trate um código desconhecido pelo status HTTP e por error.retry.

Tratar um código desconhecido
function handleError(status: number, error: { code: string; retry: string }) {
  switch (error.code) {
    case 'rate_limited':
      return waitAndRetrySameRequest();
    default:
      // Código nuevo o desconocido: decide por error.retry y por el estado HTTP.
      return error.retry === 'as_is' ? retrySameRequest() : showMessage();
  }
}

O que fazer com um código que você não conhece

  • 400, 404, 409, 413 e 422: não repita sozinho; mostre a mensagem ou escale para uma pessoa.
  • 401 e 403: confira a chave e as permissões.
  • 429 e 5xx: repita a mesma requisição com a mesma chave de idempotência, com espera crescente.

400 · A requisição está mal escrita

Hoje há 53 códigos, agrupados por status HTTP.

invalid_json

O corpo não é um JSON válido.

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request

invalid_request

A requisição tem um valor inválido; param diz qual.

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

missing_parameter

Falta um campo obrigatório; param diz qual.

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

unknown_parameter

Foi enviado um campo que a API não conhece (os esquemas não admitem campos extras).

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

invalid_amount_format

O valor não é um texto decimal válido (até 12 inteiros e 6 decimais, sem sinal nem notação científica).

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

amount_not_positive

O valor deve ser maior que zero.

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

unsupported_currency

A moeda não é suportada (nesta fase apenas usdc).

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

invalid_destination

O destino não é um domínio, curinga nem endereço 0x válido.

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

resource_required

Um destino que é um domínio exige resource (a URL exata que se quer comprar).

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

resource_not_allowed_for_address

Um destino que é um endereço 0x é uma transferência: não leva resource.

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

invalid_resource

resource deve ser https, sem credenciais, sem porta estranha, com até 2048 caracteres e com corpo apenas em POST.

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

resource_host_mismatch

A URL de resource deve estar no mesmo domínio que destination.

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

invalid_memo

memo deve ser texto de até 280 caracteres.

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

invalid_client_reference

client_reference deve ser texto de até 64 caracteres.

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

missing_idempotency_key

Falta o cabeçalho Idempotency-Key: é obrigatório para criar um pagamento.

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

invalid_idempotency_key

A chave de idempotência deve ter de 16 a 128 caracteres [A-Za-z0-9_-] (um UUID serve) e não ser um valor de brinquedo.

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

invalid_pagination

limit (1-50), starting_after ou ending_before inválidos.

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

invalid_filter

Um filtro da lista tem um valor inválido.

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

unsupported_version

A versão de Nouron-Version não existe. Remova o cabeçalho para usar a fixada na sua chave.

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

invalid_policy

As regras enviadas têm um valor malformado; param diz qual.

HTTP 400 · tipo invalid_request_error · retry: não · próximo: fix_request · param

401 · Não sabemos quem chama

missing_api_key

Falta o cabeçalho Authorization: Bearer <api_key>.

HTTP 401 · tipo authentication_error · retry: não · próximo: verify_key

invalid_api_key

A chave não é válida: confira se está completa, sem espaços nem quebras de linha, e se começa com np_test_ ou np_live_.

HTTP 401 · tipo authentication_error · retry: não · próximo: verify_key

api_key_revoked

A chave foi revogada. Peça uma nova ao dono em Chaves de API.

HTTP 401 · tipo authentication_error · retry: não · próximo: verify_key

api_key_expired

A chave venceu. Rotacione a chave em Chaves de API.

HTTP 401 · tipo authentication_error · retry: não · próximo: verify_key

403 · Sem permissão

permission_denied

A chave não tem permissão para esta operação.

HTTP 403 · tipo permission_error · retry: não · próximo: ask_owner_to_review

wrong_key_type

Esta operação exige outro tipo de chave (agente ou dono). A chave de dono nunca se cola em um agente.

HTTP 403 · tipo permission_error · retry: não · próximo: use_other_key_type

read_only_key

A chave é somente leitura e esta operação escreve.

HTTP 403 · tipo permission_error · retry: não · próximo: use_other_key_type

wrong_environment

O recurso ou a operação pertence ao outro ambiente (teste ou real).

HTTP 403 · tipo permission_error · retry: não · próximo: verify_key

404 · Não existe

not_found

Esse recurso não existe neste ambiente. Com uma chave real, as rotas de simulação (/v1/test/*) também não existem.

HTTP 404 · tipo invalid_request_error · retry: não · próximo: fix_request · param

409 · Conflita com o estado atual

idempotency_conflict

Você reutilizou uma chave de idempotência com uma requisição diferente; changed_fields diz o que mudou.

HTTP 409 · tipo idempotency_error · retry: não · próximo: new_attempt_needs_new_key · param

idempotency_key_in_use

Outra requisição com a mesma chave ainda está em andamento. Repita igual depois de Retry-After.

HTTP 409 · tipo idempotency_error · retry: sim · próximo: retry_same_idempotency_key · Retry-After

cancel_too_late

O pagamento já foi enviado (processing) ou liquidado: não pode ser cancelado.

HTTP 409 · tipo invalid_request_error · retry: não · próximo: check_status_later

spend_not_cancellable

O pagamento já terminou (declined, failed, expired): não há nada a cancelar.

HTTP 409 · tipo invalid_request_error · retry: não · próximo: none

policy_version_conflict

As regras mudaram desde que você as leu (expected_version não coincide). Leia-as de novo.

HTTP 409 · tipo invalid_request_error · retry: não · próximo: fix_request · param

agent_name_taken

Já existe um agente ativo com esse nome.

HTTP 409 · tipo invalid_request_error · retry: não · próximo: fix_request · param

agent_not_archivable

O agente tem pagamentos retidos ou em andamento: espere que sejam liquidados, vençam ou sejam cancelados.

HTTP 409 · tipo invalid_request_error · retry: não · próximo: check_status_later

413 · Corpo grande demais

payload_too_large

O corpo excede o máximo (16 KiB).

HTTP 413 · tipo invalid_request_error · retry: não · próximo: fix_request

422 · Uma regra do produto não a aceita

agent_limit_reached

Foi atingido o máximo de agentes ativos (5 em teste, 10 em real).

HTTP 422 · tipo invalid_request_error · retry: não · próximo: ask_owner_to_review

key_limit_reached

Um agente admite no máximo 3 chaves ativas. Revogue uma ou rotacione.

HTTP 422 · tipo invalid_request_error · retry: não · próximo: ask_owner_to_review

quota_exceeded

Foi atingido um teto de uso do ambiente de teste (pagamentos por dono, agentes arquivados...). Reinicie o ambiente ou peça uma revisão.

HTTP 422 · tipo invalid_request_error · retry: não · próximo: ask_owner_to_review

destination_wildcard_not_allowed

Não se permitem curingas sobre sufixos públicos compartilhados (*.vercel.app, *.github.io...) porque autorizam terceiros.

HTTP 422 · tipo invalid_request_error · retry: não · próximo: fix_request · param

destination_blocked

O destino está na lista global de bloqueio da Nouron e não pode ser permitido.

HTTP 422 · tipo invalid_request_error · retry: não · próximo: fix_request · param

policy_inconsistent

As regras se contradizem (por exemplo, o teto por pagamento supera o diário).

HTTP 422 · tipo invalid_request_error · retry: não · próximo: fix_request · param

agent_archived

O agente está arquivado e não admite esta operação.

HTTP 422 · tipo invalid_request_error · retry: não · próximo: ask_owner_to_review

capability_unavailable

A função não está disponível para o país ou o tipo de titular, ou ainda não existe. Definido no contrato; ainda não é devolvido.

HTTP 422 · tipo invalid_request_error · retry: não · próximo: not_available_in_country · reservado

verification_required

A operação exige um nível de verificação que o titular ainda não tem; o dono o completa no console. Definido no contrato; ainda não é devolvido.

HTTP 422 · tipo invalid_request_error · retry: não · próximo: complete_verification · reservado

account_on_hold

Não é possível concluir a operação agora; escreva ao suporte com o Request-Id. Mesmo texto, forma e tempo seja qual for a causa. Definido no contrato; ainda não é devolvido.

HTTP 422 · tipo invalid_request_error · retry: não · próximo: contact_support · reservado

429 · Rápido demais

rate_limited

Muitas requisições. Espere Retry-After e tente de novo com recuo exponencial e um pouco de aleatoriedade.

HTTP 429 · tipo rate_limit_error · retry: sim · próximo: retry_later · Retry-After

agent_busy

Este agente já tem um pagamento em decisão; tente de novo igual depois de Retry-After.

HTTP 429 · tipo rate_limit_error · retry: sim · próximo: retry_same_idempotency_key · Retry-After

500 · Falha da Nouron

internal_error

Falha nossa. Tente de novo com a mesma chave de idempotência; se persistir, escreva ao suporte com o Request-Id.

HTTP 500 · tipo api_error · retry: sim · próximo: retry_same_idempotency_key

503 · Serviço indisponível

service_unavailable

Serviço indisponível por um momento. Tente de novo com a mesma chave depois de Retry-After.

HTTP 503 · tipo api_error · retry: sim · próximo: retry_same_idempotency_key · Retry-After

platform_paused

A Nouron pausou a plataforma por segurança. Os pagamentos são recusados até que seja retomada.

HTTP 503 · tipo api_error · retry: sim · próximo: contact_support · Retry-After

partner_unavailable

Um serviço externo (parceiro) não responde. Tente de novo depois de Retry-After. Definido no contrato; ainda não é devolvido.

HTTP 503 · tipo api_error · retry: sim · próximo: retry_later · Retry-After · reservado