Códigos de erro
Um único envelope para todas as falhas:
{ "error": { "code": "invalid_request", "message": "…" } }
| HTTP | code |
Quando | O que fazer |
|---|---|---|---|
| 401 | missing_api_key |
Sem cabeçalho Authorization: Bearer sk_… nem X-API-Key |
Acrescente a chave |
| 401 | invalid_api_key |
Chave revogada, desconhecida ou conta inactiva | Verifique a chave e o estado da conta |
| 403 | insufficient_scope |
A chave não tem esse direito (pagar, por exemplo) | Emita uma chave com o âmbito certo |
| 403 | client_inactive |
A conta não está validada, ou está suspensa | Termine o processo KYB |
| 403 | not_live |
Conta ainda não aberta ao modo real | Use uma chave sk_test_ entretanto |
| 404 | not_found |
Recurso inexistente — ou não seu | Verifique o identificador |
| 409 | already_exists |
Duplicado (referência já usada) | Releia o recurso existente |
| 409 | precondition_failed |
O estado não permite a operação | Consulte o recurso, corrija o encadeamento |
| 409 | concurrent_request |
Mesmo Idempotency-Key, corpo diferente |
Não reutilize uma chave para duas operações |
| 422 | invalid_request |
Corpo inválido (campo, montante, activo) | A message nomeia o campo em falta |
| 422 | insufficient_funds |
Saldo insuficiente para este pagamento | Consulte GET /v1/balances |
| 429 | — | 300 pedidos/minuto ultrapassados | Respeite o cabeçalho Retry-After |
| 502 | upstream_error |
Uma dependência falhou | Reenvie com o mesmo Idempotency-Key |
| 503 | temporarily_unavailable |
Indisponibilidade passageira | Reenvie com backoff |
Reenviar sem risco
Os 502 e 503 reenviam-se sempre com o mesmo Idempotency-Key: se o primeiro pedido tinha
chegado a bom porto do lado do servidor, recupera o seu resultado em vez de criar um duplicado.
Um
502não quer dizer que nada aconteceu. Diz que uma dependência não respondeu, não que a operação não exista. É exactamente a situação para a qual existe a idempotência: reenvie, não volte a criar.
not_found sobre um recurso que existe
A API responde 404 também quando o recurso pertence a outro comerciante: nunca deduza a existência
de um recurso a partir de um 404.
Um corpo recusado não é um campo ignorado
Um campo desconhecido num corpo JSON é ignorado em silêncio, não recusado. Um erro de escrita no
nome de um campo opcional não produz portanto qualquer erro: produz uma operação criada sem aquilo
que julgava ter enviado. Releia os nomes na referência em vez de confiar na
ausência de um 422.