API
Reconciliation results API
Read the results of statement reconciliation runs: totals, matched lines, mismatches and payments missing from the statement.
On this page
Overview#
Reconciliation compares money on a statement with payments in CentraPoint. Runs are created in the dashboard: Netcash merchant statements are fetched automatically (daily), and CSV statements from other gateways or banks can be imported. See Debit orders & reconciliation for how matching works. This read-only API lets your finance or ERP systems pull the results.
Requires API access and the Reconciliation plan feature (Business, Enterprise and Internal plans).
The run object#
{
"id": "cmg3r7c0n0013run0001abcd",
"source": "netcash_statement",
"statementDate": "2026-09-24T22:00:00.000Z",
"periodStart": "2026-09-23T22:00:00.000Z",
"periodEnd": "2026-09-24T22:00:00.000Z",
"status": "exceptions",
"lineCount": 42,
"matched": 38,
"exceptions": 2,
"totals": {
"receipts": 48250.5,
"fees": 612.4,
"refunds": 499,
"payouts": 45000,
"unpaids": 350
},
"openingBalance": 1203.55,
"closingBalance": 3342.71,
"error": null,
"createdAt": "2026-09-25T02:00:03.000Z",
"completedAt": "2026-09-25T02:04:11.000Z"
}| Field | Type | Description |
|---|---|---|
idrequired | string | Run ID. |
sourcerequired | string | netcash_statement or csv_upload. |
statementDaterequired | string | null | End of the statement period (or its start when no end is known). |
periodStart, periodEndrequired | string | null | Statement period. |
statusrequired | string | See Run statuses. |
lineCountrequired | integer | Statement lines imported. |
matchedrequired | integer | Lines matched to a CentraPoint payment. |
exceptionsrequired | integer | Items that need attention: mismatches, unmatched lines and not_received payments. |
totalsrequired | object | See Totals. |
openingBalance, closingBalancerequired | number | null | From the statement's opening and closing balance lines, when present. |
errorrequired | string | null | Why a run failed. |
createdAt, completedAtrequired | string | When the run started and finished. |
Run statuses#
| status | Meaning |
|---|---|
processing | The statement has been requested or is being imported. |
failed | The import failed; see error. |
balanced | Completed and nothing needs attention. |
exceptions | Completed and at least one item needs attention (exceptions > 0). |
Totals#
Positive sums of the statement lines in each category: receipts (collections), fees, refunds, payouts (settlements to your bank) and unpaids (returned debit orders and reversals). Fees, payouts and balance lines are counted in totals but are not items.
Items#
GET /api/v1/reconciliation/runs/{id} adds an items array: one item per statement line (except ignored lines such as fees, payouts and balances), plus not_received items.
| Field | Type | Description |
|---|---|---|
statusrequired | string | See Item statuses. |
referencerequired | string | null | The CentraPoint payment reference when matched, otherwise the reference on the statement line. |
externalReferencerequired | string | null | From the payment link or EFT order of the matched payment. |
expectedAmountrequired | number | null | The CentraPoint payment amount. |
statementAmountrequired | number | null | Signed: positive for money in, negative for money out. Null for not_received. |
daterequired | string | null | Statement line date. |
descriptionrequired | string | null | Statement line description (or the payment description for not_received). |
noterequired | string | null | Why the item has this status. |
Item statuses#
| status | Meaning | Needs attention |
|---|---|---|
matched | The line confirms a CentraPoint payment (a pending payment it confirms is completed). | No |
amount_mismatch | Matched by reference, but the amount differs. | Yes |
exception | Matched, but something else is wrong; see note (e.g. money received for a failed payment, a reversal after completion, or a refund CentraPoint doesn't know about). | Yes |
unmatched_receipt | Money in that can't be tied to a payment. Includes deposits that look like an EFT order until staff approve it. | Yes |
unmatched_debit | Money out (unpaid, reversal, refund) that can't be tied to a payment. | Yes |
not_received | A payment CentraPoint completed that no statement line confirms. See below. | Yes |
When not_received applies#
- Only for Netcash statement runs (
source: netcash_statement) that have completed (not CSV uploads). - Only for completed Netcash Pay Now or Netcash debit order payments, paid within the statement period.
- Only once they are more than 3 days old (relative to the end of the period, or now if earlier), to allow for settlement delays.
- Only payments not matched to any statement line. At most 500 are listed per run.
List runs#
/api/v1/reconciliation/runs| Field | Type | Description |
|---|---|---|
fromoptional | string (YYYY-MM-DD) | Runs started on or after this day (South African time). |
tooptional | string (YYYY-MM-DD) | Runs started on or before this day. |
limitoptional | integer | 1–100, default 20. Newest first. |
curl -X GET "https://app.centrapoint.co.za/api/v1/reconciliation/runs?from=2026-09-01&to=2026-09-30" \
-H "Authorization: Bearer $CENTRAPOINT_API_KEY"Returns { "data": [ run, … ] } without items.
Get a run#
/api/v1/reconciliation/runs/{id}curl -X GET "https://app.centrapoint.co.za/api/v1/reconciliation/runs/cmg3r7c0n0013run0001abcd" \
-H "Authorization: Bearer $CENTRAPOINT_API_KEY"{
"id": "cmg3r7c0n0013run0001abcd",
"source": "netcash_statement",
"statementDate": "2026-09-24T22:00:00.000Z",
"periodStart": "2026-09-23T22:00:00.000Z",
"periodEnd": "2026-09-24T22:00:00.000Z",
"status": "exceptions",
"lineCount": 42,
"matched": 38,
"exceptions": 2,
"totals": {
"receipts": 48250.5,
"fees": 612.4,
"refunds": 499,
"payouts": 45000,
"unpaids": 350
},
"openingBalance": 1203.55,
"closingBalance": 3342.71,
"error": null,
"createdAt": "2026-09-25T02:00:03.000Z",
"completedAt": "2026-09-25T02:04:11.000Z",
"items": [
{
"status": "matched",
"reference": "CP-20260924-9F3A1C7B",
"externalReference": "ORDER-1001",
"expectedAmount": 499,
"statementAmount": 499,
"date": "2026-09-24T00:00:00.000Z",
"description": "PAYNOW CP-20260924-9F3A1C7B",
"note": "Confirmed by statement"
},
{
"status": "amount_mismatch",
"reference": "CP-20260924-41D07E2A",
"externalReference": "ORDER-1002",
"expectedAmount": 1200,
"statementAmount": 1100,
"date": "2026-09-24T00:00:00.000Z",
"description": "PAYNOW CP-20260924-41D07E2A",
"note": "Amount differs: statement 1100.00 vs transaction 1200.00"
},
{
"status": "not_received",
"reference": "CP-20260920-7C21A9F0",
"externalReference": "ORDER-0990",
"expectedAmount": 250,
"statementAmount": null,
"date": null,
"description": "Website hosting",
"note": "Completed in CentraPoint but not on the statement after 3 days"
}
]
}Webhook#
reconciliation.completed is sent when a run finishes matching. Its data is a summary: runId, status, exceptions, lineCount, statementDate and totals. Fetch the run for the items. See Webhooks.
Errors#
| Status | error | When |
|---|---|---|
| 400 | invalid_request | from or to not YYYY-MM-DD. |
| 403 | plan_restricted | Plan lacks the API or Reconciliation. |
| 404 | not_found | No run with this ID in your organisation. |
| 401 / 429 / 500 | unauthorized / rate_limited / internal_error | See Errors |