Error envelope
error is a stable machine-readable code; message is human readable. Some errors carry extra fields (for example retry_after on a 429, field-level details on a 422, or a reference correlation code on a 500).
Status codes
Identifiers are scoped to your shop. A resource that belongs to another shop is reported as
404, never another shop’s data.
Rate limiting
Requests are rate limited per token, per shop, and per IP address. When you exceed any of these limits you receive a429 carrying:
Retry-After(seconds to wait),X-RateLimit-Limit,X-RateLimit-Remaining, andX-RateLimit-Reset.
Retry-After and use exponential backoff. Spread bulk reads over time rather than bursting.
Good citizenship
- Cache responses where you can and poll with
filter[updated_since]instead of re-reading everything. - Prefer webhooks for change notifications; reserve polling for reconciliation.
- Treat repeated
404s as a bug in your integration, not a way to discover records.