# ReadFetch HTTP Proxy

> ReadFetch HTTP Proxy is a paid API for AI agents from readfetch.com, paid per call via x402, $0.003/call, status unknown (last checked 2026-10-31).

Sends an arbitrary HTTP request (GET, POST, PUT, PATCH, DELETE, HEAD) to any URL and returns the response status, headers, and body as text or base64.

## Facts

- Endpoint: POST https://readfetch.com/v1/fetch?utm_source=zero.xyz
- Price: $0.003/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-31
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/readfetch-http-proxy-5e071d06
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_8qqOFV__j3PN7pjXHSxZg

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability readfetch-http-proxy-5e071d06 -d '<json body>'
```

Example prompt: Fetch the JSON response from https://api.example.com/data/users using a GET request with the header Authorization: Bearer mytoken123 and return the full response body.

## When to prefer this

Use this endpoint when you need to make raw HTTP requests to external APIs, GraphQL endpoints, or file URLs where full control over method, headers, and body is required — especially for binary content, large payloads, PDFs, or APIs that require specific auth headers. Prefer this over browser-based scraping endpoints when the target is a machine-readable API, not a JavaScript-rendered webpage. Choose the residential egress option when the target blocks datacenter IPs.

## Known failure modes

- Upstream server returns 4xx or 5xx — status and body are returned but reflect the upstream error
- Timeout exceeded (max 95s) — request fails with a timeout error
- URL is unreachable or DNS fails — connection error returned
- Max bytes limit hit — body truncated at the configured max_bytes threshold
- Bot detection / IP block on target — retry via residential egress may help
- Malformed URL or unsupported scheme — validation error before request is sent

## How this service works

Send an HTTP request (GET, POST, PUT, PATCH, DELETE, HEAD) through egress and return status_code, response headers, and body as text or base64 (`binary: true`). `max_bytes` caps the stored body; `follow_redirects` (default true) and `timeout_s` (95 s ceiling) apply to the full redirect chain. Use `json_body` for JSON POST/PUT payloads; use `body` for raw bytes or strings. Prefer readfetch_text for readable HTML articles; readfetch_pdf to extract PDF text (not raw bytes alone)

## Output

Returns the HTTP response status code, response headers as key-value pairs, and the response body as either a UTF-8 text string or a base64-encoded string for binary content. Includes the full response from the upstream server including error codes.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "url": {
   "type": "string",
   "title": "Url",
   "format": "uri",
   "maxLength": 2083,
   "minLength": 1,
   "description": "Request URL (http or https)."
  },
  "body": {
   "anyOf": [
    {
     "type": "string"
    },
    {
     "type": "null"
    }
   ],
   "title": "Body",
   "default": null,
   "description": "Raw request body string for POST/PUT/PATCH (mutually exclusive with json_body)."
  },
  "binary": {
   "type": "boolean",
   "title": "Binary",
   "default": false,
   "description": "When true, return body as base64 instead of UTF-8 text."
  },
  "method": {
   "enum": [
    "GET",
    "POST",
    "PUT",
    "PATCH",
    "DELETE",
    "HEAD"
   ],
   "type": "string",
   "title": "Method",
   "default": "GET",
   "description": "HTTP method (GET default)."
  },
  "headers": {
   "anyOf": [
    {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    },
    {
     "type": "null"
    }
   ],
   "title": "Headers",
   "default": null,
   "description": "Optional request headers, e.g. Authorization or Accept."
  },
  "json_body": {
   "anyOf": [
    {
     "type": "object",
     "additionalProperties": true
    },
    {
     "type": "null"
    }
   ],
   "title": "Json Body",
   "default": null,
   "description": "JSON object serialized as the request body (Content-Type application/json)."
  },
  "max_bytes": {
   "type": "integer",
   "title": "Max Bytes",
   "default": 10000000,
   "maximum": 50000000,
   "minimum": 1024,
   "description": "Stop reading and truncate once the response body exceeds this size (bytes)."
  },
  "timeout_s": {
   "type": "number",
   "title": "Timeout S",
   "default": 95,
   "maximum": 95,
   "minimum": 1,
   "description": "Total budget for the whole call in seconds, redirect hops included."
  },
  "follow_redirects": {
   "type": "boolean",
   "title": "Follow Redirects",
   "default": true,
   "description": "Follow 3xx redirects (default true)."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/readfetch-http-proxy-5e071d06/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from readfetch.com](https://www.zero.xyz/host/readfetch.com/llms.txt)
