---
title: Http Request
description: Makes a HTTP request and returns the response data
---

Call any web address or API and use the response in the next steps.

Optional: pick a saved connection in the **Authentication** field when the service needs one.

## What it does

Http Request sends one request (GET, POST, PUT, DELETE, PATCH, OPTIONS or HEAD) to **URL**, with the headers, query parameters and body you set, and returns what the server sends back.

* **Authentication** adds an `Authorization` header from a saved credential, so API keys stay out of the workflow.
* **Query Params** are added to the URL for you.
* **Body** is sent as JSON, as a URL-encoded form or as multipart form data, depending on **Body Content Type**.
* Redirects are followed (up to **Max redirects**) unless you turn that off.
* The response is read as JSON, text or a file. **Response format** set to *autodetect* decides from the server's content type.

A file response (an image, a PDF, a download) arrives as binary data under the `data` key, ready for file uploads such as Slack **File → Upload**, Google Drive **File → Create** or Gmail attachments.

## When to use it

* Call an API that has no dedicated node.
* Download a file or a JSON feed.
* Send data to a webhook (Zapier, Make, your own server).

For apps that have their own node, such as [Slack](/nodes/builtin/integration/slack/) or [Notion](/nodes/builtin/integration/notion/), that node is easier. To read a web page as text, [Get All Text from Link](/nodes/builtin/core/getalltextfromlink/) is simpler.

## Inputs and settings

## Outputs

By default the item is `{ data }`, the response body. Turn on **Include response header and status** to also get `status`, `statusText`, `headers` and the final `url` after redirects.

## Dependencies and credentials

* **Authentication** (connection): optional. See [Create a connection](/app/connections/).

Choose a credential of the type your API expects, for example a bearer token or basic auth. See [Create a credential](/app/connections/create/).

## Example workflow

1. A [Context Menu](/nodes/builtin/trigger/contextmenu/) trigger on a link.
2. Http Request, **POST** to your webhook URL, **Body Content Type** `application/json`, with a body field `url` = `{{ $input.linkUrl }}`.
3. [Browser Notification](/nodes/extension/browsernotification/): "Sent".

## Common issues

* **"Response status: 401" or "403".** The credential is missing, wrong or lacks permission. Check the **Authentication** field and the key's rights.
* **"Response status: 404".** Check the URL and the query parameters.
* **"URL validation failed".** The URL is malformed or not allowed. Use a full `https://` address.
* **"Maximum redirects exceeded".** The site redirects in a loop, or more times than **Max redirects** allows.
* **It works in the extension but fails in the web app.** Some sites refuse requests sent from another website (a browser rule called CORS). Run the workflow from the extension.
* **The request times out.** Raise **Timeout (ms)** under **Options**; the default is 10 seconds.

## Related nodes

* [Poll Until](/nodes/builtin/flow/polluntil/): call a URL repeatedly until it reports done.
* [HTML Extract](/nodes/builtin/datatransformation/html-extract/): pull values out of an HTML response.
* [JSON](/nodes/builtin/datatransformation/json/): reshape a JSON response.
* [HTTP Request Tool](/nodes/builtin/ai/aidependencies/tools/http-request/): let an AI agent make requests.