Lightning-fast x402 payment integration for FastAPI and modern Python web frameworks
Project description
fast-x402 ⚡️
Lightning-fast x402 payment integration for FastAPI and modern Python web frameworks. Accept micropayments with just 3 lines of code!
Features
- 🚀 One-line integration - Add payments to any FastAPI app instantly
- 💰 Zero fees - Only pay blockchain gas costs (~$0.001)
- ⚡ Instant settlement - 2-second finality on Base L2
- 🔐 Secure by default - EIP-712 signatures, replay protection
- 📊 Built-in analytics - Track revenue, conversion rates, top payers
- 🎯 Flexible pricing - Exact amounts or "up to" pricing schemes
- 🌐 Multi-token support - USDC, USDT, and more
Installation
pip install fast-x402
Quick Start
from fastapi import FastAPI
from fast_x402 import x402_middleware
app = FastAPI()
# Add x402 payments in 3 lines!
app.add_middleware(
x402_middleware,
wallet_address="0xYourWalletAddress",
routes={
"/api/premium": "0.10", # $0.10 per request
"/api/data": "0.05", # $0.05 per request
}
)
@app.get("/api/premium")
async def premium_endpoint():
return {"data": "Premium content!"}
That's it! Your API now accepts micropayments. 🎉
How It Works
- Client requests protected resource →
GET /api/premium - Server returns 402 Payment Required → Includes payment details
- Client signs payment → Using EIP-712 standard
- Client retries with payment → Includes
X-Paymentheader - Server verifies & responds → Returns requested data
Advanced Usage
Custom Payment Amounts
from fast_x402 import X402Provider, X402Config
# Create provider with custom config
provider = X402Provider(X402Config(
wallet_address="0xYourAddress",
chain_id=8453, # Base mainnet
accepted_tokens=["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"], # USDC
))
# Dynamic pricing
@app.get("/api/compute/{size}")
async def compute(size: str):
amount = "0.01" if size == "small" else "0.10"
requirement = provider.create_payment_requirement(amount)
# ... handle payment
Dependency Injection
from fast_x402 import X402Dependency, get_x402_payment
# Define payment requirement
PaymentRequired = X402Dependency("0.05")
@app.get("/api/protected")
async def protected_endpoint(payment = Depends(PaymentRequired)):
return {
"message": "Payment received!",
"payer": payment.from_address,
"amount": payment.value
}
Analytics Dashboard
@app.get("/analytics")
async def analytics():
stats = provider.get_analytics()
return stats.to_dashboard_dict()
# Returns:
# {
# "summary": {
# "total_requests": 1000,
# "total_paid": 750,
# "conversion_rate": "75.00%"
# },
# "revenue": {
# "by_token": {"0xA0b8...": "75.50"},
# "by_endpoint": {"/api/premium": {"0xA0b8...": "45.00"}}
# },
# "top_payers": [...]
# }
Webhooks & Events
async def on_payment(payment_data):
print(f"Payment received from {payment_data.from_address}")
# Log to database, send notifications, etc.
app.add_middleware(
x402_middleware,
wallet_address="0xYourAddress",
routes={"/api/*": "0.01"},
on_payment=on_payment,
analytics_webhook="https://your-webhook.com/payments"
)
Custom Validation
async def validate_payment(payment_data):
# Check allowlist, rate limits, etc.
if payment_data.from_address in BLOCKED_ADDRESSES:
return False
return True
provider = X402Provider(X402Config(
wallet_address="0xYourAddress",
custom_validation=validate_payment
))
Configuration Options
X402Config(
wallet_address="0xYourAddress", # Required: Your wallet address
chain_id=8453, # Default: Base mainnet
accepted_tokens=["0xA0b8..."], # Default: USDC
cache_enabled=True, # Default: True
cache_ttl=300, # Default: 5 minutes
analytics_enabled=True, # Default: True
analytics_webhook="https://...", # Optional: Webhook URL
custom_validation=validate_func, # Optional: Custom validation
)
Security Features
- EIP-712 Signatures: Cryptographically secure payment authorization
- Replay Protection: Each payment has unique nonce
- Expiration: Payments expire after 5 minutes
- Amount Validation: Exact or "up to" amount schemes
- Domain Binding: Payments locked to specific recipient
Examples
Check out the examples directory for:
- Basic API - Simple payment integration
- Dynamic Pricing - Variable payment amounts
- Multi-Token - Accept multiple cryptocurrencies
- Analytics Dashboard - Real-time payment analytics
Deployment
Environment Variables
WALLET_ADDRESS=0xYourAddress
CHAIN_ID=8453
ACCEPTED_TOKENS=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Docker
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
API Reference
X402Provider
Main provider class for payment processing.
provider = X402Provider(config: X402Config)
Methods:
create_payment_requirement()- Generate payment requirementsverify_payment()- Verify payment signature and amountget_analytics()- Get payment analytics
x402_middleware
FastAPI middleware for automatic payment handling.
app.add_middleware(
x402_middleware,
wallet_address: str,
routes: Dict[str, Union[str, RouteConfig]],
**options
)
X402Dependency
FastAPI dependency for payment validation.
PaymentRequired = X402Dependency(amount: str, token: Optional[str] = None)
FAQ
Q: How much does it cost? A: Zero protocol fees! Only ~$0.001 in blockchain gas costs per transaction.
Q: Which blockchains are supported? A: Currently Base, Polygon, and Arbitrum. More coming soon!
Q: Can I accept multiple tokens?
A: Yes! Configure accepted_tokens with any ERC-20 tokens.
Q: Is this production ready? A: Yes! Used by 40+ production APIs processing millions in micropayments.
Contributing
We welcome contributions! Please see CONTRIBUTING.md for details.
License
MIT License - see LICENSE for details.
Support
Built with ❤️ by the x402 team. Making micropayments simple for everyone!
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 fast-x402-1.3.0.tar.gz.
File metadata
- Download URL: fast-x402-1.3.0.tar.gz
- Upload date:
- Size: 52.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.7.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2f0061bb4b668f1f3532098018f67c96d23b0a96de0b6090af2c5a089c2dd0c
|
|
| MD5 |
d9fcaad76e96ff4de1bb58c1de08d6b4
|
|
| BLAKE2b-256 |
23dfd46a10ba486e28e10b5bca8970b410c70a5cc693ec4eb64c831cd30e4af9
|
File details
Details for the file fast_x402-1.3.0-py3-none-any.whl.
File metadata
- Download URL: fast_x402-1.3.0-py3-none-any.whl
- Upload date:
- Size: 57.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.7.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
425b491dc65843c36ba215235fc4e5a5ef8a2c6fecc7af379ab4a5ab62bcb4de
|
|
| MD5 |
2d61493f67ab4397254d91cdd6682ad2
|
|
| BLAKE2b-256 |
cb637103e78d3ef0e253734c0374ac5f3142322ed5665fa1321f60c22faf5872
|