Skip to content

Create Account Endpoint

POST
/api/v1/accounts
curl --request POST \
--url https://example.com/api/v1/accounts \
--header 'Content-Type: application/json' \
--data '{ "name": "example", "short_name": "example", "account_type": "checking", "currency": "EUR", "institution": "example", "institution_id": 1, "notes": "example", "is_liability": false, "on_budget": true, "exclude_from_net_worth": false, "liquidity_horizon": "immediate", "opened_at": "2026-04-15", "loan_interest_rate": 1, "loan_monthly_payment": 1, "linked_account_id": 1 }'

Create a new account for the current user.

Media typeapplication/json
AccountCreate

Schema for account creation — accepts any ISO 4217 currency code.

object
name
required
Name
string
>= 1 characters <= 100 characters
short_name
Any of:
string
<= 30 characters
account_type
AccountType

Account type enum — descriptive only in v1.

Does not change aggregation behavior.

string
default: other
Allowed values: checking savings investment retirement cash real_estate vehicle collectible other
currency
Currency
string
default: EUR /^[A-Z]{3}$/
institution
Any of:
string
<= 200 characters
institution_id
Any of:
integer
notes
Any of:
string
<= 500 characters
is_liability
Is Liability
boolean
on_budget
On Budget
boolean
default: true
exclude_from_net_worth
Exclude From Net Worth
boolean
liquidity_horizon
LiquidityHorizon

Liquidity classification for accounts — availability of funds.

Used for liquidity analysis and emergency fund calculations. Defaults to ‘semi_liquid’ as a safe middle ground.

string
default: semi_liquid
Allowed values: immediate semi_liquid blocked long_term
opened_at
Any of:
string format: date
loan_interest_rate
Any of:
number
<= 100
loan_monthly_payment
Any of:
number
> 0
linked_account_id
Any of:
integer
>= 1

Successful Response

Media typeapplication/json
AccountOut

Schema for account response — ORM serialization via from_attributes.

object
id
required
Id
integer
user_id
required
User Id
integer
name
required
Name
string
short_name
required
Any of:
string
account_type
required
AccountType

Account type enum — descriptive only in v1.

Does not change aggregation behavior.

string
Allowed values: checking savings investment retirement cash real_estate vehicle collectible other
currency
required
Currency
string
institution
required
Any of:
string
institution_id
required
Any of:
integer
notes
required
Any of:
string
color
required
Any of:
string
is_liability
required
Is Liability
boolean
on_budget
required
On Budget
boolean
exclude_from_net_worth
required
Exclude From Net Worth
boolean
liquidity_horizon
required
LiquidityHorizon

Liquidity classification for accounts — availability of funds.

Used for liquidity analysis and emergency fund calculations. Defaults to ‘semi_liquid’ as a safe middle ground.

string
Allowed values: immediate semi_liquid blocked long_term
opened_at
required
Any of:
string format: date
loan_interest_rate
Any of:
string
loan_monthly_payment
Any of:
string
linked_account_id
Any of:
integer
ofx_account_id
required
Any of:
string
archived_at
required
Any of:
string format: date-time
sort_order
required
Sort Order
integer
deleted_at
required
Any of:
string format: date-time
created_at
required
Created At
string format: date-time
updated_at
required
Updated At
string format: date-time
csv_import_mapping
Any of:
CsvImportMapping

How to read a CSV file; every column is optional until the mapping is complete.

object
delimiter
Any of:
string
Allowed values: , ; |
encoding
Any of:
string
Allowed values: utf-8 cp1252
skip_rows
Skip Rows
integer
0 <= 100
has_header
Has Header
boolean
default: true
date_column
Any of:
ColumnRef

A mapped column: its position and, when the file has a header row, its title.

The header lets a later import find the column again if the bank reorders them.

object
index
required
Index
integer
<= 999
header
Any of:
string
<= 200 characters
date_format
Date Format
string
default: DD/MM/YYYY
Allowed values: DD/MM/YYYY MM/DD/YYYY YYYY-MM-DD MM.DD.YYYY DD.MM.YYYY DD-MM-YYYY DD/MM/YY MM/DD/YY YYYY/MM/DD
amount_mode
Amount Mode
string
default: signed
Allowed values: signed split
amount_column
Any of:
ColumnRef

A mapped column: its position and, when the file has a header row, its title.

The header lets a later import find the column again if the bank reorders them.

object
index
required
Index
integer
<= 999
header
Any of:
string
<= 200 characters
inflow_column
Any of:
ColumnRef

A mapped column: its position and, when the file has a header row, its title.

The header lets a later import find the column again if the bank reorders them.

object
index
required
Index
integer
<= 999
header
Any of:
string
<= 200 characters
outflow_column
Any of:
ColumnRef

A mapped column: its position and, when the file has a header row, its title.

The header lets a later import find the column again if the bank reorders them.

object
index
required
Index
integer
<= 999
header
Any of:
string
<= 200 characters
number_format
Number Format
string
default: 1,234.56
Allowed values: 1,234.56 1.234,56 1 234,56 1234.56 1234,56
flip_sign
Flip Sign
boolean
description_column
Any of:
ColumnRef

A mapped column: its position and, when the file has a header row, its title.

The header lets a later import find the column again if the bank reorders them.

object
index
required
Index
integer
<= 999
header
Any of:
string
<= 200 characters
memo_column
Any of:
ColumnRef

A mapped column: its position and, when the file has a header row, its title.

The header lets a later import find the column again if the bank reorders them.

object
index
required
Index
integer
<= 999
header
Any of:
string
<= 200 characters
reference_column
Any of:
ColumnRef

A mapped column: its position and, when the file has a header row, its title.

The header lets a later import find the column again if the bank reorders them.

object
index
required
Index
integer
<= 999
header
Any of:
string
<= 200 characters

Example

{
"account_type": "checking",
"liquidity_horizon": "immediate",
"csv_import_mapping": {
"delimiter": ",",
"encoding": "utf-8",
"skip_rows": 0,
"has_header": true,
"date_format": "DD/MM/YYYY",
"amount_mode": "signed",
"number_format": "1,234.56",
"flip_sign": false
}
}

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