Skip to main content
The v1 Accounting domain currently covers three tables: booking_header, booking_positions, and budgets. booking_header and booking_positions follow the response shape conventions — nested period/amount objects and stable join keys; budgets still carries one open artifact, flagged below.

booking_header

GET /v1/accounting/booking_header — general ledger booking headers. No period or amount object here: the table has only a single booking_date field and a single booking_value field, so those two conventions don’t apply structurally.
string
required
Unique property identifier.
integer
required
Unique identifier for the booking header. booking_positions references this as booking_header_id.
integer
Booking number.
string
Creditor linked to the booking. References Stakeholder.creditor.
string
Tenant or contact person linked to the booking, using a local per-property numbering scheme. Don’t treat this as the same identifier space as person_id on Operations.notifications, which is a separate bigint sequence from another subsystem.
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.
string
Original booking text, before any later correction.
string
Barcode reference for the booking document, if scanned.
Link to the booking document in the document management system, if attached.
string
Combined cost-centre ID and name — the only source of this label; there’s no separate ID/name pair to join against instead.
string
Combined ledger ID and name, for the same reason as cost_center_id_name_concat.
string
Combined person ID and name, for the same reason as cost_center_id_name_concat.
string
Foreign key into Property.property_structure, matching property_structure.account_id.

booking_positions

GET /v1/accounting/booking_positions — individual booking line items, joined to a header via booking_header_id.
integer
required
Unique property identifier.
integer
required
Unique identifier for the line item.
integer
required
Identifier of the parent booking header. Joins to booking_header.booking_header_id.
integer
required
Account the line item is posted to. There is no /v1/ accounts endpoint yet — join against the unversioned Accounting.accounts for account metadata.
integer
Contra account for the posting.
string
Name of the contra account. Not derivable by joining contra_account_id against accounts — the two don’t correspond.
integer
Creditor linked to the posting. References Stakeholder.creditor.
integer
Tenant or contact person linked to the posting.
integer
Composite key identifying the tenant this posting applies to. It resembles a concatenation of property_id and person_id, but isn’t always exactly that — use the field as given rather than deriving it yourself.
object
Booking period — {start, end} (date strings).
object
Posting amount — {net, tax, gross}.
object
Posting amount normalised per square metre — {net, tax, gross}.
string
Account group assignment.
date
Date of the posting.
integer
Booking number.
integer
Sequential line number within the booking.
integer
Booking type code.
string
Free-text description of the line item.
string
Debit/credit indicator (S/H). Don’t infer it from the sign of amount.net — about 3.55% of rows (reversal/correction postings) have a sign that contradicts this indicator.
number
Meaning not yet confirmed with the source system. About 99.2% of rows are 0.0; where non-zero, the value is often close to amount.net and concentrated in specific booking types tied to recoverable operating costs — consistent with a correction field, but not confirmed. Don’t rename or reinterpret it.
string
Foreign key into Property.property_structure, matching property_structure.account_id — the same join key as on booking_header.

budgets

GET /v1/accounting/budgets — budget amounts, one row per property, account, and month.
integer
required
Unique property identifier.
integer
required
Account the budget applies to. Renamed from the unversioned account_hdr_id — joins to the unversioned Accounting.accounts.account_hdr_id (there is no /v1/ accounts endpoint yet).
integer
Account number. An integer here, where the unversioned equivalent (accounts.account_id) is a string.
date
required
Month the budget row applies to.
number
required
Budget amount for the specific month and account.
integer
Sync-pipeline artifact, not yet resolved. The response shape conventions call for dropping unverifiable artifacts like this one — don’t build on it, it may be removed in a future revision.