Mint Stablecoins

Mint stablecoins by depositing fiat, creating an order, and transferring funds to BitGo. See the Guide.

  1. List the stablecoins available for minting and save the fiat and stablecoin asset IDs and treasury wallet ID.

    API Reference

  2. Calculate the integer base-unit amount by multiplying the full-unit amount by 10 raised to the asset decimals.

  3. Create a pending mint order that converts the fiat asset into the selected stablecoin. Save its order ID for the transfer and status request.

    API Reference

  4. Transfer the fiat asset to the treasury wallet with the order ID as the sequence ID so BitGo can process the mint.

    API Reference

  5. Retrieve the order until its status is fulfilled and confirm the minted amount.

    API Reference

// 1. List Available Stablecoins
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
curl -X GET https://app.bitgo-test.com/api/stablecoin/v1/assets \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $ACCESS_TOKEN"
// 2. Calculate Mint Amount
export AMOUNT_IN_FULL_UNITS="<YOUR_AMOUNT>"
export DECIMALS="<ASSET_DECIMALS>"
AMOUNT_BASE_UNITS=$(($AMOUNT_IN_FULL_UNITS * 10**$DECIMALS))
echo "Amount in base units: $AMOUNT_BASE_UNITS"
// 3. Create Mint Order
export ENTERPRISE_ID="<YOUR_ENTERPRISE_ID>"
export SOURCE_WALLET_ID="<SOURCE_WALLET_ID>"
export DESTINATION_WALLET_ID="<DESTINATION_WALLET_ID>"
export FROM_ASSET_ID="<FROM_ASSET_ID>"
export TO_ASSET_ID="<TO_ASSET_ID>"
export FROM_AMOUNT="$AMOUNT_BASE_UNITS"
curl -X POST https://app.bitgo-test.com/api/stablecoin/v1/enterprise/$ENTERPRISE_ID/order \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "sourceWalletId": "'"$SOURCE_WALLET_ID"'",
    "destinationWalletId": "'"$DESTINATION_WALLET_ID"'",
    "destinationType": "go_account",
    "fromAssetId": "'"$FROM_ASSET_ID"'",
    "toAssetId": "'"$TO_ASSET_ID"'",
    "fromAmount": "'"$FROM_AMOUNT"'",
    "type": "mint"
  }'
// 4. Transfer USD to BitGo
export BITGO_EXPRESS_HOST="<YOUR_LOCAL_HOST>"
export COIN="<ASSET_ID>"
export WALLET_ID="<YOUR_WALLET_ID>"
export ADDRESS="<DESTINATION_ADDRESS>"
export AMOUNT="$FROM_AMOUNT"
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"'"
  }'
// 5. Check Order Status
export ORDER_ID="<YOUR_ORDER_ID>"
curl -X GET https://app.bitgo-test.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" }
]

// 3. Create Mint Order Response
{ "id": "order_id_12345", "type": "mint", "status": "pending_funding", "fromAssetId": "usd_asset_id", "toAssetId": "stablecoin_asset_id", "fromAmount": "10000" }

// 4. Transfer USD to BitGo Response
{ "coin": "ofctusd", "transfers": [{ "id": "transfer_id_12345", "coin": "ofctusd", "wallet": "source_wallet_id", "value": -10000, "state": "unconfirmed", "type": "send" }] }

// 5. Check Order Status Response
{ "id": "order_id_12345", "type": "mint", "status": "fulfilled", "fromAssetId": "usd_asset_id", "toAssetId": "stablecoin_asset_id", "fromAmount": "10000", "toAmount": "100000000" }