lib-streaming. Every event travels in the shared envelope: ce-type names the event as studio.lerian.matcher.<resource>.<event>, ce-subject carries the aggregate id, ce-tenantid the owning tenant, and ce-schemaversion the payload version. The version is 1.0.0 for every event below.
ce-source comes from STREAMING_CLOUDEVENTS_SOURCE, which every deployment with streaming enabled must set. Deployments use matcher. With that value, every event uses the application topic lerian.streaming.matcher and the source-qualified types shown below. A different configured source changes both. Resource type, event type, and schema version remain in CloudEvents headers. Money amounts (fee values and adjustment amounts) cross the wire as decimal strings, never floats. Matcher serves its full event catalog at GET /system/matcher/streaming/manifest.
This page covers the Kafka streaming plane. Matcher’s exception webhook dispatch (HTTP callbacks for exception routing) is a separate surface, documented in Webhooks and callbacks.
Delivery policies
Matcher’s catalog uses two delivery policies: 16 CRITICAL definitions use the outbox-backed policy and 30 IMPORTANT definitions use direct delivery with circuit-open fallback.- Outbox-backed events go to the outbox in the same database transaction as the state change. A relay publishes committed rows and retries through broker outages. These are the audit-grade facts (matching outcomes, exception resolutions, disputes, governance). A deployment cannot weaken this policy.
- Direct events publish after the transaction commits, best-effort, falling back to the outbox only when the broker circuit is open. These are configuration and operational lifecycle signals.
Matching events
Outbox-backed:transaction.matched, transaction.pending_review. Direct: the rest.
Exception and dispute events
Outbox-backed exceptexception.assigned and the comment events, which are direct.
Configuration and data-intake events
All direct.Governance and reporting events
Outbox-backed except the export-job family, which is direct.Payload contracts
These types mirror the CloudEventdata objects emitted at matcher@e3902325. ? means the property can be absent. Timestamps are UTC RFC 3339 with nanosecond precision. UUID aliases document semantic identity. A field typed as string carries no UUID guarantee. stats is an open integer map, so consumers must tolerate new keys.
ingestion.completed includes the date range only when the pipeline calculated one. Terminal timestamps and stable error codes depend on the persisted aggregate. Export counters are absent while zero. dispute.won and dispute.lost do not repeat the category sent by dispute.opened.
Declared but not yet emitted
The catalog and manifest declare 46 definitions, but production code emits 39. These seven definitions have no non-test caller:
Do not build consumers that depend on receiving these definitions until Matcher adds and wires production emitters.
Events consumed
Matcher consumes no Kafka streaming events. Its integration inputs arrive over HTTP: file uploads, Discovery extractions, and, when enabled, Streaming Hub webhook deliveries. Those deliveries land onPOST /v1/discovery/hub/events (HMAC-signed, deduplicated by event id, disabled by default).
