# HTTP Request - Workflow node | Docs - nodulz

Source: https://nodulz.com/docs/nodes/http

Language: en

Calls an external HTTP API. URL, body and auth fields support expressions.

## Usage and specifics

> [!NOTE] Configuration changes the output
>
> Set URL, method, headers, body and authentication for the target API. Non-2xx responses fail by default. To inspect them intentionally, disable failOnHttpError and keep returnStatus; returnOnlyBody omits the status. Adjust downstream paths to the output shape.

Technical type : `http`. Runtime : `nodulz`.

## Guided example

To read a resource, choose **GET**, enter your test API’s URL, keep **Include status** enabled and **Body only** disabled. If the API returns JSON `{ "id": "customer-42", "active": true }` with status 200, output contains:

```json
{
  "body": { "id": "customer-42", "active": true },
  "status": 200,
  "ok": true
}
```

Headers are added if **Include headers** is enabled. In a later node, read the identifier with `{{ nodes.http1.body.id }}`, adapting `http1` to your node’s technical name.

To send an object as JSON:

1. Choose **POST** and a test resource URL that accepts this method.
2. Add the `Content-Type` header with value `application/json`.
3. In the body, use `{{ JSON.stringify(input) }}` for a manual payload, or `{{ JSON.stringify(input.body) }}` for a webhook request body.
4. Choose the authentication expected by the API. Do not put a production secret in a shared example.

GET does not send a body. For a URL containing a dynamic value, expression encoding is enabled by default: this helps with a parameter value. If the expression represents a complete URL, check **Encode URL values**, which could also encode its separators.

To inspect a 404 in a branch instead of failing the node, disable **Fail on HTTP errors**, keep the status and use an IF on `nodes.http1.status`. Add a failure path; with this option, a node that finishes without error may contain `ok: false`.

## Credentials and prerequisites

This node defines no dedicated external credential. Remote sources or execution targets may still need their own access credentials.

See the [credentials guide](/docs/credentials) if a remote source or execution target requires access.

## Parameters

Names below are technical keys. Defaults are not a ready-to-run configuration: complete fields required by your operation. Paths containing [] describe list items; some fields depend on the selected mode.

| Parameter | Type | Default | Values / limits |
| --- | --- | --- | --- |
| `method` | `enum` | `"GET"` | `GET`, `POST`, `PUT`, `PATCH`, `DELETE` |
| `url` | `string` | `""` | - |
| `encodeUrlValues` | `boolean` | `true` | - |
| `authentication` | `enum` | `"none"` | `none`, `bearer`, `basic` |
| `headers` | `record` | - | - |
| `body` | `string` | - | - |
| `token` | `string` | - | - |
| `username` | `string` | - | - |
| `password` | `string` | - | - |
| `returnOnlyBody` | `boolean` | `false` | - |
| `returnStatus` | `boolean` | `true` | - |
| `returnHeaders` | `boolean` | `true` | - |
| `failOnHttpError` | `boolean` | `true` | - |

## Configuration help

| Setting | Purpose and guidance |
| --- | --- |
| `method`<br>HTTP Method | HTTP verb used for the request (GET, POST, PUT, PATCH, DELETE). |
| `url`<br>URL | Use double curly braces for dynamic values, e.g. {{ nodes.http1.body.id }} |
| `encodeUrlValues`<br>Encode values in the URL | On: each {{ }} in the URL is percent-encoded (safe for a ?q= parameter). Off: the value is inserted as is, to build a path or a full URL. |
| `authentication`<br>Authentication | Authentication method sent with the request. |
| `token`<br>Bearer token | Use double curly braces for dynamic values, e.g. {{ nodes.http1.body.id }} |
| `username`<br>Username | Username for HTTP Basic authentication. |
| `password`<br>Password | Password for HTTP Basic authentication. |
| `failOnHttpError`<br>Fail on HTTP errors | Non-2xx responses fail the node and activate retries and error handling. Disable to inspect these responses in a branch. |
| `returnOnlyBody`<br>Body only | Return the response body directly, without status or headers. |
| `returnStatus`<br>Return status | Include HTTP status code and ok flag in the output. |
| `returnHeaders`<br>Return headers | Include response headers in the output. |
| `headers`<br>Headers | Static headers (not templated). Authorization is set via Authentication above. |
| `body`<br>Request body | Use double curly braces for dynamic values, e.g. {{ nodes.http1.body.id }} |

## Examples

- URL: https://api.example.com/users/{{ input.userId }}
- Body: {{ JSON.stringify(input.payload) }}
- Output: nodes.http1.status, nodes.http1.body

## Initial configuration

Initial catalog configuration example, to adapt before running. Keep secrets in credentials.

```json
{
  "method": "GET",
  "url": "",
  "authentication": "none",
  "returnOnlyBody": false,
  "failOnHttpError": true,
  "returnStatus": true,
  "returnHeaders": true
}
```

## Verification

Test an existing resource and a missing resource in your test API. Check the status and downstream paths. Toggle **Body only**: the example path becomes `nodes.http1.id` and status disappears. Before retrying a POST after a timeout, check whether the write already happened.

See also : [Expressions and data](/docs/expressions), [Executions](/docs/executions), [Node catalog](/docs/nodes).

## Explore further

- [Features - nodulz](https://nodulz.com/product/overview)
- [Node catalog - nodulz](https://nodulz.com/product/catalog)
- [MCP server - nodulz](https://nodulz.com/product/mcp)
- [Pricing - nodulz](https://nodulz.com/pricing)
- [Use cases and workflow automation - nodulz](https://nodulz.com/use-cases)
- [Choose what your workflows can do. - nodulz](https://nodulz.com/compare)
- [Documentation - nodulz](https://nodulz.com/docs)
