Burn Stablecoins

Burning is the process of permanently removing stablecoin tokens from circulation in exchange for fiat currency.

  1. View a comprehensive list of all stablecoins available for burning.

  2. Locate the treasuryAccountWalletId field within the stablecoin asset object returned by the List Supported Stablecoins.

    This UUID represents the destination treasury wallet required for the redeem requests.

  3. 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 * 10Decimals

    Example (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
  4. By submitting a burn order, you are creating a "Pending" record that BitGo uses to track the movement of stablecoin tokens for fiat currency.

  5. 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.

  6. Retrieves the real-time status and detailed metadata for a specific burn order.

  7. 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"
Response
// 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"
}