Every Store API failure response shares one envelope. The HTTP status carries the kind of failure; the body carries the code, the message, and any per-error details.
Envelope#
{
"success": false,
"error": {
"code": "TAG_SLUG_DUPLICATE",
"message": "A tag with that slug already exists.",
"details": { "field": "slug" }
}
}
Field |
Description |
|---|---|
|
Stable, screaming-snake-case identifier. Branch on this in code. |
|
Single-sentence human-readable description. |
|
Optional per-error context (offending field name, conflicting record ID, etc.). Documented per endpoint. |
Status codes#
Status |
Means |
Retry |
|---|---|---|
400 |
Request shape is wrong. |
No. |
401 |
Token missing, malformed, or expired. |
No. |
403 |
Token valid but lacks the required scope. |
No. |
404 |
Resource does not exist or your token cannot see it. |
No. |
409 |
Conflict — typically a duplicate or stale write. |
Only with a different payload. |
422 |
Semantic validation failure on a well-formed request. |
No. |
429 |
Rate-limited. |
After |
5xx |
Server-side failure. |
Yes, with exponential backoff. |
Per-endpoint errors#
Each endpoint's reference page lists the specific error codes it can return and what triggers them.