Заказ энергии TRON через API: порядок запросов, подпись и лимиты
Как встроить заказ энергии TRON в выплаты USDT: цена, заказ, статус, перевод. Методы API UsdtPull, подпись запросов HMAC, лимиты и бюджет запросов.
- Рубрика
- Для бизнеса
- Опубликовано
- Чтение
- 7 мин

Заказ энергии через API нужен, чтобы ваша система сама привозила энергию на адрес выплат прямо перед переводом USDT, и сеть тратила её вместо сжигания TRX. Порядок такой: узнать цену, создать заказ на нужный объём, дождаться, когда энергия придёт на адрес, затем подписать и отправить перевод как обычно. Ниже этот порядок разложен по методам, которые описаны в документации API UsdtPull на 13 октября 2026 года.
Что умеет API целиком, от энергии до AML-проверок и TRON-ноды, описано на странице API для бизнеса. Здесь только про заказ энергии из вашего кода.
Что делает API и к чему не имеет доступа
Для заказа энергии нужен только адрес в сети TRON. UsdtPull делегирует энергию на этот адрес на срок аренды, после срока энергия возвращается сама. Перевод USDT по-прежнему создаёт и подписывает ваша система своим ключом. API не видит приватные ключи и seed-фразы и не может вывести средства с адреса.
Иначе говоря, ключ API тратит баланс в сервисе на заказы, но не управляет вашими кошельками выплат. Каждое делегирование это операция в блокчейне, её видно в обозревателе TronScan.
Одно правило сети стоит помнить заранее: энергию можно делегировать только на адрес, который уже существует в сети. Код java-tron отклоняет делегирование на неактивированный аккаунт, поэтому совсем новому адресу сначала нужен входящий перевод TRX. Подробнее в статье об активации кошелька TRON.
Какие методы понадобятся
Документация API разбита по услугам. Для заказа энергии хватит этих методов:
| Задача | Метод | Главные поля |
|---|---|---|
| Посмотреть доступные тарифы на энергию | GET /v1/energy/tariffs/for-user |
energyVolume, duration, priceTrx |
| Узнать цену без заказа | GET /v1/energy/orders/quote |
priceTrx, markupSun, minVolume, maxVolume |
| Заказать готовый тариф | POST /v1/energy/orders/preset |
tariffId, toAddress, currency |
| Заказать произвольный объём | POST /v1/energy/orders/custom |
volume, toAddress, currency |
| Список заказов и их статусы | GET /v1/energy/orders/for-user |
StatusType, PageNumber, PageSize |
| Баланс в сервисе | GET /v1/crypto/account/balance |
balance, availableBalance |
Несколько деталей из той же документации, от которых зависит интеграция:
- Срок аренды. У поля duration в документации одно значение,
Hour1. Рассчитывайте каждый заказ так, чтобы переводы под него ушли в течение этого часа. - Списание. Заказ списывается с вашего баланса в сервисе, валюту выбирает поле
currency. - Статусы заказа. В документации перечислены Created, Delegating, Delegated, Confirmed, Failed и Expired. Метода «получить один заказ по номеру» нет, поэтому заказы отслеживают через список.
Кроме энергии, в документации есть постоянная энергия на адресе (подписки с ценой за сутки и историей пополнений), заказ bandwidth, AML-проверка, трекинг кошельков, проверка заморозки USDT, криптоэквайринг и подписка на TRON-ноду. Ключ API создаётся в сервисе.
Как подписывать запросы
Каждый запрос несёт четыре заголовка: X-Api-Key, X-Timestamp, X-Nonce и X-Signature. Подпись считается как HMAC-SHA256 от пяти строк, соединённых переводом строки: метка времени, nonce, HTTP-метод, путь вместе со строкой запроса и тело запроса ровно в том виде, в каком оно уходит. Результат кодируется в Base64.
Ограничения из документации:
- метка времени должна отличаться от времени сервера не больше чем на 2 минуты;
- один nonce нельзя повторить в течение 5 минут;
- ключ привязан к IP-адресу, для которого выпущен;
- с одного ключа можно отправить 10 запросов в секунду или 300 в минуту, сверх этого API отвечает кодом 429 с заголовком Retry-After.
Так подпись выглядит в Node.js. Это условный пример, точный формат описан в документации:
// условный пример, точный формат в документации
import crypto from 'node:crypto';
function signedHeaders(method, pathWithQuery, body, apiKey, secret) {
const timestamp = Math.floor(Date.now() / 1000).toString();
const nonce = crypto.randomUUID();
const payload = [timestamp, nonce, method, pathWithQuery, body].join('\n');
const signature = crypto.createHmac('sha256', secret).update(payload, 'utf8').digest('base64');
return { 'X-Api-Key': apiKey, 'X-Timestamp': timestamp, 'X-Nonce': nonce, 'X-Signature': signature };
}
Подписывайте ту строку тела, которую действительно отправляете. Если JSON сериализуется дважды, один лишний пробел ломает подпись, и сервер отклонит запрос.
Порядок заказа по шагам
- Проверьте получателя. Если на его адресе уже есть USDT, переводу нужно около 65 000 энергии, если нет, около 131 000. 13 октября 2026 года мы разобрали блок 87067211 с 82 переводами USDT: 68 из них потратили ровно 64 285 энергии, 14 ровно 130 285. Почему так, рассказано в статье почему перевод на новый адрес дороже.
- Запросите цену. Вызовите метод quote с типом объёма Custom, объёмом и валютой. По полям
minVolumeиmaxVolumeиз ответа проверьте заказ до того, как его создать. - Создайте заказ. Передайте объём, адрес и валюту. В поле
toAddressуказывается адрес, который получит энергию, то есть ваш адрес выплат. - Дождитесь делегирования. Читайте список заказов, пока ваш заказ не перейдёт в Delegated или Confirmed. Документация называет статусы, но не расписывает каждый, поэтому на первых заказах сверяйте делегирование ещё и в TronScan. Если заказ ушёл в Failed, перевод не отправляйте: без энергии сеть сожжёт TRX.
- Отправьте перевод. Подпишите и отправьте перевод USDT из своего кода.
- Проверьте квитанцию. В карточке транзакции в TronScan видно, сколько энергии потрачено и сжигались ли TRX.
Тело заказа произвольного объёма короткое. Это тоже условный пример, точный формат в документации:
POST /v1/energy/orders/custom
Content-Type: application/json
{"volume": 65000, "toAddress": "TXa4...q9Rm", "currency": "Trx"}
Базового адреса в примере нет намеренно: берите его из документации.

