Аккаунт — Справочник API
Информация об аккаунте, баланс и депозитные адреса.
| Метод | Путь | Описание |
|---|---|---|
GET | /v1/account | Информация об аккаунте |
PATCH | /v1/account | Изменение отображаемого имени аккаунта |
GET | /v1/balance | Только балансы |
GET | /v1/deposit-addresses | Депозитные адреса аккаунта |
GET | /v1/ledger | Выписка по балансу аккаунта (журнал) |
GET | /v1/account/addresses | Адресная книга аккаунта |
POST | /v1/account/addresses | Сохранение адреса в книгу |
DELETE | /v1/account/addresses/{entryId} | Удаление адреса из книги |
GET | /v1/account/stats | Серверная аналитика по заказам |
Сгенерировано из openapi.yaml во время сборки. Базовый URL https://api.tenergy.me/v1 или https://api-nile.tenergy.me/v1 в сети Nile (Окружения). Каждый запрос ниже подписывается в соответствии с разделом Аутентификация, если в строке Аутентификация не указано иное.
Информация об аккаунте
GET /v1/account · getAccount
Аутентификация: API-ключ (HMAC) или bootstrap-токен.
Идентификатор, балансы, депозитные адреса, действующие лимиты и счетчики за все время.
Также доступен по bootstrap-токену (Authorization: Bearer abt_…), что позволяет в процессе регистрации ожидать первого подтвержденного депозита без API-ключа.
Ответы
| Статус | Значение |
|---|---|
200 | OK |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
429 | Слишком много запросов. |
500 | Ошибка на нашей стороне. |
Поля ответа (Account)
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
id | string | да | |
brand | string | да | Бренд, к которому относится аккаунт. Аккаунты не разделяются между брендами. |
network | enum: mainnet, nile | да | Сетевое окружение аккаунта. Аккаунт Nile является отдельным аккаунтом на хосте api-nile.<brand-domain>. |
owner_address | string | null | Адрес кошелька, чьей подписью челленджа был создан аккаунт (основа восстановления). | |
label | string | null | То же значение, что и display_name (для обратной совместимости). | |
display_name | string | null | Название аккаунта, заданное владельцем. При null интерфейс показывает сокращенный owner_address. | |
status | enum: unfunded, active, suspended, closed | да | |
balance_sun | integer (int64) | да | Сумма в SUN (1 TRX = 1 000 000 SUN). Всегда целое число. |
balance_usdt | integer (int64) | Баланс USDT в минимальных единицах токена (6 десятичных знаков). | |
reserved_sun | integer (int64) | Заблокировано под заказы в обработке. Недоступно для расходования. | |
deposit_addresses | array of object (DepositAddress) | да | |
deposit_addresses[].currency | enum: TRX, USDT | да | |
deposit_addresses[].address | string | да | TRON-адрес Base58Check (начинается с T, 34 символа). |
deposit_addresses[].memo | string | null | Всегда null с 2026-09-26: у каждого аккаунта свой персональный адрес. | |
deposit_addresses[].confirmations_required | integer | Количество подтверждений блоков до зачисления. | |
deposit_addresses[].contract | string | null | Контракт TRC-20 (только для строки USDT; null для TRX). | |
deposit_addresses[].rate_now | null | object | Только для строки USDT. Текущий курс SunSwap (или фиксированный) TRX к USDT до спреда, кэшируется на 60 с. | |
deposit_addresses[].rate_now.trx_per_usdt | string | да | |
deposit_addresses[].rate_now.source | enum: sunswap_v3, fixed_env | да | |
deposit_addresses[].rate_now.at | string (date-time) | да | |
deposit_addresses[].spread_bps | integer | null | Базисные пункты спреда (5 = 0,05%). | |
deposit_addresses[].min | string | null | Минимальный депозит в USDT для автоматического зачисления. | |
deposit_addresses[].max | string | null | Максимальный депозит в USDT для автоматического зачисления. | |
limits | object | ||
limits.max_order_energy | integer | ||
limits.max_batch_receivers | integer | ||
limits.orders_per_second | integer | ||
totals | object | Счетчики за все время существования аккаунта. | |
totals.deposited_sun | integer (int64) | Общая сумма депозитов в SUN. | |
totals.spent_sun | integer (int64) | Общая сумма расходов в SUN. | |
totals.refunded_sun | integer (int64) | Общая сумма возвратов в SUN. | |
totals.orders_created | integer | ||
totals.energy_delegated | integer (int64) | ||
created_at | string (date-time) | да |
Пример ответа 200 из контракта (значения для иллюстрации):
{
"id": "acc_01J9Z4K2M7Q8",
"brand": "tenergy.me",
"network": "mainnet",
"label": "Acme payments",
"status": "active",
"balance_sun": 1250400000,
"balance_usdt": 0,
"reserved_sun": 0,
"deposit_addresses": [{"currency":"TRX","address":"TDepositAddressExample1111111111111"}],
"limits": {"max_order_energy":3000000,"max_batch_receivers":100,"orders_per_second":30},
"totals": {
"deposited_sun": 5000000000,
"spent_sun": 3749600000,
"refunded_sun": 0,
"orders_created": 1842,
"energy_delegated": 119730000
},
"created_at": "2026-04-02T09:11:00.000Z"
}
Изменение отображаемого имени аккаунта
PATCH /v1/account · updateAccount
Аутентификация: Cookie сессии панели управления + X-CSRF-Token.
Название аккаунта, отображаемое во всех интерфейсах. Значение null сбрасывает его до сокращенного адреса владельца.
Операция сессии панели управления (роль владельца owner).
Тело запроса
JSON (AccountPatch), обязательно.
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
display_name | string | null | Название аккаунта (не пустое, без управляющих символов). null сбрасывает название. |
Ответы
| Статус | Значение |
|---|---|
200 | Обновлено |
400 | Некорректный запрос — невалидный JSON, неизвестное поле или неверный тип. |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
403 | Аутентифицирован, но данный ключ или сессия не имеют прав на это действие. |
422 | Синтаксически корректный запрос, но действие невозможно. |
500 | Ошибка на нашей стороне. |
Поля ответа (Account)
Те же поля, что в ответе GET /v1/account.
Только балансы
GET /v1/balance · getBalance
Аутентификация: API-ключ (HMAC).
Облегченный ответ для клиентов, опрашивающих баланс перед каждым заказом. Значительно дешевле по ресурсам, чем /account.
Ответы
| Статус | Значение |
|---|---|
200 | OK |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
429 | Слишком много запросов. |
500 | Ошибка на нашей стороне. |
Поля ответа (Balance)
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
balance_sun | integer (int64) | да | Общий баланс в SUN (1 TRX = 1 000 000 SUN). Всегда целое число. |
balance_usdt | integer (int64) | ||
reserved_sun | integer (int64) | Зарезервировано под выполняющиеся заказы. | |
available_sun | integer (int64) | да | balance_sun - reserved_sun. Доступно для новых заказов. |
as_of | string (date-time) | да |
Пример ответа 200 из контракта (значения для иллюстрации):
{
"balance_sun": 1250400000,
"balance_usdt": 0,
"reserved_sun": 0,
"available_sun": 1250400000,
"as_of": "2026-09-11T18:04:05.123Z"
}
Депозитные адреса аккаунта
GET /v1/deposit-addresses · listDepositAddresses
Аутентификация: API-ключ (HMAC).
Собственные депозитные адреса аккаунта: персональный TRON-адрес, принадлежащий исключительно этому аккаунту (memo не требуется, поле memo всегда null). Две строки с одним и тем же адресом: TRX и USDT (TRC-20), который конвертируется в TRX по текущему курсу rate_now за вычетом spread_bps.
Депозит зачисляется после заданного числа подтверждений сети (confirmations_required) и отправляет вебхук balance.credited.
Ответы
| Статус | Значение |
|---|---|
200 | OK |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
429 | Слишком много запросов. |
500 | Ошибка на нашей стороне. |
Поля ответа
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
data | array of object (DepositAddress) | да | |
data[].currency | enum: TRX, USDT | да | |
data[].address | string | да | TRON-адрес Base58Check (начинается с T, 34 символа). |
data[].memo | string | null | Всегда null. | |
data[].confirmations_required | integer | Число блоков подтверждения. | |
data[].contract | string | null | ||
data[].rate_now | null | object | ||
data[].rate_now.trx_per_usdt | string | да | |
data[].rate_now.source | enum: sunswap_v3, fixed_env | да | |
data[].rate_now.at | string (date-time) | да | |
data[].spread_bps | integer | null | ||
data[].min | string | null | ||
data[].max | string | null | ||
retired | array of object | Ранее использованные адреса аккаунта (новые сначала). | |
retired[].address | string | да | |
retired[].retired_at | string (date-time) | да | |
retired[].credited_until | string (date-time) | да | Срок, до которого переводы на старый адрес зачисляются автоматически. |
rotation | object | Правила ротации адреса через службу поддержки. | |
rotation.by | enum: support | да | |
rotation.min_interval_days | integer | да | |
rotation.max_per_window | integer | да | |
rotation.window_days | integer | да | |
rotation.retired_credit_days | integer | да |
Пример ответа 200 из контракта (значения для иллюстрации):
{
"data": [
{
"currency": "TRX",
"address": "TDepositAddressExample1111111111111",
"memo": null,
"confirmations_required": 19
}
],
"retired": [
{
"address": "TRetiredAddressExample111111111111",
"retired_at": "2026-09-20T10:00:00.000Z",
"credited_until": "2026-10-20T10:00:00.000Z"
}
],
"rotation": {
"by": "support",
"min_interval_days": 7,
"max_per_window": 3,
"window_days": 90,
"retired_credit_days": 30
}
}
Выписка по балансу аккаунта (журнал)
GET /v1/ledger · listLedger
Аутентификация: Cookie сессии панели управления + X-CSRF-Token.
Все операции, изменившие баланс аккаунта (новые сначала): депозиты, списания за заказы, возвраты и комиссии. amount_sun / amount_usdt отражают чистое изменение баланса (положительное при зачислении, отрицательное при списании).
Доступно только для сессии панели управления (роль viewer или выше).
Параметры
| Параметр | Где | Тип | Обязательный | Описание |
|---|---|---|---|---|
kind | query | enum: deposit, all | ||
limit | query | integer | ||
cursor | query | string |
Ответы
| Статус | Значение |
|---|---|
200 | OK |
400 | Некорректный запрос — невалидный JSON, неизвестное поле или неверный тип. |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
403 | Аутентифицирован, но не имеет доступа. |
500 | Ошибка на нашей стороне. |
Поля ответа
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
data | array of object (LedgerEntry) | да | |
data[].id | string | да | ID записи в журнале баланса. |
data[].kind | enum: deposit, order_charge, order_refund, referral_payout, subscription_fee, subscription_usage, reserve_fee, invoice, withdrawal, adjustment | да | |
data[].amount_sun | integer (int64) | да | Изменение баланса TRX в SUN (отрицательное при списании). |
data[].amount_usdt | integer (int64) | да | Изменение баланса USDT. |
data[].order_id | string | null | да | ID заказа, к которому относится списание или возврат. |
data[].deposit | null | object | да | Заполняется для kind = deposit. |
data[].deposit.txid | string | null | да | Хеш транзакции депозита. |
data[].deposit.sender | string | null | да | Адрес отправителя. |
data[].deposit.block_number | integer | null | да | |
data[].deposit.status | enum: credited, pending_rate, held_below_min, held_for_review | да | |
data[].deposit.confirmations_required | integer | да | |
data[].deposit.asset | enum: TRX, USDT | ||
data[].deposit.usdt_amount | string | null | ||
data[].deposit.rate | string | null | ||
data[].deposit.rate_source | string | null | ||
data[].deposit.spread_bps | integer | null | ||
data[].created_at | string (date-time) | да | |
next_cursor | string | null | да |
Пример ответа 200 из контракта (значения для иллюстрации):
{
"data": [
{
"id": "jrn_01K5Y8Q2V9M3ZP4T7R1A2B3C4D",
"kind": "order_charge",
"amount_sun": -3900000,
"amount_usdt": 0,
"order_id": "ord_01K5Y8Q2V9M3ZP4T7R1A2B3C4E",
"deposit": null,
"created_at": "2026-09-25T10:12:04.000Z"
},
{
"id": "jrn_01K5Y7A1B2C3D4E5F6G7H8J9K0",
"kind": "deposit",
"amount_sun": 50000000,
"amount_usdt": 0,
"order_id": null,
"deposit": {
"txid": "9f3c1e7a2b4d6f8091a3c5e7f9b1d3f5a7c9e1b3d5f7a9c1e3b5d7f9a1c3e5b7",
"sender": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"block_number": 61000123,
"status": "credited",
"confirmations_required": 19
},
"created_at": "2026-09-25T09:58:40.000Z"
}
],
"next_cursor": null
}
Адресная книга аккаунта
GET /v1/account/addresses · listAddressBook
Аутентификация: Cookie сессии панели управления + X-CSRF-Token.
Сохраненные адреса получателей (до 100 записей).
Доступно только для сессии панели управления (роль viewer или выше).
Ответы
| Статус | Значение |
|---|---|
200 | OK |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
403 | Аутентифицирован, но не имеет доступа. |
500 | Ошибка на нашей стороне. |
Поля ответа
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
data | array of object (AddressBookEntry) | да | |
data[].id | string | да | |
data[].label | string | да | |
data[].address | string | да | TRON-адрес Base58Check (начинается с T, 34 символа). |
data[].created_at | string (date-time) | да | |
data[].updated_at | string (date-time) | да | |
limit | integer | да | |
used | integer | да |
Пример ответа 200 из контракта (значения для иллюстрации):
{
"data": [
{
"id": "adr_01K5Y9B7C8D9E0F1G2H3J4K5M6",
"label": "Payouts hot wallet",
"address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"created_at": "2026-09-25T10:20:00.000Z",
"updated_at": "2026-09-25T10:20:00.000Z"
}
],
"limit": 100,
"used": 1
}
Сохранение адреса в книгу
POST /v1/account/addresses · saveAddressBookEntry
Аутентификация: Cookie сессии панели управления + X-CSRF-Token.
Добавляет адрес с указанной меткой. Адрес уникален в рамках аккаунта: повторное сохранение обновляет метку и не занимает новый слот.
Доступно только для сессии панели управления (роль editor или выше).
Тело запроса
JSON (AddressBookRequest), обязательно.
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
label | string | да | Название адреса (1–64 символа). |
address | string | да | TRON-адрес Base58Check (начинается с T, 34 символа). |
Ответы
| Статус | Значение |
|---|---|
200 | Адрес уже был сохранен; его метка обновлена. |
201 | Сохранен как новая запись. |
400 | Некорректный запрос — невалидный JSON, неизвестное поле или неверный тип. |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
403 | Аутентифицирован, но не имеет прав. |
409 | 3019 address_book_full — достигнут лимит записей адресной книги. |
500 | Ошибка на нашей стороне. |
Поля ответа (AddressBookEntry)
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
id | string | да | |
label | string | да | |
address | string | да | TRON-адрес Base58Check (начинается с T, 34 символа). |
created_at | string (date-time) | да | |
updated_at | string (date-time) | да |
Удаление адреса из книги
DELETE /v1/account/addresses/{entryId} · deleteAddressBookEntry
Аутентификация: Cookie сессии панели управления + X-CSRF-Token.
Немедленно освобождает слот в адресной книге. Требуется сессия с ролью editor.
Параметры
| Параметр | Где | Тип | Обязательный | Описание |
|---|---|---|---|---|
entryId | path | string | да |
Ответы
| Статус | Значение |
|---|---|
204 | Удален. Тело ответа пустое. |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
403 | Аутентифицирован, но не имеет прав. |
404 | Объект не найден или принадлежит другому аккаунту. |
500 | Ошибка на нашей стороне. |
Серверная аналитика по заказам
GET /v1/account/stats · getAccountStats
Аутентификация: API-ключ (HMAC) или cookie сессии панели управления + X-CSRF-Token.
Агрегированная статистика для графиков и экранов аналитики, рассчитанная на стороне сервера за временной диапазон [from, to):
| Поле | Что учитывается |
|---|---|
orders | все созданные заказы |
energy | объем энергии, фактически доставленный на чейн |
spent_sun | чистые расходы total_amount_sun − refunded_amount_sun (включая активации) |
avg_price_sun_per_65k | средневзвешенная цена энергии за 65k (в SUN) |
Хранение данных: 13 месяцев. Требуется scope orders.read или роль в панели viewer.
Параметры
| Параметр | Где | Тип | Обязательный | Описание |
|---|---|---|---|---|
from | query | string (date-time) | Начало периода. | |
to | query | string (date-time) | Конец периода. | |
bucket | query | enum: day | ||
utc_offset_minutes | query | integer | Смещение часового пояса пользователя в минутах от UTC. |
Ответы
| Статус | Значение |
|---|---|
200 | OK |
400 | Некорректный запрос — невалидный JSON, неизвестное поле или неверный тип. |
401 | Отсутствуют, некорректны или отклонены учетные данные. |
403 | Аутентифицирован, но данный ключ не имеет прав на это действие. |
429 | Слишком много запросов. |
500 | Ошибка на нашей стороне. |
Поля ответа (AccountStats)
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
from | string (date-time) | да | Фактически использованное начало интервала. |
to | string (date-time) | да | |
requested_from | string (date-time) | да | Запрошенное исходное начало интервала. |
clamped | boolean | да | true, если интервал был ограничен по окну хранения данных. |
retention_months | integer | да | |
bucket | enum: day | да | |
utc_offset_minutes | integer | да | |
totals | object | да | Суммарные значения за период. |
totals.orders | integer | да | |
totals.energy | integer | да | |
totals.spent_sun | integer (int64) | да | Сумма в SUN (1 TRX = 1 000 000 SUN). Всегда целое число. |
totals.avg_price_sun_per_65k | integer | null | да | |
series | array of object | да | Ряд данных по дням. |
series[].date | string (date) | да | |
series[].orders | integer | да | |
series[].energy | integer | да | |
series[].spent_sun | integer (int64) | да | Сумма в SUN (1 TRX = 1 000 000 SUN). Всегда целое число. |
weekday_hour | array of array of integer | да | Матрица активности: 7 дней (с понедельника) × 24 часа. |
top_receivers | array of object | да | Основные адреса-получатели ресурсов. |
top_receivers[].receiver | string | да | TRON-адрес Base58Check (начинается с T, 34 символа). |
top_receivers[].orders | integer | да | |
top_receivers[].energy | integer | да | |
top_receivers[].spent_sun | integer (int64) | да | Сумма в SUN (1 TRX = 1 000 000 SUN). Всегда целое число. |
Пример ответа 200 из контракта (значения для иллюстрации):
{
"from": "2026-09-23T00:00:00.000Z",
"to": "2026-09-25T00:00:00.000Z",
"requested_from": "2026-09-23T00:00:00.000Z",
"clamped": false,
"retention_months": 13,
"bucket": "day",
"utc_offset_minutes": 0,
"totals": {"orders":3,"energy":196000,"spent_sun":11760000,"avg_price_sun_per_65k":3900000},
"series": [
{"date":"2026-09-23","orders":1,"energy":65000,"spent_sun":3900000},
{"date":"2026-09-24","orders":2,"energy":131000,"spent_sun":7860000}
],
"weekday_hour": [[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0]],
"top_receivers": [
{
"receiver": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"orders": 2,
"energy": 131000,
"spent_sun": 7860000
}
]
}