Courier integration

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.
0040 is reversible; 0037, 0039 and 0032 are not. Reading "Return Process Initiated" as a return would make you give up on parcels PostEx is about to attempt again. Reading the committed codes as "in transit" because the last scan was a transit hub would make you expect a delivery that is never coming. ShipOps keys off the codes, never the message text, which is also why the API's misspelling "Return Process Intiated" never mattered.
PostEx's "no record" is final. When PostEx says it has no record of a tracking number for a parcel that never moved and was booked over a week ago, twice a day apart, ShipOps stops asking. PostEx is the only courier where that is safe; TCS and M&P say the same words about a booking that simply has not been scanned yet.

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.