Staking TRX
for 65k Energy 42 SUN

FeeSaver API

Buying energy and bandwidth, Smart Mode and auto orders.

Open as Markdown

The FeeSaver API: buying energy and bandwidth, Smart Mode and auto orders. All methods are GET requests that return JSON.

  • Base URL: https://api.feesaver.com
  • Protocol: HTTPS only, responses are JSON
  • Version: v1
  • Time zone: all timestamps are GMT+0
  • Errors: HTTP 403 with the err key in the JSON response (exceptions are noted under the methods)

Authentication

The API key is passed as the token query parameter with every request. You can get the key in the account settings of t.me/FeeSaver_bot. Treat the key as confidential and do not share it with third parties.

Base URL
https://api.feesaver.com
First request
curl -G "https://api.feesaver.com/balance" \
  --data-urlencode "token=YOUR_API_KEY"
Response
{
  "userName": "example_user",
  "full_name": "Example User",
  "balance": 17.67,
  "message": "Check Balance",
  "ip": "100.10.150.30"
}

Errors

Errors are returned with HTTP status 403 and the err key in the JSON response, together with message and ip. A few methods differ (see their notes), and some error texts are in Russian. The error cases of each method are listed under it.

Error response
{
  "message": "Check Balance",
  "ip": "100.10.150.30",
  "err": "No User by token"
}

Common

Top up balance

GET/refill

Account balance top-up: returns the deposit address and the balance.

Query parameters

tokenYour API key

Response fields

userNameTelegram username
full_nameName
balanceAccount balance in TRX
addressDeposit address
messageRequest type (Refill Balance)
ipIP address the request was made from

Errors

  • Invalid token No User by token :YOUR_API_KEY
GET /refill
curl -G "https://api.feesaver.com/refill" \
  --data-urlencode "token=YOUR_API_KEY"
GET /refill
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
})

const res = await fetch('https://api.feesaver.com/refill?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /refill
import requests

res = requests.get(
    "https://api.feesaver.com/refill",
    params={
        "token": "YOUR_API_KEY",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "userName": "example_user",
  "full_name": "Example User",
  "balance": 786.55,
  "address": "TD5h9FBtWhqjSoYWKaPe3QDUwf1234567",
  "message": "Refill Balance",
  "ip": "100.10.150.30"
}
Error: Invalid token
{
  "message": "Refill Balance",
  "ip": "100.10.150.30",
  "err": "No User by token :YOUR_API_KEY"
}

Get balance

GET/balance

Get the current account balance.

Query parameters

tokenYour API key

Response fields

userNameTelegram username
full_nameName
balanceAccount balance in TRX
messageRequest type (Check Balance)
ipIP address the request was made from

Errors

  • Invalid token No User by token :YOUR_API_KEY
GET /balance
curl -G "https://api.feesaver.com/balance" \
  --data-urlencode "token=YOUR_API_KEY"
GET /balance
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
})

const res = await fetch('https://api.feesaver.com/balance?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /balance
import requests

res = requests.get(
    "https://api.feesaver.com/balance",
    params={
        "token": "YOUR_API_KEY",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "userName": "example_user",
  "full_name": "Example User",
  "balance": 17.67,
  "message": "Check Balance",
  "ip": "100.10.150.30"
}
Error: Invalid token
{
  "message": "Check Balance",
  "ip": "100.10.150.30",
  "err": "No User by token :YOUR_API_KEY"
}

Estimate transfer cost

GET/precountCommission

Make a preliminary calculation of the energy order amount for performing a transaction to the address

Query parameters

tokenYour API key
targetAddress

Response fields

targetAddress
summaTotal order amount in TRX
messageRequest type (Precount Commission)
ipIP address the request was made from

Errors

  • Invalid token No User by token :YOUR_API_KEY
  • Invalid address UnCorrect address
GET /precountCommission
curl -G "https://api.feesaver.com/precountCommission" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "target=TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P"
GET /precountCommission
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  target: 'TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P',
})

const res = await fetch('https://api.feesaver.com/precountCommission?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /precountCommission
import requests

res = requests.get(
    "https://api.feesaver.com/precountCommission",
    params={
        "token": "YOUR_API_KEY",
        "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
  "summa": 3.01,
  "message": "Precount Commission",
  "ip": "100.10.150.30"
}
Error: Invalid token
{
  "message": "Precount Commission",
  "ip": "100.10.150.30",
  "err": "No User by token :YOUR_API_KEY"
}
1 more error case
Error: Invalid address
{
  "message": "Precount Commission",
  "ip": "100.10.150.30",
  "err": "UnCorrect address"
}

Activate address

GET/activate

Activate address

The success response is taken from the published documentation: it was not reproduced in testing because the test address was already activated.

Query parameters

tokenYour API key
addressAddress

Response fields

addressAddress
priceActivation price
balanceRemaining balance
messageRequest type (Activate Address)
ipIP address the request was made from

Errors

  • Invalid token No User by token :YOUR_API_KEY
  • Already activated Address is already activated
  • Invalid address format Invalid TRON address format. Address must start with 'T' and be 34 characters long.
GET /activate
curl -G "https://api.feesaver.com/activate" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "address=TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P"
GET /activate
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  address: 'TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P',
})

