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.
{ "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 | O 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 deRetry-Afterse houver.after_fixing: Corrija primeiro o que dizemmessageeparam, 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.
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