. xPay2 is a proxy service that adds payment functionality to any existing AP
This project extends the native capabilities of x402 by adding features like credit, early resource returns, and seamless monetization of any Web2 API โ with any integration effort. xPay2 is a proxy service that adds payment functionality to any existing API without requiring code changes. Developers paste their backend URL, set a price, and get a paid public endpoint powered by the x402 protocol and USDC payments on Base.
https://github.com/Ashar2shahid/xPay2
https://github.com/Ashar2shahid/xPay2
Turn any API into a paid service instantly with HTTP 402 Payment Required protocol
xPay2 is a proxy service that adds payment functionality to any existing API without requiring code changes. Developers paste their backend URL, set a price, and get a paid public endpoint powered by the x402 protocol and USDC payments on Base.
# Clone the repository
git clone <repo-url>
cd ethindia-xPay2
# Install dependencies
npm install
# Set up environment variables
cp .env.example .env
# Add your EVM_PRIVATE_KEY and ADDRESS to .env
# Initialize the database
npm run init-db
# Start the development server
npm run dev
# 1. Create a project with a paid endpoint
curl -X POST http://localhost:3000/api/projects \
-H "Content-Type: application/json" \
-d '{
"name": "My API",
"description": "My paid API service",
"defaultPrice": 0.01,
"currency": "USD",
"payTo": "0xYourAddress",
"paymentChains": ["base"],
"endpoints": [{
"url": "https://api.example.com",
"path": "/data",
"method": "GET",
"price": 0.01,
"description": "Get data endpoint"
}]
}'
# 2. Your proxy URL is now live!
# http://localhost:3000/api/proxy/{project-slug}/data
# 3. Requests without payment return 402
curl http://localhost:3000/api/proxy/{project-slug}/data
# Returns: 402 Payment Required with payment instructions
# 4. Use x402-fetch to make paid requests
# See examples/ directory for client code
The credit system enables prepaid API usage with instant, gasless requests:
// First request: Pay $0.05 for $0.01 endpoint
// โ Creates $0.04 in credits
// Subsequent requests: Use zero-value authentication
// โ Deducts $0.01 from credits (now $0.03)
// โ Instant response, no on-chain transaction
// โ No gas fees
// Continue until credits depleted
// โ System returns 402 asking for payment
# Enable credits for an endpoint
curl -X PATCH http://localhost:3000/api/endpoints/{endpoint-id} \
-H "Content-Type: application/json" \
-d '{
"creditsEnabled": true,
"minTopupAmount": 0.01
}'
Run the comprehensive test suite:
node e2e-test.js
Test Coverage:
โโโโโโโโโโโโโโโ
โ Client โ
โ (x402-fetch)โ
โโโโโโโโฌโโโโโโโ
โ X-Payment: <signature>
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ xPay2 Proxy โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ 1. Verify Payment โ โ
โ โ - EIP-712 signature โ โ
โ โ - Credit balance โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ 2. Forward Request โ โ
โ โ - Add headers โ โ
โ โ - Proxy to backend โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ 3. Settle Payment โ โ
โ โ - On-chain (if paid) โ โ
โ โ - Skip (if credits) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Response + Receipt
โผ
โโโโโโโโโโโโโโโโโโโ
โ Your Backend โ
โ (no changes!) โ
โโโโโโโโโโโโโโโโโโโ
POST /api/projects
Content-Type: application/json
{
"name": "My API",
"description": "API description",
"defaultPrice": 0.02,
"currency": "USD",
"payTo": "0xYourAddress",
"paymentChains": ["base"],
"endpoints": [...]
}
PATCH /api/endpoints/{endpointId}
Content-Type: application/json
{
"creditsEnabled": true,
"minTopupAmount": 0.01
}
GET /api/proxy/{project-slug}/{endpoint-path}
X-Payment: <base64-encoded-x402-payment>
All proxied requests include tracking headers:
X-Proxy-Payment-Status - Payment verification statusX-Proxy-Settlement-Status - On-chain settlement statusX-Credit-Balance - Remaining credit balance (if credits enabled)X-Credit-Used - Whether credits were used for this requestX-Credit-Total-Deposited - Total credits ever depositedX-Credit-Total-Spent - Total credits ever spentExample:
// Without BigNumber โ
0.03 - 0.01 = 0.019999999999999997
// With BigNumber โ
new BigNumber(0.03).minus(0.01) = 0.02
# Required
EVM_PRIVATE_KEY=0x... # Private key for settlement
ADDRESS=0x... # Address to receive payments
# Optional
FACILITATOR_URL=https://facilitator.coinbase.com
ENABLE_SETTLEMENT=true # Enable on-chain settlement
NEXT_PUBLIC_APP_URL=http://localhost:3000
# Build for production
npm run build
# Start production server
npm start
# Or deploy to Vercel
vercel deploy
See the examples/ directory for:
Contributions welcome! Please read C for development guidelines.
MIT
Built with โค๏ธ for ETHIndia 2024

