User roles and permissions for Dev API Keys
Liminal Express SDK for developer supports managing wallet configurations from your Vaults organisation via API key authentication. Every organisation supports upto 5 active API keys that Owners and Admins can create. An API key is configured based on role-based access control (RBAC) to help maintain security and transparency across wallet operations including, transaction initiation, signing, creation, and manage MPC signer setup.
The following user roles and permissions are assigned to an API key:
- User Roles: Full Access, Admin, Initiator, Signer, and Viewer.
- Permissions:
- Wallet: Read (view wallet details), Write (create new wallet),
- Transaction: Read (view transaction details), Write- Initiate (initate transaction), Write- Sign (sign transaction).
User Roles and Permissions
| Operation Category | Admin | Initiator | Signer | Viewer |
|---|---|---|---|---|
| User Role Description | Organisation-based user role. | Wallet-based user role. | Wallet-based user role. | Organisation-based user role. |
| Permission Level | Read and Write | Read and Write | Read and Write | Read Only |
| Wallet Operation | Create and Read Wallet | Read Wallet | Read Wallet | Read Wallet |
| Transaction Operation | Read Transaction | Read and Initiate Transaction | Sign and Read Transaction | Read Transaction |
Note
- For existing API key:
- Existing organisation on Vaults having an active API key will have Full Access role assigned to it.
- Full access role has the following permissions:
- Read and Write wallet operations,
- Read and write transaction operations (including transaction initiation and signing), and
- Enable MPC setup for a Signer. Refer to this guide for MPC setup.
- You can rotate, disable, whitelist address and delete an existing active API key with Full Access role in your Vaults organisation. Refer to this guide for managing API key.
- Signer key:
- An API key with Signer user role needs to set-up required RSA key and MPC shard import operations before the user can actively start approving and signing transactions.
- When creating the Signing API Key, until the shard sharing is completed by the Owner to the API Key and it appears as API Signer Status under Users section you will not be able to complete the creation of another signer key.
- For new Vaults organisations: Vaults’ organisations created post May 15, 2026 and having either Express v1.3.18 or higher, will need to have at least one API key with Initiator and Signer roles each to complete a transaction.
- Enterprise organisations can request for a higher API key limit than the current limit of 5 key per organisation. Reach out to support for assistance.
Migration Guide from Single Full Access API Key to Multiple API Keys with different Roles
- Create a unique email address for each API Key user
- V2 Wallet Transactions require two separate keys:
Initiator Key for use with the send-many-transaction API Signer Key for use with the submit-transaction API
- V1 Wallet Transactions require one key to complete a transaction
Signer Key for use with the send-many-transaction API only
Migrating from a Full Access Key Follow this sequence carefully to ensure zero downtime:
a. Upgrade Liminal Express to v1.3.18 or above first
b. Do not delete the existing Full Access Key
c. Create your new Signer Key and Initiator Key Make code changes in your dev environment first
d. Thoroughly test all transactions Only then, delete the Full Access Key⚠️ Breaking Change — send-many-transaction API :The amount field now accepts a string instead of a number.
Using the initiator role to call the submit transaction api will return successful. This is expected since the response simply acts as an acknowledgement, the processing happens asynchronously at the backend. However the processing will fail at the backend and the initiator will not be able to sign.
We are also working on improving the error messages related to RBAC errors.
API Reference per User Roles
The following table illustrates the required permission level for every user role for an API key. Note that an API Key having Full Access permission will be able to call all the API references in Express SDK.
| API Reference v2 | HTTP Method | Unique ID | Permission Level | Valid User Roles |
|---|---|---|---|---|
| Create an RSA Key | POST | /mpc-shard/ | MPC setup | Signer |
| Import MPC shard | POST | /mpc-shard/ | MPC setup | Signer |
| Create a hot wallet | POST | /onboarding | Create Wallet | Admin, Full Access |
| Retrieve a list of wallets | POST | /wallet | Read Wallet | Viewer, Initiator, Signer, and Admin |
| Retrieve a wallet | POST | /wallet | Read Wallet | Viewer, Initiator, Signer, and Admin |
| Retrieve a wallet balance | POST | /wallet | Read Wallet | Viewer, Initiator, Signer, and Admin |
| Create a Watch-Only wallet | POST | /wallet | Create Wallet | Admin |
| Import addresses into a Watch-Only wallet | POST | /wallet | Create Wallet | Admin |
| Retrieve a list of addresses | POST | /wallet | Create Wallet | Admin |
| Retrieve an address | POST | /wallet | Create Wallet | Admin |
| Retrieve an address balance | POST | /wallet | Read Wallet | Viewer, Initiator, Signer, and Admin |
| Verify addresses | POST | /wallet | Read Wallet | Viewer, Initiator, Signer, and Admin |
| Create transaction requests | POST | /wallets | Initiate Transaction | Initiator |
| Retrieve a transaction | POST | /wallet | Read Transaction | Viewer, Initiator, Signer, and Admin |
| Retrieve hot wallet transactions | POST | /wallet | Read Transaction | Viewer, Initiator, Signer, and Admin |
| Retrieve all transactions by status | POST | /wallet | Read Transaction | Viewer, Initiator, Signer, and Admin |
| Retrieve pending transactions | GET | /wallet | Read Transaction | Viewer, Initiator, Signer, and Admin |
| Retrieve a transaction status | POST | /wallet | Read Transaction | Viewer, Initiator, Signer, and Admin |
| Retrieve estimated gas fees and rates | POST | /wallet | Read Transaction | Viewer, Initiator, Signer, and Admin |
| Retrieve a list of addresses for consolidation | POST | /wallet | Read Transaction | Viewer, Initiator, Signer, and Admin |
| Rescan a transaction | POST | /transactions | Initiate Transaction | Initiator |
| Consolidate wallet assets | POST | /wallet | Initiate Transaction | Initiator |
| Push a refill transaction | POST | /wallet | Initiate Transaction | Initiator |
| Resend EVM-chain transactions | POST | /wallet | Initiate Transaction | Signer |
| Resend a Bitcoin transaction | POST | /wallet | Initiate Transaction | Signer |
| Start or stop transaction execution | POST | /jobs | Initiate Transaction | Signer |
| Submit a transaction | POST | /wallet | Sign Transaction | Signer |
| Update a transaction status | POST | /travel-rule | Initiate Transaction | Initiator |
| Retrieve a list of travel rule transactions | POST | /travel-rule | Read Transaction | Viewer, Initiator, Signer, and Admin |
| Retrieve a travel rule transaction by transaction ID | POST | /travel-rule | Read Transaction | Viewer, Initiator, Signer, and Admin |
| List all VASPs with details | POST | /travel-rule | Read Transaction | Viewer, Initiator, Signer, and Admin |
| Create a travel rule transaction | POST | /travel-rule | Read Transaction | Viewer, Initiator, Signer, and Admin |
| Check travel rule status | GET | /travel-rule | Read Transaction | Viewer, Initiator, Signer, and Admin |
| Retrieve pending transactions | POST | /travel-rule | Read Transaction | Viewer, Initiator, Signer, and Admin |
| Retrieve Rewards | POST | /staking | Read Staking data | Viewer, Initiator, Signer, and Admin |
| Retrieve latest Liminal Express version | GET | /info | Get Express version data | Viewer, Initiator, Signer, and Admin |
| Retrieve memory usage of Liminal Express | GET | /metrics | Get Express memory usage data | Viewer, Initiator, Signer, and Admin |
| Check Liminal server status | GET | /ping | Get Liminal server status | Viewer, Initiator, Signer, and Admin |
| Health | GET | /health | Get Express Docker status | Viewer, Initiator, Signer, and Admin |
