Errors
One envelope, machine-readable code first:
{
"error": {
"code": "missing_required_attribute",
"message": "The attribute \"Brand\" is required for this category.",
"field": "attributes.32",
"request_id": "req_01j9c4xk2m"
}
}
Branch on code, never on message — messages get clearer over time, codes do not
change within a version.
| Status | Meaning |
|---|---|
400 |
The request is malformed — a bad date, an unknown filter value |
401 |
Key missing, malformed, revoked, expired, or from the wrong environment |
403 |
The key is valid but lacks the scope, or the integration is suspended |
404 |
No such resource on your account. We do not distinguish "not yours" from "does not exist" |
409 |
A conflict with current state — accepting an order that is no longer pending |
422 |
Understood but breaks a business rule — a missing required attribute |
429 |
Rate limited. See Retry-After |
5xx |
Ours. Retry with backoff, and quote the request_id |
Validation failures come as a list#
A write returns every problem it found, not just the first, so a mapping can be fixed in one pass instead of one round trip per field:
{
"error": {
"code": "missing_required_attribute",
"message": "The attribute \"Brand\" is required for this category.",
"field": "attributes.32",
"request_id": "req_01j9c4xk2m",
"details": [
{ "code": "missing_required_attribute", "message": "The attribute \"Brand\" is required for this category.", "field": "attributes.32" },
{ "code": "missing_required_attribute", "message": "The attribute \"Stare\" is required for this category.", "field": "attributes.47" }
]
}
}
404 on something you can see#
Every endpoint is scoped to the seller behind your key. Another seller's product
returns 404, not 403 — telling you it exists but is not yours would leak that it
exists at all.
