Skip to main content
Read, filter, create, and update transactions.

List transactions

GET /v1/transactions · Required scope: data.read
Paginated. See pagination for reading more than one page.
Amounts are integer cents. Spending is negative, income is positive.

Summarize transactions

GET /v1/transactions/summary · Required scope: data.read
Totals for the same filters as the list endpoint, without transferring the rows.

Get one transaction

GET /v1/transactions/{id} · Required scope: data.read

Create a transaction

POST /v1/transactions · Required scope: data.write
Records a manual transaction, for cash or anything a bank feed will not deliver.
Send an Idempotency-Key so that a script retrying after a timeout does not create a second transaction. Derive it from the source event rather than generating a random value per attempt.

Update a transaction

PATCH /v1/transactions/{id} · Required scope: data.write
Send only the fields you are changing. Sending an empty body is a 400, not a no-op, so a bug in your code cannot look like a successful write.

Assign a transaction to an Expense

POST /v1/transactions/{id}/expense · Required scope: data.write
Files the transaction against an Expense, which draws down that Expense’s balance exactly as it does in the app. Pass null to clear an assignment.
This is the endpoint most automations end up using: match a merchant, assign the Expense, done.