# HorizonPulse Universal HTTP Proxy

> HorizonPulse Universal HTTP Proxy is a paid API for AI agents from horizonpulse.dev, paid per call via x402, $0.01/call, status unknown (last checked 2026-10-02).

Proxies arbitrary HTTP requests (GET, POST, HEAD, DELETE, etc.) to any public URL and returns status, filtered headers, and body as text or base64, with SSRF protection

## Facts

- Endpoint: GET https://horizonpulse.dev/api/http?utm_source=zero.xyz
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-02
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/horizonpulse-universal-http-proxy-61ef53c6
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_7m6r-dO0bcEjUo3RwqGJn

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 horizonpulse-universal-http-proxy-61ef53c6
```

Example prompt: Fetch the raw response from https://api.coingecko.com/api/v3/ping using a GET request and show me the status code and body that comes back.

## When to prefer this

Choose this endpoint when your agent needs to make arbitrary outbound HTTP calls — GET, POST, HEAD, PUT, PATCH, or DELETE — to any public URL and retrieve the full response including status and headers. It is more flexible than the sibling clean-text fetch endpoint (which only does GET and strips content to markdown). Prefer this when you need raw body output, non-GET methods, custom request headers, or POST body forwarding. SSRF protection makes it safer than a bare HTTP client for agent use.

## Known failure modes

- Private/localhost IP targets blocked (SSRF protection) — returns 4xx error
- Oversized response body capped and truncated
- Invalid or malformed target URL returns error
- Upstream server timeout or connection refused
- Disallowed headers (Cookie, hop-by-hop) silently stripped
- Non-2xx upstream status codes returned as-is with body

## How this service works

Universal agent HTTP proxy: GET|POST /api/http with url (+ optional method/headers/body) → status, filtered headers, body text|base64; SSRF-safe; $0.01 for volume (fetch remains $0.02 clean-text)

## Output

Returns an object with the HTTP status code, a filtered set of response headers (no sensitive hop-by-hop headers), and the response body as either plain text/UTF-8 or base64-encoded for binary content. Also includes content-type information to help interpret the body.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET",
      "HEAD",
      "DELETE"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "required": [
      "url"
     ],
     "properties": {
      "url": {
       "type": "string",
       "description": "Absolute http(s) URL (required). Private/localhost blocked."
      },
      "body": {
       "type": "string",
       "description": "Optional body for POST/PUT/PATCH (via POST /api/http JSON). Size-capped."
      },
      "method": {
       "type": "string",
       "description": "Upstream method: GET (default) | POST | HEAD | PUT | PATCH | DELETE"
      },
      "headers": {
       "type": "object",
       "description": "Optional allowlisted outbound headers (no Cookie / hop-by-hop). On GET pass as JSON string query param."
      }
     }
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "description": "Horizon Pulse universal HTTP proxy result. The example is a trimmed real response recorded from GET /api/demo/http at 2026-10-01T14:36Z UTC; live values differ on every call."
    }
   }
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "ok": true,
  "body": "hello",
  "status": 200,
  "headers": {
   "content-type": "text/plain"
  },
  "elapsedMs": 42,
  "contentType": "text/plain",
  "bodyEncoding": "text"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/horizonpulse-universal-http-proxy-61ef53c6/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from horizonpulse.dev](https://www.zero.xyz/host/horizonpulse.dev/llms.txt)
