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 JSONdata object.
Topics, manifest, and routing
The application topic identifies the producing application, not an individual event. Route a record byce-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/manifestexposes the public JSON catalog and topic mapping, including while publication is disabled.
Delivery and failure semantics
Publication is disabled untilSTREAMING_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
factwith direct delivery,on_routable_failureDLQ handling, andfallback_on_circuit_openconfigured bylib-streamingv3. - 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 alib-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
account.created
account.created
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)account.deleted
account.deleted
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)account.updated
account.updated
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)asset.created
asset.created
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)asset.deleted
asset.deleted
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)asset.updated
asset.updated
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)balance.changed
balance.changed
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)balance.config_changed
balance.config_changed
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)balance.created
balance.created
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)balance.deleted
balance.deleted
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)balance.overdraft_cleared
balance.overdraft_cleared
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)balance.overdraft_drawn
balance.overdraft_drawn
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)balance.overdraft_repaid
balance.overdraft_repaid
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)fee_billing_packages.created
fee_billing_packages.created
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)fee_billing_packages.deleted
fee_billing_packages.deleted
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)fee_billing_packages.updated
fee_billing_packages.updated
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)fee_charge.applied
fee_charge.applied
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)fee_packages.created
fee_packages.created
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)fee_packages.deleted
fee_packages.deleted
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)fee_packages.updated
fee_packages.updated
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)holder.created
holder.created
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)holder.deleted
holder.deleted
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)holder.updated
holder.updated
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)instrument.created
instrument.created
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)instrument.deleted
instrument.deleted
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)instrument.updated
instrument.updated
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)ledger.created
ledger.created
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)ledger.deleted
ledger.deleted
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)ledger.updated
ledger.updated
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)operation_route.created
operation_route.created
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)operation_route.deleted
operation_route.deleted
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)operation_route.updated
operation_route.updated
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)organization.created
organization.created
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)organization.deleted
organization.deleted
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)organization.updated
organization.updated
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)portfolio.created
portfolio.created
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)portfolio.deleted
portfolio.deleted
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)portfolio.updated
portfolio.updated
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)segment.created
segment.created
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)segment.deleted
segment.deleted
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)segment.updated
segment.updated
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)transaction.canceled
transaction.canceled
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)transaction.committed
transaction.committed
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)transaction.posted
transaction.posted
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)transaction.reverted
transaction.reverted
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)transaction_route.created
transaction_route.created
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)transaction_route.deleted
transaction_route.deleted
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)transaction_route.updated
transaction_route.updated
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)
