Hosted Checkout
Pontoon creates a unique USDT address per order, watches payment, sends signed webhooks, and settles merchant net to your treasury after supply and platform fees. This product is separate from Fee Sponsorship.
End-to-end flow
- Your server creates an intent with order ID, chain, amount, treasury, and HTTPS webhook.
- Send the returned
payUrl(or address + amount) to the payer. The hosted page includes Binance / OKX withdrawal steps. - After a verified
checkout.paid, mark the order paid and fulfil it. - Pontoon provisions gas/Energy, sweeps merchant net, then sends
checkout.settled.
Demo: create a hosted address
bash
curl -X POST https://your-pontoon-host/api/v1/intents \
-H "Authorization: Bearer <API-KEY>" \
-H 'content-type: application/json' \
-d '{
"merchantOrderId": "order-2026-0001",
"chainKey": "tron",
"amountUsdt": "40.00",
"treasuryAddress": "T…",
"webhookUrl": "https://merchant.example/api/webhooks/pontoon",
"expiresInSeconds": 1800
}'| Status | Meaning | Recommended action |
|---|---|---|
| pending / underpaid | Waiting for full payment | Keep polling or wait for webhook |
| paid / overpaid | Invoice amount covered | Fulfil; wait for settlement |
| settled | Merchant net reached treasury | Reconcile complete |
| expired / settle_failed | Expired or retry required | Stop payment or escalate to operations |
Verify webhooks
Fetch the tenant secret from GET /api/v1/intents/webhook-secret. Compute HMAC-SHA256 over the raw JSON body and compare it to X-Pontoon-Signature in constant time.
Buyer pay page
Create-intent responses include payUrl when PONTOON_PUBLIC_ORIGIN is set (path /pay/<intentId>). The page is public: QR, exact amount, Binance / OKX / Bybit steps, and underpay top-up.
Webhook destinations must be public HTTPS URLs. Never expose the API key or webhook secret in a browser, and never fulfil before a verified paid event.