Skip to content

Commit Reconciliation Endpoint

POST
/api/v1/budget/reconciliations
curl --request POST \
--url https://example.com/api/v1/budget/reconciliations \
--header 'Content-Type: application/json' \
--data '{ "account_id": 1, "statement_date": "2026-04-15", "statement_balance": 1, "opening_balance": 1, "write_snapshot": true, "replace_snapshot": false }'

Lock the live cleared transactions of the statement window as reconciled.

A non-zero difference is allowed and never produces an adjustment transaction. With write_snapshot (default) and a non-negative balance, a snapshot is written on the statement date: an identical one is reused, a different one is replaced only when replace_snapshot is true (409 reconcile_snapshot_conflict otherwise).

Media typeapplication/json
ReconcileRequest

What the bank statement says. statement_balance is signed: a statement may close overdrawn (such a reconcile locks its rows but writes no snapshot).

object
account_id
required
Account Id
integer
statement_date
required
Statement Date
string format: date
statement_balance
required
Any of:
number
opening_balance
Any of:
number
write_snapshot
Write Snapshot
boolean
default: true
replace_snapshot
Replace Snapshot
boolean

Successful Response

Media typeapplication/json
ReconciliationOut
object
id
required
Id
integer
account_id
required
Account Id
integer
statement_date
required
Statement Date
string format: date
statement_balance
required
Statement Balance
string
snapshot_id
Any of:
integer
replaced_snapshot_id
Any of:
integer
replaced_snapshot_balance
Any of:
string
transaction_count
Transaction Count
integer
0
created_at
required
Created At
string format: date-time
undone_at
Any of:
string format: date-time

Example

{
"transaction_count": 0
}

Validation Error

Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
input
Input
ctx
Context
object

Example generated

{
"detail": [
{
"loc": [
"example"
],
"msg": "example",
"type": "example",
"input": "example",
"ctx": {}
}
]
}