Skip to content

Cashier

Recommended

When to use

Use the Cashier when you want an OMNO-hosted checkout that handles card, APM and crypto payments — with KYC and routing handled inside the flow — and supports both deposit and withdrawal in a single session. It is the recommended flow for new integrations.

How it works

  1. Your backend obtains an access token.
  2. Your backend creates a cashier session (POST /public/cashier/session) and receives a sessionId, a short-lived token, and URLs.
  3. You pass the sessionId and token to your frontend and open the cashier with the Web SDK (open({ sessionId, token })).
  4. The customer completes payment in the cashier.
  5. The PSP processes the payment.
  6. OMNO delivers a webhook to your backend with the outcome.
  7. Your backend optionally verifies the status via Get Transaction Info.
PSPOMNOCustomer BrowserMerchant BackendPSPOMNOCustomer BrowserMerchant BackendPOST /public/cashier/session (access token)sessionId + checkout token + checkoutUrl / depositUrl / withdrawalUrlsessionId + checkout tokenOpen cashier (Web SDK, forwards checkout token)Customer submits paymentProcess paymentResultUI update / redirect (not authoritative)Webhook (authoritative final status)GET /public/payin/{id} or /public/payout/{id} (verify)Final transaction status
PSPOMNOCustomer BrowserMerchant BackendPSPOMNOCustomer BrowserMerchant BackendPOST /public/cashier/session (access token)sessionId + checkout token + checkoutUrl / depositUrl / withdrawalUrlsessionId + checkout tokenOpen cashier (Web SDK, forwards checkout token)Customer submits paymentProcess paymentResultUI update / redirect (not authoritative)Webhook (authoritative final status)GET /public/payin/{id} or /public/payout/{id} (verify)Final transaction status

⚠️ Warning: The final result comes from webhooks or Get Transaction Info, never from redirects or client-side events.

Integrating the Cashier

You create a session from your backend and open it on your frontend with the Web SDK. See Integrating the Cashier.

Failure states

Handle these outcomes from webhooks / Get Transaction Info, not from the UI:

  • Decline — the PSP declined the payment (DECLINED for pay-in).
  • PSP failure — processing failed before or at the PSP (FAILED).
  • Timeout — no final response in time (TIMEOUT); may resolve later. [TBD: can TIMEOUT transition to SUCCESS later?]
  • Customer abandons — the customer closes the cashier without paying; no final webhook arrives. Reconcile via Get Transaction Info.
  • Pending resolving asynchronously — status is PENDING / PENDING_3DS and resolves later via webhook.