Skip to main content
Reporter publishes a business event whenever a template, a report, or a deadline changes state. Subscribe to those events and you learn that a report finished without polling 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:
That string is not a broker address. Do not bind a queue to it, and do not treat it as a destination. It exists so a consumer can key on one event stream across transports. What you bind to lives in deployment configuration instead. Reporter publishes to the exchange that 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.
Delivery is at-least-once. Deduplicate on ce-id. Report events key on the report identifier and its terminal status, in the form reporter.report.<status>.<reportId>, so every re-emission of the same fact carries the same identifier. Deadline events key on the deadline identifier, the event type, and the transition timestamp.

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.