能量 API 文档
概述
TRXAPI 能量 API 是一组简单的 REST 接口,让你把 TRON 能量委托直接集成到自己的应用或业务系统中:交易所提币通道、支付商户的代付系统、批量转账工具等都可以程序化下单、对账与监控。
核心流程只有三步:下单(getenergy)→ 轮询或等待回调(order / webhook)→ 对账(balance)。所有委托都是公开的链上交易,每个订单都会返回链上交易哈希 txid,可在任意区块浏览器独立核验。
- 计费方式:从你的预付余额中按单扣费;余额通过客户中心充值。
- 能量规格:单笔支持
65000或130000能量;时长支持1小时或24小时。 - 失败自动退款:订单最终失败时,费用自动退回余额,无需人工申请。
https://api.trxapi.io?apikey=YOUR_API_KEYJSON · {code, message, data}code = 200接口总览
| 接口 | 方法 | 说明 |
|---|---|---|
/api/v1/openapi/getenergy | GET | 下单租能量(65000 / 130000,1h / 24h) |
/api/v1/openapi/activation | GET | 激活从未使用过的 TRON 地址 |
/api/v1/openapi/order | GET | 按 orderId 查询订单状态与 txid |
/api/v1/openapi/balance | GET | 查询商户预付余额 |
/api/v1/openapi/node/… | GET / POST | 节点直连查询,免费(见节点 API 文档) |
| Webhook 回调 | POST(服务器 → 你) | 订单终态主动通知,在客户中心配置 |
📄 机器可读描述:OpenAPI 3.0 文件,可导入 Postman / Apifox 等工具直接调试。
快速开始
- 在 客户中心注册账户并完成余额充值(支持 TRX / USDT)。
- 在客户中心「API 密钥」页创建
apikey。密钥仅在创建时完整显示一次,请妥善保存。 - 发起第一笔下单请求(把示例中的地址与密钥替换为你自己的):
# 1) rent 65,000 energy for 1 hour curl "https://api.trxapi.io/api/v1/openapi/getenergy?apikey=YOUR_API_KEY&add=TR7NHqjeKQx...&value=65000&hour=1" # 2) poll the order until it reaches a terminal state curl "https://api.trxapi.io/api/v1/openapi/order?apikey=YOUR_API_KEY&orderId=10001" # 3) check your prepaid balance curl "https://api.trxapi.io/api/v1/openapi/balance?apikey=YOUR_API_KEY"
鉴权与安全
所有接口都通过 URL 参数 apikey 鉴权。每个商户可创建独立密钥,密钥在服务端以哈希形式存储。
- 不要在前端暴露密钥。apikey 只应出现在你的服务端代码中,切勿写入网页、App 或小程序等客户端。
- 不要泄露完整请求 URL。密钥通过 URL 传递,日志、截图、公开仓库中都可能带出密钥;如怀疑泄露,请立即在客户中心重置。
- 密钥与账户的关系:同一账户下所有密钥共用预付余额,以及同一个 Webhook 回调地址与签名密钥。
apikey无效或被禁用时返回code=501。
通用约定
所有接口的响应都是统一的 JSON 信封:
{
"code": 200, // 200 = success, otherwise an error code
"message": "SUCCESS", // human-readable, do NOT branch on it
"data": { /* endpoint-specific payload */ },
"traceId": "7c2c1d6f..."
}
- 以
code判断结果,不要依赖message文案——文案可能随语言或版本变化。 - TRON 地址均为 Base58 格式(
T开头、34 位)。 - 金额字段为字符串,单位 TRX(余额以 TRX 计价)。
- 目前所有业务接口均为
GET请求,参数通过 query string 传递。
下单租能量
/api/v1/openapi/getenergy下单租能量向指定地址委托能量。下单成功即从你的预付余额扣费,能量通常数秒内到账;若最终失败,费用会自动退回。
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
apikey | 是 | 商户密钥,在客户中心创建获取 |
add | 是 | 接收能量的 TRON 地址(T 开头 34 位) |
value | 是 | 能量数量,仅支持 65000 或 130000 |
hour | 是 | 委托时长(小时),仅支持 1 或 24 |
traceId | 否 | 选填,链路追踪 ID(最长 36 位),原样回显便于对账 |
响应字段(data)
orderId | 订单号,用于查询订单状态与对账 |
amount | 本单扣费金额(TRX) |
balance | 扣费后的账户余额(TRX) |
txid | 链上委托交易哈希,可在区块浏览器查验 |
# 请求:下单租 65000 能量 1 小时 curl "https://api.trxapi.io/api/v1/openapi/getenergy?apikey=YOUR_API_KEY&add=TR7NHqjeKQx...&value=65000&hour=1" # 响应 { "code": 200, "message": "SUCCESS", "data": { "orderId": "10001", "amount": "16.9", "balance": "1263.60", "txid": "a1b2c3d4..." }, "traceId": "7c2c1d6f..." }
地址激活
/api/v1/openapi/activation地址激活为未激活的 TRON 地址完成链上激活,返回激活交易哈希。地址已激活会返回 702001。
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
apikey | 是 | 商户密钥,在客户中心创建获取 |
add | 是 | 待激活的 TRON 地址(T 开头 34 位) |
响应字段(data)
add | 被激活的地址 |
txid | 激活交易哈希 |
amount | 本单扣费金额(TRX) |
# 请求:激活地址 curl "https://api.trxapi.io/api/v1/openapi/activation?apikey=YOUR_API_KEY&add=TR7NHqjeKQx..." # 响应 { "code": 200, "message": "SUCCESS", "data": { "add": "TR7NHqjeKQx...", "txid": "a1b2c3d4...", "amount": "2.5" } }
code=702001(地址已激活),该情况不扣费,可安全地重复调用。查询订单
/api/v1/openapi/order查询订单凭下单返回的 orderId 查询订单当前状态与链上交易哈希,建议下单后轮询直至终态。
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
apikey | 是 | 商户密钥,在客户中心创建获取 |
orderId | 是 | 下单接口返回的订单号 |
订单状态
processing | 处理中,能量委托进行中 |
completed | 已完成,能量已到账 |
failed | 已失败,费用自动退回余额 |
# 请求:查询订单状态 curl "https://api.trxapi.io/api/v1/openapi/order?apikey=YOUR_API_KEY&orderId=10001" # 响应 { "code": 200, "message": "SUCCESS", "data": { "orderId": "10001", "status": "completed", "txid": "a1b2c3d4..." } }
completed 或 failed;也可以配置 Webhook 回调,由服务器主动通知终态,无需轮询。查询余额
/api/v1/openapi/balance查询余额查询你(商户)在本平台的预付余额,用于自助对账与充值提醒。该余额是你在 TRXAPI 的服务账户余额,不代表也不涉及你外部钱包中的资产。
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
apikey | 是 | 商户密钥,在客户中心创建获取 |
响应字段(data)
balance | 商户预付余额(TRX 计价) |
currency | 计价币种(TRX) |
# 请求:查询商户余额 curl "https://api.trxapi.io/api/v1/openapi/balance?apikey=YOUR_API_KEY" # 响应 { "code": 200, "message": "SUCCESS", "data": { "balance": "1280.50", "currency": "TRX" } }
代码示例
完整的「下单 → 轮询到终态」流程(生产环境建议配置 Webhook 获取终态通知,替代轮询)。注意:URL 中含 &,在 shell 中调用时务必给整个 URL 加引号。
# Python — order and poll until terminal state import time, requests BASE = "https://api.trxapi.io/api/v1/openapi" KEY = "YOUR_API_KEY" def rent(address, value=65000, hour=1, trace=None): params = {"apikey": KEY, "add": address, "value": value, "hour": hour} if trace: params["traceId"] = trace r = requests.get(f"{BASE}/getenergy", params=params, timeout=15).json() assert r["code"] == 200, r return r["data"]["orderId"] def wait_done(order_id, timeout=60): deadline = time.time() + timeout while time.time() < deadline: r = requests.get(f"{BASE}/order", params={"apikey": KEY, "orderId": order_id}, timeout=15).json() if r["code"] == 200 and r["data"]["status"] in ("completed", "failed"): return r["data"] time.sleep(2) raise TimeoutError(order_id) order_id = rent("TR7NHqjeKQx...", trace="withdraw-8801") print(wait_done(order_id))
// Node.js 18+ — order and poll (native fetch) const BASE = 'https://api.trxapi.io/api/v1/openapi'; const KEY = process.env.TRXAPI_KEY; async function call(path, params) { const qs = new URLSearchParams({ apikey: KEY, ...params }); const res = await fetch(`${BASE}/${path}?${qs}`); const body = await res.json(); if (body.code !== 200) throw new Error(`code ${body.code}`); return body.data; } const { orderId } = await call('getenergy', { add: 'TR7NHqjeKQx...', value: 65000, hour: 1 }); for (;;) { const o = await call('order', { orderId }); if (o.status !== 'processing') { console.log(o); break; } await new Promise(r => setTimeout(r, 2000)); }
订单回调(Webhook)
订单进入终态(成功或失败)时,服务器会主动向你在客户中心配置的回调地址 POST 一条 JSON 通知,无需轮询。回调为账户级配置:名下所有 API Key 共用同一回调地址与签名密钥。
POST 你的回调地址订单回调(Webhook)回调内容(JSON body)
| 参数 | 说明 |
|---|---|
event | 事件类型:order.completed(成功)或 order.failed(失败) |
orderId | 订单号,与下单接口返回的 orderId 一致 |
status | 订单终态:completed 或 failed |
txid | 链上交易哈希(成功时有值,失败为空) |
timestamp | 服务器发送时的 Unix 秒级时间戳 |
请求头
X-Timestamp | 发送时间戳(秒),参与签名计算 |
X-Signature | 签名:sha256=<hex(HMAC-SHA256)>,用于验证来源与完整性 |
# 服务器 → 你的回调地址 POST https://your-domain.com/webhook X-Timestamp: 1712345678 X-Signature: sha256=9f86d081884c... { "event": "order.completed", "orderId": "10001", "status": "completed", "txid": "a1b2c3d4...", "timestamp": 1712345678 } # 验签:用你的密钥按下式计算,与 X-Signature 比对 sig = "sha256=" + hex(hmac_sha256(secret, ts + "." + rawBody))
验签示例
# Python (Flask) import hmac, hashlib def verify(secret: str, ts: str, raw_body: bytes, header_sig: str) -> bool: mac = hmac.new(secret.encode(), f"{ts}.".encode() + raw_body, hashlib.sha256) expected = "sha256=" + mac.hexdigest() return hmac.compare_digest(expected, header_sig)
// Node.js (Express — use the raw body, not the parsed JSON) const crypto = require('crypto'); function verify(secret, ts, rawBody, headerSig) { const expected = 'sha256=' + crypto.createHmac('sha256', secret) .update(ts + '.' + rawBody).digest('hex'); return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(headerSig)); }
重试机制
以 HTTP 2xx 视为成功。失败按 1 分钟 / 5 分钟 / 30 分钟 / 2 小时 / 6 小时退避重试,最多 6 次,仍失败则标记为 failed。发送记录可在客户中心「回调通知」页查看。
错误码
所有响应均返回 code;code=200 表示成功,其余为对应错误。请以 code 判断结果,不要依赖 message 文案。
# example: order rejected for insufficient balance { "code": 502, "message": "Insufficient balance", "data": null }
| code | message | 说明 |
|---|---|---|
| 200 | SUCCESS | 请求成功,结果见 data |
500 | 失败 / ERROR | 请求失败:参数错误 / 下单失败 / 服务暂时不可用,请稍后重试 |
501 | 账户禁用 / Account disabled | apikey 不存在或已被禁用 |
502 | 余额不足 / Insufficient balance | 你的预付余额不足,请先充值 |
429 | 超出限额 / Rate limited | 超出每秒频率或当日请求总量限额(仅节点直连 API),请降低频率或次日再试,可联系客服提额 |
702001 | 地址已激活 / Address already activated | 地址已激活,无需重复激活;此项不扣费 |
100002 | 通道繁忙 / Channel busy | 委托通道暂时繁忙,请稍后重试;本次不扣费,已扣部分自动退回 |
最佳实践
下单与重试
- 传入
traceId:用你自己系统的唯一业务号(如提币单号)作为 traceId,响应中原样回显,方便把订单与内部系统对上。 - 失败重试要克制:收到
100002(通道繁忙)时等待数秒再重试;收到500时先检查参数,不要无脑循环重试。 - 谨防重复下单:下单为普通 GET 请求,超时后盲目重发可能产生重复订单与重复扣费;请以业务单号加锁,超时先查询订单再决定是否重下。
- 下单前校验地址:在你自己的系统中先校验地址格式(T 开头 34 位),并对新地址先走激活接口,能显著降低失败率。
对账
- 每笔订单以
orderId + txid双重记录;终态以订单查询或 Webhook 为准。 - 定时调用余额接口做余额告警(低于阈值提醒充值),避免业务高峰期因
502(余额不足)中断。 - 所有委托都可在区块浏览器按 txid 独立核验,对外争议时以链上记录为准。
安全
- apikey 只放服务端;进入版本库前用环境变量注入。
- Webhook 必须验签 + 时间戳容差校验 + 按 orderId 幂等。
- 我们绝不会索取你的钱包私钥、助记词或钱包密码——任何这类要求都是假冒,详见安全说明。