utilitiesbeginner5 min setupby Mantle

Webhook transform and forward

Receive any JSON, normalise a few fields, reshape it and forward to another endpoint — the smallest useful glue workflow.

Inbound JSONNormalise fieldsReshapeForward

Drag to pan, pinch to zoom. This is the real graph the template installs.

Purpose

Receive any JSON, normalise a few fields, reshape it and forward to another endpoint — the smallest useful glue workflow.

How it works

What it does

  • Any JSON posted to transform-in → trim/lowercase email, trim name → rename to contact_* and stamp received_at → POST onward.

Nodes 4

  1. 01Inbound JSONtrigger.webhookTrigger
  2. 02Normalise fieldsdata.transformData
  3. 03Reshapedata.mapData
  4. 04Forwardhttp.requestHTTP
View template JSON
{
  "format": "mantle-workflow/v1",
  "id": "util-webhook-transform-forward",
  "name": "Webhook transform and forward",
  "graph": {
    "nodes": [
      {
        "id": "webhook",
        "type": "trigger.webhook",
        "label": "Inbound JSON",
        "config": {
          "slug": "transform-in"
        },
        "worker_type": "generic-worker",
        "position": {
          "x": 60,
          "y": 220
        }
      },
      {
        "id": "normalise",
        "type": "data.transform",
        "label": "Normalise fields",
        "config": {
          "rules": [
            {
              "path": "email",
              "op": "trim"
            },
            {
              "path": "email",
              "op": "lower"
            },
            {
              "path": "name",
              "op": "trim"
            }
          ]
        },
        "worker_type": "generic-worker",
        "position": {
          "x": 380,
          "y": 220
        }
      },
      {
        "id": "map_out",
        "type": "data.map",
        "label": "Reshape",
        "config": {
          "mappings": {
            "contact_email": "email",
            "contact_name": "name",
            "received_at": "'{{ $now }}'"
          }
        },
        "worker_type": "generic-worker",
        "position": {
          "x": 700,
          "y": 220
        }
      },
      {
        "id": "forward",
        "type": "http.request",
        "label": "Forward",
        "config": {
          "method": "POST",
          "url": "https://example.com/inbound",
          "headers": {
            "Content-Type": "application/json"
          },
          "body_from_input": true,
          "timeout_seconds": 15
        },
        "worker_type": "generic-worker",
        "position": {
          "x": 1020,
          "y": 220
        }
      }
    ],
    "edges": [
      {
        "from": "webhook",
        "to": "normalise"
      },
      {
        "from": "normalise",
        "to": "map_out"
      },
      {
        "from": "map_out",
        "to": "forward"
      }
    ]
  }
}

Requirements

The connections and permissions each step needs, from the node contracts in the catalog.

No connections. This template runs with built-in nodes only.

Setup

  • Change the destination url; edit the rules and mappings for your payload.

Sample input and output

Synthetic examples: node-contract samples or placeholders, never customer data.

Input

Any JSON body; the template forwards it as received.

Output

Forward http.request

{
  "body": null,
  "headers": {},
  "status_code": 0
}

Failure handling

What the graph does when a step fails, read from its retry settings, error branches and error policies.

  • Forward: the request times out after 15 s.
  • A step that fails, after any retries, fails the run. The failed step is kept with its input and error.

See it run, then make it yours.

Templates install as drafts. Edit any step, and Workflow Health re-checks the graph on every save.