Цены — Справочник API
Таблица цен, котировки и предварительный расчет стоимости.
| Метод | Путь | Описание |
|---|---|---|
GET | /v1/prices | Текущая таблица цен |
GET | /v1/market | Публичная витрина рынка аренды энергии |
GET | /v1/market/history | История цен конкретного провайдера |
GET | /v1/orderbook | Книга заявок (ask ladder) по ресурсу и тарифу |
GET | /v1/estimate | Быстрый предварительный расчет стоимости |
POST | /v1/quotes | Создание фиксированной котировки |
GET | /v1/quotes/{quoteId} | Получение котировки |
Сгенерировано из openapi.yaml во время сборки. Базовый URL https://api.tenergy.me/v1 или https://api-nile.tenergy.me/v1 в сети Nile (Окружения). Каждый запрос ниже подписывается в соответствии с разделом Аутентификация, если в строке Аутентификация не указано иное.
Текущая таблица цен
GET /v1/prices · getPrices
Аутентификация: Публичный — учетные данные не требуются; запрос с API-ключом (HMAC) также принимается.
Все доступные для покупки ресурсы с ценами для каждого тарифа и объема. Цены меняются в зависимости от времени суток, поэтому ответ содержит окно актуальности (valid_until), текущий тарифный период и суточное расписание schedule с часовой ценой энергии для каждого периода.
Используйте этот эндпоинт для отображения тарифов. Чтобы зафиксировать цену для заказа, запросите котировку (POST /v1/quotes) — записи в таблице цен носят справочный характер и не являются обязывающими.
Публичный. Учетные данные не требуются; для анонимных вызовов действует лимит по IP. Подписанный запрос расходует лимит вызовов соответствующего ключа.
Параметры
| Параметр | Где | Тип | Обязательный | Описание |
|---|---|---|---|---|
resource | query | enum: energy, bandwidth, activation | Ограничить ответ определенным типом ресурса. |
Ответы
| Статус | Значение |
|---|---|
200 | OK |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
429 | Слишком много запросов. |
500 | Ошибка на нашей стороне. |
Поля ответа (PriceTable)
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
network | enum: mainnet, nile | да | |
as_of | string (date-time) | да | |
valid_until | string (date-time) | да | Время, до которого гарантированы указанные цены. После этого момента запросите таблицу заново. |
period | object | Действующий в данный момент тарифный период. Периоды настраиваются сервером. | |
period.id | string | ||
period.label | string | ||
period.start | string | HH:MM UTC | |
period.end | string | HH:MM UTC | |
schedule | array of object | Расписание всех тарифных периодов дня с ценой энергии на 1 час для каждого. | |
schedule[].id | string | да | |
schedule[].label | string | да | |
schedule[].start_utc_minute | integer | да | Начало периода (минуты от 00:00 UTC). |
schedule[].end_utc_minute | integer | да | Окончание периода (минуты от 00:00 UTC). |
schedule[].factor_bps | integer | да | Коэффициент времени суток в базисных пунктах (10 000 = ×1.00). |
schedule[].price_sun_per_unit | number | null | да | Цена энергии на 1 ч в SUN за единицу в этот период. null, если тариф не продается. |
available_energy | integer (int64) | Объем энергии, доступный для продажи прямо сейчас (глубина книги заявок для тарифа 1h). | |
delivered_today | integer (int64) | Объем энергии, доставленный по заказам бренда с 00:00 UTC сегодня. | |
payment_addresses | object | Адреса для прямой оплаты через «отправку TRX» без аккаунта. | |
available_bandwidth | integer (int64) | ||
items | array of object | да | |
items[].resource | enum: energy, bandwidth, activation | да | |
items[].tier | enum: 5m, 15m, 1h, 1d, 3d, 30d | да | Срок аренды. |
items[].price_sun_per_unit | integer | да | SUN за единицу ресурса на весь период тарифа. |
items[].min_amount | integer | да | |
items[].max_amount | integer | да | |
items[].volume_tiers | array of object | Скидки за объем. | |
items[].volume_tiers[].min_amount | integer | да | |
items[].volume_tiers[].price_sun_per_unit | integer | да | |
activation | object | Стоимость активации неактивного адреса. | |
activation.price_sun | integer (int64) | Сумма в SUN (1 TRX = 1 000 000 SUN). Всегда целое число. |
Пример ответа 200 из контракта (значения для иллюстрации):
{
"network": "mainnet",
"as_of": "2026-09-11T18:04:05.123Z",
"valid_until": "2026-09-11T18:09:05.123Z",
"period": {"id":"peak_late","label":"Late peak","start":"16:00","end":"00:00"},
"schedule": [
{
"id": "drop",
"label": "Drop",
"start_utc_minute": 0,
"end_utc_minute": 60,
"factor_bps": 13500,
"price_sun_per_unit": 27
},
{
"id": "off_peak",
"label": "Off-peak",
"start_utc_minute": 60,
"end_utc_minute": 540,
"factor_bps": 10000,
"price_sun_per_unit": 20
},
{
"id": "ramp_9",
"label": "Morning ramp",
"start_utc_minute": 540,
"end_utc_minute": 660,
"factor_bps": 11000,
"price_sun_per_unit": 22
},
{
"id": "ramp_11",
"label": "Midday ramp",
"start_utc_minute": 660,
"end_utc_minute": 720,
"factor_bps": 12000,
"price_sun_per_unit": 24
},
{
"id": "ramp_12",
"label": "Pre-peak ramp",
"start_utc_minute": 720,
"end_utc_minute": 840,
"factor_bps": 15000,
"price_sun_per_unit": 30
},
{
"id": "peak",
"label": "Peak",
"start_utc_minute": 840,
"end_utc_minute": 960,
"factor_bps": 17000,
"price_sun_per_unit": 34
},
{
"id": "peak_late",
"label": "Late peak",
"start_utc_minute": 960,
"end_utc_minute": 1440,
"factor_bps": 15000,
"price_sun_per_unit": 30
}
],
"available_energy": 412000000,
"delivered_today": 80600000,
"available_bandwidth": 1800000,
"items": [
{
"resource": "energy",
"tier": "1h",
"price_sun_per_unit": 30,
"min_amount": 32000,
"max_amount": 3000000,
"volume_tiers": []
}
],
"activation": {"price_sun":1200000}
}
Публичная витрина рынка аренды энергии
GET /v1/market · getMarket
Аутентификация: Публичный — учетные данные не требуются; запрос с API-ключом (HMAC) также принимается.
Последние собранные цены на энергию на 1 час и 1 день по публичным поставщикам (обновляется каждые 5 минут), плюс строка TEnergy. Сортировка по price_sun_1h по возрастанию. savings_pct = 1 − price / burn_sun; stale = данные старше 15 минут.
Ответы
| Статус | Значение |
|---|---|
200 | Таблица рынка. |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
429 | Слишком много запросов. |
500 | Ошибка на нашей стороне. |
Поля ответа (MarketBoard)
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
as_of | string (date-time) | да | |
burn_sun | number | да | Стоимость сжигания SUN за единицу энергии в сети без аренды (100). |
providers | array of object | да | |
providers[].slug | string | да | |
providers[].name | string | да | |
providers[].rank | integer | null | да | 1 = самая выгодная цена на 1 час; null при отсутствии цены. |
providers[].price_sun_1h | number | null | да | |
providers[].price_sun_1d | number | null | да | |
providers[].savings_pct | number | null | да | Экономия относительно сжигания TRX (в процентах с 2 знаками). |
providers[].available_energy | integer | null | да | |
providers[].total_energy | integer | null | да | |
providers[].kinds | array of enum: api, bot, pool, market, web | да | |
providers[].links | object | да | |
providers[].links.site | string | null | ||
providers[].links.telegram | string | null | ||
providers[].links.twitter | string | null | ||
providers[].links.github | string | null | ||
providers[].links.docs | string | null | ||
providers[].links.referral | string | null | ||
providers[].links.logo | string | null | ||
providers[].ts | string (date-time) | null | да | |
providers[].stale | boolean | да | |
summary | object | да | |
summary.avg_price_sun_1h | number | null | да | Средняя цена на 1 час среди актуальных предложений. |
summary.active_providers | integer | да |
История цен конкретного провайдера
GET /v1/market/history · getMarketHistory
Аутентификация: Публичный — учетные данные не требуются; запрос с API-ключом (HMAC) также принимается.
Точки исторических данных по поставщику (от старых к новым). Неизвестный slug возвращает пустой ряд.
Параметры
| Параметр | Где | Тип | Обязательный | Описание |
|---|---|---|---|---|
slug | query | string | да | |
hours | query | integer |
Ответы
| Статус | Значение |
|---|---|
200 | Временной ряд. |
400 | Некорректный запрос — невалидный JSON, неизвестное поле или неверный тип. |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
429 | Слишком много запросов. |
500 | Ошибка на нашей стороне. |
Поля ответа
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
slug | string | да | |
hours | integer | да | |
points | array of object | да | |
points[].ts | string (date-time) | да | |
points[].price_sun_1h | number | null | да | |
points[].price_sun_1d | number | null | да | |
points[].available_energy | integer | null | да |
Книга заявок (ask ladder) по ресурсу и тарифу
GET /v1/orderbook · getOrderBook
Аутентификация: Публичный — учетные данные не требуются.
Гарантированная поставка по ступенчатой цене. Платформа публикует лестницу уровней (объем @ цена, от дешевых к дорогим). Заказ последовательно заполняет уровни: первые единицы берутся с самого дешевого уровня, следующие — со следующего. Больший объем оплачивается по средневзвешенной цене. Дефицита нет: статус «распродано» исключен.
Классы исполнения:
| Класс | Источник |
|---|---|
instant | собственные резервы платформы, мгновенная доставка |
market | покупка на оптовом межбанковском рынке |
deep | ончейн-рынок, гарантированная доступность в любых объемах |
Параметры
| Параметр | Где | Тип | Обязательный | Описание |
|---|---|---|---|---|
resource | query | enum: energy, bandwidth | ||
tier | query | enum: 5m, 15m, 1h, 1d, 3d, 30d | ||
amount | query | integer | Рассчитать исполнение для указанного объема. |
Ответы
| Статус | Значение |
|---|---|
200 | OK |
429 | Слишком много запросов. |
500 | Ошибка на нашей стороне. |
Поля ответа (OrderBook)
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
resource | enum: energy, bandwidth | да | |
tier | enum: 5m, 15m, 1h, 1d, 3d, 30d | да | |
as_of | string (date-time) | да | |
valid_until | string (date-time) | да | |
floor_sun | number | да | Базовая минимальная цена. |
depth | integer | да | Доступная суммарная глубина предложений. |
levels | array of object (OrderBookLevel) | да | Уровни книги заявок. |
levels[].price_sun | number | да | |
levels[].amount | integer | да | |
levels[].class | enum: instant, market, deep | да | |
walk | object (OrderBookWalk) | null | Расчет заполнения (при передаче amount). | |
walk.amount | integer | да | |
walk.fills | array of object (OrderBookFill) | да | |
walk.fills[].price_sun | number | да | |
walk.fills[].amount | integer | да | |
walk.fills[].class | enum: instant, market, deep | да | |
walk.unit_price_sun | number | да | Средневзвешенная цена за единицу. |
walk.total_sun | integer (int64) | да | Итоговая сумма в SUN. |
walk.complete | boolean | да | |
walk.outstanding | integer | ||
cheaper_from | string (date-time) | null | Время начала следующего более дешевого периода. |
Пример ответа 200 из контракта (значения для иллюстрации):
{
"resource": "energy",
"tier": "1h",
"as_of": "2026-09-19T18:04:05.123Z",
"valid_until": "2026-09-19T18:04:08.123Z",
"floor_sun": 20,
"depth": 14200000,
"levels": [
{"price_sun":30,"amount":1200000,"class":"instant"},
{"price_sun":34,"amount":3000000,"class":"market"},
{"price_sun":58,"amount":10000000,"class":"deep"}
],
"walk": null,
"cheaper_from": "2026-09-20T01:00:00.000Z"
}
Быстрый предварительный расчет стоимости
GET /v1/estimate · estimateOrder
Аутентификация: Публичный — учетные данные не требуются; запрос с API-ключом (HMAC) также принимается.
Ориентировочная стоимость заказа прямо сейчас без создания объектов и резервирования цен. Легковесный запрос, безопасен для вызова на каждый ввод пользователя.
Расчет не является обязывающим. Для фиксации точной стоимости создайте котировку (POST /v1/quotes) и укажите quote_id при создании заказа.
Параметры
| Параметр | Где | Тип | Обязательный | Описание |
|---|---|---|---|---|
resource | query | enum: energy, bandwidth, activation | да | |
amount | query | integer (int64) | да | Объем единиц энергии или пропускной способности. |
tier | query | enum: 5m, 15m, 1h, 1d, 3d, 30d | да | |
receiver | query | string | Адрес получателя. Если передан, учитывает стоимость активации, если адрес еще не активен. |
Ответы
| Статус | Значение |
|---|---|
200 | OK |
400 | Некорректный запрос — невалидный JSON, неизвестное поле или неверный тип. |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
429 | Слишком много запросов. |
500 | Ошибка на нашей стороне. |
Поля ответа (Estimate)
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
resource | enum: energy, bandwidth, activation | да | |
amount | integer | да | |
tier | enum: 5m, 15m, 1h, 1d, 3d, 30d | да | |
receiver | string | null | ||
price_sun_per_unit | integer | да | |
energy_amount_sun | integer (int64) | Стоимость энергии без учета активации. | |
activate_amount_sun | integer (int64) | Стоимость активации (0, если адрес уже активен). | |
total_amount_sun | integer (int64) | да | Общая сумма в SUN (1 TRX = 1 000 000 SUN). Всегда целое число. |
receiver_activated | boolean | null | ||
as_of | string (date-time) | да |
Пример ответа 200 из контракта (значения для иллюстрации):
{
"resource": "energy",
"amount": 65000,
"tier": "1h",
"receiver": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"price_sun_per_unit": 20,
"energy_amount_sun": 1300000,
"activate_amount_sun": 0,
"total_amount_sun": 1300000,
"receiver_activated": true,
"as_of": "2026-09-11T18:04:05.123Z"
}
Создание фиксированной котировки
POST /v1/quotes · createQuote
Аутентификация: API-ключ (HMAC).
Фиксирует цену на короткий промежуток времени. Передайте полученный id в поле quote_id при создании заказа, и с вас будет списана точная сумма total_amount_sun, даже если за это время сменился тарифный период.
Котировка бронирует цену, но не резервирует объем. Если объем исчерпан до размещения заказа, заказ завершится с ошибкой 5001 insufficient_supply без списания средств.
Параметры
| Параметр | Где | Тип | Обязательный | Описание |
|---|---|---|---|---|
Idempotency-Key | header | string | Клиентский ключ идемпотентности (8–128 символов). |
Тело запроса
JSON (QuoteRequest), обязательно.
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
resource | enum: energy, bandwidth, activation | да | |
amount | integer | Объем (обязательно для energy и bandwidth). | |
tier | enum: 5m, 15m, 1h, 1d, 3d, 30d | да | |
receiver | string | TRON-адрес Base58Check (начинается с T, 34 символа). |
Пример тела запроса из контракта (значения для иллюстрации):
{"resource":"energy","amount":65000,"tier":"1h","receiver":"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"}
Ответы
| Статус | Значение |
|---|---|
201 | Котировка создана |
400 | Некорректный запрос — невалидный JSON, неизвестное поле или неверный тип. |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
422 | Синтаксически корректный запрос, но действие невозможно. |
429 | Слишком много запросов. |
500 | Ошибка на нашей стороне. |
Поля ответа (Quote)
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
id | string | да | |
resource | enum: energy, bandwidth, activation | да | |
amount | integer | ||
tier | enum: 5m, 15m, 1h, 1d, 3d, 30d | да | |
receiver | string | null | ||
price_sun_per_unit | integer | Округленная цена для старых клиентов. | |
unit_price_sun | number | Точная средневзвешенная цена (с точностью до 0.01 SUN). | |
fills | array of object (OrderBookFill) | Распределение по уровням книги заявок. | |
fills[].price_sun | number | да | |
fills[].amount | integer | да | |
fills[].class | enum: instant, market, deep | да | |
energy_amount_sun | integer (int64) | ||
activate_amount_sun | integer (int64) | ||
total_amount_sun | integer (int64) | да | Общая сумма в SUN (1 TRX = 1 000 000 SUN). Всегда целое число. |
created_at | string (date-time) | да | |
expires_at | string (date-time) | да | Время истечения котировки. Срок жизни TTL составляет 120 секунд. |
Пример ответа 201 из контракта (значения для иллюстрации):
{
"id": "qt_01J9Z5NB2K4R",
"resource": "energy",
"amount": 65000,
"tier": "1h",
"receiver": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"price_sun_per_unit": 20,
"energy_amount_sun": 1300000,
"activate_amount_sun": 0,
"total_amount_sun": 1300000,
"created_at": "2026-09-11T18:04:05.123Z",
"expires_at": "2026-09-11T18:06:05.123Z"
}
Получение котировки
GET /v1/quotes/{quoteId} · getQuote
Аутентификация: API-ключ (HMAC).
Возвращает котировку и проверяет, действительна ли она (expires_at в будущем).
Параметры
| Параметр | Где | Тип | Обязательный | Описание |
|---|---|---|---|---|
quoteId | path | string | да |
Ответы
| Статус | Значение |
|---|---|
200 | OK |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
404 | Объект не найден или принадлежит другому аккаунту. |
429 | Слишком много запросов. |
500 | Ошибка на нашей стороне. |
Поля ответа (Quote)
Те же поля, что в ответе POST /v1/quotes.