GET /v1/reports/{id} for it.
GET /v1/streaming/events describes the contract in machine-readable form. This page covers the consumer side: what the manifest tells you, what arrives on the wire, and what each event carries.
The manifest operation
Get streaming events returns the static event catalog. It is authenticated like every other operation, answers
Cache-Control: no-store, and is served whether or not this deployment publishes events. Read it at startup to check that your consumer and Reporter agree on the contract.
The response has four fields:
The topic is a routing key
Each event entry carries a
topic. It is a logical routing key: a stable identifier for one event stream, composed from the publisher source and the event definition. With the source Reporter advertises, report.requested composes to:
RABBITMQ_REPORT_EVENTS_EXCHANGE names, and the routing key of each message is the event definition key verbatim — report.finished, deadline.delivery_reverted, underscores included.
The event catalog
Twelve event definitions exist across the two run modes.
This channel is publish-only. Reporter emits these events and consumes none of them.
Delivery
The class in the table above selects a delivery policy.
A critical event therefore never publishes straight to the broker. It lands in a durable outbox inside the same transaction, and a dispatcher replays it after a broker outage. Nothing is lost to a broker restart.
Emission happens after the commit and never fails the work. A publication problem does not turn a stored report into an errored one.
The CloudEvents envelope
Messages travel in CloudEvents binary mode, version 1.0. Context attributes ride as message headers.
Messages are marked persistent. A single-tenant deployment still stamps a tenant value, so one consumer handles both deployment shapes with the same code.
What a payload carries
Payload keys are
snake_case, unlike the camelCase REST surface. A report.finished body:
artifact_object_key is the artifact path relative to the report storage prefix, in the form <templateId>/<reportId>.<format>. Download a report is the supported way to fetch the file, and it serves a report in the Finished state. Deployment shows where that prefix sits in the bucket.
report.partial adds section_failures and failed_section_count alongside the same artifact fields, so a consumer can route a usable-but-incomplete report differently from a clean one.
report.errored replaces the artifact fields with error_code and error_summary. Both come from a fixed vocabulary — report_generation_failed, report_generation_timeout, or report_generation_canceled — each paired with a fixed summary. Raw error text never travels on the wire, so a payload cannot leak a query, a connection string, or tenant data. Branch on error_code.
Enabling event publication
Event publication is a deployment choice, set with
STREAMING_ENABLED. Turn it on and Reporter requires three more settings at startup:
Reporter refuses to start when publication is on and any of the three is blank, so a misconfigured deployment fails at startup instead of dropping events quietly.
Next steps
Reporter REST API
The 23 operations, authentication, pagination, and errors.
API Reference
The streaming manifest operation, with its full response shape.
Environment variables
Every setting behind the streaming, exchange, and run-mode surfaces.
What is Reporter?
Templates, reports, deadlines, and where they fit.

