PostEx
ShipOps connects to your PostEx merchant account with the API token PostEx already issued you. It tracks every parcel, turns PostEx's status codes into plain words, catches the one window where PostEx will still take a retry, and matches every Cash Payment Receipt against your orders down to the paisa.
PostEx is the courier most Pakistani COD stores start with, and since it absorbed Call Courier it is also the one most likely to be carrying your parcels under two names. Its merchant API is good: a bulk list of your orders, a per-parcel trail with numbered status codes, a shipper-advice call, and the payout documents it calls Cash Payment Receipts, or CPRs.
What the portal does not do is tell you which of this week's parcels need you. A PostEx trail can read En-Route to Lahore warehouse as its headline while the history is already three codes into a return. ShipOps reads the codes, not the headline, so the parcel shows up as what it is.
This page is written from the PostEx API documentation and from PostEx trails ShipOps has stored for real stores. Where PostEx behaves differently from its documents, the observed behaviour wins and the page says so.
What ShipOps does with PostEx
| Live tracking | Yes. ShipOps lists parcels from your PostEx account directly, then follows each one. A parcel you booked outside ShipOps is still found. |
|---|---|
| Retry / return instruction | PostEx accepts a retry or return instruction only while a parcel is in its review window. ShipOps watches for that window and alarms it, so the instruction goes in while it can still change the outcome. |
| Booking and labels | Yes. Book from the order, print the label, cancel a booking. Services: Normal (delivery). Label layouts: Airway bill. |
| COD payouts | Automatic. ShipOps pulls each PostEx receipt by its number and checks every parcel on it. The receipt PDF you download from PostEx can be dropped in too. How PostEx pays COD, in detail → |
| What you type to connect | Your PostEx merchant API token Then pick your pickup address. |
| Recognised as | postex |
| Delivery attempts | PostEx tries 3 times before it starts a return. ShipOps counts the attempts on the trail and shows how many are left. |
Connecting PostEx
You need one thing: the API token from your PostEx merchant portal. Paste it into ShipOps under Settings → Couriers, pick the pickup address your bookings should run under, and the connection is checked against PostEx before it is saved. The token is stored encrypted and is only ever used to read your account, book a parcel you asked for, or file a retry or return you asked for.
The first import then runs in the background. ShipOps asks PostEx for your orders in 30-day slices going back through your history, then fetches each parcel's full trail one by one, because PostEx's bulk list returns an empty history for about 95 of every 100 parcels. That is why the import takes a few minutes for a few thousand parcels rather than a few seconds; the alternative is a dashboard that cannot tell a return from a delivery.
If you have more than one PostEx pickup address, you choose which one bookings use. It prints on the airway bill and decides where returns come back to.
What PostEx's statuses mean
11 phrases, read the way the app reads them| What PostEx prints | What it means | What to do |
|---|---|---|
| 0001 At Merchant Warehouse / Unbooked | Booked | Booked but not yet collected. Nothing to do unless it sits here more than a day, in which case chase the pickup. |
| 0031 Departed to PostEx Warehouse · 0003 Received at Warehouse | In transit | Collected and inside PostEx's network. Watch, do not act. |
| 0033 Departed to {city} · 0035 Arrived at Transit Hub · 0038 Waiting for Delivery | In transit | Moving toward the customer. A 0035 that follows a return code is the return leg, not progress; ShipOps reads the codes before it, so you see the right one. |
| 0004 Enroute for Delivery | In transit | Out with the rider today. A good moment for an automated status text to the customer. |
| 0013 Attempt Made: CNA / RFD / ICA / RAD / HCR / OPN / PNA | Attempt failed | The rider could not deliver; the reason code says why. PostEx will try again on its own, and does not yet accept a retry or return instruction. Call or WhatsApp the customer now so the next attempt lands. |
| 0008 Delivery Under Review | Needs your decision | The one state where PostEx takes your instruction. Say retry or return from the order in ShipOps before the window closes; silence usually means the parcel starts coming back. |
| 0040 Return Process Initiated | Attempt failed | Looks final, is not. In stored trails about 2 in 100 of these flip back into a delivery attempt. PostEx has already closed the advice window here, so the move is a call to the customer, not a button. |
| 0037 Return to {city} · 0039 Waiting for Return · 0032 En Route to Merchant Warehouse | Coming back | Committed return. In every stored trail, none of these was ever followed by a customer attempt. Plan for the parcel to arrive back and decide whether to rebook. |
| 0006 Returned at Merchant Warehouse | Returned to you | Back with you. Check it in so the Shopify order can be cancelled and restocked if you have that switched on. |
| 0005 Delivered to Customer | Delivered | Done. The COD should appear on a CPR within PostEx's next payment runs; ShipOps watches for it. |
| 0002 Booking Cancelled by Merchant / Un-Assigned By Me | Cancelled | Cancelled before pickup. The bulk list prints this as "Cancelled"; the single-parcel trail says "Un-Assigned By Me". Same thing. |
Why a PostEx delivery fails, as ShipOps names it
| Customer refused | Refused to receive |
|---|---|
| Customer not available | Customer not available |
| Address problem | Incomplete address · Restricted area |
| Held | Hold on consignee request |
| Other | Wants to open parcel · Payment not available |
| Courier-side | Shipper cancel-out |
These are the reasons PostEx gives on a failed visit, normalised to one label each so your team sees "Customer not available", never the raw string. The family decides what the Action Inbox suggests: an address problem asks the customer for a landmark, a phone problem tries WhatsApp, a refusal asks whether to return.
Questions merchants ask about PostEx
Does PostEx still deliver Call Courier parcels?
PostEx acquired Call Courier in 2024 and runs the network under its own name. If your store's fulfilments still say Call Courier, ShipOps recognises them as PostEx parcels.
When can I tell PostEx to retry or return a parcel?
Only while the parcel reads 0008 Delivery Under Review. At 0013 Attempt Made and 0040 Return Process Initiated PostEx rejects the instruction, verified against its live API. ShipOps shows the retry and return buttons only in the window, and alarms you when it opens.
Why does ShipOps fetch every PostEx parcel one at a time?
PostEx's bulk list leaves the status history empty for about 95% of parcels; only the single-parcel endpoint returns the full trail. Without the trail, a committed return can look like a parcel in transit. The per-parcel fetch costs more calls and buys the right answer.
Can I book PostEx parcels from ShipOps?
Yes. Book from the order, choose the pickup address, print the airway bill, and cancel a booking before pickup. The booking runs on your PostEx account at your rates.
My PostEx tracking number is 14 digits but the CPR shows 11. Which is which?
The 14-digit number is PostEx's tracking number. The 11-digit value on a CPR is your own order reference. ShipOps matches on the 14-digit number and knows your reference too.
Connect PostEx in a minute
Install ShipOps, paste the key PostEx already gave you, and your parcels and payouts land in one place. Free to start, no card.