# Wallets

`GET /v1/stablecoin/wallets` is the **wallet ripId lookup**. Every wallet you have registered for the stablecoin product and that is live comes back with its `ripId` (a Ripple-assigned identifier such as `RIP0000001`) as well as its on-chain address, and the chain it lives on — so it is also the mapping you need to name a wallet on a [buy instruction](/products/stablecoin/api/fiat-instructions#create-a-buy-instruction) or to [bridge](/products/stablecoin/api/bridging) a flexible redemption to a wallet.

It takes no tenant identifier — the tenant is resolved from your access token, so a token issued for your tenant can only ever see your own wallets. Requires `rlusd_customers:read`, the same scope the Transaction API uses, so no new credential is needed.

## List wallets

```
GET /v1/stablecoin/wallets
```

**Required scope:** `rlusd_customers:read`

### Query parameters

| Parameter | Type | Required | Description |
|  --- | --- | --- | --- |
| `ripId` | string | No | Narrows the response to a single wallet, e.g. `RIP0000001`. Omit it for your tenant's whole list |
| `page` | integer | No | Page number, 0-indexed (default: `0`) |
| `size` | integer | No | Page size (default: `20`) |
| `sort` | string | No | Sort field and direction (default: `createdAt,desc`). Supported fields: `createdAt`, `nickname`, `chain`, `ripId` |


### Example request

```bash
curl -s 'https://api.ripple.com/v1/stablecoin/wallets?size=20&sort=createdAt,desc' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Accept: application/json'
```

To resolve one wallet:

```bash
curl -s 'https://api.ripple.com/v1/stablecoin/wallets?ripId=RIP0000001' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Accept: application/json'
```

### Example response — `200 OK`

```json
{
  "content": [
    {
      "ripId": "RIP0000001",
      "nickname": "Treasury XRPL",
      "address": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
      "destinationTag": 1234567,
      "chain": "XRPL_MAINNET",
      "status": "APPROVED",
      "createdAt": "2026-06-10T14:02:11Z"
    },
    {
      "ripId": "RIP0000002",
      "nickname": "Treasury Ethereum",
      "address": "0x1111111111111111111111111111111111111111",
      "chain": "ETH_MAINNET",
      "status": "PENDING_APPROVAL",
      "createdAt": "2026-06-11T09:15:44Z"
    }
  ],
  "totalPages": 1,
  "totalElements": 2,
  "size": 20,
  "number": 0
}
```

## Wallet object

| Field | Type | Description |
|  --- | --- | --- |
| `ripId` | string | The wallet ripId as you know it, e.g. `RIP0000001`. This is the value to quote as the wallet on a buy instruction or a bridge approval |
| `nickname` | string | Your own nickname for the wallet, as supplied on the onboarding form. Absent when none is registered |
| `address` | string | On-chain address, rendered exactly as the Transaction API renders one — `0x`-prefixed on EVM chains |
| `destinationTag` | integer | XRPL destination tag. Absent when the wallet has none |
| `chain` | string | Network the wallet lives on, e.g. `XRPL_MAINNET`, `ETH_MAINNET`, `BASE_MAINNET`, `AVALANCHE_MAINNET`. UAT returns the testnet equivalents, e.g. `XRPL_TESTNET`, `ETH_SEPOLIA` |
| `status` | string | One of `APPROVED`, `PENDING_APPROVAL`, `DENIED` — the same three outcomes the Ripple Mint UI shows. Only an `APPROVED` wallet can receive minted RLUSD |
| `createdAt` | string (ISO 8601) | When the wallet was registered |


Note
The `chain` values here are the fuller network identifiers (`XRPL_MAINNET`, `ETH_MAINNET`) rather than the shorter `XRPL` / `ETH` values the Transaction API returns. Join wallets to transactions on `ripId` / `walletRipId`, not on `chain`.

**Two behaviors to design around:**

- Deactivated wallets, and wallets registered against a product other than stablecoin, are never served at all — so the list is what is live rather than everything that has ever existed.
- An unknown `ripId` is **not** an error. It returns `200` with an empty `content` array and `totalElements: 0`, so treat "no rows" rather than a `404` as the not-found signal.