> For the complete documentation index, see [llms.txt](https://docs.fonbnk.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fonbnk.com/server-to-server/api-endpoints/get-available-currencies.md).

# Get available currencies

## <mark style="color:$success;">\[GET]</mark> /api/v2/currencies

Returns every currency you can trade, its payment channels, and the currency types it can be paired with. This is the first call of any integration and the only reliable answer to "what can I sell right now".

Response type:

{% code overflow="wrap" expandable="true" %}

```typescript
type Response = {
  currencyType: CurrencyType;
  currencyCode: string;
  paymentChannels: {
    name: string;          // display label, e.g. "Bank transfer", "M-PESA"
    type: PaymentChannel;
    transferTypes: TransferType[];
    isDepositAllowed: boolean;
    isPayoutAllowed: boolean;
    carriers?: { code: string; name: string; }[];
  }[];
  currencyDetails: OrderCurrencyDetails;
  pairs: CurrencyType[]; // the counter currency types this one can be matched with
}[]
```

{% endcode %}

How to read it:

* One entry per **currency**, and for fiat, per country — XOF appears once for each country that uses it, distinguished by `currencyDetails.countryIsoCode`.
* `name` is a display label, not an identifier — branch on `type`. Most labels are the plain channel name ("Bank transfer", "Mobile money", "Airtime", "Paybill", "Buy goods", "Digital wallet", "Crypto", "Merchant balance"), with two country-specific ones: Kenyan mobile money is labelled **M-PESA**, and the Senegalese and Burkinabè digital wallet is labelled **Wave**.
* `isDepositAllowed` and `isPayoutAllowed` are live: `true` only when an offer for that channel is enabled, operational, fresh and priceable for your account. A channel that exists but is momentarily unavailable comes back with both `false`.
* For a fiat leg, deposit means **on-ramp** (the user pays fiat) and payout means **off-ramp** (the user receives fiat). Airtime is payout-only.
* `transferTypes` lists the deposit-step shapes seen on that channel's offers. It is **not** gated by availability: it is collected from every offer, including ones that are switched off, so a non-empty `transferTypes` next to `isDepositAllowed: false` is normal and does not mean you can deposit. It is empty when no offer on the channel defines a deposit step at all — airtime, for instance.
* `carriers` is present on mobile money, airtime and some digital wallet channels. Its `code` is what you pass as `carrierCode`.
* `pairs` tells you which legs are legal. A fiat entry pairs with `crypto` and `merchant_balance`; a crypto entry pairs with `fiat` and `merchant_balance`.

{% hint style="info" %}
**The response is cached for 60 seconds server-side.** Calls inside that minute return the same body, so `isDepositAllowed` and `isPayoutAllowed` can be up to a minute behind reality. Treat them as a filter for what to show a user, not as a guarantee — [Create quote](/server-to-server/api-endpoints/create-quote.md) is what actually decides, and it can refuse a pair this call has just advertised.

For a reference table of the countries, channels and assets that are live today see [Supported countries and cryptocurrencies](/supported-countries-and-cryptocurrencies.md) — but treat this endpoint as the source of truth.
{% endhint %}

Response example (trimmed — the real response lists every currency):

{% code overflow="wrap" expandable="true" %}

```json
[
    {
        "currencyType": "fiat",
        "currencyCode": "NGN",
        "paymentChannels": [
            {
                "name": "Bank transfer",
                "type": "bank",
                "transferTypes": [
                    "manual"
                ],
                "isDepositAllowed": true,
                "isPayoutAllowed": true
            },
            {
                "name": "Airtime",
                "type": "airtime",
                "transferTypes": [],
                "isDepositAllowed": false,
                "isPayoutAllowed": true,
                "carriers": [
                    { "code": "ng_mtn", "name": "MTN Nigeria" },
                    { "code": "ng_airtel", "name": "Airtel Nigeria" },
                    { "code": "ng_glo", "name": "Glo Mobile Nigeria" },
                    { "code": "ng_9mobile", "name": "9Mobile Nigeria" }
                ]
            }
        ],
        "currencyDetails": {
            "countryIsoCode": "NG"
        },
        "pairs": [
            "crypto",
            "merchant_balance"
        ]
    },
    {
        "currencyType": "fiat",
        "currencyCode": "KES",
        "paymentChannels": [
            {
                "name": "M-PESA",
                "type": "mobile_money",
                "transferTypes": [
                    "stk_push",
                    "otp_stk_push"
                ],
                "isDepositAllowed": true,
                "isPayoutAllowed": true,
                "carriers": [
                    { "code": "ke_safaricom", "name": "Safaricom Kenya" }
                ]
            },
            {
                "name": "Paybill",
                "type": "paybill",
                "transferTypes": [],
                "isDepositAllowed": false,
                "isPayoutAllowed": true
            },
            {
                "name": "Buy goods",
                "type": "buy_goods",
                "transferTypes": [],
                "isDepositAllowed": false,
                "isPayoutAllowed": true
            },
            {
                "name": "Bank transfer",
                "type": "bank",
                "transferTypes": [],
                "isDepositAllowed": false,
                "isPayoutAllowed": true
            },
            {
                "name": "Airtime",
                "type": "airtime",
                "transferTypes": [],
                "isDepositAllowed": false,
                "isPayoutAllowed": true,
                "carriers": [
                    { "code": "ke_safaricom", "name": "Safaricom Kenya" },
                    { "code": "ke_airtel", "name": "Airtel Kenya" },
                    { "code": "ke_telkom", "name": "Telkom Kenya" }
                ]
            }
        ],
        "currencyDetails": {
            "countryIsoCode": "KE"
        },
        "pairs": [
            "crypto",
            "merchant_balance"
        ]
    },
    {
        "currencyType": "crypto",
        "currencyCode": "POLYGON_USDT",
        "paymentChannels": [
            {
                "name": "Crypto",
                "type": "crypto",
                "transferTypes": [
                    "manual"
                ],
                "isDepositAllowed": true,
                "isPayoutAllowed": true
            }
        ],
        "currencyDetails": {
            "network": "POLYGON",
            "asset": "USDT",
            "contractAddress": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F"
        },
        "pairs": [
            "fiat",
            "merchant_balance"
        ]
    },
    {
        "currencyType": "merchant_balance",
        "currencyCode": "USD",
        "paymentChannels": [
            {
                "name": "Merchant balance",
                "type": "merchant_balance",
                "transferTypes": [
                    "manual"
                ],
                "isDepositAllowed": true,
                "isPayoutAllowed": true
            }
        ],
        "currencyDetails": {
            "merchantName": "Your company"
        },
        "pairs": [
            "fiat",
            "crypto"
        ]
    }
]
```

{% endcode %}

{% hint style="warning" %}
Contract addresses differ between sandbox and production. Read `currencyDetails.contractAddress` from this endpoint for whichever environment you are on — never hard-code it.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.fonbnk.com/server-to-server/api-endpoints/get-available-currencies.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
