Search all guides

Reference · Tools

HTTP Request node

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.

Works as
Action
Tool name
http_request
Parameters
32
Outputs
Output, Error
Credentials
Basic Auth , Bearer Token , Header Auth , Query Auth

What you can build with HTTP Request

  • 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.

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.

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

ParameterTypeRequiredDefaultDescription
MethodoptionsNoGETThe HTTP method to use for the request.
Options: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT
URLstringYes—The URL to make the request to. Must start with http:// or https://.
AuthenticationoptionsNononeThe authentication method to use. Select “None” for public APIs.
Options: none, httpBasicAuth, httpBearerToken, httpHeaderAuth, httpQueryAuth, customAuth
UsernamestringYes—The username for Basic Auth. (shown when Authentication is httpBasicAuth)
PasswordstringYes—The password for Basic Auth. (shown when Authentication is httpBasicAuth)
TokenstringYes—The 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 ValuestringYes—The 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 ValuestringYes—The value of the query parameter used for authentication. (shown when Authentication is httpQueryAuth)
Custom Auth HeadersfixedCollectionNo{"parameters":[{"name":"","value":""}]}Custom headers to include for authentication. (shown when Authentication is customAuth)
— NamestringNo—
— ValuestringNo—
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, json
Query ParametersfixedCollectionNo{"parameters":[{"name":"","value":""}]}Key-value pairs to include as query parameters. (shown when Send Query Parameters is true and Specify Query Parameters is keypair)
— NamestringNo—
— ValuestringNo—
JSON QueryjsonNo—Query parameters as a JSON object. (shown when Send Query Parameters is true and Specify Query Parameters is json)
Send HeadersbooleanNofalseWhether to include custom headers in the request.
Specify HeadersoptionsNokeypairHow to specify the headers. (shown when Send Headers is true)
Options: keypair, json
HeadersfixedCollectionNo{"parameters":[{"name":"","value":""}]}Key-value pairs to include as HTTP headers. (shown when Send Headers is true and Specify Headers is keypair)
— NamestringNo—
— ValuestringNo—
JSON HeadersjsonNo—Headers as a JSON object. (shown when Send Headers is true and Specify Headers is json)
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, 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, string
Body ParametersfixedCollectionNo{"parameters":[{"name":"","value":""}]}Key-value pairs to include in the JSON body. (shown when Send Body is true and Body Content Type is json and Specify Body is keypair)
— NamestringNo—Field name. Supports dot notation for nested fields (e.g. “data.name”).
— ValuestringNo—Field value.
JSON BodyjsonNo—The request body as a JSON object. (shown when Send Body is true and Body Content Type is json and Specify Body is json)
Body Parameters (URL-Encoded)fixedCollectionNo{"parameters":[{"name":"","value":""}]}Key-value pairs for form-urlencoded body. (shown when Send Body is true and Body Content Type is form-urlencoded and Specify Body is keypair)
— NamestringNo—
— ValuestringNo—
Body (body)stringNo—Raw URL-encoded body string. (shown when Send Body is true and Body Content Type is form-urlencoded and Specify Body is string)
Body Parameters (Multipart)fixedCollectionNo{"parameters":[{"name":"","value":""}]}Key-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)
— NamestringNo—
— ValuestringNo—
Body (bodyRaw)stringNo—Raw body content to send. (shown when Send Body is true and Body Content Type is raw)
Content TypestringNo—The Content-Type header value for the raw body. (shown when Send Body is true and Body Content Type is raw)
OptionscollectionNo{}
Options: autodetect, repeat, off, responseIsEmpty
— 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, brackets, indices
— ProxystringNo—HTTP proxy URL. Requires HTTP_PROXY/HTTPS_PROXY environment variable support.
— Pagination ModeoptionsNooffWhether and how to paginate through results.
Options: off, updateAParameterInEachRequest, responseContainsNextURL
— Next URL ExpressionstringNo—Expression that resolves to the next page URL from the response. Use $response to access the response. (shown when Pagination Mode is responseContainsNextURL)
— Pagination ParametersfixedCollectionNo{"parameters":[{"type":"qs","name":"","value":""}]}Parameters to update in each subsequent paginated request. (shown when Pagination Mode is updateAParameterInEachRequest)
— — TypeoptionsNoqs
Options: qs, headers, body
— — NamestringNo—
— — ValuestringNo—
— Pagination Complete WhenoptionsNoresponseIsEmptyWhen to stop making paginated requests. (shown when Pagination Mode is updateAParameterInEachRequest, responseContainsNextURL)
Options: responseIsEmpty, receiveSpecificStatusCodes, other
— Status Codes When CompletestringNo—Comma-separated HTTP status codes that indicate pagination is complete. (shown when Pagination Complete When is receiveSpecificStatusCodes)
— Complete ExpressionstringNo—Expression 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)
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.

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

This tool makes HTTP requests to any URL, supporting methods like GET, POST, PUT, PATCH, DELETE, HEAD, and OPTIONS. It is the appropriate choice when there is no specialized integration available for a particular service. The tool produces the HTTP response, which can be parsed as JSON or text.

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 collections — Query 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 reviewed . Spotted something wrong? Tell us.