@zkp2p/cash

Cash out
to fiat

The offramp SDK for wallets, apps, and agents. Your users reach fiat through a protocol-held maker deposit while Peer handles the buyer side.

cash-out.ts
import { createCashClient, usdc } from '@zkp2p/cash';

const cash = createCashClient({ environment: 'production' });

// Estimate reads the oracle. It is not a locked quote.
await cash.estimate({ amount: usdc(1000), currency: 'USD' });

// Cash out: the user becomes the maker. Peer handles buyers.
const { depositId } = await cash.cashout({
  amount: usdc(1000),
  receive: { platform: 'venmo', currency: 'USD',
             payee: { offchainId: '@you' } },
}, { signer });

// Track it from the id alone. No local order database.
for await (const order of cash.watch(depositId)) {
  console.log(order.state, order.explain());
  if (order.state === 'delivered') break;
}

Offboard without
the middleman

Your app creates the maker deposit. A buyer pays your user on the app they already have, a TEE-TLS proof verifies the payment, and the protocol releases funds once verification passes. Buyer arrival is market-driven, so the SDK reports live order state instead of pretending there is a fixed ETA.

Protocol-held

Your user creates a maker deposit. Funds are held by the protocol and released only after the buyer's fiat payment is TEE-TLS verified.

Oracle at fill

Priced by the Chainlink oracle when a buyer fills, with no spread. estimate() is approximate; there is no quote to expire.

Buyer side handled

The taking side is handled by Peer. Your integration stores depositId, watches order state, and follows nextActions.

Where the money lands

Every corridor is priced by a live Chainlink feed at fill time, the same feed the protocol reads onchain. Read supported platforms and currencies at runtime with capabilities().

Venmo

USD

Cash App

USD

Zelle

USD

Chime

USD

Monzo

GBP

PayPal

USD, EUR, GBP, +4

Revolut

USD, EUR, GBP, +8

Wise

USD, EUR, GBP, +10

Built for agents, not just apps

Unsigned by default

Every state-changing verb has an unsigned prepare counterpart that returns txs[] plus readable steps[] labels. Sign with any wallet, bundler, or policy layer.

A tool manifest

@zkp2p/cash/tools ships JSON-schema definitions of every verb, ready for an MCP server or a tool-use loop. Signing stays on the host.

Typed errors, self-driving

Every failure carries a code and a remediation. Every order carries its own next actions, so an agent drives the lifecycle on its own.

AGENTS.md and a skill

An integration manual ships in the package and a peer-cash-integration skill lives in the repo, so a coding agent onboards itself.

Peer is a peer-to-peer marketplace and payment protocol, not an exchange, broker, money services business, or custodian. Peer never holds or transmits user funds. This page is information about the software, not financial, legal, or tax advice.