Reference · Tools

HTTP Request

Makes an HTTP request to any URL and returns the response. Supports all HTTP methods, multiple authentication types, custom headers, query parameters, request body, pagination, batching, and configurable response handling.

Action Core Nodes v1

HTTP Request calls any URL and returns the response, supporting every method, basic, bearer, header and query authentication, custom headers and body, pagination, batching and configurable response parsing. It is the node you reach for when no dedicated integration exists — talking to an internal API or a service BusyBot has no connector for yet.

Node type
Action
Parameters
32
Outputs
Output, Error
Credentials
Basic Auth , Bearer Token , Header Auth , Query Auth

HTTP Request

Makes HTTP requests to any URL with full control over method, auth, headers, body, and response handling.

Overview

Universal HTTP client tool for making configurable HTTP requests to any URL. Supports GET, POST, PUT, PATCH, DELETE, HEAD, and OPTIONS methods. Handles authentication via Basic Auth, Bearer Token, Header Auth, Query Auth, and custom auth. Supports JSON, form-urlencoded, multipart form-data, and raw request bodies. Configurable pagination (parameter update per request, next-URL-in-response), batching with rate limiting, redirect control, timeout, proxy, and SSL settings. Response can be parsed as JSON, text, or auto-detected. This is the go-to tool when no dedicated integration exists for a service.

Category: Core Nodes
Tool Name: http_request
Version: 1

Appearance: Icon: webhook | Color: #0004F5

Node Type

Action — processes input items and produces output

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool supports Basic Auth, Bearer Token, Header Auth and Query Auth credentials. See the Credentials Guide for setup instructions.

Authentication is optional: leave Authentication set to none for a public endpoint and no credential is needed. When you do authenticate, choose the method in Authentication and store the secret as a credential of the matching type. A configured credential takes precedence over the equivalent fields entered directly on the node, so you can develop with inline values and switch to a stored credential later without changing anything else.

Parameters

Request

ParameterTypeRequiredDefaultDescription
MethodoptionsNoGETThe HTTP method to use for the request.
Options: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT
URLstringYesThe URL to make the request to. Must start with http:// or https://. Supports expressions like {{ $json.endpoint }}.
AuthenticationoptionsNononeThe authentication method to use. Select “None” for public APIs.
Options: none, httpBasicAuth, httpBearerToken, httpHeaderAuth, httpQueryAuth, customAuth

Authentication Fields

ParameterTypeRequiredDefaultDescription
UsernamestringYesThe username for Basic Auth. (shown when Authentication is httpBasicAuth)
PasswordstringYesThe password for Basic Auth. (shown when Authentication is httpBasicAuth)
TokenstringYesThe bearer token to include in the Authorization header. (shown when Authentication is httpBearerToken)
Header NamestringYesAuthorizationThe name of the authentication header. (shown when Authentication is httpHeaderAuth)
Header ValuestringYesThe value of the authentication header. (shown when Authentication is httpHeaderAuth)
Query Parameter NamestringYesapi_keyThe name of the query parameter used for authentication. (shown when Authentication is httpQueryAuth)
Query Parameter ValuestringYesThe value of the query parameter used for authentication. (shown when Authentication is httpQueryAuth)
Custom Auth HeadersfixedCollectionNoOne empty headerCustom headers to include for authentication. (shown when Authentication is customAuth)
— NamestringNoThe header name.
— ValuestringNoThe header value.

Query Parameters

ParameterTypeRequiredDefaultDescription
Send Query ParametersbooleanNofalseWhether to include query parameters in the request URL.
Specify Query ParametersoptionsNokeypairHow to specify the query parameters. (shown when Send Query Parameters is true)
Options: keypair (using the fields below), json (using a JSON object)
Query ParametersfixedCollectionNoOne empty pairKey-value pairs to include as query parameters. (shown when Send Query Parameters is true and Specify Query Parameters is keypair)
— NamestringNoThe parameter name.
— ValuestringNoThe parameter value.
JSON QueryjsonNoQuery parameters as a JSON object. (shown when Send Query Parameters is true and Specify Query Parameters is json)

Headers

ParameterTypeRequiredDefaultDescription
Send HeadersbooleanNofalseWhether to include custom headers in the request.
Specify HeadersoptionsNokeypairHow to specify the headers. (shown when Send Headers is true)
Options: keypair (using the fields below), json (using a JSON object)
HeadersfixedCollectionNoOne empty pairKey-value pairs to include as HTTP headers. (shown when Send Headers is true and Specify Headers is keypair)
— NamestringNoThe header name.
— ValuestringNoThe header value.
JSON HeadersjsonNoHeaders as a JSON object. (shown when Send Headers is true and Specify Headers is json)

Body

