Skip to content

Search Transactions

GET
/transactions
curl --request GET \
--url 'https://example.com/transactions?include_collapsed=false&with_category_provenance=false&limit=50&offset=0'
account
Any of:
string
category
Any of:
string

Category subtree, e.g. expenses.dining

payee
Any of:
string
q
Any of:
string

Substring match on description

start
Any of:
string format: date
end
Any of:
string format: date
status
Any of:
Array<string>
include_collapsed
Include Collapsed
boolean
with_category_provenance
With Category Provenance

Fill category_source from the audit trail (register badges)

boolean

Fill category_source from the audit trail (register badges)

reviewed
Any of:
boolean

False = the unreviewed set (#175); true = its complement

limit
Limit
integer
default: 50 >= 1 <= 200
offset
Offset
integer
0

Successful Response

Media typeapplication/json
SearchPage
object
items
required
Items
Array<object>
TransactionOut

Flat view: the real-account delta plus category path.

With a perspective account (the register view: GET /transactions?account=X) the amount is that account’s signed leg; without one, transfers present their outgoing side with a positive amount (the historical shape).

A row is a transfer only when its postings are a shape Purser creates (DESIGN §3.3): a plain transfer, or a split loan payment — whose category_path is the interest/fee category and remainder_amount that posting’s amount. Any other multi-posting row is not a transfer.

A split transaction (one real leg plus several category legs, such as an imported Quicken split; decision 87) has category_path null and split_lines set to its category-leg count; the legs are in the detail’s postings. Split rows are read-only.

object
account_path
required
Any of:
string
amount
required
Any of:
string
balance
Any of:
string
category_path
required
Any of:
string
category_source
Any of:
string
created_at
required
Created At
string format: date-time
date
required
Date
string format: date
description
required
Any of:
string
escalated_at
Any of:
string format: date-time
has_linked_originals
Has Linked Originals
boolean
id
required
Id
string format: uuid
is_transfer
required
Is Transfer
boolean
needs_review
required
Needs Review

True when the row is in the unreviewed set (#175): the same test as GET /transactions?reviewed=false and the review count

boolean
origin
required
Origin
string
payee
required
Any of:
string
remainder_amount
Any of:
string
reviewed_at
Any of:
string format: date-time
schedule_id
Any of:
string format: uuid
schedule_pinned
Schedule Pinned
boolean
split_lines
Split Lines

Category legs of a split transaction (one real leg plus two or more category legs, decision 87); 0 for every other row. Split rows are read-only.

integer
0
status
required
Status
string
transfer_account_path
required
Any of:
string
limit
required
Limit
integer
offset
required
Offset
integer
total
required
Total
integer

Example

{
"items": [
{
"has_linked_originals": false,
"schedule_pinned": false,
"split_lines": 0
}
]
}

Validation Error

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

Example generated

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