> For the complete documentation index, see [llms.txt](https://docs.terminal.africa/tship/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.terminal.africa/tship/reconciliation.md).

# 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](/tship/miscallaneous/reconciliation-additional-charge.md).                                            |
| 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](/tship/miscallaneous/reconciliation-shipment-data.md).                                                                                              |
| 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](/tship/miscallaneous/reconciliation-shipment-data.md) 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](/tship/miscallaneous/webhook-events.md), for the exact bodies see [Reconciliation payloads](/tship/miscallaneous/sample-webhook-event-payloads/reconciliation.md), and to trigger them against your own staging data use [Simulate Reconciliation Webhook](/tship/reconciliation/simulate-reconciliation-webhook.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.terminal.africa/tship/reconciliation.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
