Links and pages
Two objects, one checkout:Create a link
url to the customer. That’s the integration.
Create a page
amount and the page asks the payer what to pay.
What the payer sees
Your name, logo, and accent colour; the amount; and one of three flows:- Mobile money: picks their operator, enters their number, taps Pay. An approval prompt hits their phone. This is the only rail that charges on click.
- Bank transfer: taps Get account details. A dedicated virtual account is set aside for this payment; they transfer the exact amount from their own banking app; we detect it. Partial amounts count and accumulate.
- Stablecoin: picks USDC or USDT and a network, gets an address with a QR code and the exact crypto amount at a locked rate (90 minutes for stablecoins), plus a “send only USDC on Solana” warning.
cs_…) with its own countdown (5 min mobile money · 30 min bank · 15–90 min crypto). A failed or expired session never affects the link; the payer just picks another method. On success they get a receipt they can download.
Branding rules
accentColor can be any hex. The checkout paints it in exactly two places, the identity mark and the pay button, with the text colour computed for contrast, so no colour can break the page. logoUrl (square) and businessName complete the identity.
Knowing you’ve been paid
- Webhooks: the link’s payment settles through the normal rails, so you receive
collection.completedandaccount.credited; for bank and crypto sessions the checkout deposit fires them too. - Polling:
GET /v1/payment-links/{id}→status: "paid", withsessionsshowing every attempt and which one succeeded. - Dashboard: Payment links → the link → Checkout sessions.
redirectUrl on the link sends the payer back to you after success (with a 5-second countdown they can skip).
Closing and expiry
PATCH /v1/payment-links/{id} { "status": "closed" } stops further attempts. expiresAt on creation does it on a schedule. Pages close the same way; they never “expire”; an expired page simply refuses new checkouts.
Sandbox
Everything above works on sandbox withpl_test_ ids and simulated money. The checkout page carries dev tools in local development to complete, partial-pay, fail, or expire a session on demand; via the API, POST /v1/simulations/checkout-deposit pays a bank-transfer session.