Skip to main content
Midaz emits its public JSON business facts as CloudEvents 1.0 in binary content mode over Kafka through lib-streaming.

Public JSON ledger catalog

The public ledger manifest contains the following verified definitions. Every cataloged definition has a non-test production emission path.

CloudEvents envelope

Every public JSON fact uses the shared envelope below. The headers carry routing and schema information. The Kafka value carries the JSON data object.

Topics, manifest, and routing

The application topic identifies the producing application, not an individual event. Route a record by ce-resourcetype and ce-eventtype, and validate ce-schemaversion before decoding its data value.
  • Facts: lerian.streaming.ledger
  • Route DLQ: lerian.streaming.ledger.dlq
  • Manifest: GET /v1/streaming/manifest exposes the public JSON catalog and topic mapping, including while publication is disabled.

Delivery and failure semantics

Publication is disabled until STREAMING_ENABLED=true and broker configuration succeeds. When enabled, Midaz emits after the business-state change. It does not wire a lib-streaming outbox writer, outbox repository, transactional outbox, or outbox relay.
  • Policy: every public JSON definition is a fact with direct delivery, on_routable_failure DLQ handling, and fallback_on_circuit_open configured by lib-streaming v3.
  • Actual Midaz boundary: because no outbox writer is wired, the circuit-open fallback cannot persist an event. Emit paths log and swallow publication errors instead of returning them to the business command.
  • Consumer requirement: broker delivery is at least once for published records. Make handlers idempotent and deduplicate with (ce-source, ce-id).

Separate legacy RabbitMQ plane

Midaz also has compatibility exchanges for selected transaction, overdraft, and audit notifications. They are a separate legacy RabbitMQ plane, not a lib-streaming contract and not a complete representation of this 49-event public JSON catalog. New integrations should use the Kafka contract on this page.

Complete data contracts

These TypeScript-style declarations mirror the producer wire shape. Every field name is its JSON name. ? means the field has omitempty. | null means the field is nullable and the producer always includes it. A source-type comment preserves the inventory type exactly. Decimal values are JSON strings, never binary floating-point numbers.

Shared source-type mappings

