Skip to main content
POST
Run a reconciliation

Authorizations

Authorization
string
header
required

Same flow; ledger:write is required for any mutation.

Body

application/json
source
string
required

Name the external system you're reconciling against.

Example:

"cobo"

items
object[]
required
external_reference
string

Free-form pointer back to the snapshot in the external system.

Example:

"cobo:2026-05-14:eth"

note
string
from
string<date-time>
to
string<date-time>
window_seconds
integer
default:86400

Allowed |posting.value_date - item.at| in seconds.

strategy
enum<string>
default:exact

Matching strategy. exact pairs an external row with at most one posting (default, pre-existing behavior). sum_in_window pairs an external row with a subset of up to five postings whose summed amount equals the external amount within auto_resolve_below_minor_units, with every posting in the subset inside +/- window_seconds of the external row's at.

Available options:
exact,
sum_in_window
auto_resolve_below_minor_units
default:0

Absolute minor-unit tolerance budget for auto-resolving small breaks. Accepts a decimal string (recommended) or an integer on write; returned as a string. A match whose |sum(postings) - external_amount| residual is <= this value is treated as matched and emits reconciliation.break_auto_resolved. Default "0" = strictly equal.

Pattern: ^\d+$

Response

201 - application/json

Run executed

object
enum<string>
required
Available options:
reconciliation_run
id
string<uuid>
required
source
string
required
source_id
string<uuid>
required
status
enum<string>
required
Available options:
running,
ready,
completed
matched_count
integer
required
unmatched_count
integer
required
created_at
string<date-time>
required
external_reference
string | null
matched
object[]
unmatched_external
object[]
unmatched_internal
object[]