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

# Currencies and countries overview

> The four pieces of reference data every money movement reads, and how they compose.

Nothing in this service moves money or stores anything of yours. It answers four questions that everything else depends on:

| Question | Endpoint |
| - | - |
| What can I hold, and what can I do with it? | [`GET /v1/currencies`](/api-reference/currencies-and-countries/list-currencies) |
| What can deliver to this destination currency? | [`GET /v1/currencies/{code}/routes`](/api-reference/currencies-and-countries/list-routes-for-a-currency) |
| The same, with the currency and its countries resolved | [`GET /v1/transfer-corridors`](/api-reference/currencies-and-countries/discover-transfer-corridors) |
| Which jurisdictions will Sakawave serve? | [`GET /countries`](/api-reference/currencies-and-countries/list-countries) |

Reading these first turns a class of runtime errors into decisions you make before sending a request.

## Currency

A currency is a code, its display data, and **six independent switches**.

```json theme={null}
{
  "code": "NGN",
  "name": "Nigerian Naira",
  "symbol": "₦",
  "minorUnits": 2,
  "accountIssuanceEnabled": true,
  "transferEnabled": true,
  "fxEnabled": true,
  "ownTransferEnabled": true,
  "tagTransferEnabled": true,
  "externalTransferEnabled": true,
  "isActive": true,
  "updatedAt": "2026-08-14T08:00:00.000Z"
}
```

A currency is not simply on or off. Each switch gates a different operation, and one transfer can read four of them. See [capabilities and corridors](/services/currencies/capabilities-and-corridors) for which check fires where.

`minorUnits` is the one field that changes your arithmetic: 2 for most currencies, **0 for UGX**, 8 for every crypto asset.

## Route

A route is a way to deliver money to a destination currency — a scheme, a payment method, and the exact fields a payout needs.

The important field is `id`. That is the `routeId` you send when creating a payment detail or an external destination; the rest of the object tells you what to collect first.

```json theme={null}
{
  "id": "01K2Z3AB4M5N6P7Q8RSTVWXYZA",
  "name": "Kenya bank transfer",
  "destinationCurrency": "KES",
  "destinationCountry": "KE",
  "scheme": "pesalink",
  "paymentMethod": "bank-transfer",
  "requiredFields": ["bankCode", "accountNumber"],
  "settlementTiming": "same_day",
  "institutionDirectoryEnabled": true,
  "isDefault": true
}
```

A route is scoped to one country, or serves many through its scheme — `sepa` and `cemac` each cover a set of countries rather than one.

## Corridor

A corridor is the same route, presented differently: the currency resolved to its display data, the countries it serves listed out, and the field descriptors alongside. It is the shape to build a UI from.

The two views exist because they answer different questions. Corridors are provider-neutral and complete; the routes endpoint returns the row as stored, including internal routing detail you should not depend on.

<Note>
  Use **corridors** to drive a form. Use **routes** when you already know the currency and just need `routeId` values.
</Note>

## Country

The country list is every jurisdiction Sakawave will onboard — alphabetical, with dial codes and flags, ready to render into a picker.

Twenty jurisdictions are deliberately absent, under sanctions or with no financial system to route to. A country missing from this list is a position, not an oversight: sending its code as a `jurisdiction` will be refused.

This endpoint is **public and unversioned**. It takes no `Authorization` header and does not live under `/v1`, because the picker it feeds is drawn before anyone has an account.

## How they compose

```mermaid theme={null}
flowchart LR
    C["GET /countries<br/>which jurisdictions"] --> CU["customer.jurisdiction<br/>address.country"]
    CUR["GET /v1/currencies<br/>what may be held"] --> A["POST /v1/accounts<br/>account_issuance"]
    CUR --> T["transfers<br/>transfer · fx ·<br/>own/tag/external_transfer"]
    R["GET /v1/currencies/{code}/routes<br/>GET /v1/transfer-corridors"] --> PD["payment details and<br/>external destinations<br/>routeId + fields"]
    PD --> T
```

## What this service does not do

* **It does not tell you what *you* may do.** A currency with `accountIssuanceEnabled: true` opens for any business, but issuing its details and moving money through it depend on your verification, international access, and tier. Capability is platform-wide; [those checks](/services/accounts/setup-and-configuration#what-is-checked-and-when) are yours.
* **It emits no events.** Reference data changes on a deploy, not through a webhook. Cache it and refresh on a schedule.
* **It holds nothing of yours.** Every response here is identical for every business.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.