Crypto-as-a-Service: Fund Go Account with Fiat
Fund your Go Account with fiat currency using a wire transfer or ACH deposit. See the Guide.
-
Get bank account details for BitGo and a memo ID. All wire transfers must include a memo ID. This ID links your deposit to your account. The response includes BitGo bank account information and the memo ID you must include in your wire transfer.
-
Depositing fiat currency from your bank account requires using your bank app or API to initiate a wire deposit. Review your bank documentation or contact them to learn more. Ensure to include the memo ID from Step 1 in order to prevent delays in accrediting deposits to your Go Account.
The balance of fiat currency in your Go Account updates with the deposited amount. The deposited balance is immediately available for trades. You can verify successful deposits with the Get Account Balance endpoint.
-
To fund your Go Account with ACH, first set up a fraud reserve. ACH deposits take 1–2 business days to settle, while digital assets can transfer almost instantly. Therefore, BitGo requires you to pre-fund a fiat reserve to cover potential unauthorized return claims (fraud) from your end-users. You set up your fraud reserve using the Go Account in the parent enterprise.
Contact your BitGo Customer Success Manager (CSM) to designate an enterprise in your organization as your parent enterprise. Deposit a minimum of $25,000 into the parent Go Account. As your ACH deposit volume grows, maintain 25% of your peak 2-day volume as your reserve balance. If the balance dips due to fraud or unauthorized returns, you must replenish it to the required level within 5 business days.
-
The transfer limit is the amount you can deposit using ACH per calendar day and resets every day at 12am EST. In the test environment, the system limits ACH deposits to $2,500/day and $10,000/week per enterprise.
-
Get the ACH agreement for a BitGo-approved bank by passing the bank ID. You can view all your bank accounts by calling the List Bank Accounts endpoint. The query parameter
amountis in base units (cents), but the agreement shows an amount in dollars. -
If you agree to the ACH agreement, you can proceed to initiate an ACH deposit. The response includes a transaction ID that you can use to track the deposit status.
// 1. Get Deposit Details
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export GO_ACCOUNT_ID="GO_ACCOUNT_ID"
export CURRENCY="tfiatusd"
curl -X GET \
"https://app.bitgo-test.com/api/v2/bankaccounts/deposit/info?goAccountId=$GO_ACCOUNT_ID¤cy=$CURRENCY" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN"
// 2. Deposit Fiat Currency via Wire
// Use your bank's app or API to initiate a wire transfer
// Include the memo ID from Step 1 in your wire transfer
// Refer to your bank's documentation for wire transfer instructions
// 3. Set Up the Fraud Reserve (For ACH Deposits)
// Contact your BitGo CSM to designate parent enterprise and fund the account
// Minimum: $25,000 in parent Go Account
// Standard: 25% of highest 2-day deposit volume
// Replenish within 5 business days if funds are withdrawn
// 4. Get Transfer Limit
export ENTERPRISE_ID="<YOUR_ENTERPRISE_ID>"
export SERVICE_USER_TOKEN="<SERVICE_USER_ACCESS_TOKEN>"
curl -X GET \
https://app.bitgo-test.com/api/tradfi/v1/enterprise-transfer-limits/$ENTERPRISE_ID/usd/ach-us/in \
-H "Authorization: Bearer $SERVICE_USER_TOKEN" \
-d '{
"id": "01982d49-9f0d-7c50-847a-e04ea8a63165",
"maximumTransferAllowed": "2500.00",
"maximumTransferAllowedBase": 250000,
"noLimit": false,
"transferDirection": "in",
"transferType": "ach-us"
}'
// 5. Get ACH Agreement
export AMOUNT="<AMOUNT_TO_DEPOSIT>"
export BANK_ID="<BANK_ID>"
export SERVICE_USER_TOKEN="<SERVICE_USER_ACCESS_TOKEN>"
curl -X GET \
"https://app.bitgo-test.com/api/fiat/v1/transaction/ach-debit/agreement?amount=$AMOUNT&bankId=$BANK_ID" \
-H "Authorization: Bearer $SERVICE_USER_TOKEN"
// 6. Initiate ACH Deposit
export SERVICE_USER_TOKEN="<SERVICE_USER_ACCESS_TOKEN>"
export AMOUNT="<AMOUNT_TO_DEPOSIT>"
export BANK_ID="<BANK_ID>"
export GO_ACCOUNT_ID="<GO_ACCOUNT_ID>"
curl -X POST https://app.bitgo-test.com/api/fiat/v1/transaction/ach-debit \
-H "Authorization: Bearer $SERVICE_USER_TOKEN" \
-d '{
"amount": "$AMOUNT",
"checkboxAgreement": true,
"bankId": "'"$BANK_ID"'",
"goAccountId": "'"$GO_ACCOUNT_ID"'"
}'
// 1. Get Deposit Details
const BitGoJS = require('bitgo');
const bitgo = new BitGoJS.BitGo({
accessToken: '<SERVICE_USER_ACCESS_TOKEN>',
env: 'test',
});
async function getDepositDetails() {
const goAccountId = '<GO_ACCOUNT_ID>';
const currency = 'tfiatusd';
const depositInfo = await bitgo.get(
`/api/v2/bankaccounts/deposit/info?goAccountId=${goAccountId}¤cy=${currency}`
).send();
console.log('Deposit Info:', depositInfo);
return depositInfo;
}
getDepositDetails().catch(console.error);
// 2. Deposit Fiat Currency via Wire
// Use your bank's app or API to initiate a wire transfer
// Include the memo ID from Step 1 in your wire transfer
// Refer to your bank's documentation for wire transfer instructions
// 3. Set Up the Fraud Reserve (For ACH Deposits)
// Contact your BitGo CSM to designate parent enterprise and fund the account
// Minimum: $25,000 in parent Go Account
// Standard: 25% of highest 2-day deposit volume
// Replenish within 5 business days if funds are withdrawn
// 4. Get Transfer Limit
async function getTransferLimit() {
const enterpriseId = '<YOUR_ENTERPRISE_ID>';
const limits = await bitgo.get(
`/api/tradfi/v1/enterprise-transfer-limits/${enterpriseId}/usd/ach-us/in`
).send();
console.log('Transfer Limits:', limits);
return limits;
}
getTransferLimit().catch(console.error);
// 5. Get ACH Agreement
async function getAchAgreement() {
const amount = '<AMOUNT_TO_DEPOSIT>';
const bankId = '<BANK_ID>';
const agreement = await bitgo.get(
`/api/fiat/v1/transaction/ach-debit/agreement?amount=${amount}&bankId=${bankId}`
).send();
console.log('ACH Agreement:', agreement);
return agreement;
}
getAchAgreement().catch(console.error);
// 6. Initiate ACH Deposit
async function initiateAchDeposit() {
const deposit = await bitgo.post('/api/fiat/v1/transaction/ach-debit').send({
amount: '<AMOUNT_TO_DEPOSIT>',
checkboxAgreement: true,
bankId: '<BANK_ID>',
goAccountId: '<GO_ACCOUNT_ID>',
});
console.log('ACH Deposit:', deposit);
return deposit;
}
initiateAchDeposit().catch(console.error);
// 1. Get Deposit Details Response
{
"memoId": "JVAIBEMHXT",
"bankAccounts": [
{
"id": "64ae84bdb25d190007958872b5104a7f",
"idHash": "cd303c82c4c74abf",
"currency": "tfiatusd",
"accountNumber": "5766400",
"token": "tusd",
"name": "Customers Bank ",
"shortCountryCode": "US",
"enterpriseId": "5bd795f1bf7435a503a0a647ec5d3b3d",
"trustOrg": "BitGo Trust",
"ownerName": "BitGo Trust Company, Inc",
"verificationState": "approved",
"createdAt": "2024-03-07T17:10:57.146Z",
"ownerAddressLine1": "6216 S Pinnacle Pl Ste #101",
"ownerAddressCityLocality": "Sioux Falls",
"ownerAddressStateProvince": "SD",
"ownerAddressPostalCode": "57108",
"ownerAddressCountryCode": "US",
"bankAddressLine1": "40 General Blvd Suite #200",
"bankAddressCityLocality": "Malvern",
"bankAddressStateProvince": "PA",
"bankAddressPostalCode": "19355",
"bankAddressCountryCode": "US",
"virtualDepositOnly": false,
"type": "wire",
"routingNumber": "031302971",
"accountType": "unknown",
"fee": {
"amount": "1600",
"individualFees": [
{
"type": "static",
"amount": "1600"
}
]
}
}
]
}
// 2. Deposit Fiat Currency via Wire
// The balance of fiat currency in your Go Account updates with the deposited amount.
// The deposited balance is immediately available for trades.
// Verify successful deposits with the Get Account Balance endpoint.
// 4. Get Transfer Limit Response
{
"id": "string",
"maximumTransferAllowed": "string",
"maximumTransferAllowedBase": 0,
"noLimit": true,
"transferDirection": "in",
"transferType": "ach-us"
}
// 5. Get ACH Agreement Response
{
"achAuthorizationLanguage": {
"reviewAuthorization": "string",
"accountInformation": {
"accountHolderName": "string",
"bankName": "string",
"accountNumber": "string",
"routingNumber": "string",
"accountType": "checking"
},
"authorizationDetails": "string",
"acknowledgment": "string"
}
}
// 6. Initiate ACH Deposit Response
{
"txId": "string"
}