Withdraw - Go Account (Simple)
Build and send withdrawals in one call using BitGo Express. See the Guide.
-
This step is required only for withdrawing fiat from your Go Account to a BitGo-approved bank account. Crypto withdrawals skip this step.
BitGo identifies your bank account with a unique
idHashthat you pass as theaddressvalue in the next step. -
Build and send the transaction to BitGo in one call. If your withdrawal doesn't require approval, BitGo processes it immediately. If you have policy rules requiring approvals, the transaction remains pending until approved.
-
If your withdrawal requires approval, another admin must approve it — you cannot approve your own transactions. Once approved, BitGo rebuilds the transaction with current fees and processes it.
// 1. Get idHash (Optional)
export ENTERPRISE_ID="<ENTERPRISE_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
curl -X GET \
https://app.bitgo-test.com/api/v2/bankaccounts?enterpriseId=$ENTERPRISE_ID \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN"
// 2. Build and Send Transaction
export BITGO_EXPRESS_HOST="<YOUR_LOCAL_HOST>"
export COIN="<OFC_ASSET_ID>"
export WALLET_ID="<YOUR_WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export ADDRESS="<DESTINATION_ADDRESS_OR_ID_HASH>"
export AMOUNT="<AMOUNT_IN_BASE_UNITS>"
export WALLET_PASSPHRASE="<YOUR_WALLET_PASSPHRASE>"
curl -X POST \
http://$BITGO_EXPRESS_HOST/api/v2/$COIN/wallet/$WALLET_ID/sendcoins \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"address": "'"$ADDRESS"'",
"amount": "'"$AMOUNT"'",
"walletPassphrase": "'"$WALLET_PASSPHRASE"'"
}'
// 3. Approve Transaction (Optional)
export APPROVAL_ID="<APPROVAL_ID>"
export OTP="<YOUR_OTP>"
curl -X PUT \
https://app.bitgo-test.com/api/v2/pendingApprovals/$APPROVAL_ID \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"state": "approved",
"otp": "'"$OTP"'"
}'
// 1. Get idHash (Optional)
// Use REST API to list bank accounts for fiat withdrawals
// 2. Build and Send Transaction
const tx = await fundedWallet.send({
address: `<DESTINATION_ADDRESS>`,
amount: `<AMOUNT>`,
walletPassphrase: process.env.PASSWORD,
});
// 3. Approve Transaction (Optional)
const baseCoin = bitgo.coin(initialPendingApproval.coin);
const pendingApproval = await baseCoin.pendingApprovals().get({ id: initialPendingApproval.id });
const result = await pendingApproval.approve(params);
// 1. Get idHash Response
{
"bankAccounts": [
{
"type": "wire",
"accountNumber": "012345678",
"enterpriseId": "1032e75c451052000436831deb797af1",
"id": "60749ab75f8c4500060f5a8b244dd0cb",
"name": "My Bank",
"idHash": "c2f4cf5555a66d77",
"routingNumber": "087654321",
"verificationState": "approved"
}
]
}
// 2. Build and Send Transaction Response
{
"coin": "ofctusd",
"transfers": [
{
"id": "62c5b1de8a0c5200071c9a603bdbadc5",
"coin": "ofctusd",
"wallet": "5ef523b7ab6b7f7b00b9513a0ac0a4e8",
"type": "send",
"value": -10100,
"state": "unconfirmed"
}
]
}
// 3. Approve Transaction Response
{
"id": "655686880765186f0b3e9e88e1bdd0f4",
"state": "approved",
"approvalsRequired": 1
}