Submit a business event

  POST /ledger/v1/events
  

The event is validated against the applicable rule sets’ ontologies, entries are derived, conflicts between rule sets are detected — and only then is the event appended. Processing is asynchronous: the API answers 202 Accepted.

Headers

HeaderRequired
X-Tenant-IDyes
Authorizationin production

Request body

  {
  "eventType": "SalesInvoice",
  "transactionDate": "2026-07-01",
  "accountingEntries": [
    { "accountCode": "1500-receivables", "entryType": "DEBIT",  "amount": 125000,
      "currency": "EUR", "description": "Invoice #42",
      "dimensions": { "CUSTOMER": "cust-001" } },
    { "accountCode": "3000-sales",       "entryType": "CREDIT", "amount": 100000, "currency": "EUR" },
    { "accountCode": "2700-vat-out",     "entryType": "CREDIT", "amount": 25000,  "currency": "EUR" }
  ],
  "metadata": {
    "idempotencyKey": "f4b6a2d8-1c3e-4f5a-9b7d-8e2f0a1c3b5d",
    "tags": { "channel": "webshop" }
  }
}
  
FieldTypeConstraints
eventTypestringrequired, e.g. SalesInvoice, PayrollRun
transactionDatedateoptional yyyy-MM-dd; defaults to today
accountingEntriesarrayrequired, non-empty
accountingEntries[].accountCodestringrequired
accountingEntries[].entryTypeenumrequired, DEBIT or CREDIT
accountingEntries[].amountintegerscaled by the unit — see Amounts and units
accountingEntries[].currencystringoptional — a currency or other registered unit
accountingEntries[].dimensionsobjectoptional
metadata.idempotencyKeystringoptional; parsed as a correlation UUID when valid
metadata.tagsobjectoptional string map

Response — 202 Accepted

  { "eventId": "9c2e4f6a-…", "message": "Event accepted for processing" }
  

Errors

StatusCodeCause
400VALIDATION_ERRORBad entryType, missing fields
400—Ontology violations: {"error": "Event validation failed against ontology constraints", "violations": [...]}
403FORBIDDENNo write access to tenant
409—Conflicting rule-set derivations (body lists conflictingEntries per domain)

Inquire events

  GET /ledger/v1/events
  

A lightweight read on the command side, useful for reconciliation and for finding events that still lack a correction.

Headers

HeaderRequiredNotes
X-Tenant-IDyes400 if missing; requires read access to the tenant

Query parameters

ParameterRequiredNotes
eventTypenoFilter by event type
namenoMatches the event’s name payload field
yearnoFilter by year
correctionEventTypenoReturn only events without a matching correction of this type

Response — 200 OK

Ordered by timestamp, ascending:

  [
  { "id": "9c2e4f6a-…", "tenantId": "org-84120557", "eventType": "SalesInvoice",
    "timestamp": "2026-07-01T09:14:03.512Z" }
]
  
StatusCodeCause
400VALIDATION_ERRORMissing X-Tenant-ID header
403FORBIDDENToken lacks read access to the tenant