const res = await fetch('https://api.feesaver.com/activate?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /activate
import requests

res = requests.get(
    "https://api.feesaver.com/activate",
    params={
        "token": "YOUR_API_KEY",
        "address": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
    "address": "TKzYMXrddJpZcuqsbVqtsdfsdf38y4a",
    "price": 2,
    "balance": 174.30,
    "message": "Activate Address",
    "ip": "89.234.234.234"
}
Error: Invalid token
{
  "message": "Activate Address",
  "ip": "100.10.150.30",
  "err": "No User by token :YOUR_API_KEY"
}
2 more error cases
Error: Already activated
{
  "message": "Activate Address",
  "ip": "100.10.150.30",
  "err": "Address is already activated"
}
Error: Invalid address format
{
  "message": "Activate Address",
  "ip": "100.10.150.30",
  "err": "Invalid TRON address format. Address must start with 'T' and be 34 characters long."
}

Get prices

GET/prices

Get client prices

Query parameters

tokenYour API key

Response fields

energy, bandwidthPrices by duration (15m, 1h, 1d), each with price, volume, unit
smartModeSmart Mode price: price, volume, unit
activationPriceAddress activation price
messageRequest type (Get Prices)
ipIP address the request was made from
GET /prices
curl -G "https://api.feesaver.com/prices" \
  --data-urlencode "token=YOUR_API_KEY"
GET /prices
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
})

const res = await fetch('https://api.feesaver.com/prices?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /prices
import requests

res = requests.get(
    "https://api.feesaver.com/prices",
    params={
        "token": "YOUR_API_KEY",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "energy": {
    "15m": {
      "price": 1.5,
      "volume": 65000,
      "unit": "TRX"
    },
    "1h": {
      "price": 1.5,
      "volume": 65000,
      "unit": "TRX"
    },
    "1d": {
      "price": 5.2,
      "volume": 65000,
      "unit": "TRX"
    }
  },
  "bandwidth": {
    "15m": {
      "price": 0.4,
      "volume": 1000,
      "unit": "TRX"
    },
    "1h": {
      "price": 0.4,
      "volume": 1000,
      "unit": "TRX"
    },
    "1d": {
      "price": 0.63,
      "volume": 1000,
      "unit": "TRX"
    }
  },
  "smartMode": {
    "price": 3.21,
    "volume": 131000,
    "unit": "TRX"
  },
  "activationPrice": 1.2,
  "message": "Get Prices",
  "ip": "100.10.150.30"
}

Buy once energy

Estimate order

GET/precountOrder

Make a preliminary calculation of the order.

Query parameters

tokenYour API key
daysDuration: 15m, 1h, 1d
volumeEnergy volume minimum 32 000

Response fields

durationRental duration
volumeEnergy volume
pricePrice per energy unit in SUN
summaTotal amount in TRX
messageRequest type (Precount Order)
ipIP address the request was made from

Errors

  • Invalid token No User by token :YOUR_API_KEY
  • Invalid duration (this text is returned in Russian) ➖ Возможные варианты: 15m, 1h, 1d
  • Volume below the minimum Minimal volume 32000 energy
GET /precountOrder
curl -G "https://api.feesaver.com/precountOrder" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "days=15m" \
  --data-urlencode "volume=65000"
GET /precountOrder
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  days: '15m',
  volume: '65000',
})

