Flow Step Types: API Call and Extract

These two steps let your flow talk to the outside world. Instead of showing every user the same content, you can pull in real data about them — their plan, their usage, their account details — and use it to personalize what they see as they move through the flow.

API Call is where you set up the request to an external endpoint. Extract is a companion step that lets you pull additional values from the same response later in the flow, without making another request.

API Call

This step sends an HTTP request to an endpoint you specify and optionally saves values from the response as flow variables. To configure it, you need to fill in the URL and Method at minimum. Headers and response processing are optional depending on what the endpoint requires and what you want to do with the response.

URL

The full address of the endpoint, for example https://api.example.com/endpoint. Only HTTPS endpoints are supported. You can make the URL dynamic by embedding flow variables using double curly braces: {{ user.username }} is replaced with the user's actual value at runtime. If a value should be passed without encoding, append the |raw filter: {{ user.username|raw }}.

Method

The HTTP method for the request: GET, POST, PUT, PATCH, or DELETE. Use GET when reading data, and POST or PUT when sending or updating something.

HTTP Headers

Any headers the endpoint requires, added as name/value pairs. Common examples are Authorization for passing an API key or token, and Content-Type to tell the server what format you're sending.

Response Processing

Once the request succeeds, you can extract specific values from the JSON response and save them as flow variables. Add one mapping per value you want to save:

Field

Description

Path

The location of the value in the response, written in dot notation. For example,

data.plan.tier

navigates to

response → data → plan → tier

. For arrays, use the index:

items.0.id

retrieves the

id

of the first item.

Variable name

What you want to call the saved value. Reference it anywhere downstream as

{{ flow.vars.your_variable_name }}

.

Failure Branch

When enabled, the step splits into two paths: one that continues when the request succeeds, and one that runs if it fails. You can add any steps to the failure branch — a fallback message, a generic version of the content, or a quiet continuation so the user never notices something went wrong.

Limits

Timeout

10 seconds per call

Scheme

HTTPS only

Request body

Up to 40 KB

Response body

Up to ~4 KB

Testing Before You Publish

You can run a test directly from the API Call step without publishing the flow. This fires the actual request and returns the full response so you can verify the endpoint, check the status code, and inspect the response body before any real users go through the flow.

Status code

What it means

200

The request succeeded

404

The endpoint wasn't found — double-check the URL

401

Unauthorized — check your Authorization header

500

Something went wrong on the server side

If the test shows "No placeholder detected", that just means you haven't configured any response mappings yet — the request itself worked fine.

Debug Logs

Once your flow is live, open the Debug Logs from the API Call step to monitor requests in real sessions and investigate any issues. Every time a user goes through the flow and hits the API Call step, an entry is recorded.

Each log entry contains:

  • Who and when — the username, date, time, and session identifiers (enrollment ID and run ID) so you can trace the exact flow session
  • Request — the HTTP method, headers, and request body that were sent
  • Response — the status code, response time in milliseconds, and the full response body

Use the search bar to look up a specific username, or filter entries by status:

Status

Description

Success

The request completed and returned a successful response

Failed

The request failed — open the entry to see the error details

Skipped

The step was bypassed, for example due to a branch condition

The log table gives you a quick overview across all sessions with columns for method, status code, response time, username, and timestamp.

Extract

Extract does the same job as response processing in the API Call step, but as a standalone step you can place anywhere later in the flow. Use it when you want to keep the request and the data extraction separate, or when you need to pull a value from an earlier API response that you didn't map at the time.

Note: Extract requires an API Call step earlier in the flow. If none exists, the source step dropdown will show "No upstream API Call step found".

To configure it, select the source API Call step and add at least one mapping.

Source Step

Select which API Call step in the flow you want to extract data from.

Mappings

Works identically to response processing above. Add one mapping per value using a dot-notation path and a variable name. Extracted values are saved as {{ flow.vars.your_variable_name }} and are available in all subsequent steps.

On Parse Error

Defines what happens if the extraction fails — for example because the path doesn't exist in the response or the response isn't valid JSON.

Option

Behavior

Continue (write empty values)

The flow keeps going and saves an empty value for any mapping that failed. Use this when the data is optional.

Fail (log error)

The flow stops and records the error. Use this when the data is critical and continuing without it would cause problems downstream.


Was this article helpful?