Documentation

Everything you need to integrate KeyFetch into your application or AI agent.

Overview

KeyFetch is an HTTP proxy service that allows you to make web requests from different geographic locations. It's designed specifically for AI agents and automated systems that need to:

  • Access geo-restricted content
  • Test applications from different regions
  • Scrape websites without IP blocking
  • Make requests from specific geographic locations

Key Features

  • • 4 global regions: Frankfurt, Sydney, New York, San Francisco
  • • Support for GET, POST, PUT, DELETE, PATCH methods
  • • Custom headers and request bodies
  • • Response headers and body returned
  • • Latency metrics for each request
  • • Pay-per-request billing via KeyKeeper

Authentication

All API requests require authentication using a Bearer token from KeyKeeper. Include your token in the Authorization header:

Authorization: Bearer <your_keykeeper_token>

To get an API token, create an account at keykeeper.world and add credits to your balance. KeyFetch charges $0.001 per request.

Making Requests

Send a POST request to /v1/fetch with your target URL and options:

Basic GET Request
curl -X POST https://keyfetch.world/v1/fetch \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://httpbin.org/ip",
    "region": "eu-frankfurt"
  }'
POST Request with Body
curl -X POST https://keyfetch.world/v1/fetch \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://api.example.com/data",
    "region": "us-east",
    "method": "POST",
    "headers": {
      "Content-Type": "application/json",
      "X-Custom-Header": "value"
    },
    "body": {
      "name": "test",
      "value": 123
    }
  }'

Request Parameters

Parameter Type Default Description
url string Target URL (required)
region string auto Region ID
method string GET HTTP method
headers object {} Custom headers
body any null Request body
timeout number 30000 Timeout in milliseconds

Code Examples

Python
import requests

response = requests.post(
    "https://keyfetch.world/v1/fetch",
    headers={
        "Authorization": "Bearer YOUR_TOKEN",
        "Content-Type": "application/json"
    },
    json={
        "url": "https://httpbin.org/ip",
        "region": "eu-frankfurt"
    }
)

result = response.json()
print(f"Status: {result['status']}")
print(f"Body: {result['body']}")
print(f"Latency: {result['latency_ms']}ms")
JavaScript / Node.js
const response = await fetch("https://keyfetch.world/v1/fetch", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_TOKEN",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    url: "https://httpbin.org/ip",
    region: "eu-frankfurt"
  })
});

const result = await response.json();
console.log(`Status: ${result.status}`);
console.log(`Body: ${result.body}`);
console.log(`Latency: ${result.latency_ms}ms`);

Regions

KeyFetch operates from 4 global regions. Each region has dedicated servers with static IP addresses.

eu-frankfurt

Frankfurt, Germany

ap-sydney

Sydney, Australia

us-west

San Francisco, USA

us-east

New York, USA

You can also query available regions programmatically via GET /v1/regions

Response Format

Successful requests return a JSON object with the proxied response:

{
  "status": 200,
  "headers": {
    "content-type": "application/json",
    "x-request-id": "abc123"
  },
  "body": "{\"origin\": \"134.122.87.87\"}",
  "region": "eu-frankfurt",
  "latency_ms": 142
}

Error Handling

Errors are returned with appropriate HTTP status codes:

Code Description
400 Invalid request (missing URL, invalid JSON)
401 Missing or invalid authorization token
402 Insufficient credits in KeyKeeper account
429 Rate limit exceeded
500 Internal server error
502 Target URL returned an error

Rate Limits

KeyFetch enforces rate limits to ensure fair usage:

  • 60 requests per minute per API key
  • 10 concurrent requests per API key
  • Response size limited to 10MB
  • Request timeout of 30 seconds (configurable up to 60s)

Rate limit headers (X-RateLimit-Limit, X-RateLimit-Remaining, Retry-After) are included in responses.

Best Practices

Choose the nearest region

Select the region closest to your target server for best performance.

Handle errors gracefully

Implement retry logic with exponential backoff for transient failures.

Cache when possible

Cache responses to reduce costs and improve performance.

Monitor your usage

Track your KeyKeeper balance and set up alerts for low credits.