Stablecoin Payment API.
One endpoint to integrate. Five chains. USDC + USDT. Built for non-custodial merchant payments — funds settle directly on-chain to your wallet, no intermediary holds them.
{
"id": "8f3a9c2d-1b6e-4d8a-9c2e-3f4b5d6e7a8c",
"status": "ACTIVE",
"amount": "49.99",
"currency": "USD",
"title": "Order #1234",
"externalId": "order-1234",
"acceptedChains": [1, 42161, 8453, 137, 56],
"acceptedTokens": ["USDC", "USDT"],
"pymstrFee": "0.50",
"merchantFee": "49.49",
"paymentUrl": "https://pay.pymstr.com/p/8f3a9c2d-1b6e-4d8a-9c2e-3f4b5d6e7a8c",
"expiresAt": "2026-05-20T07:00:00Z",
"createdAt": "2026-05-19T07:00:00Z"
}POST /v1/payments
You create the payment with an amount + currency. We return a paymentUrl.
Share the URL
Send it in an email, link it from your invoice, or redirect from your app.
Customer pays
They sign in (social login or wallet), pick from the chains + tokens you accept, sign one transaction.
Webhook fires
payment.completed arrives at your endpoint, HMAC-signed. Funds are already in your wallet.
One POST. That's the integration.
Send an amount and a currency, get back a paymentUrl. No checkout build, no wallet UX to design, no chain-selection state machine to wire up.
curl -X POST https://api.pymstr.com/v1/payments \
-H "Authorization: Bearer pk_live_..." \
-H "Content-Type: application/json" \
-d '{
"amount": "49.99",
"currency": "USD",
"title": "Order #1234",
"externalId": "order-1234"
}'One API. Three patterns.
Payment links (no code)
Generate a payment URL from the PYMSTR dashboard — no code. Share it via email, invoice, or chat. The customer pays at a hosted PYMSTR page; funds settle directly to your wallet.
Learn more →Hosted payment
Same endpoint, but redirect the customer to the paymentUrl from your existing checkout. Enforce the chains + tokens you want; the hosted page handles the rest.
Learn more →Marketplace splits
Pass a sellers array on the create call. PYMSTR routes each split on-chain at settlement — no manual ledger work after the customer pays.
Learn more ↗Where your customers can pay from.
Per-payment, you can restrict which chains and tokens are accepted via the acceptedChains and acceptedTokens fields. Default: all supported.