BitGo Integration
BitGo is one of the oldest institutional crypto custodians (founded in 2013). It specializes in multi-signature wallets and is a licensed custodian in the US (qualified custodian under New York Banking Law). BitGo API allows building products on top of their storage infrastructure.
BitGo Wallet Architecture
BitGo uses 2-of-3 multisig for Bitcoin and a similar scheme for other assets. Three keys:
- User key — stored with the client (or encrypted with password at BitGo)
- BitGo key — stored on BitGo servers in HSM
- Backup key — stored offline with the client (for recovery)
A transaction requires 2 of 3 keys. Typical flow: user key signs → BitGo key signs (after passing policy checks).
BitGo API Integration
import * as BitGoJS from "bitgo";
const bitgo = new BitGoJS.BitGo({
env: "prod", // or "test" for BitGo Express
accessToken: process.env.BITGO_ACCESS_TOKEN,
});
// Get wallet
const wallet = await bitgo
.coin("eth")
.wallets()
.get({ id: "WALLET_ID" });
// Get deposit address
const address = await wallet.createAddress();
console.log(`Deposit to: ${address.address}`);
// Send transaction
const txRequest = await wallet.send({
address: "0xRecipient",
amount: "100000000000000000", // 0.1 ETH in wei
walletPassphrase: process.env.WALLET_PASSPHRASE,
comment: "Payment #123",
});
Policy Engine
BitGo Policy Engine allows configuring rules for transactions:
// Whitelist recipient addresses
await wallet.createPolicy({
id: "whitelist-policy",
type: "allowanddeny",
condition: {
type: "destination",
add: ["0xApprovedAddress1", "0xApprovedAddress2"],
},
action: { type: "allow" },
});
// Daily limit
await wallet.createPolicy({
id: "daily-limit",
type: "velocityLimit",
condition: {
type: "velocity",
amount: 10000, // in USD
timeWindow: 86400, // 24 hours in seconds
groupBy: ["coin", "wallet"],
},
action: { type: "getApproval" },
});
Webhook Notifications
// Create webhook for deposit monitoring
await bitgo.coin("eth").webhooks().add({
type: "transfer",
url: "https://yourapp.com/webhooks/bitgo",
label: "Deposit notifications",
listenToFailureStates: false,
});
// Webhook handler
app.post("/webhooks/bitgo", async (req, res) => {
const { type, wallet: walletId, transfer } = req.body;
if (type === "transfer" && transfer.type === "receive") {
await creditUserBalance(walletId, transfer.valueString, transfer.txid);
}
res.status(200).send("OK");
});
When to Choose BitGo
BitGo is optimal for: exchanges and brokers needing a qualified custodian for regulatory requirements; US companies with SOC 2 Type II requirements; projects with large Bitcoin volumes (BitGo historically stronger in BTC multi-sig).
Fireblocks is better for: multi-chain DeFi operations, fast deployment without lengthy onboarding, MPC instead of multisig.
BitGo API integration — 2–4 weeks. Client onboarding (KYB, compliance checks) — separate process, takes 2–8 weeks depending on jurisdiction.







