> ## Documentation Index
> Fetch the complete documentation index at: https://developers.paychoice.com.au/llms.txt
> Use this file to discover all available pages before exploring further.

# Reconciliation

> Look up charges by your own reference, retrieve a charge by ID, and close the loop on anything a webhook didn't tell you.

Webhooks are the primary way you learn a charge's outcome, but every integration needs a way to ask "what happened to order X?" without depending on a notification having arrived. Two endpoints cover it.

## Look up by your reference

`GET /charge` lists charges and accepts a `reference` filter, so you can find a charge from your own order number without storing the PayChoice ID.

```bash theme={null}
curl "https://api-sandbox.paychoice.com.au/api/v5/charge?reference=INV-4325454" \
  -u "$PAYCHOICE_USERNAME:$PAYCHOICE_PASSWORD"
```

```json theme={null}
{
  "charge_list": [
    {
      "id": "f33a990c-237c-4e88-9bd1-eb2d655bb88c",
      "reference": "INV-4325454",
      "amount": "10.00",
      "currency": "AUD",
      "status": "Approved",
      "status_code": 0,
      "error": null,
      "error_code": "00",
      "created": "2026-11-04T02:15:31.118Z",
      "fee_applied": "No",
      "fee_amount": 0,
      "original_amount": 0,
      "meta_data_reference": null,
      "link": { "href": "/api/v5/charge/f33a990c-237c-4e88-9bd1-eb2d655bb88c", "rel": "self" }
    }
  ],
  "object_type": "charge_list",
  "from_item": 1,
  "to_item": 1,
  "total_count": 1
}
```

**reference** `string`

Return only charges whose reference matches.

**date\[from]** `datetime`

Start of the window, UTC.

**date\[to]** `datetime`

End of the window, UTC.

**page\[number]** `integer` (default: 0)

Page to return.

**page\[items]** `integer` (default: 100)

Items per page.

**merchant\_guid** `uuid`

Required for agency credentials.

`from_item` / `to_item` are the positions of the first and last item on the page; `total_count` is the number of charges matching the filter.

> [!NOTE]
>
> On this endpoint `status_code` is an integer and the surcharge fields are `fee_applied` / `fee_amount` / `original_amount` — different from the create-charge response. See [Charge status](https://developers.paychoice.com.au/reference/charge-status.md).

## Retrieve by charge ID

```bash theme={null}
curl https://api-sandbox.paychoice.com.au/api/v5/charge/f33a990c-237c-4e88-9bd1-eb2d655bb88c \
  -u "$PAYCHOICE_USERNAME:$PAYCHOICE_PASSWORD"
```

Returns the same `charge` object under a `charge` key. A charge that doesn't exist returns `404`.

## A reconciliation loop

A simple, robust pattern:

1. When you create a charge (or hand off to the Widget), record your reference with a status of *pending*.
2. On each verified [webhook](https://developers.paychoice.com.au/getting-the-result/webhooks.md), update the record by `reference` (or by `id` once you have it).
3. On a schedule — every few minutes is plenty — list charges for references still *pending* after a reasonable window and update from `status_code`.
4. If a notification was missed, re-send it with [Retry Notification](https://developers.paychoice.com.au/getting-the-result/webhooks.md#missed-notifications) so your webhook handler stays the single place that fulfils orders.

Bank charges can legitimately sit at `Processing` (`9`) for up to three business days, so don't treat that as a failure.

## Next

* [Tokens](https://developers.paychoice.com.au/storing-payment-methods/tokens.md) — keep a payment method on file.
* [Refunds](https://developers.paychoice.com.au/after-the-payment/refunds.md) — when an order is cancelled.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.