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

  1. Your server creates an intent with order ID, chain, amount, treasury, and HTTPS webhook.
  2. Send the returned payUrl (or address + amount) to the payer. The hosted page includes Binance / OKX withdrawal steps.
  3. After a verified checkout.paid, mark the order paid and fulfil it.
  4. 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
  }'
StatusMeaningRecommended action
pending / underpaidWaiting for full paymentKeep polling or wait for webhook
paid / overpaidInvoice amount coveredFulfil; wait for settlement
settledMerchant net reached treasuryReconcile complete
expired / settle_failedExpired or retry requiredStop 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.