> ## Documentation Index
> Fetch the complete documentation index at: https://darkbanner.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Request

> Make HTTP requests to external APIs, services, and endpoints

The **Request** node sends an HTTP request to any URL and captures the response. Use it to call external APIs, fetch data from third-party services, send notifications, or interact with any system that exposes an HTTP interface.

## When to Use It

* Calling a REST API (GET, POST, PUT, DELETE, PATCH)
* Fetching data from an external service
* Sending data to a webhook on another platform
* Triggering actions in tools like Slack, email providers, or CRMs
* Downloading or posting files

## Configuration

> [accordion] URL
>
> The full URL to send the request to. Supports template syntax to insert dynamic values from previous nodes.
>
> ```
> https://api.example.com/users/{{1_Lookup.body.user_id}}
> ```

> [accordion] Method
>
> The HTTP method to use.
>
> | Method | Use Case |
> | - | - |
> | **GET** | Retrieve data |
> | **POST** | Create a resource or send data |
> | **PUT** | Replace an existing resource |
> | **PATCH** | Partially update a resource |
> | **DELETE** | Remove a resource |

> [accordion] Headers
>
> Key-value pairs sent with the request. Common headers include:
>
> * `Content-Type: application/json`
> * `Authorization: Bearer {{credential.api_key}}`
>
> Headers support template syntax and credential references.

> [accordion] Body
>
> The request payload, typically used with POST, PUT, and PATCH. Write your body as JSON and use templates to insert dynamic values:
>
> ```json theme={null}
> {
>   "name": "{{1_Form.form_data.name}}",
>   "email": "{{1_Form.form_data.email}}"
> }
> ```

> [accordion] Query Parameters
>
> Key-value pairs appended to the URL as query parameters. These are URL-encoded automatically:
>
> | Key | Value |
> | - | - |
> | `page` | `1` |
> | `search` | `{{1_Input.body.query}}` |

## Using Credentials

Instead of hardcoding API keys in your headers or body, reference a stored credential:

```
Bearer {{credential.my_api_key}}
```

Credentials are encrypted at rest and resolved securely at runtime. See [Credentials](https://darkbanner.mintlify.site/flow-nodes/overview) for more on managing them.

## Output

The Request node outputs the full HTTP response:

| Field | Description |
| - | - |
| `status` | HTTP status code (e.g., `200`, `404`, `500`) |
| `body` | The response body, automatically parsed as JSON if applicable |
| `headers` | Response headers as key-value pairs |

Access these in downstream nodes:

```
Status: {{2_Request.status}}
First user: {{2_Request.body.data[0].name}}
```

## Scheduling

The Request node can optionally run on a **cron schedule**, making it a trigger node for your flow. This is useful for:

* Polling an API every hour for new data
* Running a daily report
* Syncing records on a schedule

To enable scheduling, toggle **Cron Enabled** in the node config and set a cron expression:

| Expression | Schedule |
| - | - |
| `*/15 * * * *` | Every 15 minutes |
| `0 * * * *` | Every hour |
| `0 9 * * 1-5` | Weekdays at 9 AM |
| `0 0 * * *` | Daily at midnight |

> [!NOTE]
>
> Only nodes with no incoming connections (root nodes) can be scheduled. A flow can have one active schedule at a time.

## Error Handling

If the request fails (network error, timeout, or a non-2xx status), the node's **failure path** fires. Connect a downstream node to the failure output to handle errors gracefully.

Common patterns:

* Log the error to a data table
* Send a notification (e.g., Slack message)
* Retry with a different endpoint
* Create a ticket for manual review

> [!TIP]
>
> Even a `400` or `500` response is considered a completed request — the failure path only fires on network-level failures. If you need to branch on status codes, use a Condition node after the Request.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.