账户管理 — 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,Nile 测试网环境为 https://api-nile.tenergy.me/v1(详见环境说明)。下述每个请求均遵循身份鉴权规范进行签名,除非鉴权行另有说明。
获取账户详情与完整状态
GET /v1/account · getAccount
鉴权: API 密钥 (HMAC) 或引导令牌 (Bootstrap token)。
获取账户身份标识、可用余额、专属充值地址、当前生效配额与生命周期历史汇总指标。
亦支持使用引导令牌读取(Authorization: Bearer abt_…),从而允许注册流程在没有长期 API 密钥的情况下轮询首笔到账状态。
响应
| 状态码 | 含义 |
|---|---|
200 | OK |
401 | 缺少、格式错误或已被拒绝的凭据。 |
429 | 请求过于频繁。 |
500 | 服务端内部错误。 |
响应字段 (Account)
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
id | string | 是 | |
brand | string | 是 | 账户所属品牌。账户数据在各品牌间独立隔离。 |
network | enum: mainnet, nile | 是 | 账户所属网络环境。主网与 Nile 测试网完全隔离。 |
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 | 是 | Base58Check 编码的 TRON 地址(以 T 开头,34 个字符)。 |
deposit_addresses[].memo | string | null | 自 2026-09-26 起恒为 null:单账户独立专属地址,无需附带 memo。 | |
deposit_addresses[].confirmations_required | integer | 确认入账所需的区块深度。 | |
deposit_addresses[].contract | string | null | 接收的 TRC-20 合约地址(仅针对 USDT;TRX 为 null)。 | |
deposit_addresses[].rate_now | null | object | 仅适用于 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 | 单笔最低有效充值金额。 | |
deposit_addresses[].max | string | null | 单笔自动入账上限。 | |
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 始终为 null)。接口返回两条记录(相同地址):TRX 以及 USDT(TRC-20 合约),USDT 充值将在入账时按扣除点差后的实时汇率折算为 TRX 计入账本。
充值交易在达到指定确认区块数(confirmations_required)后完成入账,并触发 balance.credited Webhook 回调。
响应
| 状态码 | 含义 |
|---|---|
200 | OK |
401 | 缺少、格式错误或已被拒绝的凭据。 |
429 | 请求过于频繁。 |
500 | 服务端内部错误。 |
响应字段
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
data | array of object (DepositAddress) | 是 | |
data[].currency | enum: TRX, USDT | 是 | |
data[].address | string | 是 | Base58Check 编码的 TRON 地址(以 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 | 上次响应中 next_cursor 返回的不透明游标。 |
响应
| 状态码 | 含义 |
|---|---|
200 | OK |
400 | 格式错误的请求 —— 无效 JSON、未知字段或字段类型错误。 |
401 | 缺少、格式错误或已被拒绝的凭据。 |
403 | 权限不足。 |
500 | 服务端内部错误。 |
响应字段
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
data | array of object (LedgerEntry) | 是 | |
data[].id | string | 是 | 账本凭证全局流水号。 |
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 | 是 | 充值类型明细(非充值类别为 null)。 |
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 | 收到 USDT 数量(十进制字符串)。 | |
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 | 是 | Base58Check 编码的 TRON 地址(以 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。
将带有自定义标签名称的 address 保存到地址薄。每个账户内地址保持唯一:重复保存已存在的地址将直接覆盖其标签名称,返回 200 且不额外占用配额。
仅限控制台会话(需具备 editor 或更高角色)。
请求体
JSON (AddressBookRequest),必填。
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
label | string | 是 | 地址标签别名(修剪后 1–64 个字符)。 |
address | string | 是 | Base58Check 编码的 TRON 地址(以 T 开头,34 个字符)。 |
来自规范的请求体示例(示意数值):
{"label":"Payouts hot wallet","address":"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"}
响应
| 状态码 | 含义 |
|---|---|
200 | 地址此前已存在;其标签别名已更新。 |
201 | 成功保存为新条目。 |
400 | 格式错误的请求 —— 无效 JSON、未知字段或字段类型错误。 |
401 | 缺少、格式错误或已被拒绝的凭据。 |
403 | 权限不足。 |
409 | 3019 address_book_full —— 地址薄已达配额上限。 |
500 | 服务端内部错误。 |
响应字段 (AddressBookEntry)
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
id | string | 是 | |
label | string | 是 | |
address | string | 是 | Base58Check 编码的 TRON 地址(以 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 | 加权计算的每 65,000 能量平均单价(SUN) |
历史数据保留周期:13 个月。 需要 orders.read 权限或控制台 viewer 角色。
请求参数
| 参数名 | 位置 | 类型 | 必选 | 说明 |
|---|---|---|---|---|
from | query | string (date-time) | 起始时间。 | |
to | query | string (date-time) | 截止时间。 | |
bucket | query | enum: day | 时间聚合粒度。 | |
utc_offset_minutes | query | integer | 访问者客户端时区分钟偏移量。 |
响应
| 状态码 | 含义 |
|---|---|
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 | 是 | Base58Check 编码的 TRON 地址(以 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
}
]
}