Python SDK for ClawFetch — Web Intelligence API for AI Agents (x402-native)
Project description
clawfetch
Python SDK for ClawFetch — Web Intelligence API for AI Agents.
Pay-per-request via x402 (gasless USDC on Base). No API keys, no subscriptions.
Install
pip install clawfetch
Quick Start
Sync
from clawfetch import ClawFetch
with ClawFetch(private_key="0x...") as cf:
# Fetch any URL as clean markdown ($0.001)
page = cf.fetch("https://example.com")
# Extract structured data ($0.003)
btc = cf.extract("https://coingecko.com/en/coins/bitcoin")
print(btc["data"])
# Multi-source research ($0.01)
report = cf.research("latest AI agent frameworks")
Async
import asyncio
from clawfetch import AsyncClawFetch
async def main():
async with AsyncClawFetch(private_key="0x...") as cf:
page = await cf.fetch("https://example.com")
btc = await cf.extract("https://coingecko.com/en/coins/bitcoin")
report = await cf.research("latest AI agent frameworks")
asyncio.run(main())
Both clients have identical APIs — all 7 endpoints, full x402 payment flow, retry with exponential backoff, and typed error hierarchy.
API
| Method | Price | Description |
|---|---|---|
fetch(url) |
$0.001 | URL → clean markdown |
render(url) |
$0.002 | JS-rendered page → markdown |
extract(url) |
$0.003 | Structured data from 17+ sites |
research(topic) |
$0.010 | Multi-source topic research |
domains_check(domains) |
$0.002 | Domain availability check |
domains_suggest(query) |
$0.002 | Domain name suggestions |
extractors() |
$0.001 | List available extractors |
health() |
Free | API status check |
Error Handling
from clawfetch import (
ClawFetch,
ClawFetchError, # Base class
PaymentError, # 402 — insufficient USDC
NetworkError, # Connection/timeout failures
RateLimitError, # 429 — includes retry_after_ms
ApiError, # Other 4xx/5xx errors
)
Configuration
from clawfetch import ClawFetch, RetryOptions
cf = ClawFetch(
private_key="0x...",
base_url="https://api.clawfetch.ai", # default
timeout=30.0, # seconds
retry=RetryOptions(
max_retries=3,
initial_delay_ms=500,
max_delay_ms=10000,
backoff_multiplier=2.0,
),
debug=False,
)
Requirements
- Python 3.9+
- A wallet with USDC on Base (even $1 gives you 1,000+ requests)
License
MIT
Original README below
Python SDK for ClawFetch — Web Intelligence API for AI Agents.
Pay-per-request via x402 (gasless USDC on Base). No API keys, no subscriptions.
Install
pip install clawfetch
Quick Start
from clawfetch import ClawFetch
cf = ClawFetch(private_key="0x...")
# Fetch any URL as clean markdown ($0.001)
page = cf.fetch("https://example.com")
# Extract structured data ($0.003)
btc = cf.extract("https://coingecko.com/en/coins/bitcoin")
print(btc["data"]) # {'name': 'Bitcoin', 'price': 98432.12, ...}
# JS-rendered pages ($0.002)
rendered = cf.render("https://app.uniswap.org")
# Multi-source research ($0.01)
report = cf.research("latest AI agent frameworks")
# Domain availability ($0.002)
domains = cf.domains_check(["coolstartup.com", "coolstartup.ai"])
# List extractors ($0.001)
extractors = cf.extractors()
Configuration
from clawfetch import ClawFetch, RetryOptions
cf = ClawFetch(
private_key="0x...",
base_url="https://api.clawfetch.ai", # default
timeout=30.0, # request timeout in seconds
retry=RetryOptions( # or False to disable retries
max_retries=3,
initial_delay_ms=500,
max_delay_ms=10_000,
backoff_multiplier=2.0,
),
debug=False, # enable debug logging
)
Error Handling
All errors extend ClawFetchError for easy catching:
from clawfetch import ClawFetch, ClawFetchError, PaymentError, NetworkError, RateLimitError, ApiError
cf = ClawFetch(private_key="0x...")
try:
result = cf.fetch("https://example.com")
except PaymentError as e:
print(f"Payment failed ({e.status_code}): {e}")
except RateLimitError as e:
print(f"Rate limited, retry after {e.retry_after_ms}ms")
except NetworkError as e:
print(f"Network error: {e}")
except ApiError as e:
print(f"API error {e.status_code}: {e}")
except ClawFetchError as e:
print(f"ClawFetch error: {e}")
| Error | Status | Retried |
|---|---|---|
PaymentError |
402 | No |
RateLimitError |
429 | Yes (with Retry-After) |
ApiError |
400, 401, 404 | No |
ApiError |
500, 502, 503, 504 | Yes |
NetworkError |
Connection/timeout | Yes |
Retry Behavior
By default, retries are enabled with exponential backoff + jitter:
| Attempt | Delay |
|---|---|
| 1st retry | ~500ms |
| 2nd retry | ~1,000ms |
| 3rd retry | ~2,000ms |
Respects Retry-After headers on 429 responses. Non-retryable errors (400, 401, 402, 404) fail immediately.
Disable retries:
cf = ClawFetch(private_key="0x...", retry=False)
How It Works
- SDK makes a request to ClawFetch
- Server returns
402 Payment Requiredwith USDC amount - SDK auto-signs an EIP-3009 gasless USDC transfer on Base
- Request is retried with payment header
- You get structured data back
No gas fees. No API keys. Just USDC on Base.
Context Manager
with ClawFetch(private_key="0x...") as cf:
data = cf.extract("https://coingecko.com/en/coins/bitcoin")
# Client is automatically closed
Requirements
- Python 3.9+
- A wallet with USDC on Base (even $1 gives you 1,000+ requests)
Development
pip install -e ".[dev]"
pytest tests/ -v
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file clawfetch-0.1.0.tar.gz.
File metadata
- Download URL: clawfetch-0.1.0.tar.gz
- Upload date:
- Size: 20.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f6a5d191c7734f657125ad024fc0862ab102ff4b1725d213b997e9414844766
|
|
| MD5 |
0cd08c1882e68037d143be690a8b57b6
|
|
| BLAKE2b-256 |
0b92289e53b1a3e42d969d52b83f4b24f01589d5573450063bf55fc52049dc94
|
File details
Details for the file clawfetch-0.1.0-py3-none-any.whl.
File metadata
- Download URL: clawfetch-0.1.0-py3-none-any.whl
- Upload date:
- Size: 13.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73708cbbb3612f0835e1ee54e491b96ebd57e5b2731468204121397ebec33f51
|
|
| MD5 |
db1b334960e52812a22549d5a5047420
|
|
| BLAKE2b-256 |
6807d2e73bcd08242b8ce80ed8d93d77274013027d88b61bae3b4148e614aacc
|