Un seul format sur toutes les routes : type, code, message, param, doc_url, request_id et errors.
← Retour à la documentation API
Votre première facture en 6 étapes
- Toutes les réponses 4xx et 5xx renvoient { "error": { type, code, message, param?, doc_url, request_id, errors? } }.
- Branchez votre logique sur type pour décider si une nouvelle tentative a du sens, et faites correspondre code dans votre propre système.
- param désigne le champ en cause, par ex. lines.0.vat_rate ; errors[] apparaît lorsqu’il y en a plusieurs.
- Journalisez request_id pour chaque erreur — cela nous permet de retrouver la requête exacte dans nos logs.
Ce qu'est l'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
Erreurs
| Statut | Type | Code |
|---|---|---|
| 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 |
Erreurs fréquentes
- rate_limit_error et les deux types upstream peuvent être relancés. authentication_error, permission_error et invalid_request_error ne se résolvent pas en réessayant.
- Un 404 est également renvoyé pour un id appartenant à un autre tenant : nous ne confirmons jamais l’existence des données de quelqu’un d’autre.
- 409 idempotency_key_reuse signifie que vous avez réutilisé une clé avec un corps différent. Ne forcez pas : vérifiez ce qui a déjà été émis.
- La doc_url de chaque erreur renvoie directement à la section des erreurs de cette documentation.
- Les messages sont en roumain parce que l’API sert un processus fiscal roumain ; n’analysez pas message, branchez votre logique sur code.
Questions et réponses pour développeurs
Puis-je me fier aux valeurs de code d’une version à l’autre ?
Oui, code est stable et existe précisément pour cela. message est un texte destiné aux humains et peut être reformulé.
Que faire en cas de 502 ou de 503 ?
Réessayez avec un backoff exponentiel. Ce sont des erreurs upstream ou d’indisponibilité temporaire, pas des problèmes liés à votre requête.
Pourquoi 422 et non 400 pour des données invalides ?
422 signale un JSON bien formé mais sémantiquement invalide — par exemple vat_rate exprimé en fraction. 400 est réservé à une requête mal formée.