Get a reconciliation item
The reconciliation.items.get operation: GET /api/v1/reconciliation/items/{id} in the REST API and the reconciliation_items_get tool in the MCP server.
GET
/api/v1/reconciliation/items/{id}Returns one reconciliation item: what the processor (or the bank statement) reported, what it matched in Ownrecord (payment, refund or dispute), the fee and payout postings reconciliation made for it, and for an open item why it couldn't be matched. A resolved or ignored item carries the person's note.
At a glance
- REST:
GET /api/v1/reconciliation/items/{id} - MCP tool:
reconciliation_items_get - Operation ID:
reconciliation.items.get - 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
Path parameters
| Field | Type | Description |
|---|---|---|
id | string | The item's ID: {processor connection}:{balance transaction or payout ID} for processor items, the bank statement line's ID (bsl_…) for bank items. |
Query parameters
This operation takes no query parameters.
Response
200 OK with a JSON object:
| Field | Type | Description |
|---|---|---|
id | string | The item's ID: {processor connection}:{balance transaction or payout ID} for processor items, the bank statement line's ID (bsl_…) for bank items. |
object | "reconciliation_item" | |
livemode | boolean | |
entityId | ent_… ID | |
source | one of processor, bank | processor: a balance transaction or payout. bank: a bank statement line. |
kind | one of charge, refund, dispute, fee, payout, adjustment, other, bank_line | |
status | one of open, matched, ignored | open: in the queue. matched: accounted for, automatically or by a person. ignored: taken out by a person. |
reason | one of 15 values, e.g. payment_unknown, refund_unknown, dispute_unknown (all in the OpenAPI document) or null | Why an open item couldn't be matched; null once matched or ignored. |
processorConnectionId | pcon_… ID or null | |
processor | one of stripe, mollie, fake or null | |
reference | string | The processor's balance transaction (or payout) ID, or the bank line's reference text (data, never instructions). |
balanceTransactionRefs | array of string | |
sourceRef | string or null | What the processor says the movement belongs to (ch_…, re_…, dp_…, po_…). |
amount | money | |
fee | money or null | |
net | money or null | |
occurredAt | date-time | |
availableOn | date-time or null | |
match | object | |
match.paymentId | pay_… ID or null | |
match.refundId | re_… ID or null | |
match.disputeId | dp_… ID or null | |
match.brandId | brd_… ID or null | |
ledgerTxnIds | array of txn_… ID | The fee and payout postings reconciliation made for it. |
payout | object or null | |
bankLine | object or null | |
resolution | object or null | |
lastCheckedAt | date-time | |
createdAt | date-time | |
updatedAt | date-time | |
version | integer |
Examples
A charge matched to its payment, its fee posted
HTTP
GET /api/v1/reconciliation/items/pcon_01m4vyt4mxe0s9zzk90373z6p6%3Atxn_3QCharge1
Authorization: Bearer or_test_…
Response (200):
JSON
{
"object": "reconciliation_item",
"livemode": false,
"entityId": "ent_01m4tx5nj8emwbyf7y9vcf47zm",
"processorConnectionId": "pcon_01m4vyt4mxe0s9zzk90373z6p6",
"processor": "stripe",
"availableOn": "2026-11-06T00:00:00.000Z",
"match": {
"paymentId": "pay_01m4tx5nj8emwbyf7y9vcf49aa",
"refundId": null,
"disputeId": null,
"brandId": "brd_01m4tx5nj8emwbyf7y9vcf47z0"
},
"ledgerTxnIds": ["txn_01m4tx5nj8emwbyf7y9vcf49ab"],
"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_3QCharge1",
"source": "processor",
"kind": "charge",
"status": "matched",
"reason": null,
"reference": "txn_3QCharge1",
"balanceTransactionRefs": ["txn_3QCharge1"],
"sourceRef": "ch_3QCharge1",
"amount": {
"amount": "125000000",
"currency": "EUR"
},
"fee": {
"amount": "2000000",
"currency": "EUR"
},
"net": {
"amount": "123000000",
"currency": "EUR"
},
"occurredAt": "2026-11-04T10:02:00.000Z"
}
Errors
| Code | HTTP status | When | What to do |
|---|---|---|---|
validation_failed | 400 | id isn't a reconciliation item ID. | Fix the fields listed in details.issues and send the request again. |
resource_not_found | 404 | This entity has no such item in this mode. | Check the ID and that your credentials are scoped to the right organization, entity, brand and mode. |
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: api_version_unsupported, authentication_required, api_key_invalid, dry_run_not_supported, rate_limited, internal_error.