Skip to main content
Meru Checkout lets you collect crypto and local-currency payments without building a payment UI. Your backend creates a checkout session and receives a hosted url. You send the customer to that page, they pay, and you reconcile the result by polling the session status.

Payment methods

Crypto exchanges & wallets

The customer pays from Binance, Coinbase, MetaMask, and many other exchanges and wallets. Funds settle as USDC/USDT on Polygon.

QR Bolivia

The customer pays in local currency (Bs/BOB) by scanning a QR with their bank app. The page shows the local amount and the USD→BOB rate.
If you omit paymentMethod when creating the session, the checkout shows a method chooser with whichever methods your account has enabled. See Payment methods for details.

Integration flows

Hosted redirect

Redirect the customer to the hosted checkout page, then return them to your successUrl. The simplest integration.

Embedded (iframe)

Render the checkout inside your own page. The checkout posts events to the parent window instead of redirecting.

Authentication and security model

Meru Checkout uses a Checkout API secret key to authorize requests from your backend.
The Checkout API key is separate from the main Meru API key. Checkout uses a Bearer token (Authorization: Bearer sk_live_...) against https://checkout-api.meru.com, whereas the rest of the Meru API uses the api-key header. Use the right key for each API.
The secret key has the format sk_live_... and is sent as:
Your sk_live_ key is server-side only. Never expose it in the browser, client-side JavaScript, mobile apps, or a public repository. Anyone with this key can create checkout sessions on your behalf.
The customer only ever receives the opaque session url.
The session id embedded in the checkout URL (for example, https://checkout.meru.com/c/cmqx...) is opaque and pay-only. It cannot be used to authenticate API calls or read your account — it only lets the holder pay that one session. Reading a session via GET /checkouts/{id} is intentionally public so your backend can poll status without exposing your secret key.

Reconciliation

Webhooks are not yet available. Reconcile payments by polling GET /checkouts/{id} from your backend and treating succeeded as paid.

Next steps

Quickstart

Create a session and redirect a customer, end to end.

Create a session

Full reference for POST /v1/checkouts.

Payment status

Poll GET /checkouts/{id} and read the status lifecycle.

Embed (iframe)

Embed the checkout and handle postMessage events.