Tron Resource Delegation

Overview

TRON transactions consume two resources: Bandwidth (for transaction data size) and Energy (for smart contract execution, such as USDT transfers). Energy is not provided for free — it must be obtained by staking TRX. Resource delegation lets you assign the Energy or Bandwidth you've acquired through staking to other TRON addresses, enabling fee-less transactions on those addresses without consuming the underlying TRX.

Key Mechanics

  • Delegation transfers usage rights only — the underlying frozen TRX stays in your wallet.
  • Minimum delegation: 1 TRX (1,000,000 SUN). No minimum for undelegation.
  • Undelegation is instant — unused delegated resources return to the delegator immediately. Used resources replenish gradually over 24 hours.
  • Unfreezing requires undelegation first — you cannot unfreeze TRX that backs active delegations.
  • TRX lockup period: 14 days after unstaking before TRX is spendable again.
  • Fallback: if an address has insufficient Energy or Bandwidth, the network burns TRX from its balance to cover transaction fees.
  • Account activation required: delegation to an inactive address fails — see Step 3 below.

Workflow

Step 1: Check available resources on the root address

Query the wallet root address to see its current Energy and Bandwidth balances and the maximum delegatable amounts.

Endpoint: Get account resources

export WALLET_ID="<YOUR_WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export ROOT_ADDRESS="<ROOT_ADDRESS>"

curl -X POST \
  https://app.bitgo-test.com/api/v2/ttrx/wallet/$WALLET_ID/getaccountresources \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{ "addresses": ["'"$ROOT_ADDRESS"'"] }'
{
  "resources": [
    {
      "address": "<ROOT_ADDRESS>",
      "freeBandwidthAvailable": 125,
      "stakedBandwidthAvailable": 5742,
      "energyAvailable": 703580,
      "energyUsed": 0,
      "maxResourcesDelegatable": {
        "bandwidthSun": "45018665297",
        "energySun": "50000000000"
      }
    }
  ]
}

maxResourcesDelegatable shows the maximum SUN value you can delegate for bandwidth and energy from this wallet. Do not exceed these limits when delegating.

Step 2: Find energy and bandwidth deficits on receive addresses

Pass the receive addresses using the token coin type (e.g., ttrx:usdt) to get the resource deficit for that specific asset transfer. The response tells you exactly how much to delegate to enable a fee-less transfer.

Endpoint: Get account resources

curl -X POST \
  https://app.bitgo-test.com/api/v2/ttrx:usdt/wallet/$WALLET_ID/getaccountresources \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{ "addresses": ["<RECEIVE_ADDRESS_1>", "<RECEIVE_ADDRESS_2>"] }'
{
  "resources": [
    {
      "address": "<RECEIVE_ADDRESS_1>",
      "freeBandwidthAvailable": 600,
      "energyAvailable": 0,
      "resourceDeficitForAssetTransfer": {
        "bandwidthDeficit": 0,
        "bandwidthSunRequired": "0",
        "energyDeficit": 28045,
        "energySunRequired": "1993019263"
      }
    }
  ]
}

Use energySunRequired and bandwidthSunRequired as the amount values in Step 4.

Step 3: Activate receive addresses (if needed)

🚧

Important

Delegating resources to an inactive address will fail with: Receiver address <address> is not activated, please fund it with 0.01 TRX

A TRON address is inactive until it receives its first on-chain TRX deposit. Activate it before delegating resource to it.

There are two ways to activate an address:

Option A — Transfer TRX

Send any amount of TRX to the address using sendmany. TRON deducts a 1 TRX account activation fee and a 0.1 TRX bandwidth fee on first funding.

For multisig wallets, a multisig transaction fee of 1 TRX also applies.

curl -X POST \
  http://localhost:3080/api/v2/ttrx/wallet/$WALLET_ID/sendmany \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "recipients": [{ "address": "<RECEIVE_ADDRESS>", "amount": "1" }],
    "walletPassphrase": "<WALLET_PASSPHRASE>",
    "otp": "<OTP>"
  }'

Option B — Create account transaction

Use type: "createAccount" with amount: "0" to activate the address without transferring a TRX balance. Use the native coin type (ttrx or trx), not a token.

curl -X POST \
  http://localhost:3080/api/v2/ttrx/wallet/$WALLET_ID/sendmany \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "type": "createAccount",
    "recipients": [{ "address": "<RECEIVE_ADDRESS>", "amount": "0" }],
    "walletPassphrase": "<WALLET_PASSPHRASE>",
    "otp": "<OTP>"
  }'

Step 4: Delegate resources

Use delegateResources to delegate Energy or Bandwidth from the wallet root address to one or more receive addresses. You can batch multiple delegations in a single request.

Endpoint: Delegate resources

curl -X POST \
  http://localhost:3080/api/v2/ttrx/wallet/$WALLET_ID/delegateResources \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "delegations": [
      {
        "receiverAddress": "<RECEIVE_ADDRESS_1>",
        "amount": "1993019263",
        "resource": "energy"
      }
    ],
    "walletPassphrase": "<WALLET_PASSPHRASE>"
  }'

Each successful delegation returns a signed transfer object. Delegation transactions appear on the activity page of the delegator wallet in the BitGo UI.

After delegating, re-querying getaccountresources on the receive address confirms the delegation: energyAvailable will equal the delegated amount and energyDeficit will be 0.

Step 5: View active delegations

Check all active delegations from the wallet, including the balance (SUN amount) delegated to each address. Use the balance value when undelegating.

Endpoint: Get resource delegations

curl -X GET \
  "https://app.bitgo-test.com/api/v2/ttrx/wallet/$WALLET_ID/resourcedelegations?resource=energy" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
{
  "address": "<ROOT_ADDRESS>",
  "coin": "ttrx",
  "delegations": {
    "outgoing": [
      {
        "ownerAddress": "<ROOT_ADDRESS>",
        "receiverAddress": "<RECEIVE_ADDRESS_1>",
        "resource": "ENERGY",
        "balance": "1993019263",
        "updatedAt": "2026-04-07T13:48:39.000Z"
      }
    ],
    "incoming": []
  }
}

Step 6: Undelegate when done

Reclaim delegated resources back to the root address. Resources return to the delegator immediately.

Endpoint: Undelegate resources

curl -X POST \
  https://app.bitgo-test.com/api/v2/ttrx/wallet/$WALLET_ID/undelegateResources \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "undelegations": [
      {
        "receiverAddress": "<RECEIVE_ADDRESS_1>",
        "amount": "1993019263",
        "resource": "energy"
      }
    ],
    "walletPassphrase": "<WALLET_PASSPHRASE>"
  }'
📘

Note

You must undelegate all resources before unfreezing the TRX that backs them.

API Reference

OperationEndpoint
Check Energy/Bandwidth balances and deficitGet account resources
View active delegationsGet resource delegations
Delegate Energy or BandwidthDelegate resources
Undelegate Energy or BandwidthUndelegate resources
List addresses sorted by token balanceList addresses by balance

See Also