All errors have the same shape. Program against code, which doesn’t change; message is for whoever reads the log.
"code": "validation_failed",
"message": "The request body is not valid.",
"details": [{ "field": "order.shopify_order_id", "message": "Required: an Order gid or its numeric id." }]
| Code |
HTTP |
What happened |
What to do |
missing_api_key |
401 |
Authorization is missing. |
Send Bearer rvw_live_…. |
invalid_api_key |
401 |
The key doesn’t exist, was revoked or the store uninstalled the app. |
Create another one in Channels. |
missing_signature |
401 |
X-Signature or X-Timestamp is missing. |
See the signature. |
timestamp_out_of_range |
401 |
X-Timestamp isn’t in seconds or is more than 5 minutes off. |
Sync your clock (NTP). |
invalid_signature |
401 |
The signature doesn’t match. |
Sign the exact body you send, with that key’s secret. |
insufficient_scope |
403 |
The key doesn’t have the permission. details says which one is needed. |
Use a key with a wider scope. |
plan_required |
403 |
The API is part of the Pro plan. |
Change plans from the app. |
rate_limited |
429 |
More than 120 requests in a minute. |
Wait as long as Retry-After says. |
| Code |
HTTP |
What happened |
invalid_json |
400 |
The body isn’t JSON. |
validation_failed |
422 |
A field isn’t valid. details lists each field with its error. With 413, the body went over the maximum size. |
method_not_allowed |
405 |
That path doesn’t accept that method. |
idempotency_key_reused |
422 |
The Idempotency-Key was already used with a different body. |
idempotency_in_progress |
409 |
Another request with the same Idempotency-Key is still in progress. Retry in a moment. |
| Code |
HTTP |
What happened |
not_found |
404 |
Nothing with that id in this store. |
order_not_found |
404 |
Shopify doesn’t return that order in this store. Check the id. |
order_cancelled |
422 |
The order is cancelled. |
no_reviewable_products |
422 |
The order has no products to review. |
request_closed |
409 |
The request was already answered, expired or cancelled. details.status says which. |
invalid_state |
409 |
The change isn’t possible in the current state (for example, sending now one that was already sent). |
| Code |
HTTP |
What happened |
product_not_found |
422 |
No product in the store matches. A SKU repeated across two products also returns this error. |
product_not_in_order |
422 |
The product isn’t in that order. |
review_exists |
409 |
That order already has a review for that product. details includes its id. |
duplicate_in_batch |
— |
Only in bulk import: the same review appears earlier in the batch. |
| Code |
HTTP |
What to do |
shop_unavailable |
503 |
The store doesn’t have an active session with the app. Retry later. |
internal_error |
500 |
An error on our side. Retry; if it keeps happening, write to us at contacto@leadit.tech. |