Заявки — Справочник API
Покупка и просмотр аренды ресурсов. В v1 нет отмены единичного заказа: POST /v1/orders списывает средства синхронно, поэтому заказ никогда не зависает неоплаченным в очереди, а статус created практически ненаблюдаем. Ошибка 3002 order_not_cancellable относится к POST /v1/batches/{id}/cancel, где получатели, взятые в обработку, уже не могут быть отменены.
| Метод | Путь | Описание |
|---|---|---|
GET | /v1/orders | Список заказов |
POST | /v1/orders | Создание заказа |
GET | /v1/orders/{orderId} | Детали заказа |
POST | /v1/orders/{orderId}/reclaim | Досрочный отзыв ресурса до истечения срока |
Сгенерировано из openapi.yaml во время сборки. Базовый URL https://api.tenergy.me/v1 или https://api-nile.tenergy.me/v1 в сети Nile (Окружения). Каждый запрос ниже подписывается в соответствии с разделом Аутентификация, если в строке Аутентификация не указано иное.
Список заказов
GET /v1/orders · listOrders
Аутентификация: API-ключ (HMAC).
Сортировка от новых к старым. Фильтры объединяются по логическому AND.
Параметр format=csv возвращает text/csv со всеми подходящими заказами без разбивки на страницы (limit и cursor игнорируются) в потоковом режиме с тем же набором полей: одна колонка на каждое поле схемы Order, activation.* и failure.* развернуты, delegate_hashes разделены пробелами. Ячейки, начинающиеся со знаков =, +, -, @, табуляции или перевода строки, экранируются символом ' для защиты от выполнения формул в электронных таблицах.
Параметры
| Параметр | Где | Тип | Обязательный | Описание |
|---|---|---|---|---|
status | query | array of enum | Фильтр по статусам заказов (created, paid, allocating, delegated, confirmed, active, expired, reclaimed, failed, refunded). | |
resource | query | enum: energy, bandwidth, activation | ||
receiver | query | string | ||
client_order_id | query | string | Точное совпадение. Быстрый способ найти заказ после сетевого сбоя. | |
created_after | query | string (date-time) | ||
created_before | query | string (date-time) | ||
from | query | string (date-time) | Нижняя граница времени создания (включительно). | |
to | query | string (date-time) | Верхняя граница времени создания (исключительно). | |
format | query | enum: json, csv | ||
limit | query | integer | ||
cursor | query | string | Непрозрачный курсор из next_cursor предыдущего ответа. |
Ответы
| Статус | Значение |
|---|---|
200 | OK |
400 | Некорректный запрос — невалидный JSON, неизвестное поле или неверный тип. |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
429 | Слишком много запросов. |
500 | Ошибка на нашей стороне. |
Поля ответа
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
data | array of object (Order) | да | |
data[].id | string | да | |
data[].client_order_id | string | null | ||
data[].account_id | string | да | |
data[].batch_id | string | null | ID пакета, если заказ создан в рамках пакетной обработки. | |
data[].subscription_id | string | null | ID подписки, если заказ создан автопополнением. | |
data[].resource | enum: energy, bandwidth, activation | да | energy, bandwidth или activation. |
data[].amount | integer | null | Заказанный объем. | |
data[].delivered_amount | integer | null | Фактически доставленный объем энергии. | |
data[].partial | boolean | true, если часть ресурсов не удалось выделить и разница была пропорционально возвращена (refunded_amount_sun). Частичная доставка — это флаг, а не отдельный статус: заказ переходит в confirmed → active. | |
data[].tier | enum: 5m, 15m, 1h, 1d, 3d, 30d | null | ||
data[].duration_seconds | integer | null | Длительность аренды в секундах. | |
data[].receiver | string | да | TRON-адрес Base58Check (начинается с T, 34 символа). |
data[].source | enum: api, dashboard, transfer, bot, subscription, batch, proxy | Источник создания заказа. | |
data[].status | enum: created, paid, allocating, delegated, confirmed, active, expired, reclaimed, failed, refunded | да | Статус жизненного цикла заказа. |
data[].confirm_status | enum: unconfirmed, confirmed, confirm_failed | да | Статус подтверждения ончейн-транзакции в блоке. |
data[].price_sun_per_unit | integer | null | ||
data[].pay_amount_sun | integer (int64) | Списано за сам ресурс. | |
data[].activate_amount_sun | integer (int64) | Списано за активацию получателя (0, если адрес уже был активен). | |
data[].total_amount_sun | integer (int64) | да | Общая сумма списания в SUN. |
data[].refunded_amount_sun | integer (int64) | Сумма возврата в SUN (для failed, refunded или partial). | |
data[].delegate_hash | string | null | Хеш первой транзакции делегирования. | |
data[].delegate_hashes | array of string | Все транзакции делегирования для заказа. | |
data[].delegated_at | string (date-time) | null | ||
data[].reclaim_hash | string | null | Хеш транзакции досрочного отзыва ресурсов. | |
data[].reclaimed_at | string (date-time) | null | ||
data[].expires_at | string (date-time) | null | Время окончания аренды. | |
data[].activation | object | Информация об активации адреса. | |
data[].activation.performed | boolean | ||
data[].activation.hash | string | null | ||
data[].activation.amount_sun | integer (int64) | ||
data[].memo | string | null | Пользовательская заметка к заказу. | |
data[].created_at | string (date-time) | да | |
data[].updated_at | string (date-time) | ||
data[].failure | null | object | Информация об ошибке (только для failed). | |
data[].failure.code | integer | да | |
data[].failure.slug | string | да | |
data[].failure.message | string | да | |
data[].failure.at | string (date-time) | ||
next_cursor | string | null | да | Курсор для следующей страницы (null на последней). |
Создание заказа
POST /v1/orders · createOrder
Аутентификация: API-ключ (HMAC).
Покупает аренду ресурсов для одного получателя со списанием средств с баланса аккаунта.
Ответ не является распиской о доставке. Код 201 означает, что заказ принят, оплачен и передан поставщикам; поле status сообщает о текущем прогрессе. В стандартном случае доставка синхронна и в течение нескольких секунд возвращается заказ с заполненным delegate_hash — со статусом confirmed или active. Статусы confirmed и active равнозначны: в обоих ресурс уже находится на адресе получателя. Если поставщику требуется больше времени, вы получите статус allocating — опрашивайте GET /v1/orders/{id} или используйте вебхук order.confirmed.
Проверяйте флаг partial. Заказ, где часть объема не удалось выделить, возвращается как confirmed/active с флагом partial: true и возвратом разницы стоимости на баланс.
Идемпотентность. Всегда передавайте client_order_id. Повторный вызов с тем же ID возвращает существующий заказ с HTTP 200 без повторного списания средств. При таймауте сети повторите точно такой же запрос.
Защита цены. Передавайте quote_id (списание ровно по зафиксированной сумме) или max_price_sun (отклонение с 3006 price_above_limit, если цена выросла).
Параметры
| Параметр | Где | Тип | Обязательный | Описание |
|---|---|---|---|---|
Idempotency-Key | header | string | Клиентский ключ идемпотентности (8–128 символов). |
Тело запроса
JSON (OrderRequest), обязательно.
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
client_order_id | string | Ваш уникальный ID заказа в рамках аккаунта. Настоятельно рекомендуется для идемпотентности. | |
quote_id | string | ID котировки из POST /v1/quotes для фиксации цены. | |
resource | enum: energy, bandwidth, activation | ||
amount | integer | Объем ресурсов. | |
tier | enum: 5m, 15m, 1h, 1d, 3d, 30d | Срок аренды. | |
receiver | string | TRON-адрес Base58Check (начинается с T, 34 символа). | |
activate | boolean | Активировать адрес, если он еще не активен на чейне. При false неактивный адрес вернет ошибку 3004 receiver_not_activated без списаний. | |
max_price_sun | integer (int64) | Максимальная допустимая общая цена (в SUN). | |
memo | string | null | Текстовая заметка. |
Пример тела запроса из контракта (значения для иллюстрации):
{
"client_order_id": "acme-2026-09-11-000418",
"resource": "energy",
"amount": 65000,
"tier": "1h",
"receiver": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"activate": true
}
Ответы
| Статус | Значение |
|---|---|
200 | Заказ с таким client_order_id уже существует; возвращен оригинал без повторного списания. |
201 | Заказ создан и оплачен. |
400 | Некорректный запрос — невалидный JSON, неизвестное поле или неверный тип. |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
402 | Недостаточно средств на балансе. |
409 | Конфликт состояния объекта. |
422 | Синтаксически корректный запрос, но действие невозможно. |
429 | Слишком много запросов. |
500 | Ошибка на нашей стороне. |
503 | Временно недоступно (fail-secure: средства не списаны). |
Поля ответа (Order)
Те же поля, что в ответе GET /v1/orders.
Детали заказа
GET /v1/orders/{orderId} · getOrder
Аутентификация: API-ключ (HMAC).
Возвращает заказ с дополнительной детализацией: fills (распределение по уровням цен) и delegations (фактические транзакции на чейне с их tx id).
Параметры
| Параметр | Где | Тип | Обязательный | Описание |
|---|---|---|---|---|
orderId | path | string | да | ID заказа на платформе (ord_…) или ваш client_order_id с префиксом cid: (например, cid:acme-2026-09-11-000418). |
Ответы
| Статус | Значение |
|---|---|
200 | OK |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
404 | Объект не найден или принадлежит другому аккаунту. |
429 | Слишком много запросов. |
500 | Ошибка на нашей стороне. |
Поля ответа
Содержит все поля объекта Order, а также:
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
fills | array of object | да | Распределение покупки по классам книги заявок. |
fills[].class | enum: instant, market, deep | да | |
fills[].amount | integer | да | Объем, выкупленный в данном классе. |
fills[].price_sun | number | null | да | Цена за единицу. |
delegations | array of object | да | Фактические транзакции делегирования. |
delegations[].amount | integer | да | Доставленный объем. |
delegations[].tx_id | string | да | Хеш транзакции в сети TRON. |
Досрочный отзыв ресурса до истечения срока
POST /v1/orders/{orderId}/reclaim · reclaimOrder
Аутентификация: API-ключ (HMAC).
Досрочно отзывает делегирование ресурсов. Полезно, когда транзакция, ради которой арендовалась энергия, уже подтверждена в сети: энергия освобождается в общий пул.
Без возврата средств. Досрочный отзыв не возвращает оплату, а служит для освобождения складских запасов платформы крупными интеграторами.
Идемпотентно. Повторный вызов возвращает тот же reclaim_hash. Если аренда уже завершилась сама по истечении времени, эндпоинт также возвращает 200.
Заказы, исполненные сторонними поставщиками, не могут быть отозваны досрочно (возвращается 3008 reclaim_unavailable).
Параметры
| Параметр | Где | Тип | Обязательный | Описание |
|---|---|---|---|---|
orderId | path | string | да | |
Idempotency-Key | header | string | Ключ идемпотентности. |
Ответы
| Статус | Значение |
|---|---|
200 | Ресурс отозван (или уже был отозван). |
202 | Запрос на отзыв принят, но транзакция в сети еще не подтверждена. |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
404 | Объект не найден или принадлежит другому аккаунту. |
409 | Нечего отзывать (3007) или заказ выполнен сторонним поставщиком (3008). |
429 | Слишком много запросов. |
500 | Ошибка на нашей стороне. |
Поля ответа (Order)
Те же поля, что в объекте Order.
Пример ответа 200 из контракта (значения для иллюстрации):
{
"id": "ord_01J9Z5P8T3WQ",
"client_order_id": "acme-2026-09-11-000418",
"account_id": "acc_01J9Z4K2M7Q8",
"resource": "energy",
"amount": 65000,
"delivered_amount": 65000,
"partial": false,
"tier": "1h",
"duration_seconds": 3600,
"receiver": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"source": "api",
"status": "reclaimed",
"confirm_status": "confirmed",
"price_sun_per_unit": 20,
"pay_amount_sun": 1300000,
"activate_amount_sun": 0,
"total_amount_sun": 1300000,
"refunded_amount_sun": 0,
"delegate_hash": "a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90",
"delegate_hashes": ["a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90"],
"delegated_at": "2026-09-11T18:04:07.900Z",
"reclaim_hash": "51fa77da06e8fbebf504fbf088d1d9611059398d51fa77da06e8fbebf504fbf0",
"reclaimed_at": "2026-09-11T18:12:31.000Z",
"expires_at": "2026-09-11T19:04:07.900Z",
"activation": {"performed":false,"hash":null,"amount_sun":0},
"created_at": "2026-09-11T18:04:05.400Z",
"updated_at": "2026-09-11T18:12:31.000Z",
"failure": null
}