Embedded Checkout

Embedded checkout inside your site

The payment window opens over your page as a modal, so the customer never leaves the store. The same invoice logic as the hosted checkout page.

Modal on your pageSame invoice logicWebhook status
How it works

From invoice to final status

  1. Your page opens the payment window with an invoice created through the API.

  2. The customer pays inside the modal, without a redirect.

  3. The final status arrives by webhook and the modal closes.

Features

What you get

Modal over your pageComing soon

The payment window opens over the current page, so the customer keeps their place in the cart.

Same invoice logicComing soon

Amount, asset, network and the fixed rate work exactly as on the hosted checkout page.

Status by webhook

The order status comes from the final webhook, not from the state of the browser window.

Works on any siteComing soon

A script call is enough to open the payment window on your store.

More ways to accept

Other ways to accept payments

Qvard supports several payment products. Pick the one that fits your sales channel.

FAQ

FAQ

A quick overview of how Qvard handles payments, integration and merchant operations.

What is Qvard?

Qvard is a custodial crypto payment gateway for businesses that need hosted checkout, invoices, API payments and merchant balances.

Which assets are supported?

You can accept USDT, USDC, BTC, LTC, TRX, BNB and ETH. USDT is available on several networks, so customers can pay through the route they already use. TON and USDT on TON are coming soon.

Is it good for developers?

Yes. The integration is built around creating a payment, redirecting the customer to redirectUrl and receiving a final webhook status, so orders in your system update automatically.

Can I customize checkout?

Yes. You can set the shop name, logo, button color and localized texts so the payment page feels like part of your product. Custom return URLs (successUrl/failUrl) are coming soon.

What do I need to get started?

Create a merchant account and complete business verification. After testing a demo invoice, connect hosted checkout or the API and start accepting real payments.

How do withdrawals work?

Funds are tracked in merchant balances separated by asset and network. You can withdraw manually or set up withdrawal rules for automatic payouts.

Launch crypto payments without building blockchain infrastructure

Use Qvard as your payment layer: checkout, invoices, status tracking, balances and withdrawals.

Quick start

Integrate the Qvard checkout widget in three ways:

Your public key (qvard_pk_…) can stay in your page code. It only creates payments for your shop—it cannot read data or withdraw funds. It works only from domains listed in your Allowed origins, and is rate-limited.

Need your server to calculate the amount or check inventory? Use the "Via your server" tab: your backend creates the payment with the secret key (qvard_sk_…), and only the payment URL goes to the browser.

<script src="https://qvard.com/checkout.js"></script>
<script>
  // 1. Describe the payment
  var checkout = new QvardCheckout({
    mode: 'modal',
    publishableKey: 'qvard_pk_YOUR_PUBLISHABLE_KEY',
    price: 10,
    orderId: 'order-123',
    onSuccess: function (e) { // 3. Handle the result
      console.log('paid', e.paymentId);
    },
    onError: function (err) { console.log(err.code); }
  });

  // 2. Create and show the payment window
  checkout.open();
</script>

Full API reference: api.qvard.com/doc

Configuration options

OptionDescription
modemodal | inline
targetCSS selector or DOM element (inline mode only)
publishableKeyYour public key—required for browser-side payment creation
paymentIdUUID of a pre-created payment—required for server-side flow
paymentUrlFull payment URL from server response—required for server-side flow
priceAmount in USD (required with publishableKey)
orderIdYour transaction ID (optional, max 128 chars, auto-generated if omitted)
paymentSystemIdPayment method ID (optional, from your account settings)
localePayment page language: en, ru, es, pt, tr, id, vi, fr, de (defaults to browser language)
themelight | dark (optional)
onSuccessCallback when payment succeeds: function(e) { console.log(e.paymentId); }
onCloseCallback when user closes the window without paying
onErrorCallback on error: function(err) { console.log(err.code, err.message); }

Error codes: invalid_mode, invalid_target, invalid_options, invalid_payment_url, network_error, invalid_key, origin_not_allowed, duplicate_order, rate_limited, invalid_request, payment_failed.

Try it live

Test the widget with a real demo payment before you integrate it.

Try the playground