How the booking model fits together
A booking transaction has onebooking_headers, which groups every individual posting
(booking_positions) it triggers. A posting can hit a general ledger account, a tenant
account, a creditor account, a project account, or a cost centre — see
accounts.account_type_name. A transaction usually has at most one posting against a
creditor, tenant, or cost-centre account, so those are already exposed directly on
booking_headers (creditor_id, person_id, property_structure_account_id) rather than
requiring a join through accounts.
Every transaction belongs to one property. An account can have a budget (budgets) for a
given month. A cost centre is always tied to part of the property structure
(property_structure). Debits (Contracts.contract_debits) always reference a general
ledger account listed in accounts, via account_number. Contracts.contract_debit_diffs
uses the same field name but resolves to a tenant account instead — see the
overview page join-key table.
Reporting structures group general ledger accounts into positions (account_hierarchies).
To report by position instead of by individual account, join booking_positions or
budgets to account_hierarchies via property_id + account_id, pick one
hierarchy_name, and group by position.
Bookings on a tenant account (Personenkonto) are only linkable to a tenant at the
property level (
property_id + person_id), not down to a specific unit. If a tenant
occupies multiple units in the same property, their bookings can’t be split between them.accounts
GET /v1/accounting/accounts — the chart of accounts. Covers general ledger accounts,
tenant accounts, creditor accounts, project accounts, cost centres, and asset accounts —
see account_type_name.
string
required
Unique property identifier.
integer
required
Internal account identifier. Referenced by
booking_positions and budgets as
account_id.string
Account number.
null for creditor accounts, which aren’t numbered. Populated for most
other account types, including the large majority of tenant accounts.string
Account name.
string
Account type: general ledger account, tenant account, creditor account, project account,
cost centre, or asset account.
string
Reporting category the account belongs to (e.g. income, expenses, depreciation).
string
Whether the account is income-affecting or balance-neutral.
integer
Sort order of the reporting position within its category.
string
Account group the account is classified under.
integer
Tax code of the account.
integer
VAT treatment method of the account.
object
Balance-side classification, as recorded on the account.
string
Property identifier of the accounting entity the account is booked under.
integer
Income-model code of the property.
integer
Tax-model code of the property.
booking_headers
GET /v1/accounting/booking_headers — general ledger booking headers. Each header groups
related line items.
string
required
Unique property identifier.
integer
required
Unique identifier for the booking header.
booking_positions references this as
booking_header_id.integer
Sequential number of the booking within the journal (Primanota) — the chronological log of all bookings.
string
Creditor linked to the booking. References
Stakeholder.creditors.string
Tenant or contact person linked to the booking.
date
Date of the booking.
number
Total value of the booking header.
number
Floor area in square metres associated with the booking, if applicable.
string
Free-text description of the booking transaction as a whole. Individual line items can
carry a different text — see
booking_positions.booking_position_text.string
Original booking text, before edits.
string
Voucher number / barcode.
string
Link to the linked document in the DMS.
string
Cost-centre ID and name, pre-combined into one display string for convenience (e.g. in
Power BI). Not a join key.
string
Bridges this booking to a cost centre or unit in
Property.property_structure.booking_positions
GET /v1/accounting/booking_positions — individual booking line items. Each position
belongs to exactly one booking header via booking_header_id.
integer
required
Unique identifier for the line item.
integer
required
Identifier of the parent booking header. Joins to
booking_headers.booking_header_id.integer
required
Account the line item is posted to. Joins to
accounts.account_id.integer
Contra account for the posting, as an account number — not the same identifier space as
accounts.account_id.string
required
Unique property identifier.
integer
Composite identifier for the tenant this posting applies to. Not reliably
reconstructable by concatenating
property_id and person_id — read it directly.string
Creditor linked to the posting. References
Stakeholder.creditors.string
Tenant or contact person linked to the posting. Same value as
booking_headers.person_id.string
Bridges this posting to a cost centre or unit in
Property.property_structure.object
Booking period the line item covers.
object
Net, tax, and gross amount of the line item.
object
amount, normalised per square metre.string
Account group assigned by the account-range mapping.
date
Date of the posting.
integer
Sequential number of the booking within the journal (Primanota) — the chronological log of all bookings.
integer
Sequential position number within the booking.
integer
Booking-type code.
string
Name of the contra account. Carried directly on this table — not derivable by joining
contra_account_id against accounts.string
Free-text description of this line item. Can differ from the parent booking’s
booking_headers.booking_text.string
Debit/credit indicator. Not reliably derivable from the sign of
amount.net.number
Amount signed by the debit/credit indicator. Its business meaning is not confirmed yet —
use
amount instead.budgets
GET /v1/accounting/budgets — budget amounts, one row per property, account, and month.
string
required
Unique property identifier.
integer
required
Account the budget applies to. Joins to
accounts.account_id.string
Account number.
date
required
Month the budget row applies to.
number
required
Budget amount for the specific month and account.
account_hierarchies
GET /v1/accounting/account_hierarchies — where each general ledger account sits in a
reporting structure. One row per property, account, and structure.
string
required
Unique property identifier.
integer
required
Account the row assigns. Joins to
accounts.account_id, and to booking_positions and
budgets via property_id + account_id.string
required
Name of the reporting structure, e.g.
Trassets-Standard. A property can have several
structures, so the same account appears once per structure. Filter on one structure
before summing amounts, or each amount is counted once per structure.string[]
The account’s path through the structure, top level first. Empty levels are left out.
The last element is the position, prefixed with its sort number where the structure has
one (e.g.
["B – Bestandskonten", "04 – Forderungen & Verbindlichkeiten / Finanzamt", "11 - Rückstellungen"]).string
The position the account is assigned to — the last level of
path, without the sort
number.integer
Sort number of the position. In
Trassets-Standard it equals accounts.sort_order.
null if the structure has no sort numbers.Only general ledger accounts are included. An account without a unique assignment in a
structure is missing from that structure, so totals per position can add up to less than
the total over all accounts.
Trassets-Standard — see
Account restrictions.