Common errors
Every error has the same shape. Branch on error.code, never on error.message.
By status
| Status | Meaning | Retry? |
|---|---|---|
400 |
Invalid request | No, not unchanged |
401 |
Authentication failed | No |
403 |
Missing scope | No |
404 |
Not visible to you | No |
409 |
Conflict, or idempotency key reused with a different payload | No, investigate |
412 |
Stale If-Match |
Yes, after re-reading |
429 |
Throttled | Yes, with backoff |
5xx |
Unexpected failure | Yes, with backoff |
By code
| Code | Meaning | Fix |
|---|---|---|
MissingApiVersionParameter |
No api-version on a Management call |
Add ?api-version=2026-08-30 |
UnsupportedApiVersionValue |
That version is not served here | Use a version from the message |
validation_error |
The request body did not validate | Read error.target and error.details |
not_found |
Not visible to this caller | Check the identifier, tenant and environment |
conflict |
Cannot be reconciled with current state | Read the message; do not blind-retry |
precondition_failed |
Your If-Match was stale |
Re-read, re-apply, retry |
issuer.not_ready |
The issuer has unmet requirements | Check readiness |
unauthorized |
Authentication failed | Check the key |
Reading an error
{
"error": {
"code": "validation_error",
"message": "The request could not be validated.",
"target": "claims.member_number",
"details": [ { "code": "required", "message": "This claim is required.", "target": "claims.member_number" } ],
"innerError": { "date": "...", "requestId": "req_...", "clientRequestId": "checkout-8891" }
}
}
target names the first thing at fault; details has the rest. innerError.requestId is what to quote when
asking for help.
404 does not mean "does not exist"
It means "not visible to you". Cross-tenant and cross-environment resources report as not found rather than forbidden, because a 403 would confirm they exist.
What errors never contain
Exception types, stack traces, database errors, connection strings, Azure resource identifiers, key vault names, tokens, credential proofs, nonces, cookies, key material, or anything about another tenant's resources.
Quote x-ms-request-id instead — with it, the exact request can be found.