const res = await fetch('https://api.feesaver.com/precountOrder?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /precountOrder
import requests

res = requests.get(
    "https://api.feesaver.com/precountOrder",
    params={
        "token": "YOUR_API_KEY",
        "days": "15m",
        "volume": "65000",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "duration": "1h",
  "volume": 65000,
  "price": 23,
  "summa": 1.5,
  "message": "Precount Order",
  "ip": "100.10.150.30"
}
Error: Invalid token
{
  "message": "Precount Order",
  "ip": "100.10.150.30",
  "err": "No User by token :YOUR_API_KEY"
}
2 more error cases
Error: Invalid duration (this text is returned in Russian)
{
  "message": "Precount Order",
  "ip": "100.10.150.30",
  "err": "➖ Возможные варианты: 15m, 1h, 1d"
}
Error: Volume below the minimum
{
  "message": "Precount Order",
  "ip": "100.10.150.30",
  "err": "Minimal volume 32000 energy"
}

Buy energy

GET/buyEnergy

Buy Energy

If the address is not activated, it is activated automatically and the activation fee is deducted from the balance (see activationPrice in Get prices). Activation is performed via a smart contract, so the address does not inherit AML tagging.

Order statuses:

  • Filledenergy has been fully delegated.
  • Createdthe order has been created, but the energy has not been delegated. The order is in the queue.
  • Reclaimedthe energy rental period has expired, and our service has returned the energy back.

Query parameters

tokenYour API key
daysDuration: 15m, 1h, 1d
volumeEnergy volume minimum 32 000
targetRecipient address

Response fields

daysRental duration
volumeEnergy volume
pricePrice per energy unit in SUN
summaTotal payment for the order in TRX
targetRecipient address
balanceRemaining balance
statusOrder status: Filled, Created, Reclaimed
order_idOrder identifier
activationPriceActivation fee, present when the address was activated by this order
txidTransaction hash, can be null if the energy was not delegated
messageRequest type (Buying Energy)
ipIP address the request was made from

Errors

  • Invalid token No User by token :YOUR_API_KEY
  • Invalid duration (this text is returned in Russian) ➖ Возможные варианты: 15m, 1h, 1d
  • Volume below the minimum Minimal volume 32000 energy
  • Invalid address UnCorrect address
GET /buyEnergy
curl -G "https://api.feesaver.com/buyEnergy" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "days=1h" \
  --data-urlencode "volume=65000" \
  --data-urlencode "target=TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P"
GET /buyEnergy
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  days: '1h',
  volume: '65000',
  target: 'TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P',
})

const res = await fetch('https://api.feesaver.com/buyEnergy?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /buyEnergy
import requests

res = requests.get(
    "https://api.feesaver.com/buyEnergy",
    params={
        "token": "YOUR_API_KEY",
        "days": "1h",
        "volume": "65000",
        "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "days": "15m",
  "volume": 32000,
  "price": 23,
  "summa": 0.74,
  "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
  "balance": 94.25,
  "status": "Filled",
  "order_id": 5345345343,
  "txid": "dc9ec5e5bc395320d298ef385e1200e22d15b2ee44ff97385dfde34123455273",
  "message": "Buying Energy",
  "ip": "100.10.150.30"
}
Error: Invalid token
{
  "message": "Buying Energy",
  "ip": "100.10.150.30",
  "err": "No User by token :YOUR_API_KEY"
}
3 more error cases
Error: Invalid duration (this text is returned in Russian)
{
  "message": "Buying Energy",
  "ip": "100.10.150.30",
  "err": "➖ Возможные варианты: 15m, 1h, 1d"
}
Error: Volume below the minimum
{
  "message": "Buying Energy",
  "ip": "100.10.150.30",
  "err": "Minimal volume 32000 energy"
}
Error: Invalid address
{
  "message": "Buying Energy",
  "ip": "100.10.150.30",
  "err": "UnCorrect address"
}

Order status

GET/status

Check Order Status

An unknown or foreign order_id returns HTTP 200 with the err key (Not your order_id).

Query parameters

tokenYour API Key
order_idId order

Response fields

durationRental duration
volumeEnergy volume
summaOrder amount in TRX
targetRecipient address
order_idOrder identifier
txidTransaction hash
statusOrder status: Filled, Created, Reclaimed
messageRequest type (Status order)
ipIP address the request was made from

Errors

  • Invalid token No User by token :YOUR_API_KEY
  • Unknown order_id (HTTP 200) Not your order_id
GET /status
curl -G "https://api.feesaver.com/status" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "order_id=6471634"
GET /status
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  order_id: '6471634',
})

