Peer Pay Guides

Merchant guide

Merchant setup

Charge customers in the payment app they already use. Receive USDC on Base.

1. Set up your account

Five steps

  1. Sign up with your email

    Every login sends a one time code there.

  2. Add your business name, logo and industry

    The name and logo appear on your customers' checkout.

  3. Turn on your payment platforms

    Settings, Payments. Only enabled platforms appear at checkout.

  4. Set who pays the fee

    Same screen. Fee Payer is merchant pays or buyer pays. See fee models.

  5. Run a test order

    Every account starts on the free Basic plan. Switch on Sandbox Mode in the sidebar, walk the checkout yourself, and confirm it lands under Orders.

Before you go live

Live payments need the Concierge plan, priced around your usage. Open Settings, Billing, or see plans and support.

2. How your account works

The payment flow

Every order runs the same way, whichever integration created it.

  1. You create an order with an amount and a checkout link.
  2. Your customer opens the link and picks one of your platforms.
  3. They pay from their own app. Peer is never in the middle of that transfer.
  4. An enclave verifies the payment privately.
  5. USDC settles to your wallet on Base.

They need no Peer account and no crypto wallet.

Two verification flows

Step four runs one of two ways, and it sets how much work your customer does.

FlowYour customerPlatforms
Buyer verifiedConfirms the payment in the Peer app or the PeerAuth extension. Costs them an install or an in-app step.Every platform you enable.
Seller Automated ReleaseInstalls nothing. Submits the transaction ID, typed or read off a screenshot. On PayPal, the name on their PayPal account.Venmo, Cash App, Wise, PayPal.

Buyer verified is the default. Seller Automated Release means fewer steps, fewer abandoned checkouts, and it is what lets Scan to Pay settle at the counter. Request it under Settings, Checkout once you have read the trade offs in verification routes.

Creating orders

Four ways in. Pick one.

No code, no website. Create payment links in a chat and get notified there when they are paid.

  1. Open the bot

    Message @peer_pay_merchant_bot with /start.

  2. Link your account

    Send /link YOUR_API_KEY, using the key from Settings, Developer. Treat it like a password.

  3. Create a link

    /request 50 for 50 USDC, /request 50 EUR to price in fiat.

CommandDoes
/linkConnects the bot to your account.
/requestAmount, then optional currency, token, chain: /request 100 EUR USDT 42161.
/ordersRecent orders, five by default.
/activePayments in flight, grouped by order.
/unlinkDisconnects the bot.

Fiat pricing covers USD, EUR, GBP, CAD, AUD, SGD, INR, BRL and MXN. The bot snapshots your recipient, chain and token when you run /link, so unlink and relink after changing those settings. You can also name a chain and token per request.

Peer Pay becomes a payment method at checkout and order status flows back. Needs WordPress 5.8, WooCommerce 7.0, PHP 7.4 or later. USD totals go out as USDC; other currencies convert at the live rate.

  1. Install the plugin

    peer-pay-gateway.zip from docs.pay.peer.xyz/integrations/wordpress, then Plugins, Add New, Upload Plugin.

  2. Add a webhook

    In Settings, Developer, point one at https://yourstore.com/wc-api/WC_Gateway_Peer_Pay/ for ORDER_FULFILLED and ORDER_CANCELLED, and copy the secret.

  3. Paste your credentials

    WooCommerce, Settings, Payments, Peer Pay. The method stays hidden until the key and secret are set and the gateway is enabled.

  4. Buy something cheap from your own store

    The order should move from On Hold to Processing. If it sticks, check the webhook logs and the peer-pay log under WooCommerce, Status, Logs.

Classic and block checkouts both work, as one Peer Pay tile or split into one option per platform.

The Peer Pay app plus a custom manual payment method. Shopify holds the order as pending, the customer pays through the link on the order status page, and the app marks it paid on fulfillment. Orders must be priced in USD.

  1. Create the payment method

    In Shopify admin, add a custom manual payment method named exactly Peer Pay, with the instructions field pointing at the confirmation page.

  2. Ask for the app

    It is not listed publicly yet. Ask the team to install it and confirm the method name, using the contacts under plans and support.

  3. Place a low value order

    Confirm the link appears and Shopify marks the order paid once you pay.

For any other site. Your backend creates the order and redirects the customer to the checkout URL it returns.

npm install @zkp2p/pay-sdk
import { createCheckout } from '@zkp2p/pay-sdk';

const { checkoutUrl } = await createCheckout(
  {
    requestedUsdcAmount: '50.00',
    successUrl: 'https://yoursite.com/success',
    notes: { merchantOrderId: 'order_123' },
  },
  {
    apiBaseUrl: 'https://api.pay.peer.xyz',
    checkoutBaseUrl: 'https://pay.peer.xyz',
    apiKey: process.env.ZKPAY_API_KEY,
  },
);

Send the customer to checkoutUrl. Anything you leave out falls back to your dashboard defaults, so most integrations send an amount and nothing else. Release goods on ORDER_FULFILLED, never on a redirect. Payloads and signature verification are at docs.pay.peer.xyz.

Payment platforms

Turn these on under Settings, Payments: Venmo, Cash App, PayPal, Zelle and Chime in the US, Revolut, Wise, Monzo and N26 across Europe and the UK, plus an optional crypto wallet spanning eleven chains including Base, Ethereum, Solana, Bitcoin and Tron. Venmo is the highest volume rail, Zelle covers selected banks that customers pick at checkout, and anything with no liquidity for a quote shows as unavailable.

Rates are variable

Peer Pay is a marketplace. Each order is filled by whoever is offering fiat liquidity for that platform, currency and size at that moment, so there is no fixed price list.

  • When you pay the fee, cap it under Max Fee Configuration: a tighter cap costs less and fills more slowly. See fee models.
  • When your customer pays, they see one final price and the cap does not apply.
  • Dynamic orders rescues an order no liquidity covers, offering the customer nearby amounts and firing an order resized webhook.

3. Getting paid

Where the money lands

Verified payments settle as USDC on Base, straight to your merchant wallet. Peer never holds your funds and cannot move them. Cash out to fiat in the app, or send, swap and bridge it yourself. To settle elsewhere, see payout routing.

Timing

Each payment attempt runs against a countdown. If it runs out the order is not cancelled: the customer can request more time or start a fresh payment, and you can cancel from Orders.

Note

Ship on a fulfilled status, never on a customer saying they sent the money.

Statuses

Orders and their payment attempts carry separate statuses. An order outlives a failed attempt, so read both.

OrderMeaning
CreatedWaiting on the customer.
Partially fulfilledPart settled, the rest outstanding.
FulfilledSettled. The only status to act on.
CancelledClosed without settling.
PaymentMeaning
CreatedAttempt started, countdown running.
SettledVerified. USDC moved.
ExpiredWindow passed. The order stays open and can still settle late.
FailedDid not verify. The customer can try again.
CancelledCancelled before settling.

When something looks stuck

  • Refresh the order to pull latest state.
  • Ask the customer to open the support chat on their checkout. Most stuck payments are an unfinished verification step.
  • If they paid and nothing settled, send the team the order ID before replacing it.

Chargebacks

Chargebacks, reversals and refunds on your transactions are yours. Keep order IDs, timestamps, customer messages and fulfillment records. Elevated dispute rates can lead to limits or termination, so raise an issue early.

Support: @PeerConcierge on Telegram, or concierge@peer.xyz.

Peer Pay is a peer-to-peer payment marketplace. Peer never takes custody of merchant funds.