Skip to main content
Tracer emits its public JSON business facts as CloudEvents 1.0 in binary content mode over Kafka. Tracer is the separately deployed Midaz component and the sole producer of the studio.lerian.tracer.* contract on this page.

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 Midaz Tracer, 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.tracer
  • Route DLQ: lerian.streaming.tracer.dlq
  • Manifest: GET /v1/streaming/manifest exposes the public JSON catalog and topic mapping, including while publication is off.

Delivery and failure semantics

Publication is disabled until STREAMING_ENABLED=true and broker configuration succeeds. When enabled, Tracer emits after the business-state change. It does not use a transactional outbox.
  • Policy: every public JSON definition is a fact with direct delivery, on_routable_failure DLQ handling, and fallback_on_circuit_open.
  • Actual Tracer boundary: because Tracer has no outbox, 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).

Complete data contracts

These TypeScript-style declarations mirror the CloudEvent data JSON tags in Midaz. Every field name is its JSON name. ? means the field has omitempty. | null means the field is nullable and never absent. A source-type comment preserves the inventory type exactly. All fields in these 12 Tracer payloads are present (omitempty: false). Nullable fields still carry null when absent.
Definition key: limit.activated (LimitActivatedDefinition)Event: studio.lerian.tracer.limit.activatedTopic: lerian.streaming.tracerRoute DLQ: lerian.streaming.tracer.dlqSchema: 1.0.0 (application/json)Fires when: ActivateLimitCommand successfully activates a limit.Subject: p.ID
Definition key: limit.created (LimitCreatedDefinition)Event: studio.lerian.tracer.limit.createdTopic: lerian.streaming.tracerRoute DLQ: lerian.streaming.tracer.dlqSchema: 1.1.0 (application/json)Fires when: CreateLimitCommand successfully creates a limit.Subject: p.ID
Definition key: limit.deactivated (LimitDeactivatedDefinition)Event: studio.lerian.tracer.limit.deactivatedTopic: lerian.streaming.tracerRoute DLQ: lerian.streaming.tracer.dlqSchema: 1.0.0 (application/json)Fires when: DeactivateLimitCommand successfully deactivates a limit.Subject: p.ID
Definition key: limit.deleted (LimitDeletedDefinition)Event: studio.lerian.tracer.limit.deletedTopic: lerian.streaming.tracerRoute DLQ: lerian.streaming.tracer.dlqSchema: 1.0.0 (application/json)Fires when: DeleteLimitCommand successfully deletes a limit.Subject: p.ID
Definition key: limit.drafted (LimitDraftedDefinition)Event: studio.lerian.tracer.limit.draftedTopic: lerian.streaming.tracerRoute DLQ: lerian.streaming.tracer.dlqSchema: 1.0.0 (application/json)Fires when: DraftLimitCommand successfully moves a limit to DRAFT.Subject: p.ID
Definition key: limit.updated (LimitUpdatedDefinition)Event: studio.lerian.tracer.limit.updatedTopic: lerian.streaming.tracerRoute DLQ: lerian.streaming.tracer.dlqSchema: 1.1.0 (application/json)Fires when: UpdateLimitCommand successfully updates a limit.Subject: p.ID
Definition key: rule.activated (RuleActivatedDefinition)Event: studio.lerian.tracer.rule.activatedTopic: lerian.streaming.tracerRoute DLQ: lerian.streaming.tracer.dlqSchema: 1.0.0 (application/json)Fires when: ActivateRuleService successfully activates a rule.Subject: p.ID
Definition key: rule.created (RuleCreatedDefinition)Event: studio.lerian.tracer.rule.createdTopic: lerian.streaming.tracerRoute DLQ: lerian.streaming.tracer.dlqSchema: 1.0.0 (application/json)Fires when: CreateRuleCommand successfully creates a rule.Subject: p.ID
Definition key: rule.deactivated (RuleDeactivatedDefinition)Event: studio.lerian.tracer.rule.deactivatedTopic: lerian.streaming.tracerRoute DLQ: lerian.streaming.tracer.dlqSchema: 1.0.0 (application/json)Fires when: DeactivateRuleService successfully deactivates a rule.Subject: p.ID
Definition key: rule.deleted (RuleDeletedDefinition)Event: studio.lerian.tracer.rule.deletedTopic: lerian.streaming.tracerRoute DLQ: lerian.streaming.tracer.dlqSchema: 1.0.0 (application/json)Fires when: DeleteRuleService successfully deletes a rule.Subject: p.ID
Definition key: rule.drafted (RuleDraftedDefinition)Event: studio.lerian.tracer.rule.draftedTopic: lerian.streaming.tracerRoute DLQ: lerian.streaming.tracer.dlqSchema: 1.0.0 (application/json)Fires when: DraftRuleService successfully moves a rule to DRAFT.Subject: p.ID
Definition key: rule.updated (RuleUpdatedDefinition)Event: studio.lerian.tracer.rule.updatedTopic: lerian.streaming.tracerRoute DLQ: lerian.streaming.tracer.dlqSchema: 1.0.0 (application/json)Fires when: UpdateRuleCommand successfully updates a rule.Subject: p.ID

Emitted event index