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:
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"
}' 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
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") 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.
Frankfurt, Germany
Sydney, Australia
San Francisco, USA
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.