Skip to content

Errors

A code for the machine, a sentence for the person.

Branch on the code, never on the sentence. The sentence is translated and may be reworded in any release; the code is part of the contract and changes only with the version in the path.

Code Status When it happens
UNAUTHENTICATED 401

No key, an unreadable one, a revoked one or an expired one. All four answer alike.

ANFRAGE 400

The request could not be read: a missing required field, a value in the wrong shape.

PLAN_ERFORDERLICH 403

This company's plan does not include the interface. Only the business can change that, not the software.

KEINE_BERECHTIGUNG 403

The key does not carry the scope this address requires.

NICHT_GEFUNDEN 404

No such record — or it belongs to another company. Both answer alike, deliberately.

IDEMPOTENZ_KONFLIKT 409

The same idempotency key was already used for a different body or a different address.

FALSCHER_ZUSTAND 409

The request was well formed; the state of the record does not allow it.

ABGELEHNT 409

A domain rule refused the change. The sentence beside it says which one.

ZU_VIELE_ANFRAGEN 429

This key's budget is spent. Retry-After names the wait in seconds.

The shape of every refusal.

Two fields, always the same two. No stack trace, no query, no file path: what comes back names the rule that stopped the request and says nothing else about the interior.

{"fehler": "…", "code": "KEINE_BERECHTIGUNG"}

The number you can quote.

Every answer carries this header, refusals included. Send your own value and it appears in our records; send none and we make one. In a support conversation it replaces describing a request by the time of day.

X-Correlation-Id: 6f1c2a8e-4b3d-4a21-9d77-0c5e1f9b2a44