wallet/freezebalance
curl --request POST \
--url https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalance \
--header 'Content-Type: application/json' \
--data '
{
"owner_address": "41608f8da72479edc7dd921e4c30bb7e7cddbe722e",
"frozen_balance": 1000000,
"frozen_duration": 3,
"resource": "BANDWIDTH",
"visible": false
}
'import requests
url = "https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalance"
payload = {
"owner_address": "41608f8da72479edc7dd921e4c30bb7e7cddbe722e",
"frozen_balance": 1000000,
"frozen_duration": 3,
"resource": "BANDWIDTH",
"visible": False
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
owner_address: '41608f8da72479edc7dd921e4c30bb7e7cddbe722e',
frozen_balance: 1000000,
frozen_duration: 3,
resource: 'BANDWIDTH',
visible: false
})
};
fetch('https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'owner_address' => '41608f8da72479edc7dd921e4c30bb7e7cddbe722e',
'frozen_balance' => 1000000,
'frozen_duration' => 3,
'resource' => 'BANDWIDTH',
'visible' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalance"
payload := strings.NewReader("{\n \"owner_address\": \"41608f8da72479edc7dd921e4c30bb7e7cddbe722e\",\n \"frozen_balance\": 1000000,\n \"frozen_duration\": 3,\n \"resource\": \"BANDWIDTH\",\n \"visible\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalance")
.header("Content-Type", "application/json")
.body("{\n \"owner_address\": \"41608f8da72479edc7dd921e4c30bb7e7cddbe722e\",\n \"frozen_balance\": 1000000,\n \"frozen_duration\": 3,\n \"resource\": \"BANDWIDTH\",\n \"visible\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"owner_address\": \"41608f8da72479edc7dd921e4c30bb7e7cddbe722e\",\n \"frozen_balance\": 1000000,\n \"frozen_duration\": 3,\n \"resource\": \"BANDWIDTH\",\n \"visible\": false\n}"
response = http.request(request)
puts response.read_body{
"visible": true,
"txID": "<string>",
"raw_data": {
"contract": "<array>",
"ref_block_bytes": "<string>",
"ref_block_hash": "<string>",
"expiration": 123,
"timestamp": 123
},
"raw_data_hex": "<string>"
}{
"Error": "class org.tron.core.exception.ContractValidateException : freeze v2 is open, old freeze is closed"
}TRON node API
wallet/freezebalance | TRON
deprecated
TRON API method that stakes TRX for bandwidth or energy resources (deprecated method). wallet/freezebalance on TRON via Chainstack.
POST
/
95e61622bf6a8af293978377718e3b77
/
wallet
/
freezebalance
wallet/freezebalance
curl --request POST \
--url https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalance \
--header 'Content-Type: application/json' \
--data '
{
"owner_address": "41608f8da72479edc7dd921e4c30bb7e7cddbe722e",
"frozen_balance": 1000000,
"frozen_duration": 3,
"resource": "BANDWIDTH",
"visible": false
}
'import requests
url = "https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalance"
payload = {
"owner_address": "41608f8da72479edc7dd921e4c30bb7e7cddbe722e",
"frozen_balance": 1000000,
"frozen_duration": 3,
"resource": "BANDWIDTH",
"visible": False
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
owner_address: '41608f8da72479edc7dd921e4c30bb7e7cddbe722e',
frozen_balance: 1000000,
frozen_duration: 3,
resource: 'BANDWIDTH',
visible: false
})
};
fetch('https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'owner_address' => '41608f8da72479edc7dd921e4c30bb7e7cddbe722e',
'frozen_balance' => 1000000,
'frozen_duration' => 3,
'resource' => 'BANDWIDTH',
'visible' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalance"
payload := strings.NewReader("{\n \"owner_address\": \"41608f8da72479edc7dd921e4c30bb7e7cddbe722e\",\n \"frozen_balance\": 1000000,\n \"frozen_duration\": 3,\n \"resource\": \"BANDWIDTH\",\n \"visible\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalance")
.header("Content-Type", "application/json")
.body("{\n \"owner_address\": \"41608f8da72479edc7dd921e4c30bb7e7cddbe722e\",\n \"frozen_balance\": 1000000,\n \"frozen_duration\": 3,\n \"resource\": \"BANDWIDTH\",\n \"visible\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"owner_address\": \"41608f8da72479edc7dd921e4c30bb7e7cddbe722e\",\n \"frozen_balance\": 1000000,\n \"frozen_duration\": 3,\n \"resource\": \"BANDWIDTH\",\n \"visible\": false\n}"
response = http.request(request)
puts response.read_body{
"visible": true,
"txID": "<string>",
"raw_data": {
"contract": "<array>",
"ref_block_bytes": "<string>",
"ref_block_hash": "<string>",
"expiration": 123,
"timestamp": 123
},
"raw_data_hex": "<string>"
}{
"Error": "class org.tron.core.exception.ContractValidateException : freeze v2 is open, old freeze is closed"
}TRON API method that stakes TRX for bandwidth or energy resources (deprecated method). This method freezes TRX tokens to obtain bandwidth or energy resources, which are required for transaction execution.
delegate resources to another account (receiver must differ from owner):
To unstake and withdraw in v2, use
legacy staking closed on mainnetThe legacy Use the current staking method instead:
wallet/freezebalance endpoint is disabled on mainnet and returns:{"Error":"class org.tron.core.exception.ContractValidateException : freeze v2 is open, old freeze is closed"}
wallet/freezebalancev2. The examples below are kept for historical context and may only work on specific networks where legacy staking is still enabled.Get your own node endpoint todayStart for free and get your app to production levels immediately. No credit card required.You can sign up with your GitHub, X, Google, or Microsoft account.
Parameters
owner_address— the address that owns the TRX to freeze (hex format)frozen_balance— the amount of TRX to freeze (in sun, where 1 TRX = 1,000,000 sun)frozen_duration— the duration to freeze for (minimum 3 days)resource— the resource type to obtain (“BANDWIDTH” or “ENERGY”)receiver_address— optional address to receive the resources. Omit this field to freeze for yourself. If provided, it must be different fromowner_address.visible— optional boolean to specify address format (default: false for hex format)
Response
visible— boolean indicating address format usedtxID— transaction ID hashraw_data— raw transaction data objectraw_data_hex— hexadecimal representation of raw transaction data
Use case
Thewallet/freezebalance method is used for:
- Staking TRX to obtain bandwidth for free transactions (legacy method).
- Freezing TRX to get energy for smart contract execution (legacy method).
- Supporting older applications that still use the original staking mechanism.
- Migrating from the deprecated staking system to the new
freezebalancev2method.
curl examples
freeze for yourself (omitreceiver_address):
Shell
curl --request POST \
--url 'https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalance' \
--header 'Content-Type: application/json' \
--data '{
"owner_address": "41608f8da72479edc7dd921e4c30bb7e7cddbe722e",
"frozen_balance": 1000000,
"frozen_duration": 3,
"resource": "BANDWIDTH",
"visible": false
}'
Shell
curl --request POST \
--url 'https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalance' \
--header 'Content-Type: application/json' \
--data '{
"owner_address": "41608f8da72479edc7dd921e4c30bb7e7cddbe722e",
"frozen_balance": 1000000,
"frozen_duration": 3,
"resource": "ENERGY",
"receiver_address": "41e9d79cc47518930bc322d9bf7cddd260a0260a8d",
"visible": false
}'
if you pass To freeze for yourself, simply omit
receiver_address equal to owner_address, the node returns:{
"Error": "class org.tron.core.exception.ContractValidateException : receiverAddress must not be the same as ownerAddress"
}
receiver_address. For new staking, prefer wallet/freezebalancev2.recommended v2 equivalent
Use the v2 staking endpoint (no duration or receiver in the body):Shell
curl --request POST \
--url 'https://tron-mainnet.core.chainstack.com/95e61622bf6a8af293978377718e3b77/wallet/freezebalancev2' \
--header 'Content-Type: application/json' \
--data '{
"owner_address": "41608f8da72479edc7dd921e4c30bb7e7cddbe722e",
"frozen_balance": 1000000,
"resource": "BANDWIDTH",
"visible": false
}'
wallet/unfreezebalancev2 followed by wallet/withdrawexpireunfreeze after the waiting period.Body
application/json
Available options:
BANDWIDTH, ENERGY Optional. Address to receive the resources. Omit to freeze for yourself. Must not equal owner_address.
Last modified on June 22, 2026
Was this page helpful?