Shape
Always six fields: type, code, status, detail, instance, and request id.
{
"type": "urn:currixa:problem:version-ambiguous",
"title": "VERSION_AMBIGUOUS",
"status": 400,
"detail": "The requested version matches more than one knowledge version.",
"instance": "/v1/outcomes/crx_out_…",
"request_id": "req_…"
}No stack traces, no SQL, no internal paths, no secrets — in any environment.
Codes
| Code | Status | Meaning |
|---|---|---|
| UNAUTHENTICATED | 401 | No valid or expired token. |
| FORBIDDEN_SCOPE | 403 | Scope or permission does not cover the operation. |
| PUBLISH_NOT_AUTHORIZED | 403 | A publish operation without authority. |
| MFA_REQUIRED | 403 | The operation requires a multi-factor session. |
| NOT_FOUND | 404 | Resource missing or outside your tenant (always 404, never 403). |
| CONFLICT | 409 | State conflict. |
| VERSION_AMBIGUOUS | 400 | The version request matches more than one version — pin the full number. |
| VALIDATION_FAILED | 422 | Rejected body or parameters. |
| RATE_LIMITED | 429 | Over the limit — retry after Retry-After. |
| SIGNUP_DISABLED | 403 | Self-serve sign-up is switched off. |
| BOT_CHECK_FAILED | 403 | The sign-up bot check failed. |
| INVALID_INPUT | 422 | A sign-up field was refused. |
| IDP_SYNC_PENDING | 502 | The organisation exists; the identity provider is not updated yet — retry the same request. |
| KEYS_DISABLED | 403 | API keys are not available here: off in this deployment, or your organisation's clients are managed by the operator. |
| LIMIT_REACHED | 409 | A limit of the organisation's plan is reached: its applications, or an application's live keys. |
| QUOTA_EXCEEDED | 429 | The organisation used its plan's requests for this month (LIVE keys and M2M clients). Retry after Retry-After, or upgrade. Each counted response carries Currixa-Quota-Limit, -Remaining and -Reset. |
| SUBSCRIPTION_INACTIVE | 403 | The organisation's subscription is suspended, cancelled or past its trial. Its keys and clients are refused; its people still sign in. |
| SETTING_NOT_DECIDED | 409 | A platform setting whose decision is not accepted yet; its value is not set. |
| BILLING_INCOMPLETE | 409 | An invoice is issued only when the seller’s billing settings and the organisation’s billing profile (legal name, address, city, country) are complete. |
| INVOICE_IMMUTABLE | 409 | An issued invoice changes only by being paid or voided; it is corrected with a credit note. |
| WEBHOOK_URL_REFUSED | 422 | A webhook address the delivery rules refuse; the reply names the reason class only. |
| WEBHOOKS_DISABLED | 503 | Webhooks are not available in this deployment. |
| INVITATION_INVALID | 404 | The invitation is unknown, expired, revoked or already used. |
| INVITATION_EMAIL_MISMATCH | 403 | The signed-in address is not the one the invitation was sent to. |
| LAST_OWNER | 409 | The change would leave the organisation without an owner. |
| SECRETS_UNAVAILABLE | 503 | The secret store is not available in this deployment (platform administration only). |
| SUPPORT_UNAVAILABLE | 503 | The contact form is closed here; write to the email address instead. |
| MFA_ALREADY_ENROLLED | 409 | An authenticator is enrolled already; disable it before enrolling another. |
| INTERNAL | 500 | Internal fault with no leaked detail. |
Tracing
Every response carries x-request-id. Quote it when contacting us — it alone finds your request in the logs.