All nodes/Integrations/HTTP & Web
HTTP Request
Performs an HTTP request (GET/POST/PUT/PATCH/DELETE/HEAD) and returns the response status, headers and body. Supports JSON/text/form body, bearer/basic/custom-header auth, and templating of URL/headers/body via Jinja. SSRF protection — requests to private networks are blocked.
Type in the graph: http_request
Exec
An error branch can be enabled (expose_error_output) to handle failures on their own path.
Try it
Minimal working workflow
- Execute + Data
- Data
Runs as pasted
When to use it
The general-purpose step to any HTTP API that has no node of its own. When a dedicated node exists — Telegram, amoCRM, Bitrix24, calendar, email — use it: authentication, pagination and error shapes are already handled there. To read a web page as text for a model there is Fetch Webpage; for an MCP server there is MCP Tool.
This node is a graph step, not an agent tool: it has no tool_out port, so a model cannot
call it. To hand an agent an HTTP call of your own, wrap it in a
WF tool.
How it works
The URL, headers, query parameters, body and the auth fields are all rendered through Jinja,
so {{ inputs.input.id }}, {{ variables.token }} and {{ secret.API_KEY }} work in any of
them.
Headers, Query Parameters and a form body are a JSON object written as text. Invalid
JSON fails the node with a direct message. For GET and HEAD no body is sent, whatever the
field contains.
The node has two outputs: Success carries execution onward, and Response returns the
response object — status_code, ok, headers, body, text, url, elapsed_ms. text
is always the raw string; body is parsed as JSON only when Parse JSON Response is on and
the server sent a Content-Type containing json, otherwise it holds the same string.
Requests to private networks and loopback are blocked, and every redirect hop is validated again. The response is truncated at Max Response Bytes (1,000,000 by default, 10,000,000 ceiling). The timeout defaults to 30 seconds with a maximum of 120; a plan may lower both.
Common mistakes
- Expecting the response on
Success. The value comes out of theResponseport — wire a data edge from it, or read{{ nodes.<id>.output.body }}. - Forgetting how 4xx/5xx is handled. Fail on 4xx/5xx is on by default, so anything
outside 2xx goes to the
Erroroutput. To inspect the status yourself, turn it off: thenSuccessfires and you decide fromokandstatus_code. - Reading
bodywhen the response was not JSON. A server sending JSON astext/plainleaves you a string to parse. - Mistaking a truncated response for the server’s answer. A large JSON stops parsing once it is cut — raise the byte limit.
Inputs
| Port | Wire | Payload | Notes |
|---|---|---|---|
Runinput | Execute + Dataexecute_data | — | Execution trigger and optional payload available in templates |
Outputs
| Port | Wire | Payload | Notes |
|---|---|---|---|
Responseoutput | Datadata | object |
Configuration
| Field | Type | Default | Description |
|---|---|---|---|
Custom Header Nameauth_header_name | string | Authorization | Header name for custom_header auth type shown when auth_type = custom_header |
Auth Token / Passwordauth_token | string | "" | Bearer token, basic-auth password, or custom-header value secret shown when auth_type = bearer | basic | custom_header |
Auth Typeauth_type | string | none | none, bearer (token), basic (username+password), custom_header Options: |
Basic Usernameauth_username | string | "" | Username for basic auth shown when auth_type = basic |
Bodybody | string | "" | Request body. For 'json' — JSON string; for 'form' — JSON object of key/value pairs. supports templates shown when body_type = json | text | form |
Body Typebody_type | string | none | none — no body; json — JSON payload; text — raw text; form — application/x-www-form-urlencoded Options: |
Fail on 4xx/5xxfail_on_status | boolean | true | Route to Error output on non-2xx responses (otherwise always Success with ok=False) |
Follow Redirectsfollow_redirects | boolean | true | |
Headersheaders | string | "" | JSON object of request headers, e.g. {"X-Foo": "bar"} supports templates |
Max Response Bytesmax_response_bytes | integer | 1000000 | Truncate response body if it exceeds this size |
Methodmethod | string | GET | HTTP method Options: |
Parse JSON Responseparse_json | boolean | true | Decode response body as JSON when Content-Type is application/json |
Query Parametersquery_params | string | "" | JSON object of URL query parameters, e.g. {"page": 1} supports templates |
Timeout (seconds)timeout_seconds | number | 30 | Request timeout |
URLurl | string | "" | Target URL (http/https). Jinja templating supported. supports templates |
Shared fields
Every node has these three — the platform adds them, not the node author.
expose_error_output— When enabled, show an execution output to connect nodes that run if this step fails.