For the complete documentation index, see llms.txt. This page is also available as Markdown.

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.

Attribute
Description

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_type tells 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?