Why a confirmed transfer has no undo button
A card payment is really a promise to settle later. The merchant is paid after a delay, and the card network keeps the right to claw money back during a dispute. A stablecoin transfer works the other way around. When the transaction is confirmed on the chain, the balance has already moved from one address to another, and the ledger is the final record.
Circle issues USDC and describes it as a regulated digital currency you can redeem 1:1 for US dollars [3]. Redeeming is about turning tokens into dollars. It is not a way to undo a payment that already landed in someone else's address, so it does not help when a seller fails to deliver. The token is built for fast settlement, and fast settlement means the payer gives up the right to pull the money back.
Self-custody makes this even clearer. SpendTheBits is fully non-custodial: the keys live on your device, every transaction is signed there, and the backend only relays what your device signed. It cannot move, freeze or reverse user funds, so it could not pull a payment back for you either. That is good news when you worry about someone taking your money, and it is the reason a refund must come from the seller who holds the funds.

A refund is a new payment, sent on purpose
Once you accept that the first payment is final, the refund model becomes simple. The seller holds the money, and the seller sends some or all of it back as a fresh transfer. On the chain it looks like any other payment, only in the opposite direction, with its own transaction hash and its own confirmation.
This has a few consequences worth knowing. The refund is never automatic, because nothing in the original transfer carries a clause that forces a return. It can be partial, because the seller decides the amount. And it can take a little time, because a human or a program on the seller's side has to decide to send it. That is the trade you make for a payment that settles fast and cannot be clawed back.
SpendTheBits Arc Checkout lets a seller show a QR code, and the customer pays USDC on Arc from any wallet. A sale is final on chain. For Arc Checkout, USDC refunds are never automatic: the seller sends one from their own wallet, signed on their phone, up to the sale amount. The small SpendTheBits fee on the original sale is not returned. In other words, the party holding the funds is the party who must send them back.

Refund windows are a seller's promise, not a network rule
If the network does not guarantee anything, where does protection come from? From the seller. A refund window is a statement such as: ask within this many days and I will consider returning your money. It is a business promise, much like a shop's return policy, and it lives outside the chain unless the seller records it somewhere public.
This is a real strength when done well. A seller who wants repeat customers can offer a generous window and honour it, and a buyer can reasonably prefer that seller. It is also a real risk when ignored. A seller with no stated window owes you nothing beyond what the law and the sale terms say, so check before you pay, the same way you would read a returns page in a normal shop.
On x402, the payment protocol for paying over HTTP, SpendTheBits lets sellers promise a refund window. A buyer, or an agent signing with the paying wallet, can ask for a refund inside it. There is no escrow, so the seller still holds the money in their own address, and refunds are never automatic. The window is a commitment the seller makes and the buyer can later point to when asking for USDC refunds.
How a payer proves they paid: the signature
A refund request needs a claim and a way to check it. Anyone could say I paid you. The useful answer is a cryptographic one: you sign a message with the same wallet that made the payment, and the seller checks that the signature matches the paying address. Only the holder of the key could have produced it.
This works because the payment itself is already public. The transaction hash, the sender and the amount sit on the chain for anyone to read. What the signature adds is a way to say this request comes from that sender, without sharing a password or an account. It is also why a stranger cannot claim your refund: they cannot sign as your address, so a copied transaction hash is not enough.
In SpendTheBits, a buyer, or an agent signing with the paying wallet, asks within the seller's window, and the seller approves with a transfer signed on their own phone. That transfer can only go back to the payer, for no more than was paid. Because the destination is fixed to the original payer, a refund cannot be quietly redirected to a different address, which protects both sides from mistakes and from fraud.
EIP-3009: the signed authorization behind an x402 payment
Some USDC payments start as a signature rather than a transaction. ERC-3009 is a set of functions that enable meta-transactions and atomic interactions with ERC-20 token contracts via signatures [1]. In plain words, a token holder signs a message that authorizes a transfer, and someone else can then submit it to the chain. The payer can hand off the gas cost, and the recipient or a helper can send it in.
Each authorization uses a unique random nonce instead of a sequential nonce, plus a valid-after and valid-before time window [1]. The standard says nonces are randomly generated 32-byte data unique to the authorizer's address, and it also describes an optional way to cancel an authorization [1]. Once the authorization is submitted and confirmed, it is a normal transfer, and it is final.
In the x402 protocol the client signs a payment payload, the server checks it, and a facilitator settles it on the blockchain [2]. In SpendTheBits, the buyer's signature is an EIP-3009 authorization, so the buyer pays no gas, and the app signs it on your device. For a deeper walk-through, see our explainer on EIP-3009. The key point for refunds is timing: until it settles, an authorization can expire or be cancelled, but after it settles, only a new payment can undo it.
The public refund record: trust you can check
Without a chargeback system, reputation has to do the job that the card network does. Public records are how that can work on a chain, because everything the seller does is visible. A seller who sends refunds promptly leaves a trail you can read, and a seller who stays silent leaves a different trail. Both trails are there for the next buyer to find.
In SpendTheBits, every answer a seller gives to a request for USDC refunds, and every silence, becomes part of the seller's public refund record. That means a buyer can look at how a seller has treated past requests before paying. It also gives honest sellers a way to stand out, because a clean record is worth something when buyers can see it and compare it with others.
For sellers, the bookkeeping side is handled too. x402 Books shows sales, fees, refunds and net income for a period, built from public records only. For buyers, your own habits help as well: check what you approve in your wallet, and see our guide to revoking token approvals. A stated window, a signed request, and a public record give you something to check before you pay, even though no one can reverse the original payment.
In the app · 3 steps
Answer a refund request in SpendTheBits
Refunds are payments you choose to send back. Here is where they live in the app.
Set your promise
When you sell to agents, choose a refund window for each paid link under Get paid by agents.

Answer requests
Refund requests lists each request with its reason. Approve with a signed refund or decline with a reason.

Refund a checkout sale
For in-person sales, open the order in Checkout and tap Refund.

Hold your own keys, keep the yield, skip the middleman.
SpendTheBits is a fully non-custodial wallet for 13 chains, free on iOS and Android.

