Tempo MQTT Integration — Outbound Publishing
Overview
Tempo can publish platform events to an external MQTT broker that you (the partner) operate. Tempo acts purely as an MQTT client — it connects, publishes, and disconnects. You provide the broker, credentials, and subscribe to the topics you care about.
MQTT is one of three outbound transports Tempo supports (MQTT, RabbitMQ, REST); this document covers MQTT only.
Connection & Authentication
| Aspect | Value |
|---|---|
| Role | Tempo is the publishing client; you host the broker |
| URL schemes | mqtt, mqtts, tcp, tls, ws, wss |
| TLS | Use mqtts://host:8883 for TLS; mqtt://host:1883 for plaintext |
| Authentication | Basic — username + password in the MQTT CONNECT packet |
| Connect timeout | 10 seconds |
| Publish QoS | 2 (exactly-once) |
| Connection model | Connect → publish one message → disconnect, per event |
| Credentials | Configured per endpoint; stored encrypted on our side and never logged |
Topics we publish to
Each event publishes to a topic derived from the event's type and trigger:
{event_type}/{event_trigger}
…with spaces replaced by underscores and the whole string lowercased. For standard events this topic is automatically derived and is not free-form configurable.
Concrete topics
| Domain | Topic |
|---|---|
| Batch run status | batch/batch_run_status |
| Procedure run state | procedure_run/procedure_run_state |
| Procedure step execution | procedure_run/step_execution |
| Material inventory movement | material_inventory/material_inventory_movement |
| Custom event (deprecated) | custom_event/custom_event |
| Exception sync | exception/exception_sync |
| Printing — material sublot | printing/printing_material_sublot |
| Printing — dispense | printing/printing_dispense |
| Printing — material output (primary) | printing/printing_material_output_primary |
| Printing — material output (by-product) | printing/printing_material_output_bi_product |
| Printing — material output (intermediate) | printing/printing_material_output_intermediate |
| Printing — equipment | printing/printing_equipment |
| Printing — create kit | printing/printing_create_kit |
| Printing — sample | printing/printing_sample |
| Printing — load array | printing/printing_load_array |
| Printing — create label | printing/printing_create_label |
Which of these are active depends on the event configurations enabled for your integration — you only receive events for triggers that have been configured to publish to your endpoint.
Payload
The message body is the event's JSON object (UTF-8), specific to the event type (e.g. a batch-run-status object, an inventory-movement object). Only printing event types can have their payload modified.
Metadata is attached only when the event configuration has metadata-in-payload enabled. When enabled, it is merged into the message under a top-level Metadata key:
{
"...event-specific fields...": "...",
"Metadata": {
"OrganizationID": "…",
"OrganizationName": "…",
"OrganizationURL": "…",
"EventType": "Batch",
"EventTrigger": "batch_run_status",
"Subscriber": "<your endpoint name>",
"CreatedBy": "<user email or 'System Auto Execution'>",
"SourceEnvironment": "<environment>",
"CreationDateTime": "2026-06-18T00:00:00.000Z"
}
}
When metadata-in-payload is not enabled, the body is just the raw event object with no Metadata wrapper.
What you need to provide
- Broker URL + port and scheme (TLS preferred:
mqtts://…:8883) - MQTT username + password (basic auth)
- Subscriptions on your broker for the topics above that correspond to the events you want
- Confirmation of whether you want the
Metadatablock included in payloads
Caveats
- Auth is basic only (username/password); no client-certificate / mutual-TLS auth in the current implementation.
- Topics for standard events are fixed/auto-derived, not free-form.
- Tempo publishes at QoS 2; broker durability, retained messages, and persistent sessions are the broker's (your) responsibility.
- No ordering guarantee is provided across distinct events.