Type their Venmo handle and send ZEC to one address. Your coins wait in an escrow on Zcash that only you can refund while zpay pays their Venmo and proves it. Under $50, the dollars go out after ten confirmations, about twelve minutes. They never touch crypto. No swap, no bridge, no token, and no account on either end.
Net of the 0.15% fee and the Zcash network fee. The app holds a fresh price for five minutes once you start.
Your ZEC goes to one Zcash address that is a script, not a contract. Two keys release it: yours and zpay's. After a deadline, your key alone refunds it. zpay pays the Venmo, proves it, and only then can the release be signed. Paying your own handle is the same flow.
Enter the recipient's Venmo username and an amount. The page makes a key in your browser and never sends it anywhere. zpay answers with the escrow address, and the page rebuilds that address from your key, zpay's key and the refund height, and refuses the order if it differs.
Send the quoted amount from any Zcash wallet. As soon as your transaction is in the mempool, the page signs its half of the release: a signature that only completes once the dollars are proven paid. Leave the page open until it says locked, then close it. At ten confirmations for anything under $50, zpay sends the dollars from its own Venmo to the handle you typed.
zpay asks zk-p2p's enclave to attest the Venmo payment: amount, payee and time, read from the Venmo feed. The attestor checks that attestation and signs the outcome. That signature completes the one you made in step two, and zpay broadcasts the release. If nobody proves a payment before the deadline, your key refunds the ZEC and no one else needs to sign.
Three things stand between your wallet and their Venmo. What each one can and cannot do is read off the script and the pinned keys, not off a promise.
A transparent Zcash address whose script has two branches. Before the deadline it spends only with your signature and zpay's together. After the deadline, 1,152 blocks from the lock, about 24 hours, it spends with your signature alone. There is no third key, no admin and no upgrade.
The refund is signed in your browser by your key. If zpay is unreachable, any Zcash node will broadcast it. The recipient signs nothing and needs no wallet.
zpay fronts the dollars from its own Venmo and is repaid in ZEC out of the escrow. Its key is one of the two on the release, so it can never spend your ZEC by itself, and it never holds your coins before or after the trade. What it does hold is your pre-signature, which is inert until the attestor signs a payment.
A Venmo payment is not a chain event, so the release needs two signatures from outside it: zk-p2p's Nitro enclave attests the amount, payee and time from the Venmo feed, and an attestor whose key is pinned in the app checks that attestation and signs the outcome. Without both, the release cannot be completed.
What this does not protect against: the attestor and zpay together signing a payment that never happened. Today one operator runs both. The attestor holds no key over the funds and no escrow secret; it signs statements.
Type a dollar amount in the app and that is what they receive; the fees are added to the ZEC you send. Type a ZEC amount and the fees come out of it. Either way the quote shows every line before you send.
| line | amount | who takes it |
|---|---|---|
| zpay fee | 0.15% | A share of the escrow, paid to zpay's treasury as an output of the release transaction. |
| Zcash network fee | 15,000 zatoshi | The ZIP 317 fee for the release transaction. Fixed by the transaction's shape, not by zpay.Around $0.17 at $1,140 per ZEC. On small amounts this is the larger of the two. |
| rate | market less 0.5% | The ZEC price is read from Coinbase and Kraken together, and the lower one wins when they disagree. zpay's margin is the spread, shown as the rate line before you start. |
| gas | $0 | There is no second chain. The one Zcash fee above is the whole cost of settlement. |
Better to read this here than to find it after sending.
zpay pays Venmo. The enclave that attests payments knows eleven platforms, and each one needs its own payee lookup and payment driver before it turns on here.
zpay fronts the dollars from its own Venmo balance, so one payment is capped at what that balance covers. The quote refuses anything above the cap and tells you the number.
zpay pays once the escrow is deep enough that reversing it would cost more than the trade. Up to $50 that is ten confirmations, about twelve minutes at 75-second blocks. From $50 to $500 it is thirty, about 38 minutes. Above $500 it is a hundred, about two hours, the depth at which Zcash nodes refuse a reorg outright.
The page holds the key that signs your half of the release, and there is no other copy. It signs as soon as your transaction reaches the mempool, before the first confirmation. Close the tab before that and nobody can sign; the ZEC then comes back to you at the deadline instead of paying anyone. Keep the status link either way: it is the only thing that can refund.
zpay looks the handle up with zk-p2p's curator to get the payee hash the enclave attests against, and the curator answers that hash to anyone who asks. The escrow is a transparent address, so the amount and the time are on the chain in the clear. Send from a shielded pool if you care about where the ZEC came from, and shield the refund afterwards if you get one.
If nobody pays, the page signs a refund to a transparent Zcash address you give it. Shield it from your wallet afterwards. The coordinator refuses orders under 0.0012 ZEC.
An order is ZEC locked in a script with the payer's key as the second signer. Whoever holds that key fronts the dollars, proves the payment, and collects the ZEC at the market rate less the spread. Today that key is zpay's. The daemon that watches, pays and proves is the same code the taker page describes.