COD payments

How TCS pays your COD, and how to check it

TCS does not pay per parcel or per receipt. It runs a weekly running account: freight for every parcel is invoiced in the week it was booked, COD is paid in the week it was delivered, and a negative balance carries forward and is deducted from the next payout. One invoice equals one bank transfer. ShipOps reproduces that arithmetic to the paisa.

When TCS pays

Each TCS payment period covers one week of bookings and deliveries, named the way TCS names it: 08_Aug_to_14_Aug_2024. A parcel booked in week one and delivered in week two appears on two invoices: a freight-only line (negative) in week one, and a COD line in week two. A return appears the same way, with no COD on the second line, so the account goes negative by the return charges. That negative balance is not written off; it is carried into the next week and deducted from that payout.

Across the production account ShipOps reconciled, every weekly payout from July to August 2026 fit that model exactly: gross COD for the week, minus freight and GST, minus withholding, minus the carried-forward balance, equals the transfer.

The payout for a week is one bank transfer even when TCS's row-level payment dates split across two processing batches; the receipt is the week, not the batch.

What the TCS payout receipt contains

TCS's Payment Detail API gives per-parcel rows: tracking number, COD amount, courier charges, GST, status code, dates and the payment period. The invoice detail report from the portal adds the week's totals: amount payable, paid, adjusted, returns, and net outstanding, with the week's withholding tax. No API endpoint returns the invoice total; ShipOps computes it from the rows and checks it against the portal's figure when you have one.

Withholding is 2% income tax plus 2% sales tax withholding on the COD, with a further 2% for a non-filer. It is deposited with FBR on your behalf and never remitted, never shown as a separate invoice. TCS's delivery charge, as printed on the rows, is inclusive of GST; treating it as exclusive matched none of 282 invoice rows, treating it as inclusive matched every one.

TCS does not expose invoice numbers through its documented APIs, and the "payment invoice" endpoint answers success with zero rows for every input ShipOps tried, including TCS's own sample. So the receipt ShipOps files is synthesised from the Payment Detail rows: one receipt per payment week, containing exactly the rows that week paid.

Where the money goes wrong

These are the discrepancies ShipOps finds on TCS receipts, in the order they usually cost the most:

  • Delivered on the trail, absent from the payment plane. TCS marked the parcel OK Delivered; no payment row ever carries it. TCS's own "delivered" and "paid" are different systems, and the gap between them is where money sits.
  • Paid before delivery. One payout run paid a row whose delivery date was the day after the payment. Cumulative totals stayed exact, so only a per-week check caught it. It is not money lost, but it is a sign that TCS's weekly cut-off is not a wall.
  • A return's freight charged, then its COD never credited. The booking week bills the freight; a return means no COD line ever comes. That is correct, but it is also the whole RTO cost, and it hides in the carry-forward unless itemised.
  • Short COD on a partial delivery. POK and PD rows carry less than the order's COD. ShipOps flags the amount mismatch rather than marking the order paid.
  • Withholding at 6% instead of 4%. The non-filer surcharge applied to an account that is on the active taxpayer list. Worth a conversation with TCS and your accountant.

What ShipOps does with a TCS payout

Automatic

ShipOps sweeps TCS's Payment Detail API in 31-day chunks on a schedule, takes the paid rows, groups them into the week they were paid, and files one receipt per week with the carried-forward balance applied. The receipt's net is a number you can find on your bank statement.

Every row is matched to a parcel by tracking number. The settlement dashboard shows what reached the bank, what TCS still owes (delivered parcels with no paid row yet), and what is at risk (short-paid, partial, charged twice). Withholding tax is itemised on its own so your accountant can reclaim it.

Because TCS's delivered status and TCS's payment plane disagree more often than other couriers, ShipOps also lets a TCS payment row promote a parcel the trail has forgotten to Delivered, dated by the invoice. The invoice only ever fills silence; it never overrules a trail that says otherwise.

What ShipOps does not claim for TCS.

Invoice numbers cannot be fetched from TCS's documented API; the weekly receipt ShipOps files is reconstructed from payment rows and checked against the portal's totals rather than downloaded from TCS.

TCS enumerates payments per account, not per cost center, so a multi-brand account sees one combined payout per week.

Questions merchants ask about TCS payments

When does TCS pay COD?

Weekly. TCS runs a running account by payment period, one week at a time. COD for a parcel is paid in the week it was delivered; its freight was invoiced in the week it was booked. One invoice is one bank transfer.

Why is my TCS payout smaller than this week's COD?

Three deductions: freight and GST for every parcel booked this week (including ones not yet delivered), 4% withholding tax on the COD (6% for a non-filer), and any negative balance carried forward from last week, usually return charges.

What does the 2% + 2% on a TCS invoice mean?

Income tax withholding and sales tax withholding, each 2% of the COD, deposited with FBR on your behalf. Reclaimable. A third 2% appears only for a non-filer.

How do I check a TCS payout against my orders?

Pull the Payment Detail rows for the week, match each tracking number to a delivered order, compare COD, and check the carried-forward balance against last week. ShipOps does exactly that every sync and shows the result on the Money screen.

Can ShipOps download my TCS invoice?

No, because TCS's API does not list invoice numbers and its invoice endpoint returns no rows. ShipOps reconstructs the week from payment rows instead and checks the total against the portal when you have it.

See what TCS still owes you

Connect TCS and ShipOps matches every payout against your orders. Short-paid, skipped and zero-collected parcels come out as a list you can send to your account manager. Free to start.