ParameterTypeRequiredDefaultDescription
Send BodybooleanNofalseWhether to include a body in the request.
Body Content TypeoptionsNojsonThe content type of the request body. (shown when Send Body is true)
Options: json, form-urlencoded, multipart-form-data, raw
Specify Body (specifyBody)optionsNokeypairHow to specify the JSON body. (shown when Send Body is true and Body Content Type is json)
Options: keypair (using the fields below), json (using a JSON object)
Body ParametersfixedCollectionNoOne empty pairKey-value pairs to include in the JSON body. (shown when Send Body is true, Body Content Type is json and Specify Body is keypair)
— NamestringNoField name. Supports dot notation for nested fields (e.g. “data.name”).
— ValuestringNoField value.
JSON BodyjsonNoThe request body as a JSON object. (shown when Send Body is true, Body Content Type is json and Specify Body is json)
Specify Body (specifyBodyUrlEncoded)optionsNokeypairHow to specify the form-urlencoded body. (shown when Send Body is true and Body Content Type is form-urlencoded)
Options: keypair (using the fields below), string (one raw field)
Body Parameters (URL-Encoded)fixedCollectionNoOne empty pairKey-value pairs for form-urlencoded body. (shown when Send Body is true, Body Content Type is form-urlencoded and Specify Body is keypair)
— NamestringNoThe field name.
— ValuestringNoThe field value.
Body (body)stringNoRaw URL-encoded body string. (shown when Send Body is true, Body Content Type is form-urlencoded and Specify Body is string)
Body Parameters (Multipart)fixedCollectionNoOne empty pairKey-value pairs for multipart form-data body. Binary file uploads are not yet supported. (shown when Send Body is true and Body Content Type is multipart-form-data)
— NamestringNoThe field name.
— ValuestringNoThe field value.
Body (bodyRaw)stringNoRaw body content to send. (shown when Send Body is true and Body Content Type is raw)
Content TypestringNoThe Content-Type header value for the raw body. (shown when Send Body is true and Body Content Type is raw)

Options

ParameterTypeRequiredDefaultDescription
OptionscollectionNo{}Response handling, transport settings and pagination.
— Response FormatoptionsNoautodetectHow to parse the response. Autodetect inspects the Content-Type header.
Options: autodetect, json, text
— Include Response Headers and StatusbooleanNofalseWhether to include response headers and status code in the output.
— Never ErrorbooleanNofalseWhether to succeed even when the HTTP status code is not 2xx.
— Output Property NamestringNodataThe output field name for text responses.
— Follow RedirectsbooleanNotrueWhether to follow HTTP 3xx redirects.
— Max RedirectsnumberNo21Maximum number of redirects to follow.
— Timeout (ms)numberNo300000Request timeout in milliseconds. Default is 300000 (5 minutes).
— Batch SizenumberNo0Number of items to process before pausing. 0 or -1 disables batching.
— Batch Interval (ms)numberNo1000Milliseconds to wait between batches.
— Ignore SSL IssuesbooleanNofalseWhether to accept responses from servers with invalid/self-signed SSL certificates.
— Lowercase HeadersbooleanNotrueWhether to lowercase user-provided header names.
— Array Format in Query ParametersoptionsNobracketsHow to serialize arrays in query parameters.
Options: repeat (foo=1&foo=2), brackets (foo[]=1&foo[]=2), indices (foo[0]=1&foo[1]=2)
— ProxystringNoHTTP proxy URL. Requires HTTP_PROXY/HTTPS_PROXY environment variable support.
— Pagination ModeoptionsNooffWhether and how to paginate through results.
Options: off, updateAParameterInEachRequest (change a parameter on every request), responseContainsNextURL (follow a URL found in the response)
— Next URL ExpressionstringNoExpression that resolves to the next page URL from the response. Use $response to access the response. (shown when Pagination Mode is responseContainsNextURL)
— Pagination ParametersfixedCollectionNoOne qs parameterParameters to update in each subsequent paginated request. (shown when Pagination Mode is updateAParameterInEachRequest)
— — TypeoptionsNoqsWhere the parameter is sent.
Options: qs (query string), headers, body
— — NamestringNoThe parameter name, for example page.
— — ValuestringNoThe value for the next request, usually an expression over $response.
— Pagination Complete WhenoptionsNoresponseIsEmptyWhen to stop making paginated requests. (shown when Pagination Mode is updateAParameterInEachRequest, responseContainsNextURL)
Options: responseIsEmpty, receiveSpecificStatusCodes, other (your own expression)
— Status Codes When CompletestringNoComma-separated HTTP status codes that indicate pagination is complete. (shown when Pagination Complete When is receiveSpecificStatusCodes)
— Complete ExpressionstringNoExpression that evaluates to true when pagination should stop. (shown when Pagination Complete When is other)
— Limit Pages FetchedbooleanNofalseWhether to limit the total number of paginated requests. (shown when Pagination Mode is updateAParameterInEachRequest, responseContainsNextURL)
— Max PagesnumberNo100Maximum number of paginated requests to make. (shown when Limit Pages Fetched is true)
— Interval Between Requests (ms)numberNo0Milliseconds to wait between paginated requests. 0 means no delay. (shown when Pagination Mode is updateAParameterInEachRequest, responseContainsNextURL)