const res = await fetch('https://api.feesaver.com/status?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /status
import requests

res = requests.get(
    "https://api.feesaver.com/status",
    params={
        "token": "YOUR_API_KEY",
        "order_id": "6471634",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "duration": "15m",
  "volume": 32000,
  "summa": 0.74,
  "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
  "order_id": 5345345343,
  "txid": "dc9ec5e5bc395320d298ef385e1200e22d15b2ee44ff97385dfde34123455273",
  "status": "Filled",
  "message": "Status order",
  "ip": "100.10.150.30"
}
Error: Invalid token
{
  "message": "Status order",
  "ip": "100.10.150.30",
  "err": "No User by token :YOUR_API_KEY"
}
1 more error case
Error: Unknown order_id (HTTP 200)
{
  "message": "Status order",
  "ip": "100.10.150.30",
  "err": "Not your order_id"
}

Combinate order

Create combined order

GET/combinateOrder

Combined Order

Orders for purchasing more than 1 million energy units must be placed as a combined order. After creating a combined order, the system automatically generates a group of energy purchase orders, each split into chunks of no more than 1 million units.

Examples:

  • 3,250,000 energy units – the system will create 3 orders of 1 million each and 1 order of 250,000.
  • 5,000,000 energy units – the system will create 5 orders of 1 million each.
  • 2,001,000 energy units – the system will create 2 orders of 1 million each.

Order statuses:

  • Createdthe combined order has been created
  • Processingthe combined order is being processed
  • Completedthe combined order has been completed

Query parameters

tokenYour API key
daysDuration: 15m, 1h, 1d
volumeEnergy volume minimum 1 000 000
targetRecipient address

Response fields

daysRental duration
volumeEnergy volume
pricePrice per energy unit in SUN
summaTotal amount in TRX
targetRecipient address
balanceRemaining balance
statusOrder status: Created, Processing, Completed
combinate_order_idCombined order identifier
messageRequest type (Combinate Order)
ipIP address the request was made from

Errors

  • Invalid token No User by token :YOUR_API_KEY
  • Invalid duration (this text is returned in Russian) ➖ Возможные варианты: 15m, 1h, 1d
  • Volume below the minimum Minimal volume 1000000 combinate order
  • Invalid address UnCorrect address
GET /combinateOrder
curl -G "https://api.feesaver.com/combinateOrder" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "days=1h" \
  --data-urlencode "volume=1250000" \
  --data-urlencode "target=TLsdfsdfsdk8uL6asXdCEjmdBL345SDsdf"
GET /combinateOrder
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  days: '1h',
  volume: '1250000',
  target: 'TLsdfsdfsdk8uL6asXdCEjmdBL345SDsdf',
})

const res = await fetch('https://api.feesaver.com/combinateOrder?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /combinateOrder
import requests

res = requests.get(
    "https://api.feesaver.com/combinateOrder",
    params={
        "token": "YOUR_API_KEY",
        "days": "1h",
        "volume": "1250000",
        "target": "TLsdfsdfsdk8uL6asXdCEjmdBL345SDsdf",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "days": "1h",
  "volume": 1250000,
  "price": 23,
  "summa": 28.75,
  "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
  "balance": 94.25,
  "status": "Created",
  "combinate_order_id": 71,
  "message": "Combinate Order",
  "ip": "100.10.150.30"
}
Error: Invalid token
{
  "message": "Combinate Order",
  "ip": "100.10.150.30",
  "err": "No User by token :YOUR_API_KEY"
}
3 more error cases
Error: Invalid duration (this text is returned in Russian)
{
  "message": "Combinate Order",
  "ip": "100.10.150.30",
  "err": "➖ Возможные варианты: 15m, 1h, 1d"
}
Error: Volume below the minimum
{
  "message": "Combinate Order",
  "ip": "100.10.150.30",
  "err": "Minimal volume 1000000 combinate order"
}
Error: Invalid address
{
  "message": "Combinate Order",
  "ip": "100.10.150.30",
  "err": "UnCorrect address"
}

Combined order status

GET/combinateOrder/status

Check the status of a combined order.

order.items contains the single orders the combined order was split into. A 1 250 000 order produced two items: 1 000 000 and 250 000.

Query parameters

tokenYour API key
order_idId order

Response fields

orderObject: id, duration, volume, summary (amount in TRX), target, status, items
order.itemsArray of single orders: id, volume, txId, status
messageRequest type (Status combinate order)
ipIP address the request was made from

Errors

  • Invalid token No User by token :YOUR_API_KEY
  • Unknown order_id (HTTP 200) Not your order_id
GET /combinateOrder/status
curl -G "https://api.feesaver.com/combinateOrder/status" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "order_id=7777"
GET /combinateOrder/status
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  order_id: '7777',
})

const res = await fetch('https://api.feesaver.com/combinateOrder/status?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /combinateOrder/status
import requests

res = requests.get(
    "https://api.feesaver.com/combinateOrder/status",
    params={
        "token": "YOUR_API_KEY",
        "order_id": "7777",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "order": {
    "id": 71,
    "duration": "1h",
    "volume": 1250000,
    "summary": 28.75,
    "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
    "status": "Created",
    "items": [
      {
        "id": 3791377,
        "volume": 1000000,
        "txId": "dc9ec5e5bc395320d298ef385e1200e22d15b2ee44ff97385dfde34123455273",
        "status": "Filled"
      },
      {
        "id": 3791378,
        "volume": 250000,
        "txId": "dc9ec5e5bc395320d298ef385e1200e22d15b2ee44ff97385dfde34123455273",
        "status": "Filled"
      }
    ]
  },
  "message": "Status combinate order",
  "ip": "100.10.150.30"
}
Error: Invalid token
{
  "message": "Status combinate order",
  "ip": "100.10.150.30",
  "err": "No User by token :YOUR_API_KEY"
}
1 more error case
Error: Unknown order_id (HTTP 200)
{
  "message": "Status combinate order",
  "ip": "100.10.150.30",
  "err": "Not your order_id"
}

Smart Mode

List addresses

GET/smart

Smart Mode addresses of the account.

Query parameters

tokenYour API key

Response fields

ordersArray: createdAt, address, status (Started or Stopped)
messageRequest type (GetSmartModeOrders)
ipIP address the request was made from
GET /smart
curl -G "https://api.feesaver.com/smart" \
  --data-urlencode "token=YOUR_API_KEY"
GET /smart
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
})

