---
title: "How It Works"
description: "Understand the non-custodial money path, verification lifecycle, and ownership boundaries."
canonical_url: "https://checkout.verify.et/docs/how-it-works"
markdown_url: "https://checkout.verify.et/docs/how-it-works.md"
last_updated: "2026-10-06"
x_farming_labs_generated_preamble: true
---

# How It Works
URL: /docs/how-it-works
LLM index: /llms.txt
Description: Understand the non-custodial money path, verification lifecycle, and ownership boundaries.
Related: /docs/quick-start, /docs/hosted-checkout, /docs/reconciliation

# Verification, not custody

Verify Checkout connects a merchant-owned receiving account, a branded checkout,
and Verify.et transaction verification. It does not collect, hold, transfer, or
settle customer money.

<SystemFlow ariaLabel="Non-custodial payment and verification flow">
  <SystemFlowItem title="Merchant backend" description="Creates a deposit and receives a checkout URL." />
  <SystemFlowItem title="Customer" description="Pays the displayed merchant-owned account and submits a reference." />
  <SystemFlowItem title="Verify.et" description="Checks that reference with the selected payment provider." />
  <SystemFlowItem title="Merchant backend" description="Receives the outcome and credits its own ledger once." />
</SystemFlow>

## Who owns what

| Responsibility | Owner |
| --- | --- |
| Receiving account and funds | Merchant |
| Hosted payment instructions and reference collection | Verify Checkout |
| Transaction-reference verification | Verify.et through Verify Checkout |
| Customer wallet, order, or entitlement | Merchant |
| Refunds, reversals, and settlement operations | Merchant and payment provider |

## Receiving-account routing

At deposit creation, Verify Checkout selects from the workspace's active
receiving accounts. If you pass `payment_method`, checkout is limited to that
provider. Otherwise the response can contain several `payment_options` and the
customer chooses on the hosted page.

## Checkout lifecycle

<StatusJourney>
  <StatusJourneyItem status="awaiting_transfer" description="Checkout is waiting for a valid reference." />
  <StatusJourneyItem status="verification_pending" description="A submitted reference is being verified." />
  <StatusJourneyItem status="succeeded" description="Verification succeeded; reconcile and credit once." tone="success" />
  <StatusJourneyItem status="failed · expired" description="Do not credit. Create a new deposit if the customer needs another attempt." tone="danger" />
  <StatusJourneyItem status="review_required" description="Hold fulfillment until the result is resolved." tone="warning" />
</StatusJourney>

A checkout link expires 60 minutes after creation. A verification credit is
consumed when a valid reference starts a verification attempt—not when the link
is created, refreshed, polled, or delivered by webhook.

<Callout type="info" title="A success redirect is not proof of payment">
  Treat the API deposit status as authoritative. The customer-facing return page
  is a navigation convenience and must not directly credit a wallet or fulfill an order.
</Callout>

## Sitemap

Sitemap discovery is not enabled for this deployment.
