Один формат на всіх маршрутах: type, code, message, param, doc_url, request_id та помилки.
Перший рахунок за 6 кроків
- Кожна 4xx і 5xx повертає { "error": { type, code, message, param?, doc_url, request_id, помилки? } }.
- Розгалужуйте логіку за type, щоб вирішити, чи має сенс повторна спроба, і зіставляйте code у своїй системі.
- param вказує на проблемне поле, наприклад lines.0.vat_rate; помилки[] з’являється, коли таких полів кілька.
- Записуйте request_id під час кожної помилки — це дає нам змогу знайти точний запит у наших журналах.
Що таке 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
Помилки
| Статус | Тип | Код |
|---|---|---|
| 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 |
Типові помилки
- rate_limit_error і два типи апстрім допускають повторну спробу. authentication_error, permission_error і invalid_request_error повторною спробою не виправляються.
- 404 також повертається для id, що належить іншому tenant: ми ніколи не підтверджуємо, що чужі дані існують.
- 409 idempotency_key_reuse означає, що ви повторно використали ключ з іншим тілом. Не обходьте це: перевірте, що вже було випущено.
- doc_url у кожній помилці веде безпосередньо до розділу про помилки в цій документації.
- Повідомлення румунською, бо API обслуговує румунський фіскальний процес; не парсьте message, розгалужуйте логіку за code.
Питання та відповіді для розробників
Чи можна покладатися на значення code між версіями?
Так, code стабільний і існує саме для цього. message — це текст для людей, і його можуть переформулювати.
Що робити у разі 502 або 503?
Повторіть запит з експоненційним експоненційна затримка. Це помилки апстрім або тимчасової недоступності, а не проблеми з вашим запитом.
Чому 422, а не 400 для некоректних даних?
422 позначає синтаксично правильний, але семантично некоректний JSON — наприклад, vat_rate у вигляді дробу. 400 зарезервовано для неправильно сформованого запиту.