{"name":"pay402","what":"a Python client that pays HTTP 402 checkouts — one call, no account, no API key, no browser, and the buyer holds no gas token on either chain","install":{"base":"pip install \"pay402[evm]\"","solana":"pip install \"pay402[solana]\"","both":"pip install \"pay402[all]\"","bare":"pip install pay402  # httpx only — sandbox-friendly; chain SDKs are extras"},"api":{"signature":"pay(url, *, private_key=None, max_usd=None, network=None, test_payer=None, params=None, refund_to=None, client=None, announce=True) -> Purchase(goods, receipt, quote)","spend_ceiling":"max_usd is REQUIRED for live payments — nothing is signed until the quoted total passes the cap","quote_only":"quote(url) reads the price and signs nothing","goods":"inline JSON in Purchase.goods; binary deliveries (payload_base64, e.g. gitbuyer tar.gz) arrive as bytes since 0.2.1","receipt":"printed to stderr on success since 0.3.0 — the buyer's one durable proof lands in the transcript; announce=False opts out","refund_to":"a wallet the BUYER controls, recorded on the receipt since 0.3.0 (--refund-to / $PAY402_REFUND_TO on the CLI): throwaway paying wallets make refund-to-sender refund into the void. Recorded, never spent from."},"key_handling":"the agent-friendly shape: the human sets $PAY402_KEY, the agent runs `pay402 <url> --max-usd 5` and never sees the key. Transcripts persist; secrets stay out of them.","guarantees":"settlement runs after delivery — a failed delivery is never charged. Written down at /guarantees.","no_gas":{"base":"EIP-3009: the buyer signs an authorization; the facilitator submits it and pays gas. Zero ETH.","solana":"the buyer signs; the relayer co-signs as fee payer and submits. Zero SOL."},"custody":"non-custodial on both rails: on Base an immutable splitter contract that keeps nothing, on Solana one transaction carrying both transfers — pay402 decodes and refuses any transaction that does more than the 402 advertised","proofs":[{"network":"eip155:8453","kind":"engineering proof — Base settle","tx":"0x292dcc2c7b949566cae741f72e370ea774e3a76be4121af2a766d67af5b28f19","url":"https://basescan.org/tx/0x292dcc2c7b949566cae741f72e370ea774e3a76be4121af2a766d67af5b28f19"},{"network":"solana:mainnet","kind":"engineering proof — Solana settle","tx":"46bzWMwkUVroboMkmMAyXxGwzD4pkDRiEJsNK2Kf5qU5u19coa6SiSQM1MKTX8D2sW68GxisoorMgXmYHJir42Vj","url":"https://solscan.io/tx/46bzWMwkUVroboMkmMAyXxGwzD4pkDRiEJsNK2Kf5qU5u19coa6SiSQM1MKTX8D2sW68GxisoorMgXmYHJir42Vj"},{"network":"eip155:8453","kind":"first purchase in the wild — an AI agent bought a repo on gitbuyer, end to end, $0.1105","tx":"0x02f5002f64f18b371d51f1cc63c8b2abf5d2ca3cbeda6350ec1eb94d93ca9c1a","url":"https://api.checkout402.com/r/pay_oq1P-qF6PfRbDZzE"}],"rehearsal":"every checkout has a free test face — same flow, simulated settlement; rehearse before real money","javascript":"there is no JS package; `pay402` on npm is an unrelated author","links":{"pypi":"https://pypi.org/project/pay402/","docs":"https://pay402.sh/docs/","platform_docs":"https://checkout402.com/docs/","selling_side":"https://checkout402.com","buying_guide":"https://gitbuyer.com/guide/buying","llms":"https://api.checkout402.com/llms.txt"}}