Users
Add Wallet Users
Overview
Wallet admins can send wallet-user invitations to people in their enterprise who have a BitGo account. When you share a wallet with users in your enterprise, you can designate them with one or more of the following permissions:
- Admin - Able to manage wallet policies, users, and pending approvals with the ability to generate new receive addresses.
- Freeze - Able to freeze a wallet, which will disable all withdrawals.
- Spend - Able to initiate withdrawals and generate new receive addresses.
- Trade - Able to initiate trades for a Go Account.
- View - Able to view wallet balances, transactions, and wallet metadata (such as other wallet users).
Prerequisites
Cookbook
Need just the steps? Expand the cookbook below to get started:
Add Wallet UsersOpen CookbookCreate Wallet Share
Endpoint: Create a wallet share
export COIN="<ASSET_ID>"
export WALLET_ID="<YOUR_WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export MESSAGE="<MESSAGE_TO_THE_INVITEE>"
export USER="<INVITEE_USER_ID>"
curl -X POST \
https://app.bitgo-test.com/api/v2/$COIN/wallet/$WALLET_ID/share \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"permissions": "spend,view",
"message": "'"$MESSAGE"'",
"user": "'"$USER"'",
"keychain": { # Enables the wallet spender to sign with their passphrase
"pub": "string",
"encryptedPrv": "string",
"fromPubKey": "string",
"toPubKey": "string",
"path": "m/1234/1/1"
}
}'
import { BitGoAPI } from '@bitgo/sdk-api';
import { Btc, Tbtc4 } from '@bitgo/sdk-coin-btc';
const bitgo = new BitGoAPI({
accessToken: '<access_token>',
env: 'test',
});
const coin = 'tbtc4';
bitgo.register(coin, Tbtc4.createInstance);
// Set the id of the wallet to share.
const walletId = null;
// Set BitGo account email of wallet share recipient.
const recipient = null;
// Set share permissions as a comma-separated list (e.g. 'view,spend').
// Valid permissions to choose from are: view, spend, manage, admin.
const perms = 'view';
// Provide the passphrase for the wallet being shared
const passphrase = null;
async function main() {
const wallet = await bitgo.coin(coin).wallets().get({ id: walletId });
const shareResult = await wallet.shareWallet({
email: recipient,
walletPassphrase: passphrase,
permissions: perms,
});
console.log('Wallet was shared successfully');
console.dir(shareResult);
}
main().catch(error => console.log(error))
Step Result
{
"id": "6b4e821af392dc17e00834b1f7c209a4",
"coin": "tbtc4",
"wallet": "6a3ad38ed8f6eb1bf6e4015c0095bf27",
"walletLabel": "Ops Wallet",
"fromUser": "6a35b719cc4690701a2f673da1e9931e",
"toUser": "6b2c104f88340a71e2df891b50c3a7e2",
"permissions": ["view"],
"message": "Please accept this wallet share",
"state": "active",
"enterprise": "6a35b71ccc4690701a2f678264effb83",
"keychainOverrideRequired": false,
"userMultiKeyRotationRequired": false,
"isUMSInitiated": false,
"updatedAt": "2026-07-15T09:22:41.000Z"
}