---
title: "Hosted Checkout"
description: "Know what customers see, submit, and receive during payment verification."
canonical_url: "https://checkout.verify.et/docs/hosted-checkout"
markdown_url: "https://checkout.verify.et/docs/hosted-checkout.md"
last_updated: "2026-10-06"
x_farming_labs_generated_preamble: true
---

# Hosted Checkout
URL: /docs/hosted-checkout
LLM index: /llms.txt
Description: Know what customers see, submit, and receive during payment verification.
Related: /docs/integration, /docs/how-it-works, /docs/troubleshooting

# A checkout built for verified transfers

The hosted page displays your business name and logo, the available merchant-owned
receiving accounts, payment instructions, and the form for a transaction reference.

## Customer journey

1. Choose an available provider when more than one payment option is returned.
2. Enter an amount for a variable deposit, or review the fixed amount.
3. Send money directly to the displayed merchant receiving account.
4. Submit the payment reference for verification.
5. Wait for verification, then continue to the merchant's registered return URL.

Supported providers are Telebirr, M-PESA, Commercial Bank of Ethiopia, Bank of
Abyssinia, CBE Birr, Dashen Bank, Awash Bank, Siinqee Bank, and Kaafi eBirr.
Only the active accounts selected for a deposit appear on that checkout.

## Amounts and expiry

A fixed deposit locks the requested amount. A variable deposit asks the customer
for an amount within the checkout's enforced limits. Checkout links expire 60
minutes after creation; create a new deposit rather than reusing an expired link.

<StatusJourney>
  <StatusJourneyItem status="awaiting_transfer" description="The customer has not submitted a valid reference." />
  <StatusJourneyItem status="verification_pending" description="Verify.et is checking the reference." />
  <StatusJourneyItem status="succeeded" description="The API reports a verified deposit." tone="success" />
  <StatusJourneyItem status="failed · expired" description="The merchant must not credit the customer." tone="danger" />
  <StatusJourneyItem status="review_required" description="The merchant waits for a final operational decision." tone="warning" />
</StatusJourney>

## What you should not build

<Callout type="warning" title="Keep payment input on hosted checkout">
  Do not reproduce receiving-account routing, collect references in your own form,
  expose API keys, infer success from the browser redirect, or attempt to verify a
  provider response yourself. Redirect to the returned URL and trust the deposit API state.
</Callout>

Treat the checkout token as customer-facing but sensitive: do not publish it or
reuse it for another order. Your backend should store the deposit ID; it never
needs to parse the token from `checkout_url`.

## Sitemap

Sitemap discovery is not enabled for this deployment.
