receiveWithAuthorization and the tokens move, without a separate approve.
SohoPay uses that for repayment (and for gift prepay). SohoSettlementV2.repayWithAuthorization pulls USDC from the borrower’s wallet after they sign on the repayment consent page. The debt mirror drops when that pull is confirmed.
Merchant settlement does not use ERC-3009. The agent does not hold the USDC, and the voucher is not a transferWithAuthorization. settleBatch pays the merchant from protocol liquidity, then records debt against the borrower. See x402 and Settlements.
If you are inspecting a transaction on Basescan:
- A repayment shows USDC moving from the borrower into the protocol via
receiveWithAuthorization. - A merchant payout shows USDC moving from
SohoSettlementV2to the registry payout address, net of the fee.
Next steps
Repayment
The flow that asks the borrower to sign.
Fees
Why the merchant payout is smaller than the billed amount.

