A service returned 402 and named an asset you may not hold. Each row in accepts[] names its chain — jump to that chain's section below. About five minutes, no signup, and on every chain the payment itself is gas-sponsored.
You need no SOL. A payment here is one TransferChecked in a transaction whose fee payer is this facilitator — the 402 names it in extra.feePayer. You sign as the token owner and leave the fee-payer signature empty.
USDC and TOKEN and LEOS settle directly. EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v · 4JSgUyRRgrNSK5pA3wQMp61vP5RRuLeynmPbRwMkvrex · 2tXdVsqrMYZhXGQSErTL5FmF2qCiL9tsQQ9pVafYmzf3
USDC settles directly — no wrap step. Hold it (0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48) and skip to “Sign a payment”.
USDC settles directly — no wrap step. Hold it (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913) and skip to “Sign a payment”.
USDC settles directly — no wrap step. Hold it (0xaf88d065e77c8cC2239327C5EDb3A432268e5831) and skip to “Sign a payment”.
USDC settles directly — no wrap step. Hold it (0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85) and skip to “Sign a payment”.
USDC settles directly — no wrap step. Hold it (0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359) and skip to “Sign a payment”.
You need USDG here, and a little ETH for gas — gas only for the one-time wrap; payments themselves are signed off-chain and this facilitator sponsors the gas.
If you have neither, the usual route is bridging from a chain you already use — relay.link supports Robinhood Chain, and accrue.fund is built on exactly that path (card or bank → USDC on Base → relay → USDG). Use whichever bridge you already trust; this facilitator has no preference and takes no cut of it.
Check the underlying's address, don't search by name. Six impersonator tokens on this chain answer symbol() == "USDG", some with over 100,000 holders. The real one has 6 decimals and implements EIP-3009; the fakes have 18 and don't.
USDG and TOKEN and TOKEN settle directly — no wrap step. Hold it (0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168, 0xC921Abbe67002f638dbD1e353b204767b280A369, 0x987a59a076db1ace08c3dcba9032c93cd3691ba3) and skip to “Sign a payment”.
Solana rows: build one legacy transaction with a single TransferChecked of maxAmountRequired to the row's payTo, fee payer set to the row's extra.feePayer, sign as the token owner, leave the fee-payer signature empty, base64 it into the X-PAYMENT header. EVM rows (Base, Robinhood Chain): you never send a transaction — you sign an EIP-3009 authorization off-chain and hand it over in the header; this facilitator relays it and pays the gas.
On EVM you do not have to build the signature by hand. x402-fetch wraps fetch() and handles the 402 → sign → retry loop for you:
npm i x402-fetch viem
// point it at a wallet holding the settlement asset; it reads the 402 and pays
import { wrapFetchWithPayment } from "x402-fetch";
import { createWalletClient, http } from "viem";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.PK);
const wallet = createWalletClient({ account, transport: http("") });
const pay = wrapFetchWithPayment(fetch, wallet);
const r = await pay("https://themes.oddballer.fun/themes");
console.log(await r.json());
Doing it manually instead? The mechanics:
The 402 response tells you exactly what to sign — asset, maxAmountRequired, payTo, and the validity window. Any x402 client library builds the signature from that block.
# see what a service is asking for curl -s https://themes.oddballer.fun/themes | jq .accepts # pay: your client signs, then retries with the header curl -s https://themes.oddballer.fun/themes \ -H "X-PAYMENT: <base64 payload>"
Each settlement takes 2bps: one burns, raising redemption value for every holder — including your own float — and one funds the gas that keeps the rail running. Your fee is not somebody's revenue; it is the next participant's yield, and theirs is yours.
That is why holding the float is rational rather than a cost of doing business. Break-even against idling in a stablecoin is measured live on /stats, with the block range so you can recompute it instead of trusting it.
Anything you list makes the others easier to find, and every payment through any of them raises the float they all settle in.
curl -X POST https://x402.accrue.fund/discovery/register \
-H 'content-type: application/json' \
-d '{"resource":"https://your.api/endpoint",
"description":"what it does",
"accepts":[{"scheme":"exact","network":"eip155:4663",
"asset":"",
"maxAmountRequired":"1000",
"payTo":"0xYOUR_ADDRESS"}]}'