Eine Form auf jeder Route: type, code, message, param, doc_url, request_id und errors.
← Zurück zur API-Dokumentation
Die erste Rechnung in 6 Schritten
- Jede 4xx- und 5xx-Antwort liefert { "error": { type, code, message, param?, doc_url, request_id, errors? } }.
- Verzweigen Sie nach type, um zu entscheiden, ob ein Retry sinnvoll ist, und bilden Sie code in Ihr eigenes System ab.
- param zeigt auf das fehlerhafte Feld, z. B. lines.0.vat_rate; errors[] erscheint, wenn es mehrere gibt.
- Protokollieren Sie request_id bei jedem Fehler – damit finden wir die exakte Anfrage in unseren Logs.
Was die 4invoices-API ist
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
Fehler
| Status | Typ | 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 |
Häufige Fehler
- rate_limit_error und die beiden upstream-Typen sind wiederholbar. authentication_error, permission_error und invalid_request_error lassen sich durch einen Retry nicht beheben.
- Ein 404 kommt auch für eine id zurück, die zu einem anderen Mandanten gehört: Wir bestätigen nie, dass Daten eines anderen existieren.
- 409 idempotency_key_reuse bedeutet, dass Sie einen Schlüssel mit einem anderen Body wiederverwendet haben. Erzwingen Sie nichts: Prüfen Sie, was bereits ausgestellt wurde.
- Die doc_url in jedem Fehler verweist direkt auf den Fehlerabschnitt dieser Dokumentation.
- Die Meldungen sind auf Rumänisch, weil die API einen rumänischen Fiskalprozess bedient; parsen Sie nicht message, sondern verzweigen Sie nach code.
Fragen und Antworten für Entwickler
Kann ich mich über Versionen hinweg auf die code-Werte verlassen?
Ja, code ist stabil und existiert genau dafür. message ist Text für Menschen und kann umformuliert werden.
Was soll ich bei einem 502 oder 503 tun?
Mit exponentiellem Backoff erneut versuchen. Das sind upstream-Fehler oder Fehler vorübergehender Nichtverfügbarkeit, keine Probleme mit Ihrer Anfrage.
Warum 422 und nicht 400 bei ungültigen Daten?
422 kennzeichnet wohlgeformtes, aber semantisch ungültiges JSON – zum Beispiel vat_rate als Bruch. 400 ist für eine fehlerhaft aufgebaute Anfrage reserviert.