# Tron Resource Delegation

Source: https://developers.bitgo.com/docs/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](#step-3-activate-receive-addresses-if-needed) 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](/reference/v2walletgetaccountresources)

```shell
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"'"] }'
```
```json
{
  "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](/reference/v2walletgetaccountresources)

```shell
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>"] }'
```
```json
{
  "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.

```shell
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.

```shell
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](/reference/v2walletdelegateresourcesbuild)

```shell
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](/reference/v2walletgetresourcedelegations)

```shell
curl -X GET \
  "https://app.bitgo-test.com/api/v2/ttrx/wallet/$WALLET_ID/resourcedelegations?resource=energy" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
```
```json
{
  "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](/reference/v2walletundelegateresourcesbuild)

```shell
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

| Operation | Endpoint |
| --------- | -------- |
| Check Energy/Bandwidth balances and deficit | [Get account resources](/reference/v2walletgetaccountresources) |
| View active delegations | [Get resource delegations](/reference/v2walletgetresourcedelegations) |
| Delegate Energy or Bandwidth | [Delegate resources](/reference/v2walletdelegateresourcesbuild) |
| Undelegate Energy or Bandwidth | [Undelegate resources](/reference/v2walletundelegateresourcesbuild) |
| List addresses sorted by token balance | [List addresses by balance](/reference/v2walletaddressesbalances) |

## See Also

- [Tron](/docs/tron)
- [Stake Assets](/docs/stake-assets)
- [Staking Overview](/docs/stake-overview)
- [Consolidate Account Balance](/docs/wallets-consolidate)
