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.
string
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.