Меню документации

Аккаунт — Справочник 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-ключа.

Ответы

СтатусЗначение
200OK
401Отсутствуют, некорректны или отклонены учетные данные.
429Слишком много запросов.
500Ошибка на нашей стороне.

Поля ответа (Account)

ПолеТипОбязательноеОписание
idstringда
brandstringдаБренд, к которому относится аккаунт. Аккаунты не разделяются между брендами.
networkenum: mainnet, nileдаСетевое окружение аккаунта. Аккаунт Nile является отдельным аккаунтом на хосте api-nile.<brand-domain>.
owner_addressstring | nullАдрес кошелька, чьей подписью челленджа был создан аккаунт (основа восстановления).
labelstring | nullТо же значение, что и display_name (для обратной совместимости).
display_namestring | nullНазвание аккаунта, заданное владельцем. При null интерфейс показывает сокращенный owner_address.
statusenum: unfunded, active, suspended, closedда
balance_suninteger (int64)даСумма в SUN (1 TRX = 1 000 000 SUN). Всегда целое число.
balance_usdtinteger (int64)Баланс USDT в минимальных единицах токена (6 десятичных знаков).
reserved_suninteger (int64)Заблокировано под заказы в обработке. Недоступно для расходования.
deposit_addressesarray of object (DepositAddress)да
deposit_addresses[].currencyenum: TRX, USDTда
deposit_addresses[].addressstringдаTRON-адрес Base58Check (начинается с T, 34 символа).
deposit_addresses[].memostring | nullВсегда null с 2026-09-26: у каждого аккаунта свой персональный адрес.
deposit_addresses[].confirmations_requiredintegerКоличество подтверждений блоков до зачисления.
deposit_addresses[].contractstring | nullКонтракт TRC-20 (только для строки USDT; null для TRX).
deposit_addresses[].rate_nownull | objectТолько для строки USDT. Текущий курс SunSwap (или фиксированный) TRX к USDT до спреда, кэшируется на 60 с.
deposit_addresses[].rate_now.trx_per_usdtstringда
deposit_addresses[].rate_now.sourceenum: sunswap_v3, fixed_envда
deposit_addresses[].rate_now.atstring (date-time)да
deposit_addresses[].spread_bpsinteger | nullБазисные пункты спреда (5 = 0,05%).
deposit_addresses[].minstring | nullМинимальный депозит в USDT для автоматического зачисления.
deposit_addresses[].maxstring | nullМаксимальный депозит в USDT для автоматического зачисления.
limitsobject
limits.max_order_energyinteger
limits.max_batch_receiversinteger
limits.orders_per_secondinteger
totalsobjectСчетчики за все время существования аккаунта.
totals.deposited_suninteger (int64)Общая сумма депозитов в SUN.
totals.spent_suninteger (int64)Общая сумма расходов в SUN.
totals.refunded_suninteger (int64)Общая сумма возвратов в SUN.
totals.orders_createdinteger
totals.energy_delegatedinteger (int64)
created_atstring (date-time)да

Пример ответа 200 из контракта (значения для иллюстрации):

