Guides

Payload Transforms

Give one subscriber a reshaped version of your internal event — without changing what you publish, and without every other subscriber seeing the same shape.

Where it lives

A transform is attached to a Subscription, not an Event Type — so the same event can be reshaped differently for each subscriber, or left untouched for the ones that don't need it.

Expression language: JSONata
Transforms are written as JSONata expressions — a query/transformation language for JSON, similar in spirit to XPath for XML. The expression is validated for syntax at save time, before it's ever stored.
Versioned automatically
Every save creates a new version — nothing is overwritten in place. The delivery log's "View raw" view shows exactly which version ran for a given delivery: Original Payload, Transform Expression (with version), and Delivered Payload, side by side.
Validated against real data before it's saved
When you save a transform, it's immediately evaluated against the Event Type's active schema example payload. If the expression would fail against real data, the save is rejected with 400 transform_schema_mismatch — before it ever reaches a live delivery.
The reverse case is also covered. If someone later changes the Event Type's active schema, every transform that depends on it is re-checked against the new example payload — see Event Schemas for the warning flow.