All Requests

ParameterTypeRequiredDefaultDescription
Max ConcurrencynumberNo10Maximum number of items to process concurrently.

Output Data

The response replaces the item JSON — nothing from the input item passes through, and no binary data is produced. Read anything you still need before this node, or send it down a parallel branch.

The exact shape depends on Response Format and Include Response Headers and Status:

Response FormatInclude Headers and StatusOutput item
JSONoffThe parsed response body becomes the item JSON
JSONon{ "body": …, "headers": {…}, "statusCode": 200, "statusMessage": "OK" }
Textoff{ "<Output Property Name>": "…" }data by default
TextonThe same field, plus headers, statusCode and statusMessage

With autodetect, a JSON Content-Type is parsed as JSON; anything else is treated as text, though a text body that happens to parse as JSON is upgraded to JSON.

A JSON array response fans out. When the body is a top-level array and Include Response Headers and Status is off, the node emits one output item per array element — a list endpoint feeds a per-record branch with no Split Out node in between:

{
  "id": 1,
  "name": "Ada Lovelace",
  "email": "ada@example.com"
}

Turn Include Response Headers and Status on and you get a single item instead, with the whole array under body:

{
  "body": [
    { "id": 1, "name": "Ada Lovelace" },
    { "id": 2, "name": "Alan Turing" }
  ],
  "headers": { "content-type": "application/json" },
  "statusCode": 200,
  "statusMessage": "OK"
}

Pagination adds items, not fields. Every page produces its own output item (and its own per-element items for array bodies), so a run that fetched five pages of ten records leaves fifty items on the output.

A non-2xx status fails the item and is handled according to the node’s error mode. Turn Never Error on to receive the response anyway — pair it with Include Response Headers and Status so a downstream node can branch on statusCode.

Reference the response downstream by expression, e.g. {{ $json.id }} for a plain JSON body or {{ $json.body.id }} when headers and status are included.

Usage Examples

  • GET data from a REST API
  • POST JSON data to an endpoint
  • Call any external API with Bearer token auth
  • Fetch paginated results from an API
  • Submit a form via HTTP POST

Example Configuration

A plain GET request:

{
  "type": "http_request",
  "parameters": {
    "method": "GET",
    "url": "https://api.example.com/users"
  }
}

GET with query parameters entered as fields:

{
  "type": "http_request",
  "parameters": {
    "method": "GET",
    "url": "https://api.example.com/search",
    "sendQuery": true,
    "specifyQuery": "keypair",
    "queryParameters": {
      "parameters": [
        { "name": "q", "value": "test" },
        { "name": "limit", "value": "10" }
      ]
    }
  }
}

The same request with the query supplied as JSON:

{
  "type": "http_request",
  "parameters": {
    "method": "GET",
    "url": "https://api.example.com/search",
    "sendQuery": true,
    "specifyQuery": "json",
    "jsonQuery": {
      "q": "test",
      "limit": 10,
      "sort": "name"
    }
  }
}

POST a JSON body built from fields, with a custom header:

{
  "type": "http_request",
  "parameters": {
    "method": "POST",
    "url": "https://api.example.com/users",
    "sendHeaders": true,
    "specifyHeaders": "keypair",
    "headerParameters": {
      "parameters": [
        { "name": "Content-Type", "value": "application/json" }
      ]
    },
    "sendBody": true,
    "contentType": "json",
    "specifyBody": "keypair",
    "bodyParameters": {
      "parameters": [
        { "name": "name", "value": "John Doe" },
        { "name": "email", "value": "john@example.com" }
      ]
    }
  }
}

POST a JSON body written directly:

{
  "type": "http_request",
  "parameters": {
    "method": "POST",
    "url": "https://api.example.com/users",
    "sendBody": true,
    "contentType": "json",
    "specifyBody": "json",
    "jsonBody": {
      "name": "John Doe",
      "email": "john@example.com",
      "age": 30
    }
  }
}

POST a form-urlencoded login:

{
  "type": "http_request",
  "parameters": {
    "method": "POST",
    "url": "https://api.example.com/login",
    "sendBody": true,
    "contentType": "form-urlencoded",
    "specifyBodyUrlEncoded": "keypair",
    "bodyParametersUrlEncoded": {
      "parameters": [
        { "name": "username", "value": "user@example.com" },
        { "name": "password", "value": "secretpassword" }
      ]
    }
  }
}

