Burn Stablecoins
Burning is the process of permanently removing stablecoin tokens from circulation in exchange for fiat currency.
-
View a comprehensive list of all stablecoins available for burning.
-
Locate the
treasuryAccountWalletIdfield within the stablecoin asset object returned by the List Supported Stablecoins.This UUID represents the destination treasury wallet required for the redeem requests.
-
When initiating a redemption, the amount of stablecoins to be burned must be expressed in the token's native Base Units. Because stablecoins typically utilize higher precision (6 or 18 decimals), the resulting integer will be significantly larger.
Formula:
Base Units = Amount * 10DecimalsExample (Stablecoin):
A redemption of 100 stablecoin tokens occurs for an asset with 6 decimals:- Amount: 100
- Decimals: 6
- Calculation: 100 * 10⁶ = 100,000,000
- Result: 100,000,000 base units
-
By submitting a burn order, you are creating a "Pending" record that BitGo uses to track the movement of stablecoin tokens for fiat currency.
-
BitGo Express or JavaScript SDK is required to sign the transaction and process the burn order request. The following example shows the minimum required parameters for sending an asset.
-
Retrieves the real-time status and detailed metadata for a specific burn order.
-
See our Mint Stablecoins integration guide and the JavaScript SDK Burn Order for a working example.
// 1. List Available Stablecoins
export BITGO_ENV="test" # or "prod" for production
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
curl -X GET \
https://app.bitgo-$BITGO_ENV.com/api/stablecoin/v1/assets \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN"
// 2. Get Treasury Wallet ID
// You receive `treasuryAccountWalletId` values from the first step.
// 3. Calculate Redeem Amount
# Calculate programmatically
DECIMALS=6 # From assets API response for stablecoin
AMOUNT_BASE_UNITS=$(($AMOUNT_IN_FULL_UNITS * 10**$DECIMALS))
echo "Amount in base units: $AMOUNT_BASE_UNITS"
// 4. Create Burn Order
export BITGO_ENV="test" # or "prod" for production
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export ENTERPRISE_ID="<ENTERPRISE_ID>"
export WALLET_ID="<YOUR_WALLET_ID>"
export WALLET_PASSPHRASE="<YOUR_WALLET_PASSPHRASE>"
curl -X POST \
https://app.bitgo-$BITGO_ENV.com/api/stablecoin/v1/enterprise/$ENTERPRISE_ID/order \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"sourceWalletId": "'"$WALLET_ID"'",
"destinationWalletId": "'"$WALLET_ID"'",
"destinationType": "go_account",
"fromAssetId": "stablecoin_asset_id", // The stablecoinAssetId in Step 1.
"toAssetId": "usd_asset_id", // The usdAssetId in Step 1.
"fromAmount": "'"$AMOUNT_BASE_UNITS"'",
"type": "burn"
}'
// 5. Transfer Stablecoin to BitGo
export BITGO_EXPRESS_HOST="<YOUR_LOCAL_HOST>"
export COIN="<ASSET_ID>"
export WALLET_ID="<YOUR_WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export WALLET_PASSPHRASE="<YOUR_WALLET_PASSPHRASE>"
export SEQUENCE_ID="<ORDER_ID>"
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"'",
"sequenceId": "'"$SEQUENCE_ID"'" // This is the id from the Create Burn Order results.
}'
// 6. Check Order Status
export BITGO_ENV="test" # or "prod" for production
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export ENTERPRISE_ID="<ENTERPRISE_ID>"
curl -X GET \
https://app.bitgo-$BITGO_ENV.com/api/stablecoin/v1/enterprise/$ENTERPRISE_ID/orders/$ORDER_ID \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ACCESS_TOKEN"
// 1. List Available Stablecoins
import * as BitGoJS from 'bitgo';
import { common } from '@bitgo/sdk-core';
require('dotenv').config({ path: '../../../.env' });
// Configuration
const accessToken = '';
const enterpriseId = '';
const walletId = '';
const walletPassphrase = '';
const bitgo = new BitGoJS.BitGo({ env: 'test' });
bitgo.authenticateWithAccessToken({ accessToken });
const baseUrl = common.Environments[bitgo.getEnv()].uri + '/api/stablecoin/v1';
async function main() {
// Step 1: Fetch assets to get IDs and treasury wallet
const assets = (await bitgo.get(`${baseUrl}/assets`)).body;
const usdAsset = assets.find((a: any) => a.token === 'tfiatusd');
const stablecoinAsset = assets.find((a: any) => a.token === 'tbsc:usd1');
const treasuryWalletId = stablecoinAsset.treasuryAccountWalletId;
// 2. Get Treasury Wallet ID
// Get the `treasuryAccountWalletId` values from the first step.
// 3. Calculate Redeem Amount
const fromAmount = (100 * Math.pow(10, stablecoinAsset.decimals)).toString(); // 100 stablecoin in base units
// 4. Create Burn Order
const order = (await bitgo.post(`${baseUrl}/enterprise/${enterpriseId}/order`).send({
sourceWalletId: walletId,
destinationWalletId: walletId,
destinationType: 'go_account',
fromAssetId: stablecoinAsset.id,
toAssetId: usdAsset.id,
fromAmount,
type: 'burn',
})).body;
console.log('Order created:', order.id);
// 5. Transfer Stablecoin to BitGo
const wallet = await bitgo.coin('ofctbsc:usd1').wallets().get({ id: walletId });
await wallet.sendMany({
recipients: [{ address: treasuryWalletId, amount: fromAmount }],
sequenceId: order.id,
walletPassphrase,
});
// 1. List Available Stablecoins Response
[
{
"id": "08c1271e-b15d-4af8-8929-f75383903da4",
"token": "tfiatusd",
"name": "Testnet US Dollar",
"decimals": 2,
},
{
"id": "bfd0daec-f849-4b96-bdb6-6373bffeb9b6",
"token": "tbsc:usd1",
"name": "Testnet BSC USD1",
"decimals": 18,
"chain": "tbsc",
"backingAsset": "tfiatusd",
"treasuryAccountWalletId": "67c1a025f9999f485f7a71aa26a1da4c"
},
{
"id": "49ff49ea-3355-4717-bbb0-5e8f5cae2202",
"token": "hteth:gousd",
"name": "Testnet goUSD",
"decimals": 6,
"chain": "hteth",
"backingAsset": "tfiatusd",
"treasuryAccountWalletId": "6698e670115059e2efe672436a3aea3b"
}
]
// 6. Check Order Status Response
{
"id": "order_id_12345",
"type": "burn",
"status": "fulfilled",
"fromAssetId": "usd_asset_id",
"toAssetId": "stablecoin_asset_id",
"fromAmount": "10000",
"toAmount": "100000000"
}