Which integration should I use, the SDK or hosted Checkout?
How to choose between building your own payment page with the SDKs and redirecting payers to the StableOps-hosted Checkout page.
StableOps gives you two ways to collect a stablecoin payment. Both create the same payment orders and settle through the same webhooks. The only difference is who builds the payment page.
- Self-integration with the SDKs: you build the payment UI yourself with
@stableops/api-sdk(create orders on your server) and@stableops/wallet-sdk(ask the payer's browser wallet to send the transfer). - Hosted Checkout: your server creates a Checkout Session and redirects the payer to the StableOps-hosted payment page. Wallet payment, manual/auto network selection, address display, and live status tracking are built in.
At a glance
| Self-integration (SDK) | Hosted Checkout | |
|---|---|---|
| Who builds the payment page | You | StableOps |
| Frontend work | Build amount, address, status, wallet connect | None, one redirect |
| Server work | Create orders + handle webhooks | Create sessions + handle webhooks |
| UI control / branding | Full | StableOps-branded hosted page |
| Wallet + manual transfer | You wire it up (wallet SDK) | Built in |
| Settlement source of truth | Webhooks | Webhooks |
| Best for | Embedded/custom checkout, full design control | Shipping fast, minimal frontend |
Choose hosted Checkout if…
- You want the least frontend work. Your integration only needs to create sessions and handle webhooks, and you never build the payment UI.
- You're fine with a StableOps-hosted, StableOps-branded page and a redirect
out of your app and back via
successUrl/cancelUrl. - You want wallet payment, automatic/manual network selection, the receiving address, and live status tracking to work out of the box.
See Checkout for the session-creation call and parameter guidance.
Choose self-integration if…
- You want the payment experience embedded in your own app with full control over layout, branding, and copy.
- You're already rendering your own cart/checkout and don't want a redirect.
- You want to drive the on-chain transfer directly from your frontend with
@stableops/wallet-sdk, or presentpaymentInstructionsfor manual transfer in your own UI.
The Quickstart walks through this path end to end.
What's the same either way
Both paths share the entire settlement engine, so the decision is only about the payment page, not about how money is tracked:
- One order model. Both create the same payment
orders and advance through
created → detected → confirmed → finalized. - The same receiving addresses. Deposits land on the on-chain addresses you manage; see BYO addresses.
- Non-custodial either way. StableOps never holds your funds, never touches your private keys, and never signs or moves transactions on your behalf. Payers transfer straight to the addresses you control; StableOps only detects and reconciles those on-chain payments.
- Webhooks are the source of truth. Fulfill on
payment.confirmed/payment.finalizedwebhooks in both cases. Never trust asuccessUrlredirect or a manual "I sent it" claim as proof of payment.
Because the backend is identical, you can start with Checkout and migrate to self-integration later (or run both) without changing how you reconcile payments.
Still not sure?
Try hosted Checkout on the Checkout page, and the SDK integration in the Playground. Start with hosted Checkout—it's the fastest path to a working payment, and switching to the SDK later won't change your webhook or reconciliation code.
Related
How is this guide?
Last updated