A protected transfer locks USDC in a contract instead of sending it straight to an address. The recipient claims it with a short code; if the address was wrong or poisoned, the wrong party cannot claim and you reclaim. It replaces the “send $1 first and wait” ritual.

Send

Give the recipient the code. Anyone can submit the claim, but the funds always go to the recorded recipient, so a claim is front-run-safe.

Claim

A wrong code does not revert; it returns false and counts an attempt. After 5 wrong attempts the transfer locks (anti-brute-force). The SDK claim throws on a failed attempt, so check its result rather than treating a mined tx as success.

Cancel and refund

Unclaimed money belongs to the sender. There is no deadline on getting it back.

cancel(transferId)

Sender only, allowed any time before a claim lands, and on a locked transfer.

reclaimExpired(transferId)

Callable by anyone once the recall window lapses; funds only ever go back to the sender. No keeper required.

Approve-less sends

To skip a per-send approve, use Permit2: one-time approvePermit2(clients), then sendProtectedWithPermit signs an off-chain permit per send.