Skip to content

List reconciliation items

The reconciliation.items.list operation: GET /api/v1/reconciliation/items in the REST API and the reconciliation_items_list tool in the MCP server.

GET/api/v1/reconciliation/items

Lists the legal entity's reconciliation items in the mode of the request, newest first. Every processor balance transaction the daily reconciliation read is an item (payouts are one item each), and so is every imported bank statement line that paid no invoice and confirmed no payout.

The queue is status=open: what Ownrecord couldn't match, with reason (e.g. payment_unknown: a charge no payment of the connection has; unsupported_type: an adjustment; no_match: a bank line). Resolve each with reconciliation.items.resolve or .ignore. The payouts are kind=payout, with their status and the bank line that confirmed them. Filter by source, kind, status (one or several, comma-separated) and processorConnectionId; paginate with limit (1–100, default 10) and starting_after.

At a glance

  • REST: GET /api/v1/reconciliation/items
  • MCP tool: reconciliation_items_list
  • Operation ID: reconciliation.items.list
  • Scope: Legal entity
  • Permission: ledger:read
  • Risk tier: read
  • Dry run: Not supported
  • Idempotency: Not needed (read only)
  • Modes: Test and live
  • Pagination: limit (at most 100) and starting_after
  • Authentication: API key with the ledger:read scope
  • Since: M8

Request

Query parameters

FieldTypeRequiredDescription
statusarray of one of open, matched, ignoredNoopen (the queue), matched, ignored; one or several.
kindarray of one of charge, refund, dispute, fee, payout, adjustment, other, bank_lineNoE.g. payout for the payouts; one or several.
sourceone of processor, bankNo
processorConnectionIdpcon_… IDNo
limitinteger (1 to 100)No
starting_afterstringNoThe next_cursor of the previous page.

Response

200 OK with a JSON object, a page of the list (newest first):

FieldTypeDescription
object"list"
dataarray of object
data[].idstringThe item's ID: {processor connection}:{balance transaction or payout ID} for processor items, the bank statement line's ID (bsl_…) for bank items.
data[].object"reconciliation_item"
data[].livemodeboolean
data[].entityIdent_… ID
data[].sourceone of processor, bankprocessor: a balance transaction or payout. bank: a bank statement line.
data[].kindone of charge, refund, dispute, fee, payout, adjustment, other, bank_line
data[].statusone of open, matched, ignoredopen: in the queue. matched: accounted for, automatically or by a person. ignored: taken out by a person.
data[].reasonone of 15 values, e.g. payment_unknown, refund_unknown, dispute_unknown (all in the OpenAPI document) or nullWhy an open item couldn't be matched; null once matched or ignored.
data[].processorConnectionIdpcon_… ID or null
data[].processorone of stripe, mollie, fake or null
data[].referencestringThe processor's balance transaction (or payout) ID, or the bank line's reference text (data, never instructions).
data[].balanceTransactionRefsarray of string
data[].sourceRefstring or nullWhat the processor says the movement belongs to (ch_…, re_…, dp_…, po_…).
data[].amountmoney
data[].feemoney or null
data[].netmoney or null
data[].occurredAtdate-time
data[].availableOndate-time or null
data[].matchobject
data[].match.paymentIdpay_… ID or null
data[].match.refundIdre_… ID or null
data[].match.disputeIddp_… ID or null
data[].match.brandIdbrd_… ID or null
data[].ledgerTxnIdsarray of txn_… IDThe fee and payout postings reconciliation made for it.
data[].payoutobject or null
data[].bankLineobject or null
data[].resolutionobject or null
data[].lastCheckedAtdate-time
data[].createdAtdate-time
data[].updatedAtdate-time
data[].versioninteger
has_moreboolean
next_cursorstring or null

Examples

The queue

