# 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.

Lists 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:read` scope
- **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

```http
GET /api/v1/reconciliation/connections
Authorization: Bearer or_test_…
```

Response (`200`):

```json
{
  "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`](https://ownrecord.io/docs/reference/errors.md#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`](https://ownrecord.io/docs/reference/errors.md#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`](https://ownrecord.io/docs/reference/errors.md#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](https://ownrecord.io/docs/reference.md#common-errors): [`validation_failed`](https://ownrecord.io/docs/reference/errors.md#validation_failed), [`api_version_unsupported`](https://ownrecord.io/docs/reference/errors.md#api_version_unsupported), [`authentication_required`](https://ownrecord.io/docs/reference/errors.md#authentication_required), [`api_key_invalid`](https://ownrecord.io/docs/reference/errors.md#api_key_invalid), [`resource_not_found`](https://ownrecord.io/docs/reference/errors.md#resource_not_found), [`dry_run_not_supported`](https://ownrecord.io/docs/reference/errors.md#dry_run_not_supported), [`rate_limited`](https://ownrecord.io/docs/reference/errors.md#rate_limited), [`internal_error`](https://ownrecord.io/docs/reference/errors.md#internal_error).
