Skip to main content
Every Now Shipping API error follows a consistent JSON envelope. Use error.code to handle errors programmatically and error.message for user-facing display. The shape is identical across all endpoints, so you can build a single error-handling layer for your entire integration.

Error response shape

details is optional and may contain extra context. For example, a failed cancel request includes currentStatus so you can branch your logic without making an additional GET request.

HTTP status codes

Error codes

Common validation messages

The API returns plain-language messages alongside every VALIDATION_ERROR. Use the table below to map a message to its root cause and fix.

Troubleshooting

Verify that your request includes the correct header:
Alternatively, you can pass the same value in X-Api-Key. Then confirm your key is marked Active in the Now Shipping admin under Business details → API Access. Revoked keys always return 401 UNAUTHORIZED.
The most common cause is an invalid or free-text zone name. Call GET /delivery-zones and build your address form from the areas[].value strings in that response — zone names like "Nasr City" are rejected; you must use the full catalog value (e.g. "Nasr City - ElHay 06 (Nasr City)"). Also confirm that orderType is exactly Deliver, Return, or Exchange.
An order may no longer be editable once a courier has been assigned or the order moves past the editable stage. Fetch the order with GET /orders/{orderNumber} and check the response before attempting an update. If canChangeAddress is false, the address and order details are locked.
You have exceeded 120 requests per minute on this API key. Reduce your request rate and implement exponential backoff when you receive a 429 response — start with a 1-second delay, double it on each retry, and cap at 30 seconds. Contact your Now Shipping account manager if you consistently need a higher limit.
Company API keys must include X-Merchant-Id on every order and pickup request. Retrieve your merchants first:
Then pass the merchant’s businessAccountCode or externalMerchantId in the header:
The merchant ID you sent in X-Merchant-Id either does not exist or is not linked to your company account. Verify the merchant appears in GET /merchants and that the correct company API key is in use. If the merchant is missing, contact your Now Shipping account manager to confirm the linkage in admin.
A merchant with the same email, phone, or externalMerchantId is already registered under your company. Call GET /merchants?search=<email_or_id> to retrieve the existing merchant record and store the returned businessAccountCode instead of creating a duplicate.
Your API key does not have the scope required by the endpoint you called. Scopes map to endpoint groups: orders/orders/*, pickups/pickups/*, merchants/merchants/*. Create a new API key in the Now Shipping admin with the missing scope included and rotate your integration to the new key.