Docs / Integration

Checkout page

We build and host the checkout page. Your server just redirects the customer to it using the checkout_url from the invoice creation response.

What the customer sees

  1. The order amount and the invoice countdown timer.
  2. A currency picker showing only the invoice's currently available assets.
  3. After choosing: a QR code, the exact amount with a “Copy” button, the address, a network warning and an “Open in wallet” link (BIP21, EIP-681, Solana Pay, TRON).
  4. A status that updates on its own: “Payment detected” → “Confirmations 7/20” → “Payment received.”
  5. A “Return to store” button that leads to your return_url.

Until something is paid, the customer can switch currencies. After the first payment, the currency is locked. For volatile assets, a rate timer runs (20 minutes); when it expires, the amount and address are hidden.

The page is available in English and Russian, with light and dark themes that follow the device settings.

How to open it

WhereHow
WebsiteNavigate in the same tab: 303 See Other from your server, or location.href
iOSASWebAuthenticationSession or SFSafariViewController
AndroidChrome Custom Tabs (androidx.browser)
Telegram botAn inline button linking to checkout_url
Don't useiframe, WKWebView, WebView: there's no address bar (so phishing is indistinguishable), and wallet links are unreliable. The page blocks embedding (frame-ancestors 'none')
Mobile appsThe app never calls the Coinetic API directly and never stores the key secret, which can be extracted from a build in minutes. Your server creates the invoice when the app asks and hands the app only the checkout_url.

Bringing the customer back

  • The customer may come back before paying, during confirmations, or not at all. Your order page shouldn't depend on it.
  • You can include the order number in return_url, but take the status from your own database, which the webhook keeps up to date. If the order isn't paid yet, re-check with GET /v1/invoices/{id}.
  • For apps, pass a universal link (Universal Links / App Links): https://shop.example/app/orders/ORDER-1001. Custom schemes (myapp://) aren't accepted.

Common situations

SituationWhat to do
The customer closed the tabAdd a “Continue to payment” link to checkout_url on the order; the invoice stays valid until expires_at
The invoice expiredCreate a new invoice with a new order_id (for example, ORDER-1001-2) and a new Idempotency-Key
Underpayment“Send the remaining balance to the same address”: the checkout page shows what's left
Late paymentThe funds have arrived, and the call is yours: fulfill the order or issue a refund
AML reviewLet the customer know the payment is being reviewed; wait for invoice.paid