Сколько экономит один заказ
Считаем по текущей ставке на 15.11.2026: 30 SUN за единицу энергии на 1 час. Ставка меняется, точная цена видна в сервисе до оплаты, ориентиры собраны на странице цен на энергию. Сжигание идёт по цене сети 100 SUN за единицу на 13.10.2026 (параметры сети в TronScan).
| Перевод | Энергия (замер) | Сожжёт сеть без энергии | Аренда по текущей ставке |
|---|---|---|---|
| У получателя есть USDT | 64 285 | 6,43 TRX | 1,93 TRX |
| У получателя нет USDT | 130 285 | 13,03 TRX | 3,91 TRX |
Формула одна для любой ставки: TRX = энергия × ставка в SUN / 1 000 000. Коэффициент динамической энергии контракта USDT на 13.10.2026 равен 34 000, это максимум сети. При нынешних параметрах расход на перевод находится на верхней границе динамической модели. Минимальный заказ в сервисе 65 000 энергии, ровно на один обычный перевод.
Бюджет запросов при большом потоке
Лимит запросов легко упереться, если каждая выплата делает свои вызовы. Посчитайте запросы на одну выплату:
- в лоб: 1 запрос цены, 1 заказ и 1 проверка статуса, итого 3 запроса. При 300 запросах в минуту это не больше 100 выплат в минуту;
- с общей проверкой статусов: список заказов читается один раз за цикл сразу для всех ожидающих. Получается около 2 запросов на выплату (цена и заказ), то есть примерно 150 выплат в минуту;
- если ещё и не запрашивать цену для стандартных объёмов 65 000 и 131 000, которые вы уже проверили, выходит почти 1 запрос на выплату.
При ровном потоке выплат с одного адреса можно вовсе обойтись без заказа под каждый перевод: постоянная энергия на адресе пополняется после каждой транзакции. Как это устроено для обменников и платёжных сервисов, описано на странице для бизнеса, а модель расходов на 100-1 000 переводов в день есть в статье о расходах обменника на переводы USDT.

Что заложить в код с первого дня
- Держите TRX на bandwidth. Перевод USDT занимает около 345 единиц bandwidth. Бесплатно адрес получает 600 в сутки, поэтому загруженный адрес сжигает 1 000 SUN за единицу, около 0,35 TRX на перевод, если у него нет своего bandwidth. Подробности в статье о стоимости bandwidth.
- Считайте Failed сигналом «не отправлять». Повторите заказ или отложите выплату. Отправка без энергии обойдётся по полной цене сжигания.
- Задайте лимит комиссии. Если энергии не хватит, а лимит комиссии слишком низкий, перевод упадёт с ошибкой OUT_OF_ENERGY, разбор есть в статье об ошибке OUT OF ENERGY.
- Начните с одного небольшого заказа. Проверьте первые делегирования в TronScan и только потом увеличивайте поток.
Вопросы и ответы
Нужен ли API мой приватный ключ? Нет. Для заказа нужен только адрес, который получит энергию. Переводы USDT вы подписываете сами.
Можно ли заказать энергию на новый пустой адрес? Только после активации входящим переводом TRX. Сеть отклоняет делегирование на адрес, которого в ней ещё нет.
Сколько арендованная энергия лежит на адресе? В документации API указан один срок аренды, 1 час. После него энергия возвращается автоматически.
Что заказывать, если получатель может оказаться новым адресом? 131 000. Если перевод окажется обычным, остаток энергии пролежит на адресе до конца срока и может покрыть следующий перевод.