Skip to main content
This guide walks you through the full lifecycle of a Now Shipping company integration — from loading the zone catalog to scheduling a courier pickup. By the end, you will have onboarded a merchant sub-account, created a live delivery order, downloaded its shipping label, and confirmed a pickup. Each step builds directly on the previous one, so work through them in order the first time.
This guide targets company integrators using a multi-tenant API key. If you are a single-business account, you can skip Steps 2 and the X-Merchant-Id header — your key already operates on your own account directly.
1

Load delivery zones (cache this response)

Before you build any address form or create any order, fetch the authoritative zone catalog. This call returns every valid governorate and area combination that Now Shipping delivers to. Zone strings must be exact — free text like "Nasr City" will be rejected on order creation.
Partial response:
Always use areas[].value verbatim in zone fields — never abbreviations, translated labels, or custom strings.Caching strategy: The zone catalog changes infrequently. Cache the response and send the ETag value back on subsequent calls using the If-None-Match header. When the catalog is unchanged, the API returns 304 Not Modified with no body, saving bandwidth and latency. Refresh the cache periodically (for example, daily) to pick up any zone additions.
2

Onboard a merchant

Each shop on your platform maps to one Now Shipping merchant sub-account. A single POST /merchants call creates the account, marks it verified, and sets its default pickup address — the merchant is ready to ship immediately after this call.
Merchants created via the API do not receive dashboard login credentials. They exist solely as shipping sub-accounts under your company.
Response 201:
Save both identifiers to your database immediately:If you attempt to onboard the same merchant twice, the API returns 409 MERCHANT_ALREADY_EXISTS. Catch this error and fetch the existing record via GET /merchants?search=shop_123 rather than treating it as a hard failure.
3

Preview the shipping fee (optional but recommended)

Before creating an order, you can call the fee calculator to display the exact shipping cost to your end-user at checkout. This call is read-only and has no side effects.
Never pass the fee value returned here into the order create request. Fees are always computed server-side on order creation. Any fee field you send (orderFees, fee, shippingFee) is silently ignored.
Response 200:
The fee factors in the destination governorate, order type (Deliver, Return, or Exchange), the express shipping flag, and any custom pricing configured for the merchant. Include X-Merchant-Id so the calculation reflects the correct merchant pricing tier.
4

Create a delivery order

With the zone catalog loaded and the merchant onboarded, you are ready to create a shipping order. Pass X-Merchant-Id using either the businessAccountCode or externalMerchantId you saved in Step 2. Use referralNumber to link the Now Shipping order back to your platform’s own order ID — you can query or filter by this reference later.
Response 201:
Store the orderNumber (e.g. 482917) — you need it in the next two steps. The orderFees field in the response is the authoritative, server-computed fee; do not rely on the preview value from Step 3 for billing or reconciliation.
5

Download the AWB (shipping label)

After creating the order, download its Air Waybill PDF. The AWB is returned as a raw application/pdf binary. Use the -o flag in curl to write it directly to a file.
The size query parameter controls the label dimensions. Supported values:Print the AWB and attach it to the parcel before the courier arrives for pickup.
6

Schedule a courier pickup

With orders packed and labelled, schedule a courier to collect them. Provide the expected number of orders, a valid future pickup date, and a contact phone number.
pickupDate must satisfy Now Shipping’s pickup date policy — use a future business date. Pickup fees are computed server-side; do not send pickupFees in the request body.
Partial response 201:
Save the pickupNumber to track the pickup’s status via GET /pickups/{pickupNumber}. The pickupFees in the response is the authoritative amount — do not use any value from the optional fee preview.

Your integration now covers the full company integrator lifecycle: zone catalog, merchant onboarding, fee preview, order creation, AWB download, and pickup scheduling. For a complete checklist of go-live requirements and common error resolutions, see the Integration Best Practices guide.
Ready to go live? Work through the Integration Best Practices checklist before flipping to production — it covers secure key storage, ETag caching, fee-field hygiene, and error handling patterns every integration needs.