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)
ImportantDelegating 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>"
}'
NoteYou must undelegate all resources before unfreezing the TRX that backs them.
API Reference
| Operation | Endpoint |
|---|---|
| Check Energy/Bandwidth balances and deficit | Get account resources |
| View active delegations | Get resource delegations |
| Delegate Energy or Bandwidth | Delegate resources |
| Undelegate Energy or Bandwidth | Undelegate resources |
| List addresses sorted by token balance | List addresses by balance |
See Also
Updated about 5 hours ago