# Bank Ramp Currencies & Networks

List the stablecoins and networks a user can receive from a bank deposit or sell for fiat, in the bank ramp's sandbox or in production.

## Overview

Aurea keeps a registry of the currency and network pairs it uses with the bank ramp, and your tenant offers all of them or the ones the Aurea operator chose ([Tenant Settings](https://docs.aureahub.com/docs/bank-settings.md)). [Initiate Deposit](https://docs.aureahub.com/docs/payin-initiate.md) and [Initiate Payout](https://docs.aureahub.com/docs/payout-initiate.md) check every request against the pairs your tenant offers, and this endpoint returns them for one environment, so your app offers exactly those. It answers from Aurea's records.

- `isTestnet=true` lists the sandbox pairs; `false` or omitted lists the production pairs.
- Names are the bank ramp's: the currency code is the asset in production and the asset with `_TEST` in the sandbox (`EURC_TEST`), and the network is the bank ramp's network name (`Solana`, `SolanaDevnet`, `PolygonTestAmoy`). Send them unchanged.
- `payin: true`: Initiate Deposit accepts this `cryptoCurrency` on this `network`. `payout: true`: Initiate Payout accepts this `cryptoCurrency`. Only pairs with at least one of the two are listed, sorted by `cryptoCurrency` and then `network`.
- `addressFormat` is the format of a destination on the network: `evm` (`0x` and 40 hex characters) or `solana` (base58). `chainId` is the EVM chain id, `null` on Solana. `decimals` is the precision of payout amounts: `cryptoAmount` is an integer in the token's smallest unit.
- A user of a tenant that never switched the bank ramp on in that environment gets an empty list. An Aurea administrator's token, which names no tenant, gets every pair Aurea enables.
- Pairs change when Aurea enables a new one or the operator changes your tenant's choice, so read the list when you show the options.
- Answers `403` when your tenant does not use the bank ramp.

## Endpoint

### `GET /v1/ramp/bank/currencies`

Authentication: bearer token required.

Returns the currency and network pairs the user's tenant offers for pay-in or payout in one environment.

**Query parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `isTestnet` | boolean | no | `true` for the sandbox pairs; `false` or omitted for production. Any other value returns `400`. |

**Responses**

`200` OK

```json
{
  "environment": "production",
  "currencies": [
    {
      "asset": "EURC",
      "cryptoCurrency": "EURC",
      "network": "Solana",
      "addressFormat": "solana",
      "chainId": null,
      "tokenAddress": "HzwqbKZw8HxMN6bF2yFZNrht3c2iXXzpKcFu7uBEDKtr",
      "decimals": 6,
      "payin": true,
      "payout": false
    }
  ]
}
```

`403` Not the bank ramp

```json
{
  "statusCode": 403,
  "error": "ForbiddenError",
  "message": "The bank ramp is not enabled for this tenant. Current banking provider: gnosis"
}
```

The sandbox list today: `EURC_TEST`, `PYUSD_TEST`, `USDC_TEST` and `USDG_TEST` on `SolanaDevnet`, `USDC_TEST` on `PolygonTestAmoy` and on `CeloTestSepolia`, and `PYUSD_TEST` on `FlowEvmTest` — **all seven for pay-in and for payout**.

In production: `EURC` on `Base` and `Solana`; `USDC` on `Base`, `Celo`, `Ethereum`, `PolygonPos` and `Solana`; `USDT` on `Celo` and `Ethereum`; and `PYUSD`, `USDG` and `USDPT` on `Solana`, each for pay-in and for payout. Every one of those token contracts was read from its own chain before it was enabled. Three pairs the registry knows are deliberately **off** — `USDC` on `Gnosis`, `USDT` on `PolygonPos` and `PYUSD` on `FlowEvm` — because more than one contract claims that name on those chains and only the bank ramp can say which one it credits. Ask for one and you get `400` `NOAH_PAIR_UNAVAILABLE` before anything is sent.

This list is what *Aurea* enables. Your tenant may offer fewer ([Tenant Settings](https://docs.aureahub.com/docs/bank-settings.md)), and this endpoint answers the intersection — so read it rather than this paragraph.

## Implementation

```javascript
async function depositOptions(token, isTestnet) {
  const res = await fetch(`https://api.aureahub.com/v1/ramp/bank/currencies?isTestnet=${isTestnet}`, {
    headers: { Authorization: `Bearer ${token}` }
  });
  const data = await res.json();
  if (!res.ok) throw new Error(data.message);

  // Offer the pay-in pairs, and send the chosen one to Initiate Deposit unchanged
  return data.currencies
    .filter((pair) => pair.payin)
    .map((pair) => ({
      label: `${pair.asset} on ${pair.network}`,
      cryptoCurrency: pair.cryptoCurrency,
      network: pair.network
    }));
}
```

---

Web version: https://docs.aureahub.com/#bank-currencies
