Non-custodial multi-facilitator x402 payment client for autonomous AI agents.
agent.pay(url) works against:
- AiFinPay native flow (Solana Seat PDA + Ed25519)
- Coinbase x402 spec — detection + parsing today; on-chain settlement coming in 0.3.x
The Ed25519 keypair is generated locally and never leaves your process.
The SDK auto-detects the facilitator flavor on a 402 response and builds
the right auth payload (three-headers for AiFinPay, base64
PAYMENT-SIGNATURE for Coinbase x402).
# alpha / prerelease (current)
pip install aifinpay-agent --pre
# stable (when 1.0 ships)
pip install aifinpay-agentfrom aifinpay import Agent, PayOptions
# Generate a fresh keypair locally — never transmitted
agent = Agent.new()
print("Fund this address:", agent.address)
print("Save this secret:", agent.secret_b58) # store securely!
# Wait until the wallet has at least $0.01 worth on-chain
agent.wait_for_funding(min_usd_cents=1)
# Request an invoice for a Seat (USDC on Solana)
invoice = agent.reserve_seat_invoice(amount_usd=1.00, asset="USDC")
print("Invoice:", invoice.raw)
# Build + sign + submit the Solana transaction with @solana/web3.js, anchorpy,
# or solana-py — the invoice contains program_id, treasury_vault, mints, etc.
# Generic x402 — auto-detects facilitator, signs, retries
resp = agent.pay("https://aifinpay.company/api/stats")
print(resp.json())
# Pay any third-party x402 endpoint (e.g. Coinbase x402-protected API)
resp = agent.pay(
"https://api.example.com/v1/data",
method="POST",
json={"q": "hello"},
options=PayOptions(max_amount_usd=0.10), # refuse if cost > $0.10
)# from solana-keygen JSON file
agent = Agent.from_keypair_file("~/agent-wallet.json")
# from base58 secret string
agent = Agent.from_secret_b58("3RvZm7Gw...")agent.pay(url):
- Sends the request unauthenticated.
- On
402, inspects the response and picks a facilitator adapter:- AiFinPay —
protocol: "AiFinPay vX"field in JSON body, oragreement_hash+treasury_vaultfingerprint - Coinbase x402 —
PAYMENT-REQUIREDHTTP header
- AiFinPay —
- Builds the right auth payload:
- AiFinPay → reads
x-noncefrom the 402 body (no extra round-trip), computesSHA-256("AiFinPay-x402:{nonce}:{pubkey}"), signs with Ed25519, setsx-agent-pubkey,x-nonce,x-signatureheaders - Coinbase x402 → builds a
PaymentPayload, base64-encodes, setsPAYMENT-SIGNATURE(settlement coming in 0.3)
- AiFinPay → reads
- Retries the original request with the auth attached.
The server verifies the signature, checks the agent's on-chain payment proof (Seat PDA for AiFinPay, settled tx for Coinbase x402), and serves the resource.
- The server never sees your private key. Period.
- Nonces are consumed on use; replay-resistant.
- All transactions are public and on-chain — Solana + Polygon mainnet.
MIT.