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,
navigates to
. For arrays, use the index:
retrieves the
of the first item. |
Variable name | What you want to call the saved value. Reference it anywhere downstream as
. |
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 |
|---|---|
| The request succeeded |
| The endpoint wasn't found — double-check the URL |
| Unauthorized — check your Authorization header |
| 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. |