Một cấu trúc trên mọi tuyến: type, code, message, param, doc_url, request_id và errors.
Hóa đơn đầu tiên trong 6 bước
- Mọi lỗi 4xx và 5xx đều trả về { "error": { type, code, message, param?, doc_url, request_id, errors? } }.
- Rẽ nhánh theo type để quyết định có nên thử lại không, và ánh xạ code vào hệ thống của bạn.
- param trỏ đến trường gây lỗi, ví dụ lines.0.vat_rate; errors[] xuất hiện khi có nhiều lỗi.
- Ghi lại request_id trong mọi lỗi — nhờ đó chúng tôi tìm được đúng yêu cầu trong nhật ký.
API 4invoices là gì
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
Lỗi
| Trạng thái | Loại | Mã |
|---|---|---|
| 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 |
Lỗi thường gặp
- rate_limit_error và hai loại upstream có thể thử lại. authentication_error, permission_error và invalid_request_error không được khắc phục bằng cách thử lại.
- 404 cũng được trả về cho một id thuộc về tenant khác: chúng tôi không bao giờ xác nhận rằng dữ liệu của người khác tồn tại.
- 409 idempotency_key_reuse nghĩa là bạn đã dùng lại khóa với nội dung khác. Đừng ép buộc: hãy kiểm tra những gì đã được phát hành.
- doc_url trong mọi lỗi trỏ thẳng đến phần lỗi của tài liệu này.
- Thông báo lỗi bằng tiếng Romania vì API phục vụ luồng hóa đơn tài chính của Romania; đừng phân tích message, hãy rẽ nhánh theo code.
Câu hỏi và trả lời cho nhà phát triển
Tôi có thể dựa vào giá trị code qua các phiên bản không?
Có, code ổn định và tồn tại chính vì mục đích đó. message là văn bản dành cho con người và có thể được diễn đạt lại.
Tôi nên làm gì khi gặp 502 hoặc 503?
Thử lại với backoff lũy thừa. Đó là lỗi upstream hoặc khả dụng tạm thời, không phải vấn đề với yêu cầu của bạn.
Vì sao dùng 422 chứ không phải 400 cho dữ liệu không hợp lệ?
422 đánh dấu JSON đúng cú pháp nhưng không hợp lệ về ngữ nghĩa — ví dụ vat_rate dưới dạng phân số. 400 được dành cho yêu cầu sai cú pháp.