Event: studio.lerian.ledger.account.createdTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the opening of an account in a ledger.Subject: account ID (p.ID)
Event: studio.lerian.ledger.account.deletedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the deletion of an account.Subject: account ID (p.ID)
Event: studio.lerian.ledger.account.updatedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: An account’s mutable fields change.Subject: account ID (p.ID)
Event: studio.lerian.ledger.asset.createdTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the registration of an asset in a ledger.Subject: asset ID (p.ID)
Event: studio.lerian.ledger.asset.deletedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the deletion of an asset.Subject: asset ID (p.ID)
Event: studio.lerian.ledger.asset.updatedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: An asset’s mutable fields change.Subject: asset ID (p.ID)
Event: studio.lerian.ledger.balance.changedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: A committed transaction moves a balance (one event per balance-affecting operation). Values reflect the state after the operation.Subject: transaction ID and operation ID (p.TransactionID + ":" + p.OperationID)
Event: studio.lerian.ledger.balance.config_changedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: A balance’s settings change, or overdraft is enabled (companion balance materialized). changeType discriminates settings_updated from overdraft_enabled.Subject: balance ID (p.ID)
Event: studio.lerian.ledger.balance.createdTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the creation of a balance during account setup.Subject: balance ID (p.ID)
Event: studio.lerian.ledger.balance.deletedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the deletion of a balance.Subject: balance ID (p.ID)
Event: studio.lerian.ledger.balance.overdraft_clearedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: Overdraft is fully repaid, a terminal signal (action = cleared).Subject: transaction ID and operation ID (p.TransactionID + ":" + p.OperationID)
Event: studio.lerian.ledger.balance.overdraft_drawnTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: A debit consumes overdraft beyond available funds (action = drawn).Subject: transaction ID and operation ID (p.TransactionID + ":" + p.OperationID)
Event: studio.lerian.ledger.balance.overdraft_repaidTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: Overdraft usage decreases but is not fully cleared (action = repaid).Subject: transaction ID and operation ID (p.TransactionID + ":" + p.OperationID)
Event: studio.lerian.ledger.fee_billing_packages.createdTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the creation of a billing package.Subject: billing package ID (p.ID)
Event: studio.lerian.ledger.fee_billing_packages.deletedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the deletion of a billing package.Subject: billing package ID (p.ID)
Event: studio.lerian.ledger.fee_billing_packages.updatedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: A billing package’s mutable fields change.Subject: billing package ID (p.ID)
Event: studio.lerian.ledger.fee_charge.appliedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the application of a fee package to a committed transaction.Subject: transaction ID (p.TransactionID)
Event: studio.lerian.ledger.fee_packages.createdTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the creation of a fee package.Subject: fee package ID (p.ID)
Event: studio.lerian.ledger.fee_packages.deletedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the deletion of a fee package.Subject: fee package ID (p.ID)
Event: studio.lerian.ledger.fee_packages.updatedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: A fee package’s mutable fields change.Subject: fee package ID (p.ID)
Event: studio.lerian.ledger.holder.createdTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the creation of a holder.Subject: holder ID (p.ID)
Event: studio.lerian.ledger.holder.deletedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the deletion of a holder.Subject: holder ID (p.ID)
Event: studio.lerian.ledger.holder.updatedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: A holder’s mutable fields change.Subject: holder ID (p.ID)
Event: studio.lerian.ledger.instrument.createdTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the creation of an instrument for a holder and account.Subject: instrument ID (p.ID)
Event: studio.lerian.ledger.instrument.deletedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the deletion of an instrument.Subject: instrument ID (p.ID)
Event: studio.lerian.ledger.instrument.updatedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: An instrument’s mutable fields change.Subject: instrument ID (p.ID)
Event: studio.lerian.ledger.ledger.createdTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the creation of a ledger within an organization.Subject: ledger ID (p.ID)
Event: studio.lerian.ledger.ledger.deletedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the deletion of a ledger.Subject: ledger ID (p.ID)
Event: studio.lerian.ledger.ledger.updatedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: A ledger’s name or status changes.Subject: ledger ID (p.ID)
Event: studio.lerian.ledger.operation_route.createdTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the creation of an operation route.Subject: operation-route ID (p.ID)
Event: studio.lerian.ledger.operation_route.deletedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the deletion of an operation route.Subject: operation-route ID (p.ID)
Event: studio.lerian.ledger.operation_route.updatedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: An operation route’s mutable fields change.Subject: operation-route ID (p.ID)
Event: studio.lerian.ledger.organization.createdTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the creation of an organization.Subject: organization ID (p.ID)
Event: studio.lerian.ledger.organization.deletedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the deletion of an organization.Subject: organization ID (p.ID)
Event: studio.lerian.ledger.organization.updatedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: An organization’s mutable fields change.Subject: organization ID (p.ID)
Event: studio.lerian.ledger.portfolio.createdTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the creation of a portfolio.Subject: portfolio ID (p.ID)
Event: studio.lerian.ledger.portfolio.deletedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the deletion of a portfolio.Subject: portfolio ID (p.ID)
Event: studio.lerian.ledger.portfolio.updatedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: A portfolio’s mutable fields change.Subject: portfolio ID (p.ID)
Event: studio.lerian.ledger.segment.createdTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the creation of a segment.Subject: segment ID (p.ID)
Event: studio.lerian.ledger.segment.deletedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the deletion of a segment.Subject: segment ID (p.ID)
Event: studio.lerian.ledger.segment.updatedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: A segment’s mutable fields change.Subject: segment ID (p.ID)
Event: studio.lerian.ledger.transaction.canceledTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: A pending transaction transitions from PENDING to CANCELED.Subject: transaction ID (p.ID)
Event: studio.lerian.ledger.transaction.committedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: A pending transaction transitions from PENDING to APPROVED.Subject: transaction ID (p.ID)
Event: studio.lerian.ledger.transaction.postedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the commit of a newly created transaction to storage with all its operations persisted (no parent).Subject: transaction ID (p.ID)
Event: studio.lerian.ledger.transaction.revertedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: A revert flow creates a child transaction. parentTransactionId correlates it to the original.Subject: transaction ID (p.ID)
Event: studio.lerian.ledger.transaction_route.createdTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the creation of a transaction route.Subject: transaction-route ID (p.ID)
Event: studio.lerian.ledger.transaction_route.deletedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: the deletion of a transaction route.Subject: transaction-route ID (p.ID)
Event: studio.lerian.ledger.transaction_route.updatedTopic: lerian.streaming.ledgerRoute DLQ: lerian.streaming.ledger.dlqSchema: 1.0.0Trigger: A transaction route’s mutable fields change.Subject: transaction-route ID (p.ID)