QANode Logo

HTTP Request Node

The HTTP Request node lets you make HTTP requests to REST APIs, SOAP services, or any web endpoint. It supports common HTTP methods, multiple authentication options, saved credentials, file uploads, and file responses.


Overview

PropertyValue
Typehttp-request
CategoryAPI
Color🟣 Purple (#a855f7)
Inputin
Outputout

Configuration

Builder Mode

Builder mode provides a visual interface for constructing the request:

FieldTypeDescription
MethodstringGET, POST, PUT, PATCH, DELETE
URLstringEndpoint URL (supports {{ }})
HeadersobjectHTTP headers as key-value pairs
Query parametersarrayKey-value pairs added to the URL
Body typestringNone, JSON, Raw text, x-www-form-urlencoded, multipart/form-data, or Binary file
Response typestringAuto, Text, JSON, or File
CredentialstringSaved credential for authentication

Raw Mode

Raw mode allows you to edit the request as JSON, providing full control.

Import cURL

Import cURL converts a curl command into the visual request configuration. QANode tries to detect:

  • HTTP method;
  • URL;
  • headers;
  • query parameters;
  • JSON or text body;
  • x-www-form-urlencoded;
  • multipart/form-data;
  • binary file sent with --data-binary @file.

When the cURL references a local file, QANode shows the imported name/path and the user must attach or inform the corresponding fileRef in the file field.


Authentication

The node supports multiple authentication methods.

Using Saved Credentials

The safest and recommended approach. Select an HTTP/API credential containing the base URL and token:

  1. Select the credential in Credential
  2. The base URL and authentication headers are applied automatically
  3. In URL, enter only the path, such as /api/users

Manual Authentication

TypeFieldsResult
Bearer TokenTokenHeader Authorization: Bearer {token}
Basic AuthUsername + passwordHeader Authorization: Basic {base64}
API KeyHeader name + tokenCustom header with the token

Body

For methods that accept a body (POST, PUT, PATCH), choose Body type.

None

Sends no body. This is the default for GET and DELETE.

JSON

{
  "name": "{{ variables.USER_NAME }}",
  "email": "{{ steps["web-flow"].outputs.extracts.email }}",
  "active": true
}

The JSON editor highlights syntax and accepts {{ }} expressions inside values.

Raw text

Use for textual payloads, XML, SOAP, scripts, or any content that should not be treated as JSON.

<login>
  <user>{{ variables.USER }}</user>
</login>

x-www-form-urlencoded

Sends fields as application/x-www-form-urlencoded.

FieldValue
usernameadmin
password{{ variables.ADMIN_PASS }}

multipart/form-data

Sends form fields in multipart format, including text and files.

Field typeDescription
TextRegular text field
FileField that receives a fileRef

Example:

Method: POST
URL: https://httpbin.org/post
Body type: multipart/form-data
Text field:
  description = upload test
File field:
  file = {{ steps["file-generate"].outputs.fileRef }}

Binary file

Sends the contents of a single file as the request body. Use this when the API expects the file directly in the body, not inside a multipart form.

Body type: Binary file
File: {{ steps["file-generate"].outputs.fileRef }}

QANode uses the file MIME type when available. If needed, add a Content-Type header manually.


File Responses

The Response type field controls how the API response is handled:

TypeBehavior
AutoDetects JSON/text or file from content and headers
JSONTries to parse the response as JSON
TextReturns the body as text
FileSaves the response as an artifact and exposes fileRef

Use File when the API returns PDF, image, CSV, Excel, ZIP, or another binary content.


Outputs

OutputTypeDescription
statusnumberHTTP status code (200, 404, 500, etc.)
bodyanyResponse body as text or JSON, depending on the response
fileReffileRefFile returned by the API, when the response is handled as a file

Accessing Outputs

// Response status
{{ steps["http-request"].outputs.status }}  →  200

// JSON or text body
{{ steps["http-request"].outputs.body }}  →  { "id": 1, "name": "John" }

// Array in JSON
{{ steps["http-request"].outputs.body.items[0].title }}  →  "First Item"

// File returned by the API
{{ steps["http-request"].outputs.fileRef }}

Legacy fields such as json, headers, text, rawBody, and statusCode may remain accessible in manual expressions during the compatibility window, but the variables panel suggests only the new surface: status, body, or fileRef.


Practical Examples

GET — Fetch user

Method: GET
URL: https://api.example.com/users/1
Headers: { "Accept": "application/json" }

POST — Create resource

Method: POST
URL: https://api.example.com/users
Body type: JSON
JSON: {
  "name": "Maria",
  "email": "maria@example.com"
}

POST — Multipart upload

Method: POST
URL: https://httpbin.org/post
Body type: multipart/form-data
Text field: description = upload test
File field: file = {{ steps["file-generate"].outputs.fileRef }}

GET — Download file

Method: GET
URL: https://httpbin.org/image/png
Response type: File

Error Handling

StatusMeaningSuggested action
200-299SuccessContinue normally
400Bad requestCheck body/params
401UnauthorizedCheck token/credential
403ForbiddenCheck permissions
404Not foundCheck URL
500Server errorCheck API

Use an If node after HTTP Request to handle different status codes:

[HTTP Request] → [If: status === 200]
                    │ true → [Continue...]
                    │ false → [Log: "Error: {{ steps.api.outputs.status }}"]

Tips

  • Use saved credentials instead of putting tokens directly in fields.
  • Check status before using body.
  • Use variables for base URLs: {{ variables.API_URL }}/endpoint.
  • Use multipart/form-data when the API expects a form upload.
  • Use Response type = File for binary responses.