---
title: "List multisig wallets"
method: GET
path: "/v1/multisig-wallets"
tags: ["Multisig Wallets"]
---

# List multisig wallets

`GET /v1/multisig-wallets`

## Request

- Base URL: `https://api.prod.keyban.io`
- URL: `https://api.prod.keyban.io/v1/multisig-wallets`
- Auth: one of:
  - API key in header `X-Api-Key`
  - `bearer` (a scheme the document does not define)

List the organization multisig wallets (admin treasuries), one per network at most. Each entry carries two caller-relative flags: `mayEnroll`, which answers "can **you**, the caller, enrol a key here?", and `awaitingMySignature`, which answers "does a transfer here wait for **your** signature?" — both always `false` for an API key.

## Query parameters

- `filters` union[]
  - union
    - object
      - `operator` 'or' | 'and', required
      - `value` union[], required
        - union
          - object
            - `field` 'id', required
            - `operator` 'eq', required
            - `value` string, required
          - object
            - `field` 'createdAt', required
            - `operator` 'gt' | 'lt' | 'gte' | 'lte', required
            - `value` string, date-time, required
          - object
            - `field` 'updatedAt', required
            - `operator` 'gt' | 'lt' | 'gte' | 'lte', required
            - `value` string, date-time, required
          - object
            - `field` 'network', required
            - `operator` 'eq', required
            - `value` 'EthereumAnvil' | 'BaseSepolia' | 'BaseMainnet' | 'XdcApothem' | 'XdcMainnet', required
          - object
            - `field` 'status', required
            - `operator` 'eq', required
            - `value` 'awaiting_signer' | 'deploying' | 'active' | 'failed', required
    - object
      - `field` 'id', required
      - `operator` 'eq', required
      - `value` string, required
    - object
      - `field` 'createdAt', required
      - `operator` 'gt' | 'lt' | 'gte' | 'lte', required
      - `value` string, date-time, required
    - object
      - `field` 'updatedAt', required
      - `operator` 'gt' | 'lt' | 'gte' | 'lte', required
      - `value` string, date-time, required
    - object
      - `field` 'network', required
      - `operator` 'eq', required
      - `value` 'EthereumAnvil' | 'BaseSepolia' | 'BaseMainnet' | 'XdcApothem' | 'XdcMainnet', required
    - object
      - `field` 'status', required
      - `operator` 'eq', required
      - `value` 'awaiting_signer' | 'deploying' | 'active' | 'failed', required
- `sorters` object[]
  - `field` 'id' | 'createdAt' | 'updatedAt', required
  - `order` 'asc' | 'desc', required
- `currentPage` integer
- `pageSize` integer

## Response `200`

List of multisig wallets retrieved successfully

- PaginatedMultisigWalletDtoOutput
  - `data` object[], required: Array of items for the current page
    - `id` string, uuid, required: Entity UUID
    - `createdAt` string, date-time, required: Creation date (ISO 8601)
    - `updatedAt` string, date-time, required: Last update date (ISO 8601)
    - `label` string, required: Human-readable label for the wallet
    - `address` string, required: On-chain address of the wallet. Empty until its signers hold keys and the deployment lands.
    - `status` 'awaiting_signer' | 'deploying' | 'active' | 'failed', required: Current deployment status of the wallet.
    - `network` 'EthereumAnvil' | 'BaseSepolia' | 'BaseMainnet' | 'XdcApothem' | 'XdcMainnet', required: EVM network of the wallet.
    - `threshold` integer, required: Signatures required to authorize a transfer (M of N), as recorded at deployment. Not re-read from chain: an out-of-band operator change is not reflected here.
    - `mayEnroll` boolean, required: **Relative to whoever reads this response — not a property of the treasury.** The same treasury serves `true` to one admin and `false` to another, and the value changes for a given reader over time. True when the session user holds a live (unconsumed) invitation on this treasury and has no live signer enrolment on it, i.e. exactly when `POST /multisig-wallets/{id}/signers` would get past the invitation guard. Enrolment is reserved to invitees, so a client should only offer the ceremony when this is true. Always `false` for an API key: there is no session user to be invited, and an API key can never enrol.
    - `awaitingMySignature` boolean, required: **Relative to whoever reads this response — not a property of the treasury.** Two signers of the same treasury legitimately read different values, and the value flips for a given reader as transfers come and go. True when the session user is an `active` signer here — a key already in the on-chain signer set, the only one the account accepts a signature from — **and** a transfer of this treasury is still `pending` without their own signature on it: exactly the state where `POST /multisig-wallets/{id}/intents/{intentId}/approvals` is waiting for them. It goes back to `false` the moment they sign, even while the lot keeps collecting the remaining signatures. A signer app can badge the treasuries that need its owner without opening each transfer list. Always `false` for an API key: there is no session user to owe a signature, and a key can never sign.
  - `total` integer, required: Total count of items matching the query

---

[API](https://skmtc.dev/keyban/apis/keyban-rest-apis.md) · [All operations](https://skmtc.dev/keyban/apis/keyban-rest-apis/llms.txt) · [OpenAPI document](https://skmtc.dev/keyban/apis/keyban-rest-apis/revisions/0bb79a1da961?raw)
