Skip to content

Create Transaction

POST
/transactions
curl --request POST \
--url https://example.com/transactions \
--header 'Content-Type: application/json' \
--data '{ "account": "example", "amount": 1, "category": "example", "date": "2026-04-15", "description": "example", "payee": "example", "status": "expected" }'

Create from the flat form, with the requested status (#436).

Media typeapplication/json
TransactionCreate

The flat form agents and humans submit (DESIGN §3.3).

object
account
required
Account

Account id or ltree path

string
amount
required
Any of:
number
category
required
Category

Category id or ltree path, e.g. expenses.dining

string
date
required
Date
string format: date
description
Any of:
string
payee
Any of:
string
status
Status
string
default: pending
Allowed values: expected pending posted

Successful Response

Media typeapplication/json
TransactionDetail

Full detail: postings and provenance links.

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
content_hash
required
Any of:
string
created_at
required
Created At
string format: date-time
created_by
required
Any of:
string format: uuid
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
postings
required
Postings
Array<object>
PostingOut
object
account_id
required
Account Id
string format: uuid
account_path
Any of:
string
amount
required
Amount
string
currency
required
Currency
string
id
required
Id
string format: uuid
memo
required
Any of:
string
remainder_amount
Any of:
string
reverses_id
required
Any of:
string format: uuid
reviewed_at
Any of:
string format: date-time
schedule_id
Any of:
string format: uuid
schedule_pinned
Schedule Pinned
boolean
source_fetch_id
required
Any of:
string format: uuid
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
superseded_by
required
Any of:
string format: uuid
transfer_account_path
required
Any of:
string

Example

{
"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"
}
]
}