Um único formato em todas as rotas: type, code, message, param, doc_url, request_id e errors.
← Voltar à documentação da API
A primeira fatura em 6 passos
- Todos os 4xx e 5xx devolvem { "error": { type, code, message, param?, doc_url, request_id, errors? } }.
- Decida o fluxo com base em type para saber se faz sentido tentar de novo, e mapeie code no seu próprio sistema.
- param aponta para o campo em causa, p. ex. lines.0.vat_rate; errors[] aparece quando há vários.
- Registe request_id em cada erro — permite-nos encontrar o pedido exato nos nossos logs.
O que é a API 4invoices
json
{
"error": {
"type": "invalid_request_error",
"code": "validation_failed",
"message": "Datele trimise nu sunt valide.",
"param": "lines.0.vat_rate",
"doc_url": "https://4invoices.net/ro/api-dezvoltatori#errors",
"request_id": "req_8a893f2f33d4472da8d6e144",
"errors": [
{ "param": "lines.0.vat_rate", "message": "VAT rate must be a percent (21), not a fraction", "type": "value_error" }
]
}
}https://api.4invoices.net/v1 · https://api.4invoices.net/v1/openapi.json
Erros
| Estado | Tipo | Código |
|---|---|---|
| 401 | authentication_error | missing_bearer_token |
| 401 | authentication_error | unauthorized |
| 403 | permission_error | forbidden |
| 404 | not_found_error | not_found |
| 409 | conflict_error | idempotency_key_reuse |
| 409 | conflict_error | idempotency_in_progress |
| 422 | invalid_request_error | validation_failed |
| 422 | invalid_request_error | invalid_json_number |
| 502 | upstream_error | upstream_error |
| 503 | service_unavailable_error | service_unavailable |
Erros frequentes
- rate_limit_error e os dois tipos upstream podem ser repetidos. authentication_error, permission_error e invalid_request_error não se resolvem com novas tentativas.
- Também é devolvido um 404 para um id que pertence a outro tenant: nunca confirmamos a existência de dados de terceiros.
- 409 idempotency_key_reuse significa que reutilizou uma chave com um corpo diferente. Não force: verifique o que já foi emitido.
- O doc_url de cada erro aponta diretamente para a secção de erros desta documentação.
- As mensagens estão em romeno porque a API serve um fluxo fiscal romeno; não faça parsing de message, decida com base em code.
Perguntas e respostas para desenvolvedores
Posso confiar nos valores de code entre versões?
Sim, code é estável e existe precisamente para isso. message é texto para humanos e pode ser reformulado.
O que devo fazer perante um 502 ou um 503?
Tente de novo com backoff exponencial. São erros upstream ou de indisponibilidade temporária, não problemas no seu pedido.
Porquê 422 e não 400 para dados inválidos?
422 assinala um JSON bem formado mas semanticamente inválido — por exemplo, vat_rate como fração. 400 está reservado a um pedido mal formado.