# HTTP Request

> Run HTTP Request by infsh online or via API. From $0.00000277 per second, no setup.

**URL:** https://inference.sh/apps/infsh/http
**Last updated:** 2026-10-11

---

Make an HTTP request to a public URL and get the status, headers and body back. JSON, form, text and multipart file uploads; internal addresses are refused.

- app: `infsh/http`
- maker: [infsh](https://inference.sh/apps/infsh.md)
- category: [other](https://inference.sh/apps/category/other.md)
- tasks: [workflow utilities](https://inference.sh/apps/tag/workflow-utilities.md)
- price: from $0.00000277/sec
- runs via: api, javascript and python sdk, belt cli, mcp

## http API Guide

### About
make an http request to a public url and get the status, headers and body back. json, form, text and multipart file uploads; internal addresses are refused.

### 1. Calling the API

#### Install the Client

```bash
pip install inferencesh
```

#### Setup Your API Key
Set `INFERENCE_API_KEY` as an environment variable. Get your key from settings → api keys.

```bash
export INFERENCE_API_KEY="inf_your_key"
```

#### Run and Get Result

```python
import os
from inferencesh import inference

client = inference(api_key=os.environ["INFERENCE_API_KEY"])


result = client.run({
        "app": "infsh/http@1tm7ytah",
        "input": {
            "url": "url"
        }
    })

print(result["output"])
```

#### Stream Live Updates

```python
import os
from inferencesh import inference

client = inference(api_key=os.environ["INFERENCE_API_KEY"])


## stream=True yields updates as they arrive
for update in client.run({
        "app": "infsh/http@1tm7ytah",
        "input": {
            "url": "url"
        }
    }, stream=True):
    if update.get("progress"):
        print(f"progress: {update['progress']}%")
    if update.get("output"):
        print(f"output: {update['output']}")
```

### 2. Authentication
The API uses API keys for authentication. See the authentication docs for detailed setup instructions.

### 3. Files

#### Automatic Upload

```python
## local file paths are automatically uploaded
result = client.run({
    "app": "infsh/http@1tm7ytah",
    "input": {
        "image": "/path/to/local/image.png",  # detected & uploaded
        "audio": "https://example.com/audio.mp3",  # url passed through
    }
})
```

#### Manual Upload

```python
## upload and get a hosted URL
file = client.files.upload("/path/to/file.png")
print(file.uri)  # https://cloud.inference.sh/...
```

### 4. Schema

#### Input
- **method** (string): HTTP method.
- **url** (string) *required*: Request URL. http or https only; must resolve to a public internet address.
- **headers** (object): Request headers. Connection-level headers (Host, Content-Length, Connection, Transfer-Encoding, ...) are dropped.
- **query** (object): Query parameters, added to any already in the URL. A list repeats the key.
- **body_json** (any): JSON request body (any JSON value). Sets Content-Type: application/json.
- **body_text** (string): Raw text request body. Set Content-Type in headers (default text/plain; charset=utf-8).
- **form** (object): Form fields. Sent application/x-www-form-urlencoded, or as multipart fields when files are given.
- **files** (array): Files to upload as multipart/form-data, optionally with form fields.
- **timeout_seconds** (number): Deadline for the whole request: connect, redirects and reading the body.
- **follow_redirects** (boolean): Follow 3xx redirects. Each hop is checked like the first.
- **max_redirects** (integer): Most redirects to follow.
- **max_response_bytes** (integer): Largest response body to read (decoded bytes).
- **truncate** (boolean): When the body exceeds max_response_bytes: true returns the first max_response_bytes with truncated=true, false fails the task.
- **response_as** (string): auto: JSON to body_json, small text to body_text, anything else to body_file. json/text/file force one.

#### Output
- **body_file** (string): Body as a file, when binary, large, or response_as=file.
- **body_json** (any): Parsed body, when it is JSON.
- **body_text** (string): Body as text, when it is text.
- **elapsed_ms** (integer): Time inside the app from sending the request to the end of the body.
- **final_url** (string): URL of the final response, after redirects.
- **headers** (object): Response headers, lower-case names; repeated headers joined with ', '.
- **ok** (boolean): True when status is 2xx.
- **redirects** (integer): Redirects followed.
- **size_bytes** (integer): Body bytes read (after content decoding).
- **status** (integer): HTTP status code of the final response.
- **truncated** (boolean): True when the body was cut at max_response_bytes.

## other other apps

- [FID Score](https://inference.sh/apps/eval/fid-score.md): from $0.00055833/sec
- [CLIPScore](https://inference.sh/apps/eval/clipscore.md): from $0.00055833/sec
- [ArcFace Identity Similarity](https://inference.sh/apps/eval/arcface.md): from $0.00055833/sec
- [PickScore](https://inference.sh/apps/eval/pickscore.md): from $0.00055833/sec
- [Gmail](https://inference.sh/apps/google/gmail.md): from $0.00000277/sec

## faq

### how much does HTTP Request cost?

from $0.00000277/sec. you pay per run from your inference shell credits. no subscription is required.

### how do I run HTTP Request via api?

call infsh/http with the javascript or python sdk, the rest api, or `belt app run infsh/http` from a terminal. the api reference on this page lists every input.

### who makes HTTP Request?

HTTP Request is made by infsh and runs on inference shell. every infsh app is listed at https://inference.sh/apps/infsh.

### can my agent use HTTP Request?

yes. agents call it as a tool through the inference shell mcp server (https://api.inference.sh/mcp), the belt cli or the sdk, and pay per run like you do.

### what are the alternatives to HTTP Request?

other other apps on inference shell include FID Score, CLIPScore, ArcFace Identity Similarity, PickScore. they run through the same api, so switching is a one-line change.
