Jednotný tvar na každé trase: type, code, message, param, doc_url, request_id a errors.
První faktura v 6 krocích
- Každá odpověď 4xx a 5xx vrací { "error": { type, code, message, param?, doc_url, request_id, errors? } }.
- Podle type se rozhodněte, zda má smysl opakování, a code mapujte do svého systému.
- param ukazuje na chybné pole, např. lines.0.vat_rate; errors[] se objeví, když jich je více.
- Zaznamenávejte request_id u každé chyby — umožní nám najít přesný požadavek v našich logách.
Co je 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
Chyby
| Stav | Typ | Kód |
|---|---|---|
| 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 |
Časté chyby
- rate_limit_error a dva upstream typy lze opakovat. authentication_error, permission_error a invalid_request_error se opakováním neopraví.
- 404 se vrací i pro identifikátor patřící jinému tenantovi: nikdy nepotvrzujeme, že data někoho jiného existují.
- 409 idempotency_key_reuse znamená, že jste klíč použili s jiným tělem. Nevynucujte to: zkontrolujte, co už bylo vystaveno.
- doc_url v každé chybě odkazuje přímo na sekci chyb této dokumentace.
- Zprávy jsou v rumunštině, protože API obsluhuje rumunský fiskální tok; nerozebírejte message, větvěte se podle code.
Otázky a odpovědi pro vývojáře
Mohu se spolehnout na hodnoty code napříč verzemi?
Ano, code je stabilní a existuje právě proto. message je lidský text a může být přeformulován.
Co mám dělat při 502 nebo 503?
Opakujte s exponenciálním backoff. Jde o chyby upstreamu nebo dočasné dostupnosti, ne o problém s vaším požadavkem.
Proč 422 a ne 400 u neplatných dat?
422 označuje správně utvořený, ale sémanticky neplatný JSON — například vat_rate jako zlomek. 400 je vyhrazeno pro chybně utvořený požadavek.