Checkout URL
Every payment includes acheckout_url:
cs_...) also resolve to the same hosted page.
Customer flow
- Customer opens the checkout URL
- Checkout loads payment amount, settlement asset, allowed assets, merchant name, and logo
- If multiple allowed assets are configured, the customer selects which asset to pay with
- Customer clicks Connect wallet (Stellar Wallet Kit: Freighter, xBull, etc.)
- Customer clicks Pay and approves the transaction in their wallet
- Payoes submits the signed transaction to Horizon
- Payoes verifies the payment, records
paid_asset, and shows a success state
What Payoes handles
- Building the unsigned Stellar payment transaction in the customer’s chosen paid asset
- Setting the correct destination (merchant settlement wallet)
- Attaching a payment memo for reconciliation
- Trustline preflight checks before signing
- Horizon submission and verification against the paid asset
- Status updates and webhook delivery
Checkout API (internal)
The hosted page uses public endpoints under/api/checkout/{payment_id}:
| Method | Purpose |
|---|---|
GET | Load payment (settlement_asset, allowed_assets) and merchant details |
POST { action: "build_transaction", sourcePublicKey, paid_asset } | Build unsigned transaction XDR |
POST { txHash } | Confirm payment after wallet submission |
/api/v1/payments instead.
Custom checkout (future)
Embedded checkout and payment widgets are on the roadmap. Today, redirect customers to the hostedcheckout_url.
Retry confirmation
If a transaction succeeds on Stellar but confirmation fails (e.g. temporary Horizon delay), the checkout page offers Retry payment confirmation with the submitted transaction hash.Integration pattern
payment.completed webhooks or poll GET /api/v1/payments/{id}. Completed payments include both settlement_asset and paid_asset.