Python SDK for HttPayer
Project description
HTTPayer – Python SDK
HTTPayer is a Python SDK and decorator toolkit for accessing 402 Payment Required resources using the x402 protocol. It integrates with the HTTPayer router to enable seamless off-chain stablecoin payments using EIP-3009 and tokenized authorization headers.
This package provides:
HttPayerClient: a programmatic client for automatically paying 402 responses using a hosted HTTPayer serverX402Gate: a decorator for protecting Web2 API endpoints using 402-compliant authorization and on-chain token metadata- Environment-variable support for network/facilitator configuration
Features
- Unified HTTPayer router integration
- Automatic retry on
402withX-PAYMENTheaders - Flask endpoint protection with
X402Gate - EVM token metadata verification (name/version via
web3) - Compatible with Base Sepolia, Avalanche Fuji, and other testnets
Installation
Install from source or using pip:
pip install httpayer
Install with demo dependencies (for Flask/CCIP demos):
pip install httpayer[demo]
Environment Setup
Create a .env file or set environment variables directly:
NETWORK_TYPE=testnet
NETWORK=base
FACILITATOR_URL=https://x402.org
HTTPAYER_API_KEY=your-api-key
RPC_GATEWAY=https://your-gateway.example
PAY_TO_ADDRESS=0xYourReceivingAddress
Usage
HttPayerClient
A client for paying 402-gated endpoints using a hosted HTTPayer router.
from httpayer import HttPayerClient
client = HttPayerClient()
response = client.request("GET", "http://provider.akash-palmito.org:30862/base-weather")
print(response.status_code) # 200
print(response.headers) # Includes X-PAYMENT-RESPONSE
print(response.json()) # Actual resource data
You can also manually call pay_invoice(...) if you already received a 402 response.
X402Gate Decorator
A gate/decorator for protecting Flask API routes using x402 payment authorization headers.
from httpayer import X402Gate
from web3 import Web3
from flask import Flask, request, jsonify, make_response
gate = X402Gate(
pay_to="0xYourReceivingAddress",
network="base-sepolia",
asset_address="0xTokenAddress",
max_amount=1000, # atomic units (e.g. 0.001 USDC = 1000)
asset_name="USD Coin",
asset_version="2",
facilitator_url="https://x402.org"
)
def create_app():
app = Flask(__name__)
@app.route('/')
def index():
return "<h1>Weather Server</h1><p>Welcome to the Weather Server!</p>"
@app.route("/weather")
@gate.gate
def weather():
response = make_response(jsonify({"weather": "sunny", "temp": 75}))
return response
return app
We can dynamically generate the payment requirements in our Flask app and add it to specific endpoints in our app. Each endpoint can have its own specialized payment instructions.
gate_usdc = X402Gate(
pay_to=...,
network="base",
asset_address=USDC_ADDRESS,
max_amount=1000000,
...
)
gate_dai = X402Gate(
pay_to=...,
network="avalanche",
asset_address=DAI_ADDRESS,
max_amount=2000000,
...
)
@app.route("/api/usdc-data")
@gate_usdc.gate
def usdc_endpoint():
...
@app.route("/api/dai-data")
@gate_dai.gate
def dai_endpoint():
...
Examples
test1.py – Programmatic Client Example
Runs multiple GET requests to x402-protected endpoints and prints response metadata.
python tests/test1.py
test2.py – Flask Weather Server Demo
Starts a local API server (/weather) that requires a valid X-PAYMENT header:
python tests/test2.py
Send payment using HTTPayer:
http POST http://localhost:31157/httpayer \
api_url=http://localhost:50358/weather \
method=GET \
x-api-key:your-api-key
Project Structure
httpayer/ # Main package
├── __init__.py
├── client.py # HttPayerClient class
├── gate.py # X402Gate and helpers
tests/
├── test1.py # Client-based demo
├── test2.py # Flask server demo
.env.sample # Environment config template
pyproject.toml
README.md
License
MIT License. See LICENSE for full details.
Author
Created by Brandyn Hamilton
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 httpayer-0.1.2.tar.gz.
File metadata
- Download URL: httpayer-0.1.2.tar.gz
- Upload date:
- Size: 8.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de089c735931a827d07f57750637b338d6e3c6394f0e1ba897dfa4d2b8fc0c78
|
|
| MD5 |
1f4bee69aed60b3c120f8708f6e203d1
|
|
| BLAKE2b-256 |
39e2605be714b3614155e1996bb95f1850efb5908e54d4f14f58d2f4db5b5784
|
File details
Details for the file httpayer-0.1.2-py3-none-any.whl.
File metadata
- Download URL: httpayer-0.1.2-py3-none-any.whl
- Upload date:
- Size: 8.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d6eb079c5ea0055a567683c0e12273ab23bf71a8b9c908825dbc1718e354b2b
|
|
| MD5 |
76694855722fb9194d0d1a3c39858d5c
|
|
| BLAKE2b-256 |
681f6e6d8ea9cb23af9e9b626ceedb519f7efe3eeda933093e4d9a43a2f3d4d9
|