const res = await fetch('https://api.feesaver.com/smart?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /smart
import requests

res = requests.get(
    "https://api.feesaver.com/smart",
    params={
        "token": "YOUR_API_KEY",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "orders": [
    {
      "createdAt": "2026-01-04T08:26:27.025135",
      "address": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
      "status": "Stopped"
    }
  ],
  "message": "GetSmartModeOrders",
  "ip": "100.10.150.30"
}

Add address

GET/smart/add

Add an address to smart mode. IMPORTANT! If the address is already added to smart mode and not removed, or is in auto orders, you will get a 403 error.

Query parameters

tokenYour API key
targetAddress

Response fields

targetAddress
statusSmart Mode status
messageRequest type (AddSmartModeAddress)
ipIP address the request was made from

Errors

  • Invalid token No User by token :YOUR_API_KEY
  • Address already added AddressSmartModeAdded
GET /smart/add
curl -G "https://api.feesaver.com/smart/add" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "target=TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P"
GET /smart/add
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  target: 'TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P',
})

const res = await fetch('https://api.feesaver.com/smart/add?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /smart/add
import requests

res = requests.get(
    "https://api.feesaver.com/smart/add",
    params={
        "token": "YOUR_API_KEY",
        "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
  "status": "Started",
  "message": "AddSmartModeAddress",
  "ip": "100.10.150.30"
}
Error: Invalid token
{
  "message": "AddSmartModeAddress",
  "ip": "100.10.150.30",
  "err": "No User by token :YOUR_API_KEY"
}
1 more error case
Error: Address already added
{
  "message": "AddSmartModeAddress",
  "ip": "100.10.150.30",
  "err": "AddressSmartModeAdded"
}

Get address status

GET/smart/status

Get the smart mode status of an address

Query parameters

tokenYour API key
targetAddress

Response fields

targetAddress
statusSmart Mode status
messageRequest type (SmartModeStatus)
ipIP address the request was made from

Errors

  • Invalid token No User by token :YOUR_API_KEY
GET /smart/status
curl -G "https://api.feesaver.com/smart/status" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "target=TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P"
GET /smart/status
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  target: 'TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P',
})

const res = await fetch('https://api.feesaver.com/smart/status?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /smart/status
import requests

res = requests.get(
    "https://api.feesaver.com/smart/status",
    params={
        "token": "YOUR_API_KEY",
        "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
  "status": "Started",
  "message": "SmartModeStatus",
  "ip": "100.10.150.30"
}
Error: Invalid token
{
  "message": "SmartModeStatus",
  "ip": "100.10.150.30",
  "err": "No User by token :YOUR_API_KEY"
}

Start / stop address

GET/smart/status/change

Toggles the Smart Mode status of an address: Started becomes Stopped and back.

For an address that is not in Smart Mode the API returns HTTP 500 with {"message": "Address not found"} (no err key).

Query parameters

tokenYour API key
targetAddress

Response fields

targetAddress
statusSmart Mode status
messageRequest type (ChangeSmartModeStatus)
ipIP address the request was made from

Errors

  • Invalid address UnCorrect address
GET /smart/status/change
curl -G "https://api.feesaver.com/smart/status/change" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "target=TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P"
GET /smart/status/change
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  target: 'TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P',
})

