> ## Documentation Index
> Fetch the complete documentation index at: https://docs.minisend.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# How it works

> Follow a payment from stablecoin deposit to local currency payout, and the status your session moves through at each step.

## The flow

<Steps>
  <Step title="Customer sends USDC or USDT">
    One deposit address accepts both assets across all supported chains. The customer doesn't pick a network from a menu — they just send.
  </Step>

  <Step title="Minisend detects the deposit">
    Status moves `pending` → `deposit_received`. If no deposit arrives within **30 minutes**, the session expires.
  </Step>

  <Step title="Funds normalise to USDC on Base">
    * **USDC on a non-Base chain** → bridged to Base via Circle CCTP burn-and-mint.
    * **USDT on any chain** → routed through Minisend's swap layer → spendable USDC on Base in **30–50 seconds**.

    Cross-chain rounding is tolerated when matching the amount.
  </Step>

  <Step title="USDC → local currency">
    Converted at the live rate. The 1% fee was already included in your customer's total, so you receive the full amount you set. Status moves to `settling`.
  </Step>

  <Step title="Payout sent">
    M-Pesa, mobile money, or bank transfer. Status moves to `completed` and a webhook fires.
  </Step>
</Steps>

## Status lifecycle

```text theme={null}
pending → deposit_received → settling → completed
                                      → failed
       → expired (after 30 minutes)
```

| Status             | Meaning                                                      |
| ------------------ | ------------------------------------------------------------ |
| `pending`          | Waiting for the customer to send                             |
| `deposit_received` | Detected on-chain; normalisation started                     |
| `settling`         | Conversion + payout in progress                              |
| `completed`        | Payout delivered                                             |
| `failed`           | Settlement failed after the deposit arrived. Contact support |
| `expired`          | No deposit within 30 minutes                                 |

## Multi-asset, multi-chain

USDC on 19 chains, USDT on 14 chains, all to the same address. Base settles fastest because no bridging step is required. See the [full network list](/payments/supported-currencies).
