Create Wallets - Multisignature
Generate a self-custody multisignature hot wallet with BitGo. See the Guide.
-
Generate a self-custody multisignature hot wallet and keys in one step. When you generate a wallet, BitGo creates a user keychain locally on your machine, a backup keychain, and a BitGo keychain on a hardware-security module (HSM), then creates a wallet on the blockchain with these 3 public keys.
This response contains critical key material. Save it in a secure place.
Prerequisites: You must have a BitGo account. See Get Started.
// 1. Create Wallet
export BITGO_EXPRESS_HOST="<YOUR_LOCAL_HOST>"
export COIN="<ASSET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export ENTERPRISE_ID="<YOUR_ENTERPRISE_ID>"
export WALLET_PASSPHRASE="<YOUR_BITGO_LOGIN_PASSPHRASE>"
export LABEL="<YOUR_WALLET_NAME>"
curl -X POST \
http://$BITGO_EXPRESS_HOST/api/v2/$COIN/wallet/generate \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"enterprise": "'"$ENTERPRISE_ID"'",
"passphrase": "'"$WALLET_PASSPHRASE"'",
"label": "'"$LABEL"'",
"multisigType": "onchain",
"type": "hot"
}'
// 1. Create Wallet
const { BitGo } = require('bitgo');
// Fill in with actual access token
const accessToken = '<YOUR_ACCESS_TOKEN>';
// Initialize the SDK
const bitgo = new BitGo({
accessToken: accessToken,
env: 'test',
});
// Generate hot wallet
async function createHotWalletSimple() {
const newWallet = await bitgo.coin('tbtc4').wallets().generateWallet({
label: '<YOUR_WALLET_NAME>',
passphrase: '<YOUR_BITGO_LOGIN_PASSPHRASE>',
enterprise: '<YOUR_ENTERPRISE_ID>'
});
console.log(JSON.stringify(newWallet, undefined, 2));
}
Response
// 1. Create Wallet Response
{
"wallet": {
"id": "6849948ac0623f81f74f63dbd8351d4f",
"users": [
{
"user": "62ab90e06dfda30007974f0a52a12995",
"permissions": ["admin", "spend", "view"]
}
],
"coin": "tbtc4",
"label": "TBTC4 Self-Custody Wallet",
"m": 2,
"n": 3,
"keys": [
"68499487e6c77351bd3bbf04281fa8bb",
"68499487cd07fc57de18f6481baa1903",
"6849948902be620840a384c148d19979"
],
"keySignatures": {
"backupPub": "204119cfa9a1d0a00bd0e30b2c43d535dff36af557d1846385df7d47dc1a0092cc1eefbdc41b9f619f6d89d3597656c5e3f6b1ccc4b1f4331861c6b0993296eab9",
"bitgoPub": "20784ad236269cd93ba6b922831cc102fdfba193e6be5e88ba6234de1e5232b4ba65db1a0e47f1fd8d038bd23878632e4c376b475b36e4a0d9516797c12630963b"
},
"enterprise": "62c5ae8174ac860007aff138a2d74df7",
"organization": "62c5ae8174ac860007aff1555ffb960d",
"bitgoOrg": "BitGo Trust",
"tags": [
"6849948ac0623f81f74f63dbd8351d4f",
"62c5ae8174ac860007aff138a2d74df7"
],
"disableTransactionNotifications": false,
"freeze": {},
"deleted": false,
"approvalsRequired": 1,
"isCold": false,
"coinSpecific": {},
"admin": {
"policy": {
"date": "2025-06-11T14:36:58.035Z",
"id": "6849948a8f2bc3e1d74f63f3a91e00b2",
"label": "default",
"rules": [],
"version": 0,
"latest": true
}
},
"clientFlags": [],
"walletFlags": [],
"allowBackupKeySigning": false,
"recoverable": false,
"startDate": "2025-06-11T14:36:58.000Z",
"type": "hot",
"buildDefaults": {},
"customChangeKeySignatures": {},
"hasLargeNumberOfAddresses": false,
"multisigType": "onchain",
"hasReceiveTransferPolicy": false,
"creator": "62ab90e06dfda30007974f0a52a12995",
"walletFullyCreated": true,
"config": {},
"balance": 0,
"balanceString": "0",
"rbfBalance": 0,
"rbfBalanceString": "0",
"confirmedBalance": 0,
"confirmedBalanceString": "0",
"spendableBalance": 0,
"spendableBalanceString": "0",
"unspentCount": 0,
"receiveAddress": {
"id": "6849948ac0623f81f74f63ead377af97",
"address": "tb1q8n3p7dvqlhln5ek28aw9wjrp4y9avft2ta33km6790kupwx924xqn9ftsn",
"chain": 20,
"index": 0,
"coin": "tbtc4",
"wallet": "6849948ac0623f81f74f63dbd8351d4f",
"coinSpecific": { "witnessScript": "5221024f5a8e9b7c6d3f2a1e0b4d8c7f6e5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c0d9e8f21034a8c7b6d5f2e1a0c9b8d7f6e5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c0d9e8f7a6b21029f8b7a6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a53ae" }
},
"pendingApprovals": []
},
"userKeychain": {
"id": "68499487e6c77351bd3bbf04281fa8bb",
"pub": "xpub661MyMwAqRbcEst4tb4F36AfvoFtAy7U9viB7zapRqNnXhPknsPwNqhxpD1CqMGSGhq3hDMKQR1Br8gGxYygoR6SGic3XdJoTEzM5v9wyFy",
"ethAddress": "0x944b592f950d24dd12dc405527e355d3d3922856",
"source": "user",
"type": "independent",
"encryptedPrv": "{\"v\":2,\"m\":65536,\"t\":3,\"p\":4,\"salt\":\"Xh7fKpLqN3mVwT9sBzC1Rg==\",\"iv\":\"LFGqTPsYGT8+wFDD\",\"ct\":\"kP3n7Xq2Rf8A9PD/7SjttGlGW4YvSitFtJNGn+LJdRLtLTKQZt3Eo8A1mJtE7pJTd1S0APpPCyQPUsVro6SDxYAbPeBBaWQ7YlOiDbWkTqa8XYXeJghvJufVdANNBqEGanMy8WI/ZIv6xItCkk2mExaMtcEotpj26N70VrhIuA==\"}",
"prv": "xprv9s21ZrQH143K2PobnZXEfxDwNmRPmWPcnhnaKcBCsVqoeu4cFL5gq3PUxv8jZXassaVMAxdrZAi91kyY2RVRkoNW2x5JKSBnozsB4Nc4m5H"
},
"backupKeychain": {
"id": "68499487cd07fc57de18f6481baa1903",
"pub": "xpub661MyMwAqRbcEfnfBkVRk9BB1SrYaFR884ndYpmNXnci6U2wrAQCsFiD21c49Aq7EvtK6QFzDzMwmFKVqi1bTL7kmuCEJ78bFn9Rq6NyLDV",
"ethAddress": "0x1907355a7022491140d0e7e3447303c94c2be0f1",
"source": "backup",
"type": "independent",
"encryptedPrv": "{\"v\":2,\"m\":65536,\"t\":3,\"p\":4,\"salt\":\"Rk4jH2nLmQpWsT7vBxC9Yw==\",\"iv\":\"fpzCzHLb7307IeTW\",\"ct\":\"mL9p4Wt6Sg1CzE5s1phuRSEcoxdv4pUeqqpL0iDLpKWQ/Uz+HUrmLX1wE+WpkTTqLVF+hqQwj8f4f3LRTpiAtpvRrrmBmLJ4gP0SlVgz9ELHdR96U14UXmfozmTggJFmaQmnVsary/a4fCBClSEDTJg3EH5xMQW7QExlahRClQ==\"}",
"prv": "xprv9s21ZrQH143K2BiC5ixRP1ESTR24AnhGkqs2kSMkyT5jDfhoJd5xKTPjAkMwgvkHDmvBTMq6ck679XNTtdd1fz1DmxifzPi8HkkP7GjKyfj"
},
"bitgoKeychain": {
"id": "6849948902be620840a384c148d19979",
"pub": "xpub661MyMwAqRbcGCXsEAmctkLstGa92f5ugiD3hvCL3Wyt8BqHYGCVsL2x6PgNgJeq8Aabtz92sMzq4Ezac459QkDmxowKqoL35gNJXEJDdeo",
"ethAddress": "0x92f48893ab51470c2253a97aea8071da70bbd461",
"source": "bitgo",
"type": "independent",
"isBitGo": true,
"isTrust": false,
"hsmType": "institutional"
},
"responseType": "WalletWithKeychains",
"warning": "Be sure to backup the backup keychain -- it is not stored anywhere else!"
}