aifinpay-agent (Python)
Stable 2.0.0 release. Native auth now
requires a request-bound v2 challenge from the coordinated backend update.
auth_headers() refuses the retired unbound proof, and legacy paid call()
settlement is disabled; free provider responses still pass through. Python
does not yet expose Node's verified v1.3 fetchPaid executor.
Non-custodial multi-facilitator x402 payment client for autonomous
AI agents on AiFinPay — canonical domain
aifinpay.io (the legacy aifinpay.company host is retired). SDK
wallet derivation supports EVM and Solana identities; a wallet address alone
does not mean a payment route is enabled.
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).
Install
# install stable
pip install aifinpay-agent
Development setup
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt -e .
Quick start
from 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.io/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
)
Loading an existing keypair
# from solana-keygen JSON file
agent = Agent.from_keypair_file("~/agent-wallet.json")
# from base58 secret string
agent = Agent.from_secret_b58("3RvZm7Gw...")
How x402 auth works under the hood
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.
Privacy
- 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.
License
MIT.
Release files for aifinpay-agent 2.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| aifinpay_agent-2.1.0.tar.gz | 49.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aifinpay_agent-2.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 86.5 kB
Release files / aifinpay_agent-2.1.0.tar.gz
| Download URL | aifinpay_agent-2.1.0.tar.gz |
|---|---|
| Size | 49.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
64d802f60976e3f88d2b79c3f7245d1b0f991395a8882abb90c85396b069e5d5
|
|
BLAKE2b-256 checksum How to use checksums |
77684e2a702b66ee4c4193dcfc25c6b0d7a8474f8a1ee54ea5431b607e0c63f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.7
|
Release files / aifinpay_agent-2.1.0-py3-none-any.whl
| Download URL | aifinpay_agent-2.1.0-py3-none-any.whl |
|---|---|
| Size | 37.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9811adcb8f08f1d5dfd2ec66b7793cf0c52d4dbdd80eda3cb5067657d85bd086
|
|
BLAKE2b-256 checksum How to use checksums |
27c311ffede8a76b68c1aab20a0396a09596058f5215b4fd0b297bff76788a5f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.7
|