Private OTC

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. 1The seller creates a normal USDC deposit on Base.
  2. 2The app adds the buyer wallet to WhitelistPreIntentHook for that deposit.
  3. 3The hook is attached to the deposit after creation.
  4. 4The seller shares a link at otc.usdctofiat.xyz/d/<escrow>/<depositId>.
  5. 5Any 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, hook, 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.

Whitelist hook

The buyer allowlist is enforced by the contract.

The OTC link is a UX surface. The actual protection is the pre-intent hook attached to the Base deposit.

EscrowV20x777777779d229cdF3110e9de47943791c26300Efdeposit lives here
Whitelist hook0xda023Ea0d789A41BcF5866F7B6BBd2CaDF9b79B8blocks non-approved wallets
Buyer linkotc.usdctofiat.xyz/d/<escrow>/<depositId>share after creation

Common questions

What is USDCtoFiat?

USDCtoFiat lets you sell USDC on Base for money in Venmo, Cash App, Chime, Revolut, Wise, Zelle, PayPal, Monzo, N26, and Luxon. You keep control of your wallet, and trades settle through non-custodial ZKP2P smart contracts on Base.

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. The offramp SDK is free to integrate. 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. Peerlytics analytics, webhooks, and API credits are priced separately.

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.