Quick Start
Overview
Go from zero to a completed test transaction on the BitGo testnet. Follow the links to the full guides for deeper explanations.
1. Create a BitGo Test Account
Go to https://app.bitgo-test.com/signup and create an account. Creating an account automatically provisions a testnet enterprise that you'll use throughout this guide.
2. Create an Access Token
Log in to https://app.bitgo-test.com, go to your account settings to create a long-lived access token. Copy and save the token — you won't be able to see it again.
For the programmatic flow, or for details on scopes and spending limits, see Create Access Tokens.
3. Install the SDK or BitGo Express
Choose the integration method that fits your stack:
- JavaScript SDK — For Node.js and TypeScript projects. See Install SDK.
- BitGo Express — For any other language. Runs as a local proxy that handles client-side signing. See Install BitGo Express.
Set your environment variables before continuing:
export BITGO_ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export BITGO_API="https://app.bitgo-test.com/api/v2"
export ENTERPRISE_ID="<YOUR_ENTERPRISE_ID>"
export COIN="tbtc4"Note: You can find your Enterprise ID in the BitGo web app under Settings > Enterprise Settings, or in the
enterprisesarray of the token creation response.
4. Verify Your Setup
Confirm your access token and connection are working by fetching your user profile.
Endpoint: Get user
export USER_ID="<YOUR_USER_ID>" # found in the access token creation response
curl -X GET "$BITGO_API/user/$USER_ID" \
-H "Authorization: Bearer $BITGO_ACCESS_TOKEN"Step Result
{
"user": {
"id": "62ab90e06dfda30007974f0a52a12995",
"username": "[email protected]",
"name": { "first": "Your", "last": "Name" },
"email": { "email": "[email protected]", "verified": true }
}
}If you get a 401 Unauthorized error, double-check your token and that you're using the correct environment URL.
5. Create Two Test Wallets
You need two wallets to send a transaction — one to send from and one to receive. For this example you'll create two Bitcoin multisig hot wallets. Run the following command twice, using a different label each time.
Endpoint: Generate wallet
Note: This call requires BitGo Express running locally (
docker run --platform linux/amd64 -it -p 3080:3080 bitgo/express:latest), because Express handles client-side key generation and signing.
curl -X POST "http://localhost:3080/api/v2/tbtc4/wallet/generate" \
-H "Authorization: Bearer $BITGO_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"label": "Sending Wallet",
"passphrase": "<A_STRONG_PASSPHRASE>",
"enterprise": "'"$ENTERPRISE_ID"'",
"multisigType": "onchain",
"type": "hot"
}'Run it again with "label": "Receiving Wallet" to create the second wallet.
Step Result
Save these values from each response:
id— Your wallet IDreceiveAddress.address— Your wallet's first receive address
6. Fund a Wallet
Send testnet Bitcoin to the Sending Wallet's receive address using a the Testnet4 faucet.
Paste your receive address into the faucet and request coins. Wait a few minutes for the transaction to confirm, then check your balance:
Endpoint: Get wallet
export SENDING_WALLET_ID="<WALLET_ID_FROM_STEP_5>"
curl -X GET "$BITGO_API/tbtc4/wallet/$SENDING_WALLET_ID" \
-H "Authorization: Bearer $BITGO_ACCESS_TOKEN"Step Result
{
"id": "6849948ac0623f81f74f63dbd8351d4f",
"label": "Sending Wallet",
"coin": "tbtc4",
"balance": 100000,
"balanceString": "100000",
"confirmedBalance": 100000,
"confirmedBalanceString": "100000",
"spendableBalance": 100000,
"spendableBalanceString": "100000"
}The balanceString field is denominated in the asset's smallest unit (satoshis for tbtc4). A value of 100000 = 0.001 BTC.
7. Send a Test Transaction
Send coins from your Sending Wallet to your Receiving Wallet's address.
Endpoint: Send coins
export RECEIVING_ADDRESS="<RECEIVE_ADDRESS_FROM_STEP_5>"
export SENDING_WALLET_ID="<SENDING_WALLEL_ID_FROM_STEP_5>"
curl -X POST "http://localhost:3080/api/v2/$COIN/wallet/$SENDING_WALLET_ID/sendcoins" \
-H "Authorization: Bearer $BITGO_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"address": "'"$RECEIVING_ADDRESS"'",
"amount": "10000",
"walletPassphrase": "<A_STRONG_PASSPHRASE>"
}'Step Result
{
"transfer": {
"id": "5d3e4c9b1234567890abcdef",
"coin": "tbtc4",
"state": "signed",
"value": -10000,
"txid": "a1b2c3d4e5f6..."
}
}The state field will progress from signed → pending → confirmed as the transaction is broadcast and confirmed on the testnet.
Next Steps
You've completed the core flow. From here, explore:
- Create Policies — Add approval rules, spending limits, and whitelists.
- Set Up Webhooks — Get notified about deposits, withdrawals, and policy triggers.
- Fund Gas Tanks — Required before transacting with EVM-based tokens.
- Staking — Earn rewards on supported assets.
See Also
Updated 16 days ago