const res = await fetch('https://api.feesaver.com/smart/status/change?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /smart/status/change
import requests

res = requests.get(
    "https://api.feesaver.com/smart/status/change",
    params={
        "token": "YOUR_API_KEY",
        "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response: Stopped
{
  "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
  "status": "Stopped",
  "message": "ChangeSmartModeStatus",
  "ip": "100.10.150.30"
}
Response: Started
{
  "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
  "status": "Started",
  "message": "ChangeSmartModeStatus",
  "ip": "100.10.150.30"
}
Error: Invalid address
{
  "message": "ChangeSmartModeStatus",
  "ip": "100.10.150.30",
  "err": "UnCorrect address"
}

Remove address

GET/smart/remove

Delete an address from smart mode

Query parameters

tokenYour API key
targetAddress

Response fields

targetAddress
statusSmart Mode status
messageRequest type (RemoveSmartModeAddress)
ipIP address the request was made from

Errors

  • Invalid token No User by token :YOUR_API_KEY
  • Address is not in Smart Mode ErrorAddAddressSmartMode
GET /smart/remove
curl -G "https://api.feesaver.com/smart/remove" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "target=TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P"
GET /smart/remove
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  target: 'TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P',
})

const res = await fetch('https://api.feesaver.com/smart/remove?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /smart/remove
import requests

res = requests.get(
    "https://api.feesaver.com/smart/remove",
    params={
        "token": "YOUR_API_KEY",
        "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
  "status": "Removed",
  "message": "RemoveSmartModeAddress",
  "ip": "100.10.150.30"
}
Error: Invalid token
{
  "message": "RemoveSmartModeAddress",
  "ip": "100.10.150.30",
  "err": "No User by token :YOUR_API_KEY"
}
1 more error case
Error: Address is not in Smart Mode
{
  "message": "RemoveSmartModeAddress",
  "ip": "100.10.150.30",
  "err": "ErrorAddAddressSmartMode"
}

Auto orders

List auto orders

GET/auto/orders

Get user auto orders (where NOT removed)

Query parameters

tokenYour API key

Response fields

ordersArray of active auto orders: orderId, target, minimal (auto-refill only), volume, duration, type (Refill or Renewal), status, createdAt, renewalAt, resourceType (ENERGY or BANDWIDTH)
messageRequest type (GetAutoOrders)
ipIP address the request was made from

Errors

  • Invalid token No User by token :YOUR_API_KEY
GET /auto/orders
curl -G "https://api.feesaver.com/auto/orders" \
  --data-urlencode "token=YOUR_API_KEY"
GET /auto/orders
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
})

const res = await fetch('https://api.feesaver.com/auto/orders?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /auto/orders
import requests

res = requests.get(
    "https://api.feesaver.com/auto/orders",
    params={
        "token": "YOUR_API_KEY",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "orders": [
    {
      "orderId": 593,
      "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
      "minimal": 65000,
      "volume": 65000,
      "duration": "1h",
      "type": "Refill",
      "status": "Started",
      "createdAt": "2026-10-28T10:38:22.455194",
      "renewalAt": "2026-10-28T11:38:22.455161",
      "resourceType": "ENERGY"
    }
  ],
  "message": "GetAutoOrders",
  "ip": "100.10.150.30"
}
Error: Invalid token
{
  "message": "GetAutoOrders",
  "ip": "100.10.150.30",
  "err": "No User by token :YOUR_API_KEY"
}

Add auto-refill

GET/auto/refill/add

Add an address to auto-refill.

Query parameters

tokenYour API key
targetAddress
daysDuration tested: `1h`
minimalMinimum threshold for adding energy
volumeEnergy addition amount minimum 65 000

Response fields

targetAddress
statusOrder status
idAuto order id (use it as orderId in start/stop and remove)
messageRequest type (AddAutoRefillAddress)
ipIP address the request was made from

Errors

  • Invalid token No User by token :YOUR_API_KEY
  • Address already has an auto order AddressAutoOrderAdded
  • Invalid address UnCorrect address
  • Volume below the minimum Minimal volume 65 000 energy
GET /auto/refill/add
curl -G "https://api.feesaver.com/auto/refill/add" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "target=TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P" \
  --data-urlencode "days=1h" \
  --data-urlencode "volume=65000" \
  --data-urlencode "minimal=65000"
GET /auto/refill/add
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  target: 'TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P',
  days: '1h',
  volume: '65000',
  minimal: '65000',
})

const res = await fetch('https://api.feesaver.com/auto/refill/add?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /auto/refill/add
import requests

res = requests.get(
    "https://api.feesaver.com/auto/refill/add",
    params={
        "token": "YOUR_API_KEY",
        "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
        "days": "1h",
        "volume": "65000",
        "minimal": "65000",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
  "status": "Started",
  "id": 593,
  "message": "AddAutoRefillAddress",
  "ip": "100.10.150.30"
}
Error: Invalid token
{
  "message": "AddAutoRefillAddress",
  "ip": "100.10.150.30",
  "err": "No User by token :YOUR_API_KEY"
}
3 more error cases
Error: Address already has an auto order
{
  "message": "AddAutoRefillAddress",
  "ip": "100.10.150.30",
  "err": "AddressAutoOrderAdded"
}
Error: Invalid address
{
  "message": "AddAutoRefillAddress",
  "ip": "100.10.150.30",
  "err": "UnCorrect address"
}
Error: Volume below the minimum
{
  "message": "AddAutoRefillAddress",
  "ip": "100.10.150.30",
  "err": "Minimal volume 65 000 energy"
}

Add energy auto-renewal

GET/auto/renewal/add

Add an address to the auto-renewal mode.

A 1-day delegation order is created and renewed each day for the chosen volume.

Query parameters

tokenYour API key
targetAddress
volumeEnergy volume minimum 32 000

Response fields

targetAddress
statusOrder status
idAuto order id (use it as orderId in start/stop and remove)
messageRequest type (AddAutoRenewalAddress)
ipIP address the request was made from

Errors

  • Invalid token No User by token :YOUR_API_KEY
  • Address already has an auto order AddressAutoOrderAdded
GET /auto/renewal/add
curl -G "https://api.feesaver.com/auto/renewal/add" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "target=TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P" \
  --data-urlencode "volume=65000"
GET /auto/renewal/add
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  target: 'TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P',
  volume: '65000',
})

const res = await fetch('https://api.feesaver.com/auto/renewal/add?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /auto/renewal/add
import requests

res = requests.get(
    "https://api.feesaver.com/auto/renewal/add",
    params={
        "token": "YOUR_API_KEY",
        "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
        "volume": "65000",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
  "status": "Started",
  "id": 594,
  "message": "AddAutoRenewalAddress",
  "ip": "100.10.150.30"
}
Error: Invalid token
{
  "message": "AddAutoRenewalAddress",
  "ip": "100.10.150.30",
  "err": "No User by token :YOUR_API_KEY"
}
1 more error case
Error: Address already has an auto order
{
  "message": "AddAutoRenewalAddress",
  "ip": "100.10.150.30",
  "err": "AddressAutoOrderAdded"
}

Add bandwidth auto-renewal

GET/auto/bw/renewal/add

Adds an address to bandwidth auto-renewal.

Query parameters

tokenYour API key
targetAddress
volumeBandwidth volume minimum 1 000

Response fields

targetAddress
statusOrder status
idAuto order id (use it as orderId in start/stop and remove)
messageRequest type (AddAutoBandwidthRenewalAddress)
ipIP address the request was made from

Errors

  • Address already has an auto order AddressAutoOrderAdded
  • Invalid address UnCorrect address
  • Volume below the minimum Minimal volume 1000 bandwidth
GET /auto/bw/renewal/add
curl -G "https://api.feesaver.com/auto/bw/renewal/add" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "target=TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P" \
  --data-urlencode "volume=65000"
GET /auto/bw/renewal/add
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  target: 'TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P',
  volume: '65000',
})

const res = await fetch('https://api.feesaver.com/auto/bw/renewal/add?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /auto/bw/renewal/add
import requests

res = requests.get(
    "https://api.feesaver.com/auto/bw/renewal/add",
    params={
        "token": "YOUR_API_KEY",
        "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
        "volume": "65000",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
  "status": "Started",
  "id": 595,
  "message": "AddAutoBandwidthRenewalAddress",
  "ip": "100.10.150.30"
}
Error: Address already has an auto order
{
  "message": "AddAutoBandwidthRenewalAddress",
  "ip": "100.10.150.30",
  "err": "AddressAutoOrderAdded"
}
2 more error cases
Error: Invalid address
{
  "message": "AddAutoBandwidthRenewalAddress",
  "ip": "100.10.150.30",
  "err": "UnCorrect address"
}
Error: Volume below the minimum
{
  "message": "AddAutoBandwidthRenewalAddress",
  "ip": "100.10.150.30",
  "err": "Minimal volume 1000 bandwidth"
}

Start / stop auto order

GET/auto/status/change

Toggles an auto order: Started becomes Stop and back.

Query parameters

tokenYour API key
orderIdId order

Response fields

statusStop or Started
idAuto order id
messageRequest type (ChangeAutoModeStatus)
ipIP address the request was made from

Errors

  • Order not found NotFoundOrder
GET /auto/status/change
curl -G "https://api.feesaver.com/auto/status/change" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "orderId=12345"
GET /auto/status/change
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  orderId: '12345',
})

const res = await fetch('https://api.feesaver.com/auto/status/change?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /auto/status/change
import requests

res = requests.get(
    "https://api.feesaver.com/auto/status/change",
    params={
        "token": "YOUR_API_KEY",
        "orderId": "12345",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response: Stop
{
  "status": "Stop",
  "id": 593,
  "message": "ChangeAutoModeStatus",
  "ip": "100.10.150.30"
}
Response: Started
{
  "status": "Started",
  "id": 593,
  "message": "ChangeAutoModeStatus",
  "ip": "100.10.150.30"
}
Error: Order not found
{
  "message": "ChangeAutoModeStatus",
  "ip": "100.10.150.30",
  "err": "NotFoundOrder"
}

Remove auto order

GET/auto/remove

Delete auto-order

Query parameters

tokenYour API key
orderIdId order

Response fields

statusRemoved
idAuto order id
messageRequest type (AutoModeAddressRemove)
ipIP address the request was made from

Errors

  • Order not found NotFoundOrder
GET /auto/remove
curl -G "https://api.feesaver.com/auto/remove" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "orderId=12345"
GET /auto/remove
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  orderId: '12345',
})

const res = await fetch('https://api.feesaver.com/auto/remove?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /auto/remove
import requests

res = requests.get(
    "https://api.feesaver.com/auto/remove",
    params={
        "token": "YOUR_API_KEY",
        "orderId": "12345",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "status": "Removed",
  "id": 593,
  "message": "AutoModeAddressRemove",
  "ip": "100.10.150.30"
}
Error: Order not found
{
  "message": "AutoModeAddressRemove",
  "ip": "100.10.150.30",
  "err": "NotFoundOrder"
}

Bandwidth

Buy bandwidth

GET/buyBw

Buy Bandwidth

If the address is not activated, it is activated automatically and the activation fee is deducted from the balance (see activationPrice in Get prices). Activation is performed via a smart contract, so the address does not inherit AML tagging.

Order statuses:

  • Filledbandwidth has been fully delegated.
  • Createdthe order has been created, but the bandwidth has not been delegated. The order is in the queue.
  • Reclaimedthe bandwidth rental period has expired, and our service has returned the bandwidth back.

Query parameters

tokenYour API key
daysDuration: 15m, 1h, 1d
volumeBandwidth volume minimum 1 000
targetRecipient address

Response fields

daysRental duration
volumeBandwidth volume
pricePrice in TRX per 1 000 bandwidth
summaTotal payment for the order in TRX
targetRecipient address
balanceRemaining balance
statusOrder status: Filled, Created, Reclaimed
order_idOrder identifier
activationPriceActivation fee, present when the address was activated by this order
txidTransaction hash, can be null if the bandwidth was not delegated
messageRequest type (Buying Bandwidth)
ipIP address the request was made from

Errors

  • Invalid token No User by token :YOUR_API_KEY
  • Invalid duration (this text is returned in Russian) ➖ Возможные варианты: 15m, 1h, 1d
  • Volume below the minimum Minimal volume 1000 bw
  • Invalid address UnCorrect address
GET /buyBw
curl -G "https://api.feesaver.com/buyBw" \
  --data-urlencode "token=YOUR_API_KEY" \
  --data-urlencode "days=15m" \
  --data-urlencode "volume=1000" \
  --data-urlencode "target=TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P"
GET /buyBw
const params = new URLSearchParams({
  token: 'YOUR_API_KEY',
  days: '15m',
  volume: '1000',
  target: 'TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P',
})

const res = await fetch('https://api.feesaver.com/buyBw?' + params)
const data = await res.json()
if (data.err) throw new Error(data.err)
console.log(data)
GET /buyBw
import requests

res = requests.get(
    "https://api.feesaver.com/buyBw",
    params={
        "token": "YOUR_API_KEY",
        "days": "15m",
        "volume": "1000",
        "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
    },
    timeout=30,
)
data = res.json()
if "err" in data:
    raise RuntimeError(data["err"])
print(data)
Response
{
  "days": "15m",
  "volume": 1000,
  "price": 0.4,
  "summa": 0.4,
  "target": "TT2ebtVjf7r9y75Dkbjqu4dfgdfD34P8P",
  "balance": 94.25,
  "status": "Filled",
  "order_id": 5345345344,
  "txid": "dc9ec5e5bc395320d298ef385e1200e22d15b2ee44ff97385dfde34123455273",
  "message": "Buying Bandwidth",
  "ip": "100.10.150.30"
}
Error: Invalid token
{
  "message": "Buying Bandwidth",
  "ip": "100.10.150.30",
  "err": "No User by token :YOUR_API_KEY"
}
3 more error cases
Error: Invalid duration (this text is returned in Russian)
{
  "message": "Buying Bandwidth",
  "ip": "100.10.150.30",
  "err": "➖ Возможные варианты: 15m, 1h, 1d"
}
Error: Volume below the minimum
{
  "message": "Buying Bandwidth",
  "ip": "100.10.150.30",
  "err": "Minimal volume 1000 bw"
}
Error: Invalid address
{
  "message": "Buying Bandwidth",
  "ip": "100.10.150.30",
  "err": "UnCorrect address"
}

22 methods. Questions or an IP to whitelist: @feesaver_support.