income, cost_of_goods_sold, operating_expense, other_income, and other_expense. Each planned amount is one Result Account in one calendar month. A month with no amount plans nothing.
A Budget is planning data, not part of the books. It posts no entries and belongs to no Book. To compare the actual results against a Budget, pass its id as budgetId to the income statement.
Planned amounts
Every planned amount follows these rules:monthis the first day of a calendar month, for example2027-03-01.amountis an integer in the minor unit of the Entity’s functional currency. CLP has no decimals, so5000000is $5.000.000.amountreads on the account’s normal side, as the income statement shows it. A planned income is positive, and a planned cost or expense is positive too. A negative amount plans the opposite, such as an expected refund on an income account.
LEDGER_ACCOUNT_FACT_PINNED_ERROR). Deleting a Budget deletes all its amounts. Deleting an account, which is possible only while it has no entries, removes its amounts from every Budget.
GET /api/entities/:entityId/budgets
List the Budgets of an Entity, ordered by name.- Path param:
entityId(UUID) - Success response: array of Budget objects
- Status: 200
POST /api/entities/:entityId/budgets
Create a Budget. It starts with no amounts.- Path param:
entityId(UUID) - Body:
- Success response: the created Budget (same shape as the list response)
- Status: 201
GET /api/entities/:entityId/budgets/:budgetId
Read the whole plan of one Budget. The response lists every Result Account of the Entity, in code order, including accounts the Budget doesn’t plan yet. Use it to find the account ids to plan.- Path params:
entityId(UUID),budgetId(UUID) - Success response: the Budget fields from the list response, plus
accounts - Status: 200
Each item in
accounts:
PATCH /api/entities/:entityId/budgets/:budgetId
Rename a Budget.- Path params:
entityId(UUID),budgetId(UUID) - Body:
- Success response: the updated Budget (same shape as the list response)
- Status: 200
DELETE /api/entities/:entityId/budgets/:budgetId
Delete a Budget and all its amounts.- Path params:
entityId(UUID),budgetId(UUID) - Success response: the deleted Budget (same shape as the list response)
- Status: 200
PUT /api/entities/:entityId/budgets/:budgetId/amounts
Set or clear planned amounts. Each cell names one account and one month. The write is all or nothing: if any cell is refused, no cell changes. A cell you don’t send keeps its amount. To plan the same amount every month of a year, send twelve cells for the account.- Path params:
entityId(UUID),budgetId(UUID) - Body:
Each item in
cells:
- Success response: the whole plan, in the same shape as
GET /api/entities/:entityId/budgets/:budgetId. A cleared month no longer appears inamounts. - Status: 200
Compare the income statement against a Budget
PassbudgetId to GET /reports/income-statement. Each account then carries the months the Budget plans for it in budgetAmounts, next to its actual monthly amounts.
For example, to compare the actual results of 2027 against a Budget:

