code (machine-readable, stable), not on message (human-readable, may change).
Response shape
The trace identifier is returned only in the
X-Request-Id response header (e.g. X-Request-Id: req_a1b2c3d4e5f60718293a). It is not embedded in the error body. Persist it in your client logs and attach it to support cases.
Retry guidance
The
retryable field on each response reflects this rule: it is true for any 5xx, 429, or 412, and false otherwise.
Standard error codes
These codes map directly to HTTP status codes and apply to every endpoint across the Fiscalization, Reporting, and Hosted Receipts APIs unless noted.Conflict (409) variants
All 409 responses share the envelope. The code field distinguishes the cause.
Validation errors (422)
Most 422 responses emit code: "validation_error", with the specific violation in message. A few conditions carry a dedicated code, called out below.
Operation shape
Amount and payment validation
The payment-status pairing carries a dedicated
code rather than the generic validation_error:
Decimal precision
Fiscalization preconditions
Reporting API
Not-yet-implemented endpoints
Today the only path that can return HTTP501 Not Implemented is the export endpoint, when a request lands for an export type that has no exporter registered. The body carries code: "not_implemented" and retryable: true. Because the public wire enum currently exposes only dsfinvk, this path is unreachable through normal use.
Reserved codes (not yet emitted)
The OpenAPI contract advertises these codes on relevant endpoints, but the runtime does not emit them yet. They are kept here so client switch statements can include them ahead of enforcement landing.Idempotency and concurrency
Idempotency keys, retention windows, and concurrency rules (If-Match / ETag) are documented on the Limits page. The errors those rules emit (precondition_required, precondition_failed) are in the standard table above; idempotency_key_conflict is forward-looking — see Reserved codes.
Request tracing
Every response includes anX-Request-Id header. Persist it in your client logs and attach it to every support case — it is the fastest path to a root-cause answer.