Transformations

Transformations reshape a captured payload before it is replayed or forwarded. Write a JSONata expression, attach it to an endpoint, and route which transformation fires to which target. One webhook can become several differently-shaped requests, each going where it belongs.

Authoring a JSONata transformation and routing it to a target in FlurryPORT

Authoring a transformation

Open an endpoint and find the Transformations section. Choose Add transformation, then Create transformation. Give it a name and write a JSONata expression that maps the incoming payload to the shape you want. Transformations are scoped to the endpoint they are created on.

Example

Inside a transformation the captured request is available as $body, $headers, and $query (and project secrets as $secrets). Reshape an incoming payment webhook into a lean internal record:

{
  "orderId": $body.data.order_id,
  "email": $lowercase($body.data.customer_email),
  "amount": $body.data.amount / 100,
  "currency": $body.data.currency,
  "paidAt": $body.data.created
}

Versions

Every change snapshots a new version (copy on write). A replay or forward always runs against the version the binding was built on, so editing a transformation never silently changes how past or in-flight routes behave.

Routing (bindings)

Transformation routing connects a transformation to a target with a predicate. When a capture matches the predicate, that transformation fires and the result is sent to the bound target. Bindings run automatically on matching captures.

Fan-out

A single capture can match multiple bindings. When it does, each binding produces its own transformed execution, so one webhook can forward to several targets in several shapes at the same time. This pairs with auto-forward fan-out and Secrets for target headers.

See Auto-forward & targets and Secrets.

Limits

Transformations, bindings, and steps per transformation all start at one on the free Deckhand tier and scale with your plan. Your current limits are shown in the app and on the pricing page.