json
{
  "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_namestring | nullНазвание аккаунта (не пустое, без управляющих символов). null сбрасывает название.

Ответы

СтатусЗначение
200Обновлено
400Некорректный запрос — невалидный JSON, неизвестное поле или неверный тип.
401Отсутствуют, некорректны или отклонены учетные данные.
403Аутентифицирован, но данный ключ или сессия не имеют прав на это действие.
422Синтаксически корректный запрос, но действие невозможно.
500Ошибка на нашей стороне.

Поля ответа (Account)

Те же поля, что в ответе GET /v1/account.

Только балансы

GET /v1/balance · getBalance

Аутентификация: API-ключ (HMAC).

Облегченный ответ для клиентов, опрашивающих баланс перед каждым заказом. Значительно дешевле по ресурсам, чем /account.

Ответы

СтатусЗначение
200OK
401Отсутствуют, некорректны или отклонены учетные данные.
429Слишком много запросов.
500Ошибка на нашей стороне.

Поля ответа (Balance)

ПолеТипОбязательноеОписание
balance_suninteger (int64)даОбщий баланс в SUN (1 TRX = 1 000 000 SUN). Всегда целое число.
balance_usdtinteger (int64)
reserved_suninteger (int64)Зарезервировано под выполняющиеся заказы.
available_suninteger (int64)даbalance_sun - reserved_sun. Доступно для новых заказов.
as_ofstring (date-time)да

Пример ответа 200 из контракта (значения для иллюстрации):

json
{
  "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.

Ответы

СтатусЗначение
200OK
401Отсутствуют, некорректны или отклонены учетные данные.
429Слишком много запросов.
500Ошибка на нашей стороне.

Поля ответа

ПолеТипОбязательноеОписание
dataarray of object (DepositAddress)да
data[].currencyenum: TRX, USDTда
data[].addressstringдаTRON-адрес Base58Check (начинается с T, 34 символа).
data[].memostring | nullВсегда null.
data[].confirmations_requiredintegerЧисло блоков подтверждения.
data[].contractstring | null
data[].rate_nownull | object
data[].rate_now.trx_per_usdtstringда
data[].rate_now.sourceenum: sunswap_v3, fixed_envда
data[].rate_now.atstring (date-time)да
data[].spread_bpsinteger | null
data[].minstring | null
data[].maxstring | null
retiredarray of objectРанее использованные адреса аккаунта (новые сначала).
retired[].addressstringда
retired[].retired_atstring (date-time)да
retired[].credited_untilstring (date-time)даСрок, до которого переводы на старый адрес зачисляются автоматически.
rotationobjectПравила ротации адреса через службу поддержки.
rotation.byenum: supportда
rotation.min_interval_daysintegerда
rotation.max_per_windowintegerда
rotation.window_daysintegerда
rotation.retired_credit_daysintegerда

Пример ответа 200 из контракта (значения для иллюстрации):

json
{
  "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 или выше).

Параметры

ПараметрГдеТипОбязательныйОписание
kindqueryenum: deposit, all
limitqueryinteger
cursorquerystring

Ответы

СтатусЗначение
200OK
400Некорректный запрос — невалидный JSON, неизвестное поле или неверный тип.
401Отсутствуют, некорректны или отклонены учетные данные.
403Аутентифицирован, но не имеет доступа.
500Ошибка на нашей стороне.

Поля ответа

ПолеТипОбязательноеОписание
dataarray of object (LedgerEntry)да
data[].idstringдаID записи в журнале баланса.
data[].kindenum: deposit, order_charge, order_refund, referral_payout, subscription_fee, subscription_usage, reserve_fee, invoice, withdrawal, adjustmentда
data[].amount_suninteger (int64)даИзменение баланса TRX в SUN (отрицательное при списании).
data[].amount_usdtinteger (int64)даИзменение баланса USDT.
data[].order_idstring | nullдаID заказа, к которому относится списание или возврат.
data[].depositnull | objectдаЗаполняется для kind = deposit.
data[].deposit.txidstring | nullдаХеш транзакции депозита.
data[].deposit.senderstring | nullдаАдрес отправителя.
data[].deposit.block_numberinteger | nullда
data[].deposit.statusenum: credited, pending_rate, held_below_min, held_for_reviewда
data[].deposit.confirmations_requiredintegerда
data[].deposit.assetenum: TRX, USDT
data[].deposit.usdt_amountstring | null
data[].deposit.ratestring | null
data[].deposit.rate_sourcestring | null
data[].deposit.spread_bpsinteger | null
data[].created_atstring (date-time)да
next_cursorstring | nullда

Пример ответа 200 из контракта (значения для иллюстрации):

json
{
  "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 или выше).

Ответы

СтатусЗначение
200OK
401Отсутствуют, некорректны или отклонены учетные данные.
403Аутентифицирован, но не имеет доступа.
500Ошибка на нашей стороне.

Поля ответа

ПолеТипОбязательноеОписание
dataarray of object (AddressBookEntry)да
data[].idstringда
data[].labelstringда
data[].addressstringдаTRON-адрес Base58Check (начинается с T, 34 символа).
data[].created_atstring (date-time)да
data[].updated_atstring (date-time)да
limitintegerда
usedintegerда

Пример ответа 200 из контракта (значения для иллюстрации):

json
{
  "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), обязательно.

ПолеТипОбязательноеОписание
labelstringдаНазвание адреса (1–64 символа).
addressstringдаTRON-адрес Base58Check (начинается с T, 34 символа).

Ответы

СтатусЗначение
200Адрес уже был сохранен; его метка обновлена.
201Сохранен как новая запись.
400Некорректный запрос — невалидный JSON, неизвестное поле или неверный тип.
401Отсутствуют, некорректны или отклонены учетные данные.
403Аутентифицирован, но не имеет прав.
4093019 address_book_full — достигнут лимит записей адресной книги.
500Ошибка на нашей стороне.

Поля ответа (AddressBookEntry)

ПолеТипОбязательноеОписание
idstringда
labelstringда
addressstringдаTRON-адрес Base58Check (начинается с T, 34 символа).
created_atstring (date-time)да
updated_atstring (date-time)да

Удаление адреса из книги

DELETE /v1/account/addresses/{entryId} · deleteAddressBookEntry

Аутентификация: Cookie сессии панели управления + X-CSRF-Token.

Немедленно освобождает слот в адресной книге. Требуется сессия с ролью editor.

Параметры

ПараметрГдеТипОбязательныйОписание
entryIdpathstringда

Ответы

СтатусЗначение
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.

Параметры

ПараметрГдеТипОбязательныйОписание
fromquerystring (date-time)Начало периода.
toquerystring (date-time)Конец периода.
bucketqueryenum: day
utc_offset_minutesqueryintegerСмещение часового пояса пользователя в минутах от UTC.

Ответы

СтатусЗначение
200OK
400Некорректный запрос — невалидный JSON, неизвестное поле или неверный тип.
401Отсутствуют, некорректны или отклонены учетные данные.
403Аутентифицирован, но данный ключ не имеет прав на это действие.
429Слишком много запросов.
500Ошибка на нашей стороне.

Поля ответа (AccountStats)

ПолеТипОбязательноеОписание
fromstring (date-time)даФактически использованное начало интервала.
tostring (date-time)да
requested_fromstring (date-time)даЗапрошенное исходное начало интервала.
clampedbooleanдаtrue, если интервал был ограничен по окну хранения данных.
retention_monthsintegerда
bucketenum: dayда
utc_offset_minutesintegerда
totalsobjectдаСуммарные значения за период.
totals.ordersintegerда
totals.energyintegerда
totals.spent_suninteger (int64)даСумма в SUN (1 TRX = 1 000 000 SUN). Всегда целое число.
totals.avg_price_sun_per_65kinteger | nullда
seriesarray of objectдаРяд данных по дням.
series[].datestring (date)да
series[].ordersintegerда
series[].energyintegerда
series[].spent_suninteger (int64)даСумма в SUN (1 TRX = 1 000 000 SUN). Всегда целое число.
weekday_hourarray of array of integerдаМатрица активности: 7 дней (с понедельника) × 24 часа.
top_receiversarray of objectдаОсновные адреса-получатели ресурсов.
top_receivers[].receiverstringдаTRON-адрес Base58Check (начинается с T, 34 символа).
top_receivers[].ordersintegerда
top_receivers[].energyintegerда
top_receivers[].spent_suninteger (int64)даСумма в SUN (1 TRX = 1 000 000 SUN). Всегда целое число.

Пример ответа 200 из контракта (значения для иллюстрации):

json
{
  "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
    }
  ]
}

    ↑ ↓ — выбрать · Enter — открыть · Esc — закрыть