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

# Code Standards

> Understanding Paycrest's currency and institution code formats

Paycrest follows international standards for currency and institution codes to ensure consistency and compatibility across different systems and regions.

## Currency Codes

Paycrest uses **ISO 4217** standard currency codes, which are the internationally recognized three-letter codes for currencies.

### Examples:

* **NGN** - Nigerian Naira
* **KES** - Kenyan Shilling
* **UGX** - Ugandan Shilling
* **TZS** - Tanzanian Shilling
* **MWK** - Malawi Kwacha
* **BRL** - Brazilian Real

<Note>
  All currency codes used in Paycrest API calls must follow the ISO 4217 standard. These codes are case-sensitive and should be provided in uppercase.
</Note>

## Institution Codes

Paycrest uses a hybrid approach for institution codes to accommodate both international banks and local financial institutions.

### SWIFT Codes (Banks)

For a bank that has a SWIFT/BIC, the Paycrest code **is** the bank's 8-character SWIFT/BIC code.

#### Examples:

* **GTBINGLA** - Guaranty Trust Bank (Nigeria)
* **FBNINGLA** - First Bank of Nigeria
* **CITINGLA** - Citibank Nigeria
* **SCBLNGLA** - Standard Chartered Bank Nigeria
* **KCBLKENX** - Kenya Commercial Bank
* **EQBLKENA** - Equity Bank Kenya

Some codes reflect a bank's **former name** but are still its real BIC — e.g. `ZEIBNGLA` (Zenith, from "Zenith International Bank"), `NAMENGLA` (Sterling, from the former NAL Bank), and `KDHLNGLA` (FBNQuest, from Kakawa Discount House).

A few historical codes differ from the bank's current SWIFT — use the Paycrest code, not the SWIFT you may find elsewhere:

* **`SBICNGLA`** — Stanbic IBTC Bank (SWIFT `SBICNGLX`)
* **`PROVNGLA`** — Providus Bank (SWIFT `UMPLNGLA`)

### Custom Codes (Local Institutions)

For mobile payment providers, local banks without SWIFT codes, and other financial institutions, Paycrest uses custom 8-character codes built as: **4 letters from the institution's name** (where possible) + the **2-letter ISO country code** + **`PC`** (PayCrest).

#### Examples:

* **KUDANGPC** - Kuda (Nigeria): `KUDA` + `NG` + `PC`
* **OPAYNGPC** - OPay (Nigeria): `OPAY` + `NG` + `PC`
* **MONINGPC** - Moniepoint (Nigeria): `MONI` + `NG` + `PC`
* **SAFAKEPC** - Safaricom M-Pesa (Kenya): `SAFA` + `KE` + `PC`
* **AIRTKEPC** - Airtel Money (Kenya): `AIRT` + `KE` + `PC`

For KES **Till** and **Paybill** offramps, keep **`SAFAKEPC`** (or the same mobile institution you use for M-Pesa) and set **`destination.recipient.metadata.channel`** to **`Till`** or **`Paybill`** (and **`businessNumber`** for Paybill). See **[Sender API Integration — KES mobile money](/implementation-guides/sender-api-integration#kes-mobile-money-m-pesa-till-paybill)**.

## Code Format Rules

### Currency Codes

* **Format**: 3 uppercase letters
* **Standard**: ISO 4217
* **Case**: Always uppercase
* **Examples**: `NGN`, `KES`, `UGX`

### Institution Codes

* **Format**: 8 characters
* **Banks with a SWIFT/BIC**: the bank's 8-character SWIFT/BIC code
* **Local Institutions (no SWIFT)**: 4 letters from the name + 2-letter ISO country code + `PC`
* **Case**: Always uppercase
* **Examples**: `GTBINGLA`, `KUDANGPC`

## API Usage

When making API calls, always use the correct code format. For **new integrations**, use **[POST /v2/sender/orders](/api-reference/sender/initiate-payment-order-v2)** (offramp: stablecoin → fiat). Fiat currency is **`destination.currency`**; the bank or mobile-money institution is **`destination.recipient.institution`**. Crypto asset and chain are on **`source`** (`source.currency`, `source.network`).

```javascript theme={null}
// v2 offramp — correct institution and currency codes (see OpenAPI for full required fields)
const order = {
  amount: "100",
  source: {
    type: "crypto",
    currency: "USDT",
    network: "base",
    refundAddress: "0xYourRefundAddress",
  },
  destination: {
    type: "fiat",
    currency: "NGN", // ISO 4217 — correct fiat currency code
    recipient: {
      institution: "GTBINGLA", // Correct institution code
      accountIdentifier: "1234567890",
      accountName: "John Doe",
      memo: "Payment",
    },
  },
};
```

Legacy **v1** **[POST /sender/orders](/api-reference/sender/initiate-payment-order)** (`https://api.paycrest.io/v1/...`) uses a flatter body (`amount`, `token`, `network`, `recipient`) with the **same** uppercase institution and currency strings; prefer v2 for new work.

## Finding Institution Codes

Use the **[GET /institutions/{currency_code}](/api-reference/general/list-supported-institutions)** endpoint to get the complete list of supported institutions for any currency:

```bash theme={null}
curl -X GET "https://api.paycrest.io/v2/institutions/NGN" \
  -H "API-Key: your-api-key"
```

This endpoint returns all supported institutions with their codes, names, and types (bank or mobile\_money).

<Note>
  Institution codes are case-sensitive and must be provided exactly as returned by the API. Always use the official codes from the API rather than guessing or using external SWIFT code databases.
</Note>