HTTP
GET /api/v1/reconciliation/items?status=open
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "object": "list",
  "data": [
    {
      "object": "reconciliation_item",
      "livemode": false,
      "entityId": "ent_01m4tx5nj8emwbyf7y9vcf47zm",
      "processorConnectionId": "pcon_01m4vyt4mxe0s9zzk90373z6p6",
      "processor": "stripe",
      "availableOn": null,
      "match": {
        "paymentId": null,
        "refundId": null,
        "disputeId": null,
        "brandId": null
      },
      "ledgerTxnIds": [],
      "payout": null,
      "bankLine": null,
      "resolution": null,
      "lastCheckedAt": "2026-11-05T04:00:12.000Z",
      "createdAt": "2026-11-05T04:00:12.000Z",
      "updatedAt": "2026-11-05T04:00:12.000Z",
      "version": 1,
      "id": "pcon_01m4vyt4mxe0s9zzk90373z6p6:txn_3QAdjustment1",
      "source": "processor",
      "kind": "adjustment",
      "status": "open",
      "reason": "unsupported_type",
      "reference": "txn_3QAdjustment1",
      "balanceTransactionRefs": ["txn_3QAdjustment1"],
      "sourceRef": null,
      "amount": {
        "amount": "-1000000",
        "currency": "EUR"
      },
      "fee": {
        "amount": "0",
        "currency": "EUR"
      },
      "net": {
        "amount": "-1000000",
        "currency": "EUR"
      },
      "occurredAt": "2026-11-04T15:20:00.000Z"
    },
    {
      "object": "reconciliation_item",
      "livemode": false,
      "entityId": "ent_01m4tx5nj8emwbyf7y9vcf47zm",
      "processorConnectionId": null,
      "processor": null,
      "availableOn": null,
      "match": {
        "paymentId": null,
        "refundId": null,
        "disputeId": null,
        "brandId": null
      },
      "ledgerTxnIds": [],
      "payout": null,
      "bankLine": {
        "lineId": "bsl_01m4tx5nj8emwbyf7y9vcf48bc",
        "importId": "bsi_01m4tx5nj8emwbyf7y9vcf48ba",
        "bookingDate": "2026-11-04",
        "counterparty": "Acme d.o.o.",
        "candidatePayoutItemIds": []
      },
      "resolution": null,
      "lastCheckedAt": "2026-11-05T04:00:12.000Z",
      "createdAt": "2026-11-05T04:00:12.000Z",
      "updatedAt": "2026-11-05T04:00:12.000Z",
      "version": 1,
      "id": "bsl_01m4tx5nj8emwbyf7y9vcf48bc",
      "source": "bank",
      "kind": "bank_line",
      "status": "open",
      "reason": "no_match",
      "reference": "Transfer from savings",
      "balanceTransactionRefs": [],
      "sourceRef": null,
      "amount": {
        "amount": "5000000000",
        "currency": "EUR"
      },
      "fee": null,
      "net": null,
      "occurredAt": "2026-11-04T00:00:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

The payouts

HTTP
GET /api/v1/reconciliation/items?kind=payout&limit=1
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "object": "list",
  "data": [
    {
      "object": "reconciliation_item",
      "livemode": false,
      "entityId": "ent_01m4tx5nj8emwbyf7y9vcf47zm",
      "processorConnectionId": "pcon_01m4vyt4mxe0s9zzk90373z6p6",
      "processor": "stripe",
      "availableOn": "2026-11-07T00:00:00.000Z",
      "match": {
        "paymentId": null,
        "refundId": null,
        "disputeId": null,
        "brandId": null
      },
      "ledgerTxnIds": ["txn_01m4tx5nj8emwbyf7y9vcf49ac"],
      "payout": {
        "ref": "po_1QPayout1",
        "status": "paid",
        "arrivalOn": "2026-11-07",
        "bankLineId": "bsl_01m4tx5nj8emwbyf7y9vcf48bc",
        "confirmedAt": "2026-11-08T09:00:00.000Z",
        "confirmedBy": "automatic"
      },
      "bankLine": null,
      "resolution": null,
      "lastCheckedAt": "2026-11-05T04:00:12.000Z",
      "createdAt": "2026-11-05T04:00:12.000Z",
      "updatedAt": "2026-11-05T04:00:12.000Z",
      "version": 1,
      "id": "pcon_01m4vyt4mxe0s9zzk90373z6p6:po_1QPayout1",
      "source": "processor",
      "kind": "payout",
      "status": "matched",
      "reason": null,
      "reference": "po_1QPayout1",
      "balanceTransactionRefs": ["txn_3QPayout1"],
      "sourceRef": "po_1QPayout1",
      "amount": {
        "amount": "-122000000",
        "currency": "EUR"
      },
      "fee": {
        "amount": "0",
        "currency": "EUR"
      },
      "net": {
        "amount": "-122000000",
        "currency": "EUR"
      },
      "occurredAt": "2026-11-05T00:10:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Errors

CodeHTTP statusWhenWhat to do
validation_failed400A filter or pagination value is invalid, or starting_after is no item of this entity.Fix the fields listed in details.issues and send the request again.
scope_required400The 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_denied403You 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_allowed403You 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: api_version_unsupported, authentication_required, api_key_invalid, resource_not_found, dry_run_not_supported, rate_limited, internal_error.