> ## 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.

# List institutions

> Every bank and neobank an NGN recipient can hold, with the institution code each one is identified by.

To pay a Nigerian bank account, you need the bank's code, such as `GTBINGLA` or `OPAYNGPC`. This endpoint gives you every code, so you can fill a bank picker instead of guessing. You can't work a code out from the bank's name, and a wrong one stops the order from being created.

NGN is the only currency with an institution list. KES, GHS, and UGX recipients are identified by `method` plus a phone number, till, or paybill, so there is nothing to look up. See [recipients](/offramp/recipients).

## Endpoint

```text theme={null}
GET https://merchant.minisend.xyz/api/offramp/institutions
```

```text theme={null}
Authorization: Bearer ms_live_your_key_here
```

Requires the `offramp` scope.

## Query parameters

<ParamField query="currency" default="NGN" type="string">
  Currency to list institutions for. `NGN` is the only supported value, and it is the default, so you can omit this entirely.
</ParamField>

## Example

<CodeGroup>
  ```bash cURL theme={null}
  curl https://merchant.minisend.xyz/api/offramp/institutions?currency=NGN \
    -H "Authorization: Bearer ms_live_your_key_here"
  ```

  ```javascript Node.js theme={null}
  const res = await fetch(
    'https://merchant.minisend.xyz/api/offramp/institutions?currency=NGN',
    { headers: { 'Authorization': 'Bearer ms_live_your_key_here' } }
  );

  const { institutions } = await res.json();

  // The `code` is what an order needs.
  const opay = institutions.find((i) => i.name === 'OPay');
  console.log(opay.code); // OPAYNGPC
  ```
</CodeGroup>

## Response (200)

```json theme={null}
{
  "currency": "NGN",
  "count": 171,
  "institutions": [
    { "code": "ABNGNGLA", "name": "Access Bank", "type": "bank" },
    { "code": "GTBINGLA", "name": "Guaranty Trust Bank", "type": "bank" },
    { "code": "OPAYNGPC", "name": "OPay", "type": "bank" },
    { "code": "PALMNGPC", "name": "PalmPay", "type": "bank" }
  ]
}
```

<ResponseField name="currency" type="string" required>
  The currency the list applies to.
</ResponseField>

<ResponseField name="count" type="integer" required>
  Number of institutions returned.
</ResponseField>

<ResponseField name="institutions" type="array" required>
  <Expandable title="institution">
    <ResponseField name="code" type="string" required>
      Pass this as `recipient.institution` when you create an order or validate an account.
    </ResponseField>

    <ResponseField name="name" type="string" required>
      Display name. Show this in your bank picker.
    </ResponseField>

    <ResponseField name="type" type="string" required>
      What kind of institution it is. Right now it's `bank` for every entry, including app-based banks like OPay and PalmPay.
    </ResponseField>
  </Expandable>
</ResponseField>

<Note>
  The list rarely changes, and we keep a copy for six hours, so it's fine to call this every time you show a form. Keeping your own copy for a day is fine too. Just don't type the codes into your code, because if a bank is added or renamed, your list will quietly go out of date.
</Note>

## Errors

| Status | Meaning |
| - | - |
| `400` | Only `NGN` has a list of banks |
| `403` | Off-ramp isn't switched on for your account yet |
| `502` | We couldn't load the list just now. Try again shortly |


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