This page is reference material.If you are troubleshooting a theme workflow, start with the workflow pages first:Then come back here if you need the exact error shape or status-code meaning.
Error Response Format
All errors follow a consistent structure:| Field | Type | Description |
|---|---|---|
code | string | Machine-readable error code |
message | string | Human-readable description |
doc_url | string | Link to relevant documentation |
details | array | Field-level validation errors (optional) |
HTTP Status Codes
| Code | Name | Description |
|---|---|---|
200 | OK | Request succeeded |
201 | Created | Resource created successfully |
204 | No Content | Success with no response body (e.g., DELETE) |
400 | Bad Request | Domain-specific or business rule error |
401 | Unauthorized | Missing or invalid API key |
403 | Forbidden | Valid key but insufficient permissions |
404 | Not Found | Resource doesnβt exist |
422 | Validation Error | Invalid field values |
429 | Too Many Requests | Rate limit exceeded |
500 | Server Error | Something went wrong on our end |
Error Codes Reference
Authentication Errors
UNAUTHORIZED
UNAUTHORIZED
FORBIDDEN (missing scope)
FORBIDDEN (missing scope)
HTTP 403 - Your API key is valid but lacks the required scope for this endpoint.Solution: Go to Settings β API Keys, check which scopes your key has, and add the missing one. Use
GET /me/capabilities to inspect active scopes at runtime.FORBIDDEN (shop suspended)
FORBIDDEN (shop suspended)
HTTP 403 - Your shop has been suspended by Shoppex.Solution: Contact support at [email protected] to resolve the suspension. This is an account-level issue, not a key configuration problem.
Validation Errors
VALIDATION_ERROR
VALIDATION_ERROR
HTTP 422 - One or more fields failed validation.Solution: Check the
details array for specific field errors.Request Error Semantics
Use the status code as the first signal:422 VALIDATION_ERRORmeans the request shape or field values are invalid400means the request was understood, but a business rule rejected it404can be genericNOT_FOUNDor resource-specific likePRODUCT_NOT_FOUND
POST /customers returns 422 VALIDATION_ERROR, an expired license on POST /licenses/validate returns 400 LICENSE_EXPIRED, and a missing product on GET /products/prod_xyz returns 404 PRODUCT_NOT_FOUND.
Theme Workflow Troubleshooting
If you are using the theme automation flow:401usually means your API key is missing or invalid403usually means your key is missingthemes.readorthemes.write422usually means the request body or params are wrong500usually means the server failed while validating, previewing, publishing, or reading the theme
theme.inspect fails with 403 because your key is missing themes.read, and theme.apply fails with 403 because it needs themes.write. A 422 usually means a bad request body or theme id, while 500 means something broke server-side β inspect the error and retry.
Resource Errors
NOT_FOUND
NOT_FOUND
HTTP 404 - The requested resource doesnβt exist.Solution: Verify the resource ID is correct.
PRODUCT_NOT_FOUND
PRODUCT_NOT_FOUND
HTTP 404 - Specific product not found.
INVOICE_NOT_FOUND
INVOICE_NOT_FOUND
HTTP 404 - Specific invoice not found.
PAYMENT_NOT_FOUND
PAYMENT_NOT_FOUND
HTTP 404 - Payment not found.
CUSTOMER_NOT_FOUND
CUSTOMER_NOT_FOUND
HTTP 404 - Customer not found.
CATEGORY_NOT_FOUND
CATEGORY_NOT_FOUND
HTTP 404 - Category not found.
COUPON_NOT_FOUND
COUPON_NOT_FOUND
HTTP 404 - Coupon not found.
SUBSCRIPTION_NOT_FOUND
SUBSCRIPTION_NOT_FOUND
HTTP 404 - Subscription not found.
TICKET_NOT_FOUND
TICKET_NOT_FOUND
HTTP 404 - Support ticket not found.
REVIEW_NOT_FOUND
REVIEW_NOT_FOUND
HTTP 404 - Review not found.
ESCROW_NOT_FOUND
ESCROW_NOT_FOUND
HTTP 404 - Escrow transaction not found.
License Errors
LICENSE_NOT_FOUND
LICENSE_NOT_FOUND
HTTP 404 - License key not found.
LICENSE_INVALID
LICENSE_INVALID
HTTP 400 - License key is invalid or malformed.
LICENSE_EXPIRED
LICENSE_EXPIRED
HTTP 400 - License key has expired.
LICENSE_HWID_MISMATCH
LICENSE_HWID_MISMATCH
HTTP 400 - Hardware ID does not match the registered device.
Coupon Errors
COUPON_EXPIRED
COUPON_EXPIRED
HTTP 400 - Coupon has expired.
COUPON_MAX_USES_REACHED
COUPON_MAX_USES_REACHED
HTTP 400 - Coupon has reached maximum uses.
Idempotency Errors
IDEMPOTENCY_CONFLICT
IDEMPOTENCY_CONFLICT
HTTP 422 - The same idempotency key was used with a different request body.Solution: Each unique request body needs its own idempotency key. If youβre retrying a failed request, make sure the body matches the original. See the Idempotency section for details.
Rate Limiting
RATE_LIMITED
RATE_LIMITED
HTTP 429 - Too many requests.Response headers:
X-RateLimit-LimitX-RateLimit-RemainingX-RateLimit-ResetRetry-Afterwhen blocked
Retry-After or X-RateLimit-Reset before retrying.Handling Errors in Code
Every Dev API error response also returnsX-Request-Id in the headers. Log that value together with error.code when you need support or want to trace a failing request.
Best Practices
Log Error Codes
Always log the
error.code for debugging. Itβs more reliable than parsing messages.Handle 429s Gracefully
Implement exponential backoff for rate limits. Check
X-RateLimit-Reset header.Validate Before Sending
Validate inputs client-side to catch errors early and reduce API calls.
Use Idempotency Keys
For payment creation, use idempotency keys to safely retry failed requests.