Reconciliation
The Reconciliation API allows you to read the weight and carrier-charge discrepancies raised against your shipments after booking.
The Reconciliation Object
This section describes the different attributes available for a reconciliation.
additional_charge
object
The carrier's own charge, currency and exchange rate. Present only when charge_type is additional_charge. See Reconciliation Additional Charge.
billing_skipped
boolean
Indicates billing has been paused on the record.
charge_after
date
Date the record becomes billable, replacing the default window. null when the default applies.
charged_at
datetime
Time the discrepancy was billed. null until then.
charge_type
enum
What the record charges for. Must be one of weight (the carrier recorded a heavier parcel and the shipment was repriced) or additional_charge (a fee that is not a weight, passed on at the carrier's own figure with no markup).
created_at
datetime
Time reconciliation created.
descripancy_challenged
boolean
Indicates you have disputed the record and billing is on hold. Note the spelling used by the API.
is_charged
boolean
Indicates the discrepancy has been billed.
platform
string
Carrier platform the discrepancy came from e.g. dhl, ups.
reconciliation_stage
enum
Point in the shipment's life the discrepancy was found. Must be one of processing (flagged at drop-off, provisional), delivery (priced off carrier tracking weight, an estimate) or invoice (raised against the carrier's invoice, authoritative).
reconcilliation_id
string
Unique reference for the reconciliation. Note the spelling used by the API.
reversal_transaction_id
string
Unique identifier of the transaction that returned the money, when a billed record is later voided.
shipment_data
array
Per-shipment detail of the discrepancy, including declared and actual weight. See Reconciliation Shipment Data.
shipment_id
string
Unique identifier for the shipment the discrepancy was raised against.
total_exception_charge
number
Total being recovered. This is the amount that will be billed.
total_new_shipment_cost
number
Total at the carrier's reported weight.
total_old_shipment_cost
number
Total originally charged across the shipments in this record.
transaction_id
string
Unique identifier of the wallet transaction that billed the discrepancy. Empty until billed.
updated_at
datetime
Time reconciliation last updated.
voided
boolean
Indicates the record was priced wrongly and has been cancelled. A voided record never bills again.
voided_at
datetime
Time the record was voided.
Billing and the dispute window
A record is not billed the moment it is raised. By default it becomes billable seven days after created_at, and that window is when you can challenge it.
If charge_after is set it replaces the default date. It is set on records whose notice went out late, so the window starts when you were told rather than when the record happened to be written. descripancy_challenged and billing_skipped each hold billing independently of the date.
Webhooks
Three events fire against these records, so you do not have to poll:
reconciliation.flagged— a discrepancy has been raised against one of your shipments.reconciliation.billed— a discrepancy has been charged to your wallet.reconciliation.corrected— a discrepancy charge was wrong and has been put right. The charge is reversed in full, or reversed and re-billed at a corrected amount;correction_typetells you which.
reconciliation.flagged and reconciliation.billed carry a single Reconciliation Shipment Data entry rather than the complete record. reconciliation.corrected carries both records — the one that was corrected and, where there is one, the one that replaced it — because a correction is about the pair.
For the full event catalogue see Webhook Events, for the exact bodies see Reconciliation payloads, and to trigger them against your own staging data use Simulate Reconciliation Webhook.
Was this helpful?