← Back to Blog
Guides flows automation webhook tutorial

How to Build Multi-Step Webhook Automations with Flows

Flows let you chain HTTP steps together, triggered by a single incoming webhook. No code required — map fields visually and let each step pass data to the next.

JW

Jason Warner

March 10, 2026

How to Build Multi-Step Webhook Automations with Flows

Flows are Bluejay Relay's answer to multi-step webhook automation. A Flow is triggered by an incoming webhook and executes a sequence of HTTP steps — each step can call a different API, and the response from one step is available to the next.

No code, no JSON editing. Every field mapping is done through a visual picker.

What Can You Build with Flows?

  • Receive a Stripe payment event → call your billing API → notify your CRM → post to Slack
  • Receive a GitHub push → call a CI/CD API → update a status page
  • Receive a form submission → enrich the lead via a third-party API → create a deal in your CRM
  • Receive an e-commerce order → check inventory via an API → trigger fulfillment

Any multi-step HTTP workflow that starts with a webhook can be expressed as a Flow.

Creating a Flow

Navigate to Flows in the sidebar and click New Flow.

Step 1: Set Up Basic Info

Give your flow a name and description. Set the Trigger Format to match your incoming webhook (JSON, XML, FormData, or SOAP). Leave Response Mode as Standard unless you need to proxy a specific step's response back to the caller.

Step 2: Capture Your Trigger Payload

This is the key step that makes field mapping possible. Under Trigger Payload, choose one of two methods:

Capture URL (recommended): Click Generate Capture URL to get a temporary URL. Send an actual webhook from your source to that URL. Bluejay Relay will capture the payload and automatically parse the available fields. These fields appear as chips and become selectable in all your step mappings.

Paste JSON: If you already know your payload shape, paste a sample JSON object and click Parse Fields. The same field list will appear.

Once captured, you'll see all available fields listed as trigger.data.field_name badges.

Step 3: Add Steps

Click Add Step to add your first HTTP step. Each step is a full HTTP request configuration:

  • URL and Method (POST, PUT, PATCH, GET, DELETE)
  • Body Mappings — which trigger fields to send, mapped to output keys
  • Headers — static values or fields from the trigger/prior steps
  • Expected Response Schema — paste a sample response so later steps can map from it

Configuring Body Mappings

Click Configure Mappings on any step to open the mapping editor. You'll see a table of rows:

Source Field Destination Key Transform
trigger.data.customer_id customerId
trigger.data.amount totalAmount round

Use the Source Field dropdown to pick any field from the trigger payload or from any prior step's response. Enter the destination key that your API expects. Optionally apply a transformation (uppercase, to_int, round, base64_encode, etc.).

Click Add All Trigger Fields to auto-populate all trigger fields as a starting point.

Using Prior Step Responses

After you fill in the Expected Response Schema on a step, downstream steps can map from that step's response fields. For example, if Step 1 returns {"token": "abc123", "userId": 456}, Step 2 will show steps[0].response.token and steps[0].response.userId in the source field dropdown.

This is how you chain data through a flow.

Headers

Click Add Header to add request headers to a step. Each header row has three parts:

  1. Header Name — the HTTP header key (e.g., Authorization)
  2. ModeStatic for a fixed value, or From Field to pull from trigger/step data
  3. Value — the static value, or the source field to use

This replaces the raw JSON header editing with a clean, visual interface.

Step 4: Configure Response Mode

Back in Basic Info, if you set Response Mode to Mirror Step Response, select which step's HTTP response to proxy back to the original webhook caller. This is useful when you need to return something to the caller based on a downstream API response.

Step 5: Set Run Conditions (Optional)

Each step has an optional Run Condition that controls whether it executes. You can choose:

  • Always run (default)
  • Only if the previous step succeeded
  • Only if the previous step failed
  • When a specific trigger field is truthy

And an On Failure policy:

  • Stop — abort the entire flow
  • Skip — continue with a fallback payload for this step
  • Continue — ignore the failure and proceed

Step 6: Save and Get Your Trigger URL

Click Create Flow (or Save Changes). Your flow gets a unique trigger URL, visible on the Flows list page. Send webhooks to this URL to trigger the flow.

Monitoring Flow Runs

Navigate to Flows → History (the clock icon) to see every run. Each run shows:

  • Overall status (success/partial/failed)
  • Time taken
  • Per-step breakdown: status, HTTP response code, latency, and the actual request/response payloads

Use this to debug mapping issues or confirm that each step is receiving the right data.

Tips

  • Always capture a real payload first. The field picker can only show what it knows about. Capturing a real webhook gives you accurate field names.
  • Use Expected Response Schema on every step. Even if a later step doesn't need it now, documenting the schema makes future changes easier.
  • Test with Step N On Failure = Skip during development. This lets the whole flow run even if one step fails, so you can see what each step receives.
  • Mirror Step Response is powerful for sync webhooks. If the caller expects a specific JSON response (e.g., a verification token), set Response Mode to Mirror and point it at the step that returns it.

Tier Availability

Flows are available on all paid tiers. The number of steps per flow depends on your tier (Fledgling: 3 steps, Scout: 15 steps, Skybound: 100 steps). Flow run history is retained for 7, 30, or 90 days respectively.

#flows #automation #webhook #tutorial

Chain webhooks into multi-step workflows.

Route a single event through multiple HTTP steps with per-step transforms and conditional logic. Free to start.