List the processor connections' reconciliation
The reconciliation.connections.list operation: GET /api/v1/reconciliation/connections in the REST API and the reconciliation_connections_list tool in the MCP server.
/api/v1/reconciliation/connectionsLists the legal entity's processor connections in the mode of the request with where their reconciliation stands: the cursor (the latest balance transaction read), the last run (scheduled daily or asked for, what it read, matched, posted and queued, or why it failed), a run asked for and not finished yet, and the open items.
At a glance
- REST:
GET /api/v1/reconciliation/connections - MCP tool:
reconciliation_connections_list - Operation ID:
reconciliation.connections.list - Scope: Legal entity
- Permission:
ledger:read - Risk tier:
read - Dry run: Not supported
- Idempotency: Not needed (read only)
- Modes: Test and live
- Authentication: API key with the
ledger:readscope - Since: M8
Request
Query parameters
This operation takes no query parameters.
Response
200 OK with a JSON object:
| Field | Type | Description |
|---|---|---|
object | "list" | |
data | array of object | |
data[].object | "reconciliation_connection" | |
data[].processorConnectionId | pcon_… ID | |
data[].livemode | boolean | |
data[].processor | one of stripe, mollie, fake | |
data[].label | string | |
data[].status | one of active, degraded, disconnected | The connection's status: disconnected ones aren't read. |
data[].cursor | date-time or null | The creation time of the latest balance transaction read; the next run reads from an hour before it. |
data[].lastRun | object or null | |
data[].lastSucceededAt | date-time or null | |
data[].runRequestedAt | date-time or null | A run asked for that hasn't finished yet (the job runs it within a minute). |
data[].openItems | integer | Open items of this connection in the queue. |
Examples
One Stripe connection, reconciled this morning
GET /api/v1/reconciliation/connections
Authorization: Bearer or_test_…
Response (200):
{
"object": "list",
"data": [
{
"object": "reconciliation_connection",
"processorConnectionId": "pcon_01m4vyt4mxe0s9zzk90373z6p6",
"livemode": false,
"processor": "stripe",
"label": "Stripe (test)",
"status": "active",
"cursor": "2026-11-05T00:10:00.000Z",
"lastRun": {
"trigger": "schedule",
"startedAt": "2026-11-05T04:00:00.000Z",
"finishedAt": "2026-11-05T04:00:12.000Z",
"status": "succeeded",
"readFrom": "2026-11-03T23:59:00.000Z",
"counts": {
"read": 42,
"recorded": 40,
"matched": 39,
"opened": 1,
"posted": 35,
"rechecked": 0,
"bankConfirmed": 1
},
"error": null
},
"lastSucceededAt": "2026-11-05T04:00:12.000Z",
"runRequestedAt": null,
"openItems": 1
}
]
}
Errors
| Code | HTTP status | When | What to do |
|---|---|---|---|
scope_required | 400 | The request names no legal entity (an org key without Ownrecord-Entity, or a brand key: reconciliation belongs to the entity). | Call the operation with credentials or a target at its level: an organization, a legal entity, a brand or the platform (details.required_scope). |
permission_denied | 403 | You can't read this entity's ledger (ledger:read; brand-scoped members never see it). | Ask an organization owner or admin for a role or scope that allows this action. |
livemode_not_allowed | 403 | You have no live-mode access, so you can't use live reconciliation. | Use test mode, or credentials for the target's mode. Developers need live access granted by an organization owner or admin. |
It can also return these common errors: validation_failed, api_version_unsupported, authentication_required, api_key_invalid, resource_not_found, dry_run_not_supported, rate_limited, internal_error.