Private OTC orders turn a public deposit into a one-buyer route.

Use a private order when you already know the buyer, have agreed the trade context, and want the Base contract to reject everyone else.

01

When private orders fit

Public deposits are discoverable by anyone. Private OTC deposits are for the opposite case: you know the buyer wallet and you want exactly that wallet, and only that wallet, to be able to start the fill.

This is useful for friend-and-family transfers, desk-style relationships, payroll-like payouts, and negotiated trades where both sides already agreed the payment app, currency, and size.

02

How restriction works

  1. 01The seller creates a normal USDC deposit on Base from the Sell tab.
  2. 02From Deposits, the seller locks the deposit to the buyer wallet: an address, ENS .eth, or PNS .peer name.
  3. 03The app enables WhitelistPolicy for every exact payment method, admits the buyer, and opts those methods out of default stake-backed dispute protection.
  4. 04The seller shares a link at usdctofiat.xyz/d/<escrow>/<depositId>.
  5. 05Any wallet except the approved buyer is rejected onchain before intent creation.
03

Private does not mean invisible

The restriction is enforced onchain, so the deposit, access-policy, and fill transactions remain visible on Base. Private means fill access is restricted to one buyer wallet; it does not hide contract activity from block explorers.

Access policy

The buyer allowlist is enforced by the contract.

The OTC link is a UX surface. The actual restriction is WhitelistPolicy access for one approved buyer plus an explicit dispute-protection opt-out on every exact method.

EscrowV2
0x777777779d229cdF3110e9de47943791c26300Efdeposit lives here
Access policy
WhitelistPolicyblocks non-approved wallets
Buyer link
usdctofiat.xyz/d/<escrow>/<depositId>share after locking

Common questions

What is USDCtoFiat?

USDCtoFiat coordinates non-custodial sales of native Base USDC for USD, EUR, or GBP through ZKP2P smart contracts. Payment-provider eligibility and account policies still apply; technical route support is not permission to use an external account, and Wise currently prohibits P2P crypto-sale receipts.

Does USDCtoFiat hold my funds?

No. You sign every transaction from your own wallet. Your USDC is locked in a public Base contract and releases to the buyer only after their payment is proven. You can withdraw any unfilled deposit at any time.

What does it cost to sell?

Creating and managing a seller deposit is free, though Base gas applies to onchain actions. On delegated fills, Delegate's 0.10% manager fee comes from the USDC released to the buyer, not from your fiat proceeds or your quoted rate.

Do I need a centralized exchange account?

No exchange account is required to use USDCtoFiat. You need a wallet holding USDC on Base and an account on the payment app you want to be paid in. The payment app's own account rules and limits still apply.

Do I need to complete KYC?

USDCtoFiat does not collect identity documents, hold your fiat, or hold your keys. The payment app you use still controls its own verification, limits, and account rules. USDC settlement happens through Base smart contracts, and we cannot change what Venmo, PayPal, Wise, Zelle, or your bank requires.

Can I change the buyer on a private order?

The app supports managing OTC restriction for existing deposits. Changing the approved buyer requires another onchain update, and the new buyer has to use the resulting deposit link.

Does private OTC remove payment-app risk?

No. It restricts who can fill the deposit. The fiat leg still happens through the chosen payment app, with that app's limits, reviews, and reversal behavior.