> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chainstack.com/llms.txt
> Use this file to discover all available pages before exploring further.

# wallet/unfreezebalance | TRON

> TRON API method that unstakes TRX previously frozen for bandwidth or energy resources (deprecated method). Chainstack TRON reference.

TRON API method that unstakes TRX previously frozen for bandwidth or energy resources (deprecated method). This method releases TRX tokens that were previously frozen, making them available for transfer after the lock period expires. This is the legacy unstaking mechanism; for the current staking model, use `unfreezebalancev2`.

<Warning>
  legacy unstake works only for legacy freezes

  On mainnet, new legacy freezes are disabled. You can only use `wallet/unfreezebalance` if your account still has legacy‑frozen balance. For v2 staking, use [`wallet/unfreezebalancev2`](/reference/tron-unfreezebalancev2).
</Warning>

## Parameters

* `owner_address` — the address that owns the frozen TRX to unfreeze (hex format)
* `resource` — the resource type to release ("BANDWIDTH" or "ENERGY")
* `receiver_address` — optional address that was receiving the resources. Omit to unfreeze to yourself. If provided, it must be different from `owner_address`.
* `visible` — optional boolean to specify address format (default: false for hex format)

## Response

* `visible` — boolean indicating address format used
* `txID` — transaction ID hash
* `raw_data` — raw transaction data object
* `raw_data_hex` — hexadecimal representation of raw transaction data

## Use case

The `wallet/unfreezebalance` method is used for:

* Unstaking TRX to make tokens transferable again (legacy method).
* Releasing bandwidth or energy resources that are no longer needed (legacy method).
* Supporting older applications that still use the original unstaking mechanism.
* Migrating from the deprecated unstaking system to the new `unfreezebalancev2` method.

## curl examples

unfreeze to yourself (omit `receiver_address`):

```shell Shell theme={"system"}
curl --request POST \
  --url 'https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/unfreezebalance' \
  --header 'Content-Type: application/json' \
  --data '{
    "owner_address": "41608f8da72479edc7dd921e4c30bb7e7cddbe722e",
    "resource": "BANDWIDTH",
    "visible": false
  }'
```

unfreeze delegated resources to another account (receiver must differ from owner):

```shell Shell theme={"system"}
curl --request POST \
  --url 'https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/unfreezebalance' \
  --header 'Content-Type: application/json' \
  --data '{
    "owner_address": "41608f8da72479edc7dd921e4c30bb7e7cddbe722e",
    "resource": "ENERGY",
    "receiver_address": "41e9d79cc47518930bc322d9bf7cddd260a0260a8d",
    "visible": false
  }'
```

<Info>
  if you pass `receiver_address` equal to `owner_address`, the node returns:

  ```json theme={"system"}
  {
    "Error": "class org.tron.core.exception.ContractValidateException : receiverAddress must not be the same as ownerAddress"
  }
  ```

  For the current staking model, use [`wallet/unfreezebalancev2`](/reference/tron-unfreezebalancev2). After the v2 waiting period ends, withdraw with [`wallet/withdrawexpireunfreeze`](/reference/tron-withdrawexpireunfreeze).
</Info>


## OpenAPI

````yaml openapi/tron_node_api/unfreezebalance.json post /95e61622bf6a8af293978377718e3b77/wallet/unfreezebalance
openapi: 3.0.0
info:
  title: wallet/unfreezebalance TRON API
  version: 1.0.0
  description: Unstake TRX from bandwidth or energy (deprecated method)
servers:
  - url: https://tron-mainnet.core.chainstack.com
security: []
paths:
  /95e61622bf6a8af293978377718e3b77/wallet/unfreezebalance:
    post:
      tags:
        - Resource Management
      summary: wallet/unfreezebalance
      operationId: unfreezeBalance
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - owner_address
                - resource
              properties:
                owner_address:
                  type: string
                  default: 41608f8da72479edc7dd921e4c30bb7e7cddbe722e
                resource:
                  type: string
                  enum:
                    - BANDWIDTH
                    - ENERGY
                  default: BANDWIDTH
                receiver_address:
                  type: string
                  description: >-
                    Optional. Address that was receiving the resources. Omit to
                    unfreeze to yourself. Must not equal `owner_address`.
                visible:
                  type: boolean
                  default: false
            example:
              owner_address: 41608f8da72479edc7dd921e4c30bb7e7cddbe722e
              resource: BANDWIDTH
              visible: false
      responses:
        '200':
          description: Unfreeze balance transaction
          content:
            application/json:
              schema:
                type: object
                properties:
                  visible:
                    type: boolean
                  txID:
                    type: string
                  raw_data:
                    type: object
                    properties:
                      contract:
                        type: array
                      ref_block_bytes:
                        type: string
                      ref_block_hash:
                        type: string
                      expiration:
                        type: integer
                      timestamp:
                        type: integer
                  raw_data_hex:
                    type: string
        '400':
          description: Validation error (bad receiver address)
          content:
            application/json:
              schema:
                type: object
                properties:
                  Error:
                    type: string
              example:
                Error: >-
                  class org.tron.core.exception.ContractValidateException :
                  receiverAddress must not be the same as ownerAddress
      deprecated: true

````