Skip to content

Error codes

Every API failure returns an RFC 9457 application/problem+json body with two stable extensions: a numeric code and a dotted codeName.

{
"status": 403,
"title": "Forbidden by policy",
"detail": "Activation is blocked by the entitlement's activation policy.",
"code": 2011,
"codeName": "license.forbidden_by_policy"
}

Branch on code or codeName, never on detail or title — those are human-facing prose and may change; the codes are contract. New codes may be added over time (an additive, backward-compatible change), so treat unknown codes as a generic failure of the given HTTP status.

Codes are globally unique and grouped in ranges: general platform errors are 1000–1999, licensing 2000–2999, account/directory 3000–3999, webhooks 4000–4999.

Cross-cutting errors any endpoint can return.

CodeCode nameHTTPMeaning
1001validation.empty400A required value was missing or empty.
1002validation.duplicate409The value collides with an existing record.
1003validation.failed400The request failed validation.
1010resource.not_found404The resource doesn’t exist.
1011resource.expired410The resource existed but has expired.
1012resource.limit-exceeded429A plan or capacity limit was reached.
1020operation.invalid400The operation isn’t valid in the current state.
1021operation.pending409A conflicting operation is already in flight.
1030auth.forbidden403The caller lacks the required scope or role.
1040service.unavailable503Temporarily unavailable — retry with backoff.
1041service.failure500Unexpected failure.
1042service.too-many-requests429Rate limit exceeded — honor Retry-After.

Returned by activation, session and usage endpoints.

CodeCode nameHTTPMeaning
2001license.no_active_license403No active license backs this request.
2002license.no_such_entitlement404The entitlement doesn’t exist.
2003license.no_active_session409No active session for this operation.
2004license.not_found404The activation code doesn’t map to anything, or has expired.
2005license.invalid_operation400The operation isn’t valid for this license’s state.
2006license.no_permission403The caller doesn’t own this session or entitlement.
2007license.no_such_product404The product doesn’t exist.
2008license.no_such_provider404The provider doesn’t exist.
2009license.validation_error400The request body or activation code is invalid.
2010license.no_credit400The credit balance can’t cover the requested consumption.
2011license.forbidden_by_policy403Blocked by the entitlement’s activation policy (e.g. identity verification required).
2012license.operation_pending409A pending step (e.g. email verification) must complete first.
2013license.expired409The license or credit balance has expired.

Returned by user and organization endpoints.

CodeCode nameHTTPMeaning
3001organization.not_found404The user or organization doesn’t exist.
3002organization.duplicate409Already exists (e.g. email in use).
3003organization.invalid_operation400Not valid in the current state.
3004organization.no_permission403The caller lacks directory permission.
3005organization.validation_error400The request failed validation.
3006organization.no_credit400A seat or capacity limit was reached.

Returned by the webhook subscription and delivery-management endpoints.

CodeCode nameHTTPMeaning
4001subscription.tenant_required400The request lacks an active environment context.
4002subscription.client_id_required400An OAuth client identity is required.
4003subscription.tenant_mismatch403The subscription belongs to a different environment.
4010subscription.not_found404The subscription doesn’t exist.
4020subscription.invalid_state409Not allowed in the subscription’s current state (e.g. test-fire on an inactive subscription).
4021subscription.invalid_transition409The requested state change isn’t allowed.
4030subscription.invalid_secret400The signing secret doesn’t meet requirements (min. 32 bytes).
4031subscription.invalid_overlap400The rotation overlap window is invalid.
4032subscription.invalid_callback_scope400A requested callback scope isn’t allowed.
4033subscription.invalid_url400The receiver URL is not allowed.
4040subscription.challenge_failed422The endpoint failed the registration challenge.
4050subscription.not_licensed403Webhooks aren’t included in your plan.

Model-binding failures (malformed JSON, wrong types, missing required fields) return the standard ASP.NET validation problem — a 400 with an errors dictionary keyed by field name:

{
"status": 400,
"title": "One or more validation errors occurred.",
"errors": {
"activationCode": ["The activationCode field is required."]
}
}