POST multipart form fields:

{
  "type": "http_request",
  "parameters": {
    "method": "POST",
    "url": "https://api.example.com/upload",
    "sendBody": true,
    "contentType": "multipart-form-data",
    "bodyParametersMultipart": {
      "parameters": [
        { "name": "title", "value": "My Document" },
        { "name": "description", "value": "Document description" }
      ]
    }
  }
}

Send a raw XML body:

{
  "type": "http_request",
  "parameters": {
    "method": "POST",
    "url": "https://api.example.com/webhook",
    "sendBody": true,
    "contentType": "raw",
    "bodyRaw": "<xml><data>raw content</data></xml>",
    "rawContentType": "application/xml"
  }
}

Tighten the transport settings and keep the status code:

{
  "type": "http_request",
  "parameters": {
    "method": "GET",
    "url": "https://api.example.com/data",
    "options": {
      "responseFormat": "json",
      "fullResponse": true,
      "timeout": 30000,
      "followRedirects": true,
      "maxRedirects": 5,
      "neverError": false
    }
  }
}

Page through a list endpoint, ten pages at most:

{
  "type": "http_request",
  "parameters": {
    "method": "GET",
    "url": "https://api.example.com/items",
    "options": {
      "paginationMode": "updateAParameterInEachRequest",
      "paginationParameters": {
        "parameters": [
          { "type": "qs", "name": "page", "value": "1" }
        ]
      },
      "paginationCompleteWhen": "responseIsEmpty",
      "limitPagesFetched": true,
      "maxRequests": 10,
      "requestInterval": 1000
    }
  }
}

Call a protected endpoint with a stored Bearer Token credential:

{
  "type": "http_request",
  "parameters": {
    "method": "GET",
    "url": "https://api.example.com/protected",
    "authentication": "httpBearerToken"
  }
}

Update a record, taking the id from the incoming item:

{
  "type": "http_request",
  "parameters": {
    "method": "PUT",
    "url": "https://api.example.com/resources/{{ $json.id }}",
    "sendBody": true,
    "contentType": "json",
    "specifyBody": "json",
    "jsonBody": {
      "name": "Updated Resource",
      "description": "Updated description"
    }
  }
}

Tolerate an unreliable endpoint and inspect the status yourself:

{
  "type": "http_request",
  "parameters": {
    "method": "GET",
    "url": "https://api.example.com/unstable-endpoint",
    "options": {
      "neverError": true,
      "fullResponse": true,
      "timeout": 60000
    }
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

Makes HTTP requests to any URL with configurable method, auth, headers, body, pagination, and response format. Use when no dedicated integration exists for a service.

Important Notes

  1. Conditional parameters — many parameters only appear once the switch above them is on. Check the gates in the tables before adding a field to a saved configuration.
  2. Key-value collectionsQuery Parameters, Headers, Body Parameters and their siblings each hold their entries under a parameters array of name/value objects.
  3. Options is a flat object — its fields sit directly inside it, not wrapped in arrays.
  4. Authentication — picking a method in Authentication reveals its fields; storing a credential of the same type overrides them.
  5. Content-Type — a JSON body sets the header for you. Override it with a custom header only when the API insists on something unusual.

Rate limiting and reliability

  • Batch Size and Batch Interval (ms) pause between groups of items, which is the simplest way to stay under an API’s rate limit when many items arrive at once. Max Concurrency controls how many run in parallel.
  • Interval Between Requests (ms) does the same job inside a single paginated run.
  • Raise Timeout (ms) for slow endpoints, and lower it for ones you would rather fail fast.

Notes

  • Binary file uploads are not supported in multipart bodies; send text fields only.
  • Lowercase Headers applies to the header names you supply, not to the ones the server returns.
  • Ignore SSL Issues disables certificate verification for the request. Use it only against hosts you control.

Frequently asked questions

Why can I not see a parameter the docs mention?

Many parameters only appear once the switch above them is on. Check the gates in the parameter tables before assuming a field is missing — this is the most common confusion when configuring the node from scratch.

How are query parameters, headers and body fields structured?

Each key-value collection holds its entries under a `parameters` array of name/value objects, which matters when you write the node configuration as JSON rather than through the editor.

Where do the Options fields live?

Directly inside the Options object, which is flat — they are not nested another level down like the key-value collections are.

Can it handle paginated APIs?

Yes, pagination is configurable on the node, so a multi-page result can be fetched in one step instead of building a loop yourself.

Build with the HTTP Request node

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Basic Auth credentials first.

Open BusyBot

Last updated . Spotted something wrong? Tell us.