Errors
Every refusal is a structured object in the response’s errors list — { "major", "minor", "retryable", "message" }, with detail when the refusal has more to say — and the response still carries extensions.at with its callId. major names the class, minor the code inside it, and retryable says whether the identical call may succeed if you simply try again.
The majors
| Major | Codes | Meaning |
|---|---|---|
| VALIDATION | 11 | The request itself is not acceptable. |
| AUTHN | 4 | Who is calling could not be established. |
| AUTHZ | 6 | The caller is known but not allowed. |
| NOT_FOUND | 9 | Nothing answers the reference given. |
| CONFLICT | 66 | The record’s state or a concurrent change refuses the call. |
| RATE_LIMIT | 2 | Too many calls in the window. |
| PAYMENT | 5 | The payment step did not go through. |
| FULFILLMENT | 1 | The fulfillment step did not complete. |
| TAX | 0 | A tax step could not be resolved. |
| FISCAL | 3 | The fiscal authority or provider refused or did not answer. |
| INTEGRATION | 1 | An outside service did not answer. |
| INTERNAL | 1 | The platform failed; nothing about the request caused it. |
Retrying
When retryable is true, the same call, unchanged, may succeed a moment later — wait, then send it again. When it is false, change something first: the values, the record’s state, or who is calling.