Reports
Trial balance, profit and loss, balance sheet, general ledger, aging, VAT report.
| Operation | Summary | Scope | Idempotency-Key |
|---|---|---|---|
GET /v1/entities/{entity}/overview |
Entity Overview | read |
|
GET /v1/entities/{entity}/reports/aging |
Aging of receivables or payables | read |
|
GET /v1/entities/{entity}/reports/balance-sheet |
Balance Sheet | read |
|
GET /v1/entities/{entity}/reports/cash-flow |
Cash Flow | read |
|
GET /v1/entities/{entity}/reports/general-ledger |
General Ledger | read |
|
GET /v1/entities/{entity}/reports/period-profit-and-loss |
Period Profit And Loss | read |
|
GET /v1/entities/{entity}/reports/period-trial-balance |
Period Trial Balance | read |
|
GET /v1/entities/{entity}/reports/profit-and-loss |
Profit And Loss | read |
|
GET /v1/entities/{entity}/reports/trial-balance |
Trial Balance | read |
|
GET /v1/entities/{entity}/reports/vat |
VAT report from the ledger | read |
GET /v1/entities/{entity}/overview
Entity Overview
Role Center cues and KPIs of one entity: pending approvals, draft entries, unmatched
bank lines, overdue receivables and payables per currency, cash, revenue and net income
for the month up to as_of, and the eight most recently posted entries. Amounts are in
the entity's functional currency unless stated per currency.
| Required scope | read (admin implies every scope) |
| Operation id | entity_overview_v1_entities__entity__overview_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | entity |
string | yes | Entity code, e.g. CH01 (GET /v1/entities). |
| query | as_of |
string (date) or null | The day the cues are computed for, ISO 8601; default: today. |
Example request
curl "$ERP_URL/v1/entities/CH01/overview" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | Overview |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"entity": "string",
"entity_name": "string",
"currency": "string",
"as_of": "2026-09-21",
"period": "string",
"period_status": "string",
"pending_approvals": 1,
"pending_for_me": 1,
"draft_entries": 1,
"unmatched_bank_lines": 1,
"unappropriated_years": 1,
"recurring_due": 0,
"recurring_journals_due": 0,
"periods_in_close": 0,
"vat_returns_due_soon": 0,
"vat_returns_overdue": 0,
"overdue_receivables": {
"count": 1,
"totals_by_currency": {}
},
"overdue_payables": {
"count": 1,
"totals_by_currency": {}
},
"cash": "string",
"revenue_mtd": "string",
"net_income_mtd": "string",
"recent_entries": [
{
"id": "string",
"number": "string",
"entry_date": "2026-09-21",
"description": "string",
"source": "string",
"amount": "string"
}
]
}
GET /v1/entities/{entity}/reports/aging
Aging of receivables or payables
Open posted documents of one side with their open amount, days overdue and aging
bucket (current, 1-30, 31-60, 61-90, 90+ days past due), oldest due date
first, and the totals per currency and bucket. Credit notes count negative; settled
documents are left out. Amounts are in the document's currency; open_functional and
totals_functional give the same in the entity's functional currency: the carrying amount the
ledger holds (the booked total less what the posted payments and credit notes relieved; a
payment waiting for approval reserves the open amount but relieves nothing yet), the figures of
the analytics aging trend for that day. A document that pending payments reserve in full is
listed too (reserved, open zero), so those totals are complete. reconciliation sets them
against the ledger's control account as of as_of: the balance, the revaluation postings that
sit on it, and what is unexplained (zero when the books are in order).
| Required scope | read (admin implies every scope) |
| Operation id | aging_v1_entities__entity__reports_aging_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | entity |
string | yes | Entity code, e.g. CH01 (GET /v1/entities). |
| query | side |
"payables" | "receivables" |
yes | receivables: sales invoices and credit notes; payables: purchase bills and vendor credit notes. |
| query | as_of |
string (date) | yes | Day the report is as of (ISO 8601, e.g. 2026-09-30): overdue days are counted to it, only documents dated on or before it are listed, and a payment or credit note dated after it has not settled anything yet. |
Example request
curl "$ERP_URL/v1/entities/CH01/reports/aging?side=value&as_of=2026-09-30" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | Aging |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"entity": "string",
"side": "payables",
"as_of": "2026-09-21",
"items": [
{
"document_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"number": "string",
"kind": "string",
"party": "string",
"party_code": "",
"party_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"document_date": "2026-09-21",
"due_date": "2026-09-21",
"currency": "string",
"total": "string",
"open": "string",
"open_functional": "0.00",
"reserved": false,
"days_overdue": 1,
"bucket": "string",
"external_number": "string",
"cash_discount_date": "2026-09-21",
"cash_discount": "0.00",
"payment_blocked": false
}
],
"totals_by_currency": {},
"functional_currency": "",
"totals_functional": {},
"reconciliation": {
"control_account": "string",
"group_control_account": "string",
"control_balance": "string",
"totals_functional": "string",
"difference": "string",
"unrealised_fx": "string",
"pending_settlements": "string",
"unexplained": "string"
}
}
GET /v1/entities/{entity}/reports/balance-sheet
Balance Sheet
Assets, liabilities and equity as of a date, grouped by report line, in the entity's
functional currency. Profit not yet closed to retained earnings is added to equity and
shown separately as unclosed_earnings, so assets equal liabilities plus equity
(balanced). compare or compare_as_of adds a comparative date.
| Required scope | read (admin implies every scope) |
| Operation id | balance_sheet_v1_entities__entity__reports_balance_sheet_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | entity |
string | yes | Entity code, e.g. CH01 (GET /v1/entities). |
| query | as_of |
string (date) | yes | The report date, ISO 8601: everything posted on or before it. |
| query | currency |
string or null | Show the report in another currency than the entity's own, e.g. EUR: income and expenses at each month's average ECB rate, assets and liabilities at the rate of the report date, equity at the rates of the days it was booked, the translation difference as its own equity line (IAS 21.39 to 21.41). translation names every rate used. A rate that is not published yet answers 409 fx_rate_missing. |
|
| query | compare |
"prior_year_end" or null |
prior_year_end: add the balance sheet on the last day of the previous fiscal year (the day before the fiscal year of as_of starts) and the change, per account, per section and in total (comparative). Works with currency too. There is no budget comparison: budgets plan revenue and expenses only. |
|
| query | compare_as_of |
string (date) or null | Compare with the balance sheet at this date instead (ISO 8601); it wins over compare. |
Example request
curl "$ERP_URL/v1/entities/CH01/reports/balance-sheet?as_of=2026-09-30" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | BalanceSheet |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"entity": "string",
"currency": "string",
"as_of": "2026-09-21",
"assets": "string",
"liabilities": "string",
"equity": "string",
"unclosed_earnings": "string",
"balanced": true,
"sections": [
{
"report_line": "string",
"amount": "string",
"accounts": [
null
],
"comparative": null,
"budget": null
}
],
"translation": {
"functional_currency": "string",
"currency": "string",
"source": "string",
"dataset_version": "string",
"closing_rate": null,
"average_rates": [
null
],
"historical_rates": [
null
],
"difference": "string",
"reconciled": true
},
"comparative": {
"as_of": "2026-09-21",
"assets": {
"amount": null,
"change": null,
"change_pct": null
},
"liabilities": {
"amount": null,
"change": null,
"change_pct": null
},
"equity": {
"amount": null,
"change": null,
"change_pct": null
},
"unclosed_earnings": {
"amount": null,
"change": null,
"change_pct": null
}
},
"notes": [
{
"words": "string",
"code": "string",
"details": {},
"text": "string"
}
]
}
GET /v1/entities/{entity}/reports/cash-flow
Cash Flow
Cash flow statement by the indirect method, in the entity's functional currency: the
profit of the posted entries dated from start to end, the amounts in it that are not
cash (depreciation, gains and losses on disposals, unrealised exchange differences on cash),
the change of each balance sheet account in operating, investing or financing activities,
and the effect of exchange rate changes on cash. Cash is the accounts on the balance
sheet's cash line: opening_cash plus net_change is closing_cash (balanced). Which
line an account is on follows the rules of its chart (under the German chart, DRS 21:
interest received in investing, interest paid in financing). Year-end closing entries are
left out, and balances taken over from an earlier system count as the position at the
start. Fixed assets bought or sold on credit count in investing when paid (IAS 7.43), the
unpaid part as a note; interest and income taxes paid are notes too (IAS 7.31-35). A bill
booked to a financing account (a lessor's bill on the lease liability) counts in financing
when paid. A lease's commencement, change and early end and the FX revaluation of a loan or
lease liability move no cash: they are on op.noncash, not in investing or financing; an
ASC 842 operating lease's cash flows are operating activities. Each line lists its
accounts, to follow them into the general ledger. 422 end_before_start when end is
before start.
| Required scope | read (admin implies every scope) |
| Operation id | cash_flow_v1_entities__entity__reports_cash_flow_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | entity |
string | yes | Entity code, e.g. CH01 (GET /v1/entities). |
| query | start |
string (date) | yes | First day of the range, ISO 8601. |
| query | end |
string (date) | yes | Last day of the range, ISO 8601, included. |
Example request
curl "$ERP_URL/v1/entities/CH01/reports/cash-flow?start=2026-01-01&end=2026-09-30" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | CashFlowStatement |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"entity": "string",
"currency": "string",
"start": "2026-09-21",
"end": "2026-09-21",
"opening_cash": "string",
"sections": [
{
"section": "financing",
"total": "string",
"lines": [
null
]
}
],
"net_change": "string",
"closing_cash": "string",
"balanced": true,
"notes": [
{
"words": "string",
"code": "string",
"details": {},
"text": "string"
}
]
}
GET /v1/entities/{entity}/reports/general-ledger
General Ledger
The posted lines of one account dated from start to end, by entry date and posting
order, with the running balance in the account's normal direction (debit for assets and
expenses, credit for the others). opening_balance is everything posted before start.
A line of a year-end closing entry has closing true. An unknown account answers 404.
| Required scope | read (admin implies every scope) |
| Operation id | general_ledger_v1_entities__entity__reports_general_ledger_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | entity |
string | yes | Entity code, e.g. CH01 (GET /v1/entities). |
| query | account |
string | yes | Account code (or id) in the entity, e.g. 6500. |
| query | start |
string (date) | yes | First day of the range, ISO 8601. |
| query | end |
string (date) | yes | Last day of the range, ISO 8601, included. |
| query | include_close |
boolean | Show the lines of year-end closing entries (marked closing); false leaves them out of the lines and the balances, so the account reads as it did before the close. (default true) |
Example request
curl "$ERP_URL/v1/entities/CH01/reports/general-ledger?account=6500&start=2026-09-01&end=2026-09-30" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | GeneralLedger |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"entity": "string",
"account": "string",
"name": "string",
"start": "2026-09-21",
"end": "2026-09-21",
"opening_balance": "string",
"closing_balance": "string",
"lines": [
{
"entry_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"number": "string",
"entry_date": "2026-09-21",
"description": "string",
"line_description": "string",
"currency": "string",
"amount": "string",
"debit": "string",
"credit": "string",
"balance": "string",
"closing": false
}
]
}
GET /v1/entities/{entity}/reports/period-profit-and-loss
Period Profit And Loss
Income statement for a fiscal period and for the year to date through it, with the
same figures of the previous year as comparatives. notes says when there is no
comparative period or when it has a different number of days. Entries are selected by
the period they were posted in. Unknown year or period answers 404.
| Required scope | read (admin implies every scope) |
| Operation id | period_profit_and_loss_v1_entities__entity__reports_period_profit_and_loss_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | entity |
string | yes | Entity code, e.g. CH01 (GET /v1/entities). |
| query | fiscal_year |
integer | yes | The fiscal year, e.g. 2026. |
| query | period |
integer | yes | Period number within the year, from 1; adjustment periods follow the regular ones. |
| query | comparatives |
boolean | true (default): add the same period of the previous fiscal year and its year to date; false: leave them out. (default true) |
|
| query | currency |
string or null | Show the report in another currency than the entity's own, e.g. EUR: income and expenses at each month's average ECB rate, assets and liabilities at the rate of the report date, equity at the rates of the days it was booked, the translation difference as its own equity line (IAS 21.39 to 21.41). translation names every rate used. A rate that is not published yet answers 409 fx_rate_missing. |
Example request
curl "$ERP_URL/v1/entities/CH01/reports/period-profit-and-loss?fiscal_year=2026&period=9" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | PeriodProfitAndLoss |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"entity": "string",
"currency": "string",
"period": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"fiscal_year": 1,
"number": 1,
"kind": "string",
"start": "2026-09-21",
"end": "2026-09-21",
"status": "string"
},
"current": {
"entity": "string",
"currency": "string",
"start": "2026-09-21",
"end": "2026-09-21",
"revenue": "string",
"expenses": "string",
"net_income": "string",
"sections": [
{
"report_line": null,
"amount": null,
"accounts": null,
"comparative": null,
"budget": null
}
],
"translation": {
"functional_currency": null,
"currency": null,
"source": null,
"dataset_version": null,
"closing_rate": null,
"average_rates": null,
"historical_rates": null,
"difference": null,
"reconciled": null
},
"comparative": {
"start": null,
"end": null,
"revenue": null,
"expenses": null,
"net_income": null
},
"budget": {
"versions": null,
"periods": null,
"revenue": null,
"expenses": null,
"net_income": null
},
"notes": [
{
"words": null,
"code": null,
"details": null,
"text": null
}
]
},
"year_to_date": {
"entity": "string",
"currency": "string",
"start": "2026-09-21",
"end": "2026-09-21",
"revenue": "string",
"expenses": "string",
"net_income": "string",
"sections": [
{
"report_line": null,
"amount": null,
"accounts": null,
"comparative": null,
"budget": null
}
],
"translation": {
"functional_currency": null,
"currency": null,
"source": null,
"dataset_version": null,
"closing_rate": null,
"average_rates": null,
"historical_rates": null,
"difference": null,
"reconciled": null
},
"comparative": {
"start": null,
"end": null,
"revenue": null,
"expenses": null,
"net_income": null
},
"budget": {
"versions": null,
"periods": null,
"revenue": null,
"expenses": null,
"net_income": null
},
"notes": [
{
"words": null,
"code": null,
"details": null,
"text": null
}
]
},
"prior_period": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"fiscal_year": 1,
"number": 1,
"kind": "string",
"start": "2026-09-21",
"end": "2026-09-21",
"status": "string"
},
"prior_current": {
"entity": "string",
"currency": "string",
"start": "2026-09-21",
"end": "2026-09-21",
"revenue": "string",
"expenses": "string",
"net_income": "string",
"sections": [
null
],
"translation": null,
"comparative": null,
"budget": null,
"notes": [
null
]
},
"prior_year_to_date": {
"entity": "string",
"currency": "string",
"start": "2026-09-21",
"end": "2026-09-21",
"revenue": "string",
"expenses": "string",
"net_income": "string",
"sections": [
null
],
"translation": null,
"comparative": null,
"budget": null,
"notes": [
null
]
},
"notes": [
{
"words": "string",
"code": "string",
"details": {},
"text": "string"
}
],
"translation": {
"functional_currency": "string",
"currency": "string",
"source": "string",
"dataset_version": "string",
"closing_rate": null,
"average_rates": [
null
],
"historical_rates": [
null
],
"difference": "string",
"reconciled": true
}
}
GET /v1/entities/{entity}/reports/period-trial-balance
Period Trial Balance
Trial balance after every posting through a fiscal period, on any calendar. On the last day of the year the last regular period is before adjustments, an adjustment period after them. Entries are selected by the period they were posted in, not by date. Unknown year or period answers 404.
| Required scope | read (admin implies every scope) |
| Operation id | period_trial_balance_v1_entities__entity__reports_period_trial_balance_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | entity |
string | yes | Entity code, e.g. CH01 (GET /v1/entities). |
| query | fiscal_year |
integer | yes | The fiscal year, e.g. 2026 (GET /v1/entities/{entity}/fiscal-years). |
| query | period |
integer | yes | Period number within the year, from 1; adjustment periods follow the regular ones (period 13 on a monthly calendar with one adjustment period). |
Example request
curl "$ERP_URL/v1/entities/CH01/reports/period-trial-balance?fiscal_year=2026&period=9" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | PeriodTrialBalance |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"entity": "string",
"currency": "string",
"as_of": "2026-09-21",
"accounts": [
{
"account_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"code": "string",
"name": "string",
"type": "string",
"report_line": "string",
"debit": "string",
"credit": "string",
"balance": "string",
"comparative": null,
"budget": null
}
],
"total_debit": "string",
"total_credit": "string",
"balanced": true,
"period": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"fiscal_year": 1,
"number": 1,
"kind": "string",
"start": "2026-09-21",
"end": "2026-09-21",
"status": "string"
}
}
GET /v1/entities/{entity}/reports/profit-and-loss
Profit And Loss
Revenue, expenses and net income of the posted entries dated from start to end,
grouped into sections by report line, in the entity's functional currency. Unlike the
period report it selects by entry date, not by fiscal period. compare and budget add
comparative figures; notes holds their caveats.
| Required scope | read (admin implies every scope) |
| Operation id | profit_and_loss_v1_entities__entity__reports_profit_and_loss_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | entity |
string | yes | Entity code, e.g. CH01 (GET /v1/entities). |
| query | start |
string (date) | yes | First day of the range, ISO 8601. |
| query | end |
string (date) | yes | Last day of the range, ISO 8601, included. |
| query | currency |
string or null | Show the report in another currency than the entity's own, e.g. EUR: income and expenses at each month's average ECB rate, assets and liabilities at the rate of the report date, equity at the rates of the days it was booked, the translation difference as its own equity line (IAS 21.39 to 21.41). translation names every rate used. A rate that is not published yet answers 409 fx_rate_missing. |
|
| query | compare |
"prior_year" or null |
prior_year: add the same range one year earlier (a month end stays a month end, so 29 February compares with 28 February) and the change, per account, per section and in total (comparative). Works with currency too. |
|
| query | budget |
boolean | true: add the approved budget and the variance, per account, per section and in total (budget): per fiscal year, the approved version of its budget (of several, the one approved last), for the fiscal periods wholly in the range. Without an approved budget budget is null and notes says why; with currency it is left out (a budget is planned in the functional currency). (default false) |
Example request
curl "$ERP_URL/v1/entities/CH01/reports/profit-and-loss?start=2026-09-01&end=2026-09-30" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | ProfitAndLoss |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"entity": "string",
"currency": "string",
"start": "2026-09-21",
"end": "2026-09-21",
"revenue": "string",
"expenses": "string",
"net_income": "string",
"sections": [
{
"report_line": "string",
"amount": "string",
"accounts": [
null
],
"comparative": null,
"budget": null
}
],
"translation": {
"functional_currency": "string",
"currency": "string",
"source": "string",
"dataset_version": "string",
"closing_rate": null,
"average_rates": [
null
],
"historical_rates": [
null
],
"difference": "string",
"reconciled": true
},
"comparative": {
"start": "2026-09-21",
"end": "2026-09-21",
"revenue": {
"amount": null,
"change": null,
"change_pct": null
},
"expenses": {
"amount": null,
"change": null,
"change_pct": null
},
"net_income": {
"amount": null,
"change": null,
"change_pct": null
}
},
"budget": {
"versions": [
null
],
"periods": [
"string"
],
"revenue": {
"amount": null,
"change": null,
"change_pct": null
},
"expenses": {
"amount": null,
"change": null,
"change_pct": null
},
"net_income": {
"amount": null,
"change": null,
"change_pct": null
}
},
"notes": [
{
"words": "string",
"code": "string",
"details": {},
"text": "string"
}
]
}
GET /v1/entities/{entity}/reports/trial-balance
Trial Balance
The trial balance as of a date: for every account with postings, the debit and credit
totals of all posted entries dated on or before as_of and the balance, in the entity's
functional currency. balanced is true when total debits equal total credits, which it
is unless the books are corrupt. closing=exclude leaves out the closing entries of a
year-end close (the pre-closing view).
| Required scope | read (admin implies every scope) |
| Operation id | trial_balance_v1_entities__entity__reports_trial_balance_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | entity |
string | yes | Entity code, e.g. CH01 (GET /v1/entities). |
| query | as_of |
string (date) | yes | The report date, ISO 8601: everything posted on or before it. |
| query | closing |
"exclude" | "include" |
include (default): the year-end closing entries count, so after a close the profit and loss accounts are at zero and the result is in equity. exclude: the view before the close of the fiscal year of as_of, with that year's profit and loss on its accounts; earlier years stay closed. (default "include") |
Example request
curl "$ERP_URL/v1/entities/CH01/reports/trial-balance?as_of=2026-09-30" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | TrialBalance |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"entity": "string",
"currency": "string",
"as_of": "2026-09-21",
"accounts": [
{
"account_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"code": "string",
"name": "string",
"type": "string",
"report_line": "string",
"debit": "string",
"credit": "string",
"balance": "string",
"comparative": null,
"budget": null
}
],
"total_debit": "string",
"total_credit": "string",
"balanced": true
}
GET /v1/entities/{entity}/reports/vat
VAT report from the ledger
VAT of the posted entries between start and end, grouped by direction,
jurisdiction, treatment and rate from the tax data stored on the journal lines, in the
entity's functional currency. It is reconciled with the movements on the VAT accounts:
unexplained_difference shows VAT booked by manual journals. Settlements of VAT
returns are left out. This is a working report; the filed figures are in /v1/vat-returns.
| Required scope | read (admin implies every scope) |
| Operation id | vat_report_v1_entities__entity__reports_vat_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | entity |
string | yes | Entity code, e.g. CH01 (GET /v1/entities). |
| query | start |
string (date) | yes | First day of the period, inclusive (ISO 8601). |
| query | end |
string (date) | yes | Last day of the period, inclusive (ISO 8601). |
Example request
curl "$ERP_URL/v1/entities/CH01/reports/vat?start=2026-09-01&end=2026-09-30" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | VatReport |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"entity": "string",
"currency": "string",
"start": "2026-09-21",
"end": "2026-09-21",
"rows": [
{
"direction": "string",
"jurisdiction": "string",
"treatment": "string",
"rate": "string",
"self_assessed": true,
"base": "string",
"output_tax": "string",
"input_tax": "string"
}
],
"output_tax": "string",
"input_tax": "string",
"net_payable": "string",
"ledger_output_tax": "string",
"ledger_input_tax": "string",
"other_period_output_tax": "0.00",
"other_period_input_tax": "0.00",
"unexplained_difference": "string",
"reconciling_items": [
{
"code": "string",
"label": "string",
"amount": "string"
}
]
}
Schemas
Aging
| Field | Type | Required | Description |
|---|---|---|---|
entity |
string | yes | Code of the entity. |
side |
"payables" | "receivables" |
yes | receivables or payables. |
as_of |
string (date) | yes | The day the report is as of. |
items |
array of AgingItem |
yes | Open documents, oldest due date first. |
totals_by_currency |
map of map of string | yes | Per currency, the open amount per bucket and total. |
functional_currency |
string | The entity's functional currency, for totals_functional. (default "") |
|
totals_functional |
map of string | The open amount per bucket and total in the entity's functional currency: the sum of the items' open_functional, the carrying amounts the ledger holds. These are the figures the analytics aging trend shows for the same day. |
|
reconciliation |
AgingReconciliation or null |
The aging against the ledger's control account as of as_of, so the difference is named: revaluation postings that sit on the control account. |
AgingItem
| Field | Type | Required | Description |
|---|---|---|---|
document_id |
string (uuid) | yes | Id of the document. |
number |
string or null | yes | Document number. |
kind |
string | yes | Document kind. |
party |
string | yes | Name of the customer or vendor. |
party_code |
string | Code of the customer or vendor. (default "") |
|
party_id |
string (uuid) or null | Id of the customer or vendor. | |
document_date |
string (date) | yes | Document date. |
due_date |
string (date) | yes | Due date. |
currency |
string | yes | ISO 4217 currency of the amounts. |
total |
string | yes | Gross total, negative for a credit note. |
open |
string | yes | Open amount, negative for a credit note. |
open_functional |
string | The carrying amount the ledger holds for the document in the entity's functional currency: its booked total less the carrying amounts of the posted payments and credit notes (each as booked), so it ties to the FX revaluation. A pending allocation reserves open but relieves nothing yet. Negative for a credit note. (default "0.00") |
|
reserved |
boolean | True when payments waiting for approval reserve the whole open amount: open is zero (nothing is left to pay), but the ledger still carries the document, so it is listed with its open_functional and its bucket. (default false) |
|
days_overdue |
integer | yes | Days past the due date at as_of; 0 when not yet due. |
bucket |
string | yes | current, 1-30, 31-60, 61-90 or 90+ days overdue. |
external_number |
string or null | The vendor's invoice number (bills). | |
cash_discount_date |
string (date) or null | Last day the cash discount may be taken. | |
cash_discount |
string | May still be taken on as_of. (default "0.00") |
|
payment_blocked |
boolean | A bill blocked for payment until a second person approves its variance against its purchase order. (default false) |
AgingReconciliation
| Field | Type | Required | Description |
|---|---|---|---|
control_account |
string | yes | Code of the receivables or payables control account. |
group_control_account |
string or null | Code of the group account (ic_ar_control or ic_ap_control) the documents of the entity's group entities post to, when it has one: the aging lists those documents with the others, so the balance it ties to is that of both accounts together. |
|
control_balance |
string | yes | The control account's balance in the ledger as of as_of, in the functional currency, in its normal direction (what is owed to us, or by us). |
totals_functional |
string | yes | The aging's total in the functional currency (totals_functional.total). |
difference |
string | yes | control_balance less totals_functional. |
unrealised_fx |
string | yes | Entries of source fx (period-end revaluations) on the control account up to as_of that no reversal has cancelled yet: they sit on the control account but on no document. |
pending_settlements |
string | yes | A memo: the functional amount of payments and applications waiting for approval on the listed items (an application on both of its items). They reserve the open amount in the document currency but are not booked, so they are in neither control_balance nor totals_functional and explain no part of the difference. |
unexplained |
string | yes | difference less unrealised_fx: zero when the aging ties to the ledger; anything else is a posting on the control account that no document carries. |
BudgetComparative
| Field | Type | Required | Description |
|---|---|---|---|
versions |
array of BudgetVersionRef |
yes | The budget versions compared with: per fiscal year in the range, the approved version of a budget of that year (of several budgets, the one approved last). |
periods |
array of string | yes | The fiscal periods whose budget counts, <year>-<number>, e.g. 2026-09: the regular periods wholly in the range (a budget is planned per period). |
revenue |
Comparative |
yes | Total revenue against the budget. |
expenses |
Comparative |
yes | Total expenses against the budget. |
net_income |
Comparative |
yes | Net income against the budget. |
BudgetVersionRef
| Field | Type | Required | Description |
|---|---|---|---|
plan_id |
string (uuid) | yes | Id (uuid) of the budget (GET /v1/plans/{plan_id}). |
version_id |
string (uuid) | yes | Id (uuid) of the approved version. |
name |
string | yes | Name of the budget. |
fiscal_year |
integer | yes | The fiscal year the budget is for. |
number |
integer | yes | The version number. |
CashFlowStatement
| Field | Type | Required | Description |
|---|---|---|---|
entity |
string | yes | Code of the entity. |
currency |
string | yes | The entity's functional currency; all amounts are in it. |
start |
string (date) | yes | First day of the range (ISO 8601). |
end |
string (date) | yes | Last day of the range (ISO 8601). |
opening_cash |
string | yes | Cash and cash equivalents (the accounts on the balance sheet's cash line) at the start, opening balances taken over in the range included. |
sections |
array of CashFlowSection |
yes | Operating, investing and financing activities, then the effect of exchange rate changes when there is one. |
net_change |
string | yes | The sum of the sections. |
closing_cash |
string | yes | Cash and cash equivalents at the end, per the books. |
balanced |
boolean | yes | True when the opening cash plus the net change is the closing cash. |
notes |
array of Reason |
yes | What to know when reading it (vocabulary cashFlow.note). |
GeneralLedger
| Field | Type | Required | Description |
|---|---|---|---|
entity |
string | yes | Code of the entity. |
account |
string | yes | Account code. |
name |
string | yes | Account name. |
start |
string (date) | yes | First day of the range (ISO 8601). |
end |
string (date) | yes | Last day of the range (ISO 8601). |
opening_balance |
string | yes | Balance before start, functional currency, in the account's normal direction. |
closing_balance |
string | yes | Balance after the last line of the range. |
lines |
array of LedgerLine |
yes | The posted lines of the account in the range. |
LedgerLine
| Field | Type | Required | Description |
|---|---|---|---|
entry_id |
string (uuid) | yes | Id (uuid) of the journal entry. |
number |
string or null | yes | The entry number. |
entry_date |
string (date) | yes | The posting date (ISO 8601). |
description |
string | yes | Description of the entry. |
line_description |
string or null | yes | Description of this line; null if none. |
currency |
string | yes | Currency of the line. |
amount |
string | yes | Debit minus credit in the line's currency (negative on a credit). |
debit |
string | yes | The debit in the entity's functional currency. |
credit |
string | yes | The credit in the entity's functional currency. |
balance |
string | yes | Running balance after this line, in the functional currency and the account's normal direction. |
closing |
boolean | True for a line of a year-end closing entry (source close), which brings the profit and loss accounts to zero; the report shows it marked. (default false) |
Overdue
| Field | Type | Required | Description |
|---|---|---|---|
count |
integer | yes | Number of overdue open documents. |
totals_by_currency |
map of string | yes | Overdue open amount per document currency (ISO 4217 code to decimal string). |
Overview
| Field | Type | Required | Description |
|---|---|---|---|
entity |
string | yes | Code of the entity. |
entity_name |
string | yes | Name of the entity. |
currency |
string | yes | The entity's functional currency; the amounts below are in it. |
as_of |
string (date) | yes | The day the figures are computed for (ISO 8601). |
period |
string or null | yes | Label of the regular period containing as_of, e.g. 2026-09; null when none. |
period_status |
string or null | yes | open or closed; null when no period contains as_of. |
pending_approvals |
integer | yes | Approval requests of the entity waiting for a decision. |
pending_for_me |
integer | yes | Of pending_approvals, those the four-eyes principle leaves the caller free to decide: not requested, created, prepared or submitted by the caller (whichever key or session); 0 for a key the system issued. The approve scope and the approval policy are not asked. The length of GET /v1/approvals?entity={entity}&for_me=true. |
draft_entries |
integer | yes | Journal entries of the entity still in draft. |
unmatched_bank_lines |
integer | yes | Bank statement lines not yet matched or posted. |
unappropriated_years |
integer | Closed fiscal years whose general meeting is overdue while part of the result is still unappropriated (a Swiss entity, six months after the year end): the count the cue shows, and the length of GET /v1/entities/{entity}/fiscal-years?unappropriated=true. (default 0) |
|
recurring_due |
integer | Active recurring invoices with a due date on or before as_of: the count the cue shows, and the length of GET /v1/recurring-invoices?entity={entity}&due_through={as_of}. A run (POST /v1/recurring-invoices/run) makes their invoices. (default 0) |
|
recurring_journals_due |
integer | Active recurring journals with a due date on or before as_of: the count the cue shows, and the length of GET /v1/recurring-journals?entity={entity}&due_through={as_of}. A run (POST /v1/recurring-journals/run) posts their entries. (default 0) |
|
periods_in_close |
integer | Regular periods that ended before as_of and are still open, from the one of the entity's first posted entry on (a period of a fiscal year whose close is posted counts as closed): the cue "periods in close", each with its close status at GET /v1/periods/{period_id}/close-status. A new company's months before its first entry are not counted. (default 0) |
|
vat_returns_due_soon |
integer | VAT returns of this and last year not yet final and due to be filed and paid within 14 days of as_of (due_status due_soon in GET /v1/entities/{entity}/vat-periods); 0 for an entity without a VAT number. (default 0) |
|
vat_returns_overdue |
integer | VAT returns of this and last year past their due date and not final (due_status overdue), from the start of the entity's books. (default 0) |
|
overdue_receivables |
Overdue |
yes | Open customer invoices past their due date. |
overdue_payables |
Overdue |
yes | Open vendor bills past their due date. |
cash |
string | yes | Balance of the cash and bank accounts at as_of. |
revenue_mtd |
string | yes | Revenue from the first of the month of as_of through as_of. |
net_income_mtd |
string | yes | Net income from the first of the month of as_of through as_of. |
recent_entries |
array of RecentEntry |
yes | The eight most recently posted entries, newest first. |
PeriodProfitAndLoss
| Field | Type | Required | Description |
|---|---|---|---|
entity |
string | yes | Code of the entity. |
currency |
string | yes | The currency all amounts are in: the entity's functional currency, or the one asked for with currency. |
period |
PeriodRef |
yes | The period reported. |
current |
ProfitAndLoss |
yes | The period's own postings. |
year_to_date |
ProfitAndLoss |
yes | From the start of the fiscal year through the period. |
prior_period |
PeriodRef or null |
yes | The same period number of the previous fiscal year; null if none. |
prior_current |
ProfitAndLoss or null |
yes | The comparative period's own postings; null without comparative. |
prior_year_to_date |
ProfitAndLoss or null |
yes | The comparative year to date; null without comparative. |
notes |
array of Reason |
yes | Caveats (reportNote codes), e.g. that no comparative period exists or that the periods differ in length. |
translation |
ReportTranslation or null |
Shown in another currency than the entity's own: how it was translated and the rates used; null in the entity's own currency. |
PeriodTrialBalance
| Field | Type | Required | Description |
|---|---|---|---|
entity |
string | yes | Code of the entity. |
currency |
string | yes | The entity's functional currency; all amounts are in it. |
as_of |
string (date) | yes | The last day of the period (ISO 8601). |
accounts |
array of AccountBalance |
yes | One row per account with postings through the period, ordered by code. |
total_debit |
string | yes | Sum of the debit column. |
total_credit |
string | yes | Sum of the credit column. |
balanced |
boolean | yes | True when total debit equals total credit. |
period |
PeriodRef |
yes | The period the trial balance is through. |
ProfitAndLoss
| Field | Type | Required | Description |
|---|---|---|---|
entity |
string | yes | Code of the entity. |
currency |
string | yes | The currency all amounts are in: the entity's functional currency, or the one asked for with currency. |
start |
string (date) | yes | First day of the range (ISO 8601). |
end |
string (date) | yes | Last day of the range (ISO 8601). |
revenue |
string | yes | Total revenue of the range. |
expenses |
string | yes | Total expenses of the range. |
net_income |
string | yes | Revenue minus expenses; negative is a loss. |
sections |
array of Section |
yes | The accounts grouped by report line, in report-line order. |
translation |
ReportTranslation or null |
Shown in another currency than the entity's own: how it was translated and the rates used; null in the entity's own currency. | |
comparative |
ProfitAndLossComparative or null |
With compare=prior_year: the totals of the same range one year earlier and the changes; each account and section carries its own comparative. |
|
budget |
BudgetComparative or null |
With budget=true: the totals of the approved budget for the range and the variances; each account and section carries its own budget. Null when no approved budget covers the range (notes says why). |
|
notes |
array of Reason |
Caveats of the comparatives (reportNote codes), e.g. that there is no approved budget for the year or that a period is only partly in the range. |
ProfitAndLossComparative
| Field | Type | Required | Description |
|---|---|---|---|
start |
string (date) | yes | First day of the comparative range: start one year earlier (ISO 8601). |
end |
string (date) | yes | Last day of the comparative range: end one year earlier, a month end staying a month end (29 February to 28 February and back) (ISO 8601). |
revenue |
Comparative |
yes | Total revenue against the comparative range. |
expenses |
Comparative |
yes | Total expenses against the comparative range. |
net_income |
Comparative |
yes | Net income against the comparative range. |
RecentEntry
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes | Id (uuid) of the entry, as text. |
number |
string or null | yes | The entry number. |
entry_date |
string (date) | yes | The posting date (ISO 8601). |
description |
string | yes | What the entry is for. |
source |
string | yes | manual or the subledger that created it. |
amount |
string | yes | Total debits in the functional currency. |
TrialBalance
| Field | Type | Required | Description |
|---|---|---|---|
entity |
string | yes | Code of the entity. |
currency |
string | yes | The entity's functional currency; all amounts are in it. |
as_of |
string (date) | yes | The report date (ISO 8601). |
accounts |
array of AccountBalance |
yes | One row per account with postings, ordered by code. |
total_debit |
string | yes | Sum of the debit column. |
total_credit |
string | yes | Sum of the credit column. |
balanced |
boolean | yes | True when total debit equals total credit. |
VatReport
| Field | Type | Required | Description |
|---|---|---|---|
entity |
string | yes | Code of the entity. |
currency |
string | yes | The entity's functional currency; all amounts are in it. |
start |
string (date) | yes | First day of the period. |
end |
string (date) | yes | Last day of the period. |
rows |
array of VatRow |
yes | The tagged postings grouped by direction, jurisdiction, treatment and rate. |
output_tax |
string | yes | Total output VAT of the rows. |
input_tax |
string | yes | Total input VAT of the rows. |
net_payable |
string | yes | Output VAT less input VAT. |
ledger_output_tax |
string | yes | Movement on the output and reverse-charge VAT accounts. |
ledger_input_tax |
string | yes | Movement on the input VAT accounts. |
other_period_output_tax |
string | Output VAT in ledger_output_tax whose tax point is in another period (the date of supply or, under the cash basis, the payment moved it), less output VAT of this period's tax points booked in another period: explained, not part of unexplained_difference. (default "0.00") |
|
other_period_input_tax |
string | The same for input VAT (ledger_input_tax). (default "0.00") |
|
unexplained_difference |
string | yes | VAT-account movements not produced by tagged subledger postings (e.g. manual journals); 0 when the report reconciles. |
reconciling_items |
array of ReconcilingItem |
What is in the ledger's revenue and expenses but in no VAT turnover of this report: lines outside the scope of VAT. Empty when there are none. |
VatRow
| Field | Type | Required | Description |
|---|---|---|---|
direction |
string | yes | sales or purchases. |
jurisdiction |
string or null | yes | Taxing jurisdiction, e.g. CH or DE. |
treatment |
string or null | yes | Tax treatment, e.g. reverse_charge or intra_community_supply. |
rate |
string or null | yes | VAT rate in percent, as a string. |
self_assessed |
boolean | yes | true for VAT the entity accounts for itself. |
base |
string | yes | Tax base (net amount) in the functional currency. |
output_tax |
string | yes | Output VAT owed, in the functional currency. |
input_tax |
string | yes | Input VAT deductible, in the functional currency. |