Skip to main content
The five tables below join to each other and to three other domains — Property, Contracts, and Stakeholder. See the Data Model Overview for the complete cross-domain diagram.

How the booking model fits together

A booking transaction has one booking_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.
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.
A key can be limited to certain positions of Trassets-Standard — see Account restrictions.