CentraPoint

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#

Run
{
  "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"
}
Run fields
FieldTypeDescription
idrequiredstringRun ID.
sourcerequiredstringnetcash_statement or csv_upload.
statementDaterequiredstring | nullEnd of the statement period (or its start when no end is known).
periodStart, periodEndrequiredstring | nullStatement period.
statusrequiredstringSee Run statuses.
lineCountrequiredintegerStatement lines imported.
matchedrequiredintegerLines matched to a CentraPoint payment.
exceptionsrequiredintegerItems that need attention: mismatches, unmatched lines and not_received payments.
totalsrequiredobjectSee Totals.
openingBalance, closingBalancerequirednumber | nullFrom the statement's opening and closing balance lines, when present.
errorrequiredstring | nullWhy a run failed.
createdAt, completedAtrequiredstringWhen the run started and finished.

Run statuses#

Run statuses
statusMeaning
processingThe statement has been requested or is being imported.
failedThe import failed; see error.
balancedCompleted and nothing needs attention.
exceptionsCompleted 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.

Item fields
FieldTypeDescription
statusrequiredstringSee Item statuses.
referencerequiredstring | nullThe CentraPoint payment reference when matched, otherwise the reference on the statement line.
externalReferencerequiredstring | nullFrom the payment link or EFT order of the matched payment.
expectedAmountrequirednumber | nullThe CentraPoint payment amount.
statementAmountrequirednumber | nullSigned: positive for money in, negative for money out. Null for not_received.
daterequiredstring | nullStatement line date.
descriptionrequiredstring | nullStatement line description (or the payment description for not_received).
noterequiredstring | nullWhy the item has this status.

Item statuses#

Item statuses
statusMeaningNeeds attention
matchedThe line confirms a CentraPoint payment (a pending payment it confirms is completed).No
amount_mismatchMatched by reference, but the amount differs.Yes
exceptionMatched, 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_receiptMoney in that can't be tied to a payment. Includes deposits that look like an EFT order until staff approve it.Yes
unmatched_debitMoney out (unpaid, reversal, refund) that can't be tied to a payment.Yes
not_receivedA 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#

GET/api/v1/reconciliation/runs
List query parameters
FieldTypeDescription
fromoptionalstring (YYYY-MM-DD)Runs started on or after this day (South African time).
tooptionalstring (YYYY-MM-DD)Runs started on or before this day.
limitoptionalinteger1–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#

GET/api/v1/reconciliation/runs/{id}
curl -X GET "https://app.centrapoint.co.za/api/v1/reconciliation/runs/cmg3r7c0n0013run0001abcd" \
  -H "Authorization: Bearer $CENTRAPOINT_API_KEY"
200 OK (items)
{
  "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#

Reconciliation errors
StatuserrorWhen
400invalid_requestfrom or to not YYYY-MM-DD.
403plan_restrictedPlan lacks the API or Reconciliation.
404not_foundNo run with this ID in your organisation.
401 / 429 / 500unauthorized / rate_limited / internal_errorSee Errors