> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.crisscross.money/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.crisscross.money/_mcp/server.

# Ethiopia Mobile Money

> Mobile money operators and approval flows for Ethiopia (ETH) on CrissCross.

Mobile money in Ethiopia (`ETH`) is available through the operators below. Set `payerDetails.location` to `ETH` on the checkout session and pass the operator's `provider` slug on the payment; `GET /v1/payment/available-methods` returns the live list for the country.

For how a payment works, what you collect, sandbox testing, and error codes, see the [Mobile Money overview](/payment-method-mobile-money). For the end-to-end API sequence, see [Direct API: Mobile Money](/direct-api-integration-mobile-money).

### Operators

| Operator                    | `paymentDetails.provider` | Approval flow                   |
| --------------------------- | ------------------------- | ------------------------------- |
| Telebirr                    | `telebirr`                | Handset prompt (USSD push, PIN) |
| M-Pesa (Safaricom Ethiopia) | `mpesa`                   | Handset prompt (USSD push, PIN) |
| CBE Birr                    | `cbebirr`                 | Handset prompt (USSD push, PIN) |
| Coopay E-Birr               | `ebirr`                   | Handset prompt (USSD push, PIN) |
| AwashBirr                   | `awashbirr`               | Handset prompt (USSD push, PIN) |
| YaYa Wallet                 | `yaya`                    | Handset prompt (USSD push, PIN) |

Ethiopia mixes carrier wallets (Telebirr, M-Pesa) with bank-issued ones (CBE Birr, Coopay E-Birr, AwashBirr) and an independent PSP wallet (YaYa). All six use the same handset-prompt flow, so a single integration covers them: the customer approves the debit on their handset and there is no `POST /payment/authorize` step. None of them use the redirect flow.

The `mpesa` slug here is **Safaricom Ethiopia**, a different wallet from the Safaricom Kenya product that shares the slug in [Kenya](/payment-method-kenya-mobile-money). The slug is scoped by the session's `payerDetails.location`, so there is nothing extra to pass.

### ETB only

Ethiopian mobile money collects in **ETB**. Set `currency` (or `collectionCurrency` on an FX-enabled session) to `ETB` when you create the session. A payment that reaches these operators in any other currency is rejected with [`INVALID_CURRENCY`](/error-codes) rather than converted.

### Payouts and refunds

* **Payouts** go to four of the six wallets: `telebirr`, `mpesa`, `cbebirr` and `yaya`, plus Ethiopian bank accounts. `ebirr` and `awashbirr` are collect-only and are rejected as payout destinations. See [Supported Destinations](/payout-supported-destinations) and [Mobile Wallet](/payout-mobile-wallet).
* **Refunds** use the provider refund route in the [Refunds guide](/full-and-partial-refunds): the refund goes back against the original payment, whichever of the six wallets it came from.

Collections themselves behave exactly as they do elsewhere: subscribe your endpoint to the `transaction.*` events and route on the delivered `status`, since the webhook body carries no event type. See [Webhooks](/core-concepts-webhooks) for delivery and signature verification, and [Webhook Events](/webhook-events) for the full catalogue and payload schemas. Alternatively, poll `GET /v1/payment/{transactionId}`.