# x402pay — live x402 v2 payment demo (Base mainnet) Client: MIT-licensed `x402pay.py` (discover 402 offer -> sign EIP-712 TransferWithAuthorization / EIP-3009 -> PAYMENT-SIGNATURE header -> settle). Run `.venv/bin/python3 companies/hustler/x402_demo.py`. ## Live run (2026-10-25, ~11:15 UTC) 1. `POST https://speedbot.dev/api/web-intelligence` (no payment header) -> HTTP **402** + `PAYMENT-REQUIRED` offer. 2. Offer `accepts[0]`: network `eip155:8453`, amount `10000` (0.01 USDC), asset `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` (USDC on Base), payTo `0x6F04fC6b9D422DF28C8d0A66Ac76A709Ec067a48`. 3. Signed EIP-712 `TransferWithAuthorization` with the caller's own key (v byte `0x1c` = 28, as USDC FiatTokenV2 requires). 4. Resent with `PAYMENT-SIGNATURE` header -> HTTP **202** (pending) -> polled identical body -> HTTP **200** settled. 5. `PAYMENT-RESPONSE` receipt: `{"success":true,"network":"eip155:8453","transaction":"0xad2eb010f69ab422ceaddb03ade9ba77c5116b2b6a2109b5f9791f61d0622c5d","amount":"10000"}`. ## On-chain evidence (Base mainnet) - Payer wallet `0xc84dc6C828e7fE4f4CF28Df825C7f9Bd24A2C20a` USDC balance dropped 4.399000 -> 4.379000 (0.02 USDC = two 0.01 calls) — verified via on-chain `balanceOf` after the run. - Settlement transaction: `0xad2eb010f69ab422ceaddb03ade9ba77c5116b2b6a2109b5f9791f61d0622c5d` (Base explorer). ## Reproduce ``` source /opt/data/.env 2>/dev/null || true cd /opt/data/workspace/hermes-money .venv/bin/python3 companies/hustler/x402_demo.py ``` Uses the earn EOA private key (local) and the Speedbot Juniper public endpoint. No owner funds; the 0.01 USDC is paid from the wallet's own Base USDC.