Come build on Peer
Cash out crypto.
Ship it in one prompt.
Peer Cash is the agent-first TypeScript SDK for building a crypto offramp: it routes a Relay-supported EVM asset to Base USDC, then fiat through the Peer protocol. No hosted widget or provider custody.
01 / Start
Any supported EVM asset
Discover live source chains and tokens through Relay.
02 / Route
Base USDC
The SDK handles the route and creates the Peer order.
03 / Receive
Fiat in your payment app
Revolut, Wise, Zelle and more, at the live oracle rate.
Agent-first onboarding
Give your agent the job. Ship faster.
Paste this into your coding agent. It follows the live integration manual and includes recovery and tests.
Integrate Peer Cash into this application using the current @zkp2p/cash package.
Before changing code, read https://github.com/zkp2p/peer-cash/blob/main/AGENTS.md and inspect this repository's wallet, signing, state, and test patterns.
Requirements:
1. Install @zkp2p/cash and viem with this repository's existing package manager.
2. Use createCashClient({ environment: "production" }) and discover payment platforms and currencies with capabilities(). Do not hardcode Relay source assets.
3. Add a cash-out flow that routes a Relay-supported EVM source asset into Base USDC, then creates a fiat cash-out order. Start with the Base USDC path if the host cannot safely execute Relay routes.
4. Keep signing in the existing wallet or policy boundary. If signing happens outside the process, use prepare(), submit txs in steps[] order, wait for each receipt, then call finalizePreparedCashout().
5. Persist depositId with the current user or operation. Resume with order(depositId), and drive the UI or agent from state, nextActions, and typed CashError remediation. Never infer lifecycle state.
6. Treat estimate() as an oracle estimate, never a locked quote. Respect requiresAtomicAccessPolicy and requiresIdentityAttestation from capabilities(); fail before moving funds when the host cannot satisfy them.
7. Use withdraw(depositId) as the only unwind path. Never call escrow contracts directly or resubmit an unknown transaction.
8. Add focused tests for discovery, signing boundaries, persistence, recovery, and error handling. Run the repository's relevant test, typecheck, lint, and build commands.
Finish by reporting the files changed, the exact checks run, and any platform capability the host deliberately leaves to Peer web.Questions builders ask
Peer Cash FAQs
What is Peer Cash?
Peer Cash (@zkp2p/cash) is an offramp-only TypeScript SDK. It routes supported EVM assets through Base USDC into fiat in the user's payment app at the live oracle rate.
How does a cash-out settle?
The user deposits USDC into the protocol contracts. A buyer pays them fiat and proves it; the contract then releases the USDC.
Does Peer hold funds during a cash-out?
No. USDC stays in the protocol contracts until payment is verified; fiat goes straight to the user's payment app.
Is Peer Cash an offramp API or an SDK?
An SDK. It talks directly to Peer and discovers live platforms, currencies, and limits at runtime.
Do users have to complete KYC with Peer to cash out?
No ID is uploaded to Peer. In the normal automated flow, payment is verified privately; if that fails, the maker can confirm it independently and use an explicit, irreversible manual release.
How is Peer Cash different from hosted offramp providers?
There is no hosted widget, API key, or provider account. The SDK connects your app directly to the Peer protocol.
Can a coding agent integrate Peer Cash on its own?
Yes. The prompt links the live integration manual and makes recovery and tests part of the job.
Which payment apps and assets does Peer Cash support?
Revolut, Wise, Zelle and more, from Relay-supported EVM assets. Call capabilities() for the live platforms, currencies, and limits.
When should I use @zkp2p/sdk instead?
Use @zkp2p/sdk for custom spreads, buyer-side proof flows, vaults, and general maker or taker operations.

