e-Faktura API
Errors
Every error is application/problem+json (RFC 9457) except POST /v1/oauth/token, which uses
plain OAuth 2.0 error JSON.
{
"type": "https://developer.merot.com/efaktura/errors#validation_failed",
"title": "Validation failed",
"status": 422,
"detail": "One or more fields failed UJP validation.",
"instance": "req_01J9Z5C6D7E8F9G0H1J2K3",
"code": "validation_failed",
"errors": [
{ "path": "lines[2].taxIndicator", "message": "Unknown tax indicator for document type 100.", "codebook": "tax-indicators" }
]
}
instance is the request id — also echoed in the X-Request-Id response header; include it when
contacting support.
Codes
| Code | Status | Meaning |
|---|---|---|
unauthenticated | 401 | Missing, malformed or expired credentials. |
key_revoked | 401 | The API key has been revoked. |
insufficient_scope | 403 | The key/token lacks a required scope. |
company_not_allowed | 403 | The company isn’t in this key’s allow-list. |
environment_mismatch | 403 | A sandbox key touched a production resource, or vice versa. |
production_not_enabled | 403 | The account has no active production plan yet. |
company_required | 400 | X-Company-Id is required (the principal has more than one company). |
idempotency_key_required | 400 | A write is missing its Idempotency-Key header. |
idempotency_conflict | 409 | The same key was reused with a different request body. |
idempotency_in_progress | 409 | A request with this key is still being processed. |
client_reference_conflict | 409 | The same clientReference was reused with a different body. |
period_closed | 409 | Storno/correction blocked — the annual account is filed for that year. |
decision_deadline_passed | 409 | The inbox accept/reject deadline has passed. |
signature_expired | 410 | The signing request expired before a signature arrived. |
signature_invalid / payload_mismatch / certificate_mismatch | 422 | The submitted signature failed verification. |
validation_failed | 422 | Field-level validation errors, or totals_mismatch for a totals mismatch. |
pdf_not_ready | 409 | The document hasn’t settled at UJP yet. |
rate_limited | 429 | Too many requests — see Rate limits. |
not_found | 404 | No such resource for this company. |
ujp_unavailable | 503 | The synchronous UJP registry pre-flight (on company creation) timed out. |
UJP-sourced errors
Where a validation error comes directly from a UJP codebook rule, errors[].codebook names the
codebook, so you can look the value up yourself — Merot never renames or reinterprets UJP’s own
codes.