TRX For Gas

TRX For Gas API · Web2 / Web3

面向 API User 的新版 TRON 能量租赁接口。本文档以 ApiV1Controller 为准,覆盖账户查询、下单前报价、创建能量租赁订单、订单查询和自动充能订阅。历史客户仍可继续使用旧版 /api/*,新接入请使用 /v1/*。

Web2 认证:x-api-keyIP 白名单单位:SUNAPI version: loading

Web2 使用 API User 账户;免账户的钱包付款请直接查看 Web3 专栏。

快速开始

1. 开通 API User在 WebApp 或 Telegram Bot 的 API User 中完成账户激活、充值和 IP 白名单配置,并获取 Base URL 与 API Key。
2. 配置回调通知在 API User 设置中填写公开可访问的 noticeUrl,系统会用 HTTP POST 推送充值和订单状态变化。
3. 先查报价调用 POST /v1/quote/precount 获取本次下单的费用、能量数量和地址激活状态。
4. 创建订单或订阅单次租赁调用 POST /v1/energy-rental/orders;需要地址持续自动补能时调用 POST /v1/auto-energy/subscriptions。订单后续结果可通过回调通知接收。
V1 价格规则:/v1/quote/precount 仅用于展示当前报价;下单时服务端会重新计算价格并按最新报价处理。批量订单总价以 finalFeeSun 为准。

推荐流程

# 在 WebApp 或 Telegram Bot 的 API User 中配置 noticeUrl 和 IP 白名单
GET  /v1/swap/info  # TRX/USDT 参考汇率、报价时间、限额、手续费和兑换地址
GET  /v1/myInfo
POST /v1/quote/precount
POST /v1/energy-rental/orders
GET  /v1/orders/{id}
# or
GET  /v1/orders/getByOrderNo?orderNo=EXT-20260516001
GET  /v1/tasks/{taskId}  # 查询地址激活进度

# Auto Energy
GET   /v1/auto-energy/subscription-quote
POST  /v1/auto-energy/subscriptions
GET   /v1/auto-energy/subscriptions
GET   /v1/auto-energy/subscriptions/{id}
POST  /v1/auto-energy/subscriptions/{id}/close

API User 请求需要 x-api-key,并且调用服务器 IP 必须命中该 API User 的 IP 白名单。金额字段统一使用 SUN,1 TRX = 1,000,000 SUN。配置 noticeUrl 后,充值到账、订单成功和订单失败会异步推送到该回调地址;接入方仍应保留主动查询订单接口作为补偿查询。

认证与限制

除 GET /v1 版本检查外,所有 V1 接口都需要在请求头传入 x-api-key,并且调用源 IP 必须在该 API User 的 IP 白名单内。API Key 不要放在 query string 或请求体中。

项目说明
读接口限流按 API Key + 接口路径统计,默认 10 秒最多 30 次。
写接口限流创建订单和创建订阅按 API Key + 接口路径统计,默认 10 秒最多 10 次。
订阅详情/关闭GET /v1/auto-energy/subscriptions/{id} 和 POST /v1/auto-energy/subscriptions/{id}/close 不单独限流,但仍会做 API Key、IP 白名单和封禁检查。
错误封禁最近 7 日内可修正请求错误(包括参数/权限错误和余额不足)超过系统阈值时,触发一般处罚并返回 API_USER_BLOCKED。错误数回落至阈值以内后,下次 API 请求自动恢复;管理员也可提前解封。10 分钟内跨账户访问达到 3 次则触发安全封禁,只能由管理员解封。
不计入封禁的错误INVALID_PRICE_CONFIG、INSUFFICIENT_PLATFORM_ENERGY_CAPACITY、TRX_NEEDED_UNAVAILABLE、TIMEOUT、INTERNAL_ERROR 属于服务端或平台侧原因,不计入 API User 错误封禁。
回调验收当前回调请求不附加额外签名头。建议使用 HTTPS、难猜测的回调路径或 token 参数。自动充能按 eventType + chargeId 幂等;chargeId 为空时按 eventType + subscriptionId 幂等。

回调通知

API User 可以在 WebApp 或 Telegram Bot 的 API User 设置中配置 noticeUrl。系统只接受以 http:// 或 https:// 开头、能解析到公网地址的回调 URL;为空时不会创建 HTTP 回调通知。请填写直接返回 2xx 的最终接收地址,系统不跟随 HTTP 重定向。

投递规则:系统以 POST 方法发送 application/json;charset=UTF-8 请求体。接入方返回任意 2xx HTTP 状态码即视为成功;非 2xx、超时或网络异常会记录为失败并按系统重试配置继续重试。每轮投递耗尽短重试后仍失败,累计错误加 1;成功不清零。当前地址累计错误超过系统配置阈值(默认 20)后暂停推送,并向用户和管理员发送一次停用提醒。修改为不同地址或由管理员重置错误后恢复后续推送,历史回调不会自动补发。
场景type说明
充值到账deposit用户专属充值地址收到 TRX 并完成入账。
订单状态变化order能量订单成功、失败或完成后推送。自动充能托管分配不进入普通订单回调。
自动充能生命周期或收费autoEnergy首次供能、消耗补能、过夜收费、关闭中、失败和已关闭事件。

订单回调使用统一对外格式,并额外包含 callbackStatus、hash、hashes 和 activation。只有订单由自动激活流程创建,且该回调对应最终能量订单时,activation 才会有值;其他场景为 null。建议接入方按 type 分流处理。充值和订单回调使用对应记录/订单标识幂等;自动充能按 eventType + chargeId 幂等,无收费记录时按 eventType + subscriptionId 幂等。

充值回调示例

{
  "type": "deposit",
  "id": 456,
  "userId": 1,
  "address": "T9z6yrJXuiJpfWhis3Ae9nHK7k65yM5AHP",
  "fromAddress": "TQ8r...",
  "amount": 10000000,
  "txHash": "9c4f...",
  "createdAt": "2026-05-16T12:00:00"
}

充值回调字段

字段含义
type回调类型。充值到账固定为 deposit。
id充值记录 ID,可用于幂等处理。
userIdAPI User 的系统用户 ID。
addressAPI User 专属充值地址,格式为 Base58Check。
fromAddress链上付款地址,格式为 Base58Check。
amount到账金额,单位 SUN。
txHash充值交易 Hash。
createdAt充值记录创建时间。

订单回调示例

{
  "type": "order",
  "id": 123,
  "orderNo": "EXT-20260516001",
  "orderTime": 3600,
  "orderType": 0,
  "paidAmount": 1500000,
  "receiverAddress": "TJqiMSSmRtm4LvXrYBWysz9DnNrFQDaBv9",
  "resourceAmount": 65000,
  "resourceType": 1,
  "status": 1,
  "callbackStatus": "SUCCESS",
  "failReason": null,
  "activation": null,
  "hash": "ab12...",
  "hashes": [
    "ab12..."
  ],
  "timeStamp": 1778918400000,
  "times": 1,
  "totalFee": 1500000,
  "updatedAt": "2026-05-16 12:00:00",
  "subscription": null
}
字段含义
type回调类型。订单状态变化固定为 order。
id系统订单 ID,可用于幂等处理。
orderNo创建订单时传入的外部订单号;未传时可能为 null。
orderTime租期,单位秒。
orderType订单类型。
paidAmount实际支付或已冻结金额,单位 SUN;失败退款流程以该字段为准。
receiverAddress资源接收 TRON 地址,格式为 Base58Check。
resourceAmount本次委托的能量数量。
resourceType资源类型;当前能量订单为 1。
status0=待处理, 1=已委托, 2=已完成, 3=委托中, -1=失败, -2=已退款。
callbackStatusSUCCESS=本次购买已成功;FAILED=订单失败;PENDING=待处理;UNKNOWN=其他处理中状态。
failReason对外失败原因。成功时为 null;用户可处理原因原样返回,服务端或平台侧原因统一返回 服务端错误。
activation本订单关联的地址激活信息;普通订单或未创建地址激活时为 null。
activation.taskId地址激活 ID,用于幂等和查询激活进度。
activation.status地址激活整体状态。
activation.failReason地址激活失败原因;处理中或成功时为 null。
activation.currentStep当前地址激活步骤。
activation.activationStatus地址激活链上交易状态。
activation.feeSun地址激活费,单位 SUN。
activation.feeTrx地址激活费,单位 TRX。
activation.paidAmountSun实际已扣激活金额,单位 SUN。
activation.paidAmountTrx实际已扣激活金额,单位 TRX。
activation.txHash地址激活交易 Hash;未发起或不可用时为 null。
activation.energyOrderId地址激活完成后创建的能量订单 ID;尚未创建或不适用时为 null。
activation.autoEnergySubscriptionId地址激活完成后创建的自动充能订阅 ID;尚未创建或不适用时为 null。
hash本次资源下发的第一笔链上交易 Hash;不可用时为 null。
hashes本次资源下发的全部链上交易 Hash;没有可返回交易时为空数组。
timeStamp订单创建时间戳,毫秒。
times转账次数。
totalFee订单金额,单位 SUN。链上直充多付成交时,该字段为命中的报价档位金额;实际支付金额见 paidAmount。
updatedAt订单最后更新时间。

自动充能回调示例

{
  "type": "autoEnergy",
  "eventType": "AUTO_ENERGY_REPLENISHED",
  "subscriptionId": 18,
  "receiverAddress": "TJqiMSSmRtm4LvXrYBWysz9DnNrFQDaBv9",
  "status": "ACTIVE",
  "targetEnergy": 131000,
  "smallTierMinimumAvailableEnergy": 64805,
  "chargedTierEnergy": 65000,
  "feeSun": 14000000,
  "chargeId": 72,
  "chargeType": "USAGE_TOPUP",
  "chargeStatus": "SETTLED",
  "coverageEndsAt": "2026-08-28T12:00:00",
  "failReason": null,
  "hashes": ["ab12..."],
  "timeStamp": 1787918400000
}

eventType 可为 AUTO_ENERGY_STARTED、AUTO_ENERGY_REPLENISHED、AUTO_ENERGY_OVERNIGHT_CHARGED、AUTO_ENERGY_OVERNIGHT_REFUNDED、AUTO_ENERGY_CLOSING、AUTO_ENERGY_FAILED 或 AUTO_ENERGY_CLOSED。AUTO_ENERGY_OVERNIGHT_REFUNDED 表示系统在过夜费结算后发现此前仍有用能记录,已退回该笔过夜费。收费事件按 eventType + chargeId 幂等;chargeId 为空时按 eventType + subscriptionId 幂等。targetEnergy 是托管目标值,实际可用能量允许 ±0.3% 偏差。

接口列表

GET/v1
无需认证

返回当前 API version,用于连通性检查。该版本来自 https://api.trxforgas.com/v1。

API_BASE_URL="<在 WebApp 或 Telegram Bot 的 API User 中复制>"
curl "$API_BASE_URL/v1"
{
  "version": "x.y.z"
}

返回字段

字段含义
version当前 API 服务版本。
GET/v1/swap/info
兑换,需要认证

返回 TRX/USDT 兑换参考信息,包括当前参考汇率、报价获取时间、单笔限额、手续费规则和启用中的链上兑换地址。该接口适合 API User 在自己的页面或系统中展示兑换信息;它不是下单接口。

curl --request GET \
  --url "$API_BASE_URL/v1/swap/info" \
  --header 'x-api-key: <YOUR_API_KEY>'
{
  "result": "SUCCESS",
  "quote": {
    "available": true,
    "quoteTime": "2026-06-13T12:00:00Z",
    "quoteAt": "2026-06-13T12:00:00Z",
    "nextRefreshAt": "2026-06-13T12:01:00Z",
    "refreshIntervalSeconds": 60,
    "oneUsdtToTrx": "3.2",
    "usdtToTrxInput": "5",
    "usdtToTrxReferenceOutput": "16",
    "hundredTrxToUsdt": "31.25",
    "trxToUsdt": {
      "enabled": true,
      "direction": "TRX_TO_USDT",
      "inputToken": "TRX",
      "outputToken": "USDT",
      "minInput": "10",
      "maxInput": "5000",
      "feeBps": 30,
      "feePercent": "0.3",
      "feeDeductionMode": "BEFORE_SWAP",
      "feeToken": "TRX",
      "minFee": "1"
    },
    "usdtToTrx": {
      "enabled": true,
      "direction": "USDT_TO_TRX",
      "inputToken": "USDT",
      "outputToken": "TRX",
      "minInput": "5",
      "maxInput": "3000",
      "feeBps": 30,
      "feePercent": "0.3",
      "feeDeductionMode": "BEFORE_SWAP",
      "feeToken": "USDT",
      "minFee": "0.5"
    },
    "address": "TSwapAddress",
    "addresses": [
      "TSwapAddress"
    ]
  },
  "reason": null,
  "message": null
}

返回字段

字段含义
quote.available当前是否有可展示的参考汇率和启用中的兑换地址。
quote.quoteTime本次参考报价获取时间,ISO-8601 UTC 格式;页面展示汇率时应同时使用该时间说明报价来源时点。
quote.quoteAt同 quoteTime,保留给已有展示代码使用。
quote.nextRefreshAt下一次参考汇率刷新时间。
quote.refreshIntervalSeconds建议刷新间隔;当前为 60 秒。
quote.oneUsdtToTrx按 1 USDT 归一化后的 TRX 参考数量。
quote.usdtToTrxInput本次 USDT → TRX 参考报价实际使用的 USDT 输入数量;最低兑换额大于 1 时使用最低兑换额。
quote.usdtToTrxReferenceOutput与 usdtToTrxInput 对应的 TRX 参考输出数量。
quote.hundredTrxToUsdt每 100 TRX 对应的 USDT 参考数量。
quote.trxToUsdtTRX 兑换 USDT 的开关、输入/输出币种、单笔输入限额和手续费规则。
quote.usdtToTrxUSDT 兑换 TRX 的开关、输入/输出币种、单笔输入限额和手续费规则。
quote.*.feeBps手续费比例,单位为基点;100 基点等于 1%。
quote.*.feePercent格式化后的手续费百分比数值,不包含百分号。
quote.*.feeDeductionModeBEFORE_SWAP 表示从输入币种先扣手续费;AFTER_SWAP 表示兑换后从输出币种扣手续费。
quote.*.feeToken收取手续费的币种。
quote.*.minFee该方向的最低手续费,单位由 feeToken 指定。
quote.address首个启用中的链上兑换地址,便于直接展示或复制。
quote.addresses全部启用中的兑换地址列表。
GET/v1/myInfo
账户

查询 API User 可用余额、专属充值地址和脱敏 API Key。

curl --request GET \
  --url "$API_BASE_URL/v1/myInfo" \
  --header 'x-api-key: <YOUR_API_KEY>'
{
  "result": "SUCCESS",
  "account": {
    "id": 1,
    "name": "Demo API User",
    "avaliableBalance": 10000000,
    "addressForDeposit": "T9z6yrJXuiJpfWhis3Ae9nHK7k65yM5AHP",
    "apiKeyMasked": "abcd...wxyz",
    "noticeUrl": "",
    "createdAt": "2026-05-16T12:00:00",
    "updatedAt": "2026-05-16T12:00:00"
  },
  "reason": null,
  "message": null
}
字段含义
idAPI User 的系统用户 ID。
nameAPI User 名称。
avaliableBalance可用余额,单位 SUN。
addressForDepositAPI User 专属充值地址,格式为 Base58Check。
apiKeyMasked脱敏后的 API Key,仅用于识别当前 Key。
noticeUrl当前配置的 HTTP 回调地址;未配置时为空字符串。
createdAtAPI User 创建时间。
updatedAtAPI User 最后更新时间。
POST/v1/quote/precount
报价

返回本次下单预计能量、费用、租期和接收地址状态。该接口不锁价。批量订单总价以 finalFeeSun 为准。

字段是否必填类型说明
times是int购买份数,必须为正整数且不超过系统配置的单次上限(默认 20)。
receiverAddress是string资源接收 TRON 地址,格式为 Base58Check。
energyType否stringactivated 或 noActivated,默认 activated。activated 按每次 65000 能量计算,noActivated 按每次 131000 能量计算;activated × 2 = 130000 与 noActivated × 1 = 131000 是两种不同订单。
durationHours否int整小时租期,默认 1;支持 1、4、8、24。
autoActivate否boolean默认 false。为 true 时,系统会先检查接收地址;只有未激活才追加激活费预估,已激活时 activationFeeSun=0。finalFeeSun 仍只表示能量费用。
curl --request POST \
  --url "$API_BASE_URL/v1/quote/precount" \
  --header 'x-api-key: <YOUR_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '{
    "times": 1,
    "receiverAddress": "TJqiMSSmRtm4LvXrYBWysz9DnNrFQDaBv9",
    "energyType": "activated",
    "durationHours": 1,
    "autoActivate": true
  }'
{
  "result": "SUCCESS",
  "quote": {
    "valid": true,
    "reason": null,
    "receiverAddress": "TJqiMSSmRtm4LvXrYBWysz9DnNrFQDaBv9",
    "addressValid": true,
    "addressActivated": true,
    "energyType": "activated",
    "times": 1,
    "durationSeconds": 3600,
    "durationHours": 1,
    "energyAmount": 65000,
    "finalFeeSun": 1500000,
    "finalFeeTrx": "1.5",
    "autoActivate": true,
    "needActivation": false,
    "activationFeeSun": 0,
    "activationFeeTrx": "0",
    "estimatedTotalFeeSun": 1500000,
    "estimatedTotalFeeTrx": "1.5"
  },
  "reason": null,
  "message": null
}
字段含义
valid报价是否有效。为 false 时请查看 reason。
reason报价失败原因;报价成功时为 null。
receiverAddress请求中的资源接收 TRON 地址,格式为 Base58Check。
addressValid接收地址格式是否有效。
addressActivated接收地址当前是否已激活。
energyType报价使用的能量类型,activated 或 noActivated。
times本次报价的转账次数。
durationSeconds租期,单位秒。
durationHours租期,单位小时;支持 1、4、8、24。
energyAmount预计委托的能量数量。
finalFeeSun预计能量订单费用,单位 SUN;不包含激活费。
finalFeeTrx预计能量订单费用,单位 TRX;不包含激活费。
autoActivate本次请求是否要求自动激活未激活地址。
needActivation本次请求是否需要先执行地址激活。
activationFeeSun预估激活费,单位 SUN;仅 needActivation=true 时大于 0。
activationFeeTrx预估激活费,单位 TRX。
estimatedTotalFeeSun预估总费用,单位 SUN;等于能量费用加可能的激活费,不锁价。
estimatedTotalFeeTrx预估总费用,单位 TRX;不锁价。
POST/v1/energy-rental/orders
创建订单

创建一笔能量租赁订单。服务端会重新报价并按当前价格扣减 API User 可用余额。

字段是否必填类型说明
times是int购买份数,必须为正整数且不超过系统配置的单次上限(默认 20)。
receiverAddress是string资源接收 TRON 地址,格式为 Base58Check。
orderNo是string外部订单号;同一个 API User 下不可重复。
energyType是stringactivated 或 noActivated。activated 按每次 65000 能量计算,noActivated 按每次 131000 能量计算;activated × 2 = 130000 与 noActivated × 1 = 131000 是两种不同订单。
durationHours否int整小时租期,默认 1。
autoActivate否boolean默认 false。未激活地址是否自动激活。未传或 false 时保持原流程,未激活地址返回错误。即使传入 true,也只有地址未激活时才会创建激活任务并收取激活费。

当 autoActivate=true 且地址未激活时,响应的 order.activation 字段会返回地址激活信息,后续使用 GET /v1/tasks/{taskId} 查询激活进度;地址已激活时不创建激活、不冻结或扣除激活费,继续返回普通订单结构。

curl --request POST \
  --url "$API_BASE_URL/v1/energy-rental/orders" \
  --header 'x-api-key: <YOUR_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '{
    "times": 1,
    "orderNo": "EXT-20260516001",
    "receiverAddress": "TJqiMSSmRtm4LvXrYBWysz9DnNrFQDaBv9",
    "energyType": "activated",
    "durationHours": 1,
    "autoActivate": true
  }'
{
  "result": "ACCEPTED",
  "order": {
    "id": 123,
    "orderNo": "EXT-20260516001",
    "orderTime": 3600,
    "orderType": 0,
    "paidAmount": 1500000,
    "receiverAddress": "TJqiMSSmRtm4LvXrYBWysz9DnNrFQDaBv9",
    "resourceAmount": 65000,
    "resourceType": 1,
    "status": 0,
    "failReason": null,
    "timeStamp": 1778918400000,
    "times": 1,
    "totalFee": 1500000,
    "updatedAt": "2026-05-16 12:00:00",
    "activation": null,
    "subscription": null
  },
  "reason": null,
  "message": null
}

order 返回字段

order.activation 表示该订单关联的地址激活信息。普通订单为 null;当 autoActivate=true 且接收地址未激活时,创建接口会先返回带 activation 的订单请求信息,真实能量订单创建前 id、paidAmount、totalFee 等真实订单字段为 null。

字段含义
id系统订单 ID;地址激活完成前尚未创建真实能量订单时为 null。
orderNo创建订单时传入的外部订单号;同一个 API User 下唯一。
orderTime租期,单位秒。
orderType订单类型;当前能量租赁订单为 0,真实订单创建前为 null。
paidAmount实际支付或已冻结金额,单位 SUN;真实订单创建前为 null。
receiverAddress资源接收 TRON 地址,格式为 Base58Check。
resourceAmount本次委托的能量数量;真实订单创建前为 null。
resourceType资源类型;当前能量订单为 1。
status0=待处理, 1=已委托, 2=已完成, 3=委托中, -1=失败, -2=已退款;真实订单创建前为 null。
failReason对外失败原因;成功或处理中时为 null。
timeStamp订单创建时间戳,毫秒;真实订单创建前为 null。
times转账次数。
totalFee订单金额,单位 SUN。链上直充多付成交时,该字段为命中的报价档位金额;实际支付金额见 paidAmount。真实订单创建前为 null。
updatedAt订单最后更新时间;真实订单创建前为 null。
activation地址激活信息;普通订单为 null。
activation.taskId地址激活 ID,用于查询激活进度。
activation.status地址激活整体状态。
activation.failReason地址激活失败原因;处理中或成功时为 null。
activation.currentStep当前地址激活步骤。
activation.activationStatus地址激活链上交易状态。
activation.feeSun地址激活费,单位 SUN。
activation.feeTrx地址激活费,单位 TRX。
activation.paidAmountSun已扣激活金额,单位 SUN。
activation.paidAmountTrx已扣激活金额,单位 TRX。
activation.txHash地址激活交易 Hash;未发起或不可用时为 null。
activation.energyOrderId地址激活完成后创建的能量订单 ID;尚未创建时为 null。
activation.autoEnergySubscriptionId地址激活完成后创建的自动充能订阅 ID;尚未创建或不适用时为 null。
GET/v1/orders/{id}
订单查询

按平台订单 ID 查询订单。只能查询当前 API User 自己的订单。

curl --request GET \
  --url "$API_BASE_URL/v1/orders/123" \
  --header 'x-api-key: <YOUR_API_KEY>'
{
  "result": "SUCCESS",
  "order": {
    "id": 123,
    "orderNo": "EXT-20260516001",
    "orderTime": 3600,
    "orderType": 0,
    "paidAmount": 1500000,
    "receiverAddress": "TJqiMSSmRtm4LvXrYBWysz9DnNrFQDaBv9",
    "resourceAmount": 65000,
    "resourceType": 1,
    "status": 1,
    "failReason": null,
    "timeStamp": 1778918400000,
    "times": 1,
    "totalFee": 1500000,
    "updatedAt": "2026-05-16 12:00:00",
    "activation": null,
    "subscription": null
  },
  "reason": null,
  "message": null
}

订单返回字段

字段含义
id系统订单 ID。
orderNo创建订单时传入的外部订单号;同一个 API User 下唯一。
orderTime租期,单位秒。
orderType订单类型;当前能量租赁订单为 0。
paidAmount实际支付或已冻结金额,单位 SUN;失败退款流程以该字段为准。
receiverAddress资源接收 TRON 地址,格式为 Base58Check。
resourceAmount本次委托的能量数量。
resourceType资源类型;当前能量订单为 1。
status0=待处理, 1=已委托, 2=已完成, 3=委托中, -1=失败, -2=已退款。
failReason对外失败原因;成功或处理中时为 null。
timeStamp订单创建时间戳,毫秒。
times转账次数。
totalFee订单金额,单位 SUN。链上直充多付成交时,该字段为命中的报价档位金额;实际支付金额见 paidAmount。
updatedAt订单最后更新时间。
activation本订单关联的地址激活信息;普通订单或未创建地址激活时为 null。
activation.taskId地址激活 ID,用于查询激活进度。
activation.status地址激活整体状态。
activation.failReason地址激活失败原因;处理中或成功时为 null。
activation.currentStep当前地址激活步骤。
activation.activationStatus地址激活链上交易状态。
activation.feeSun地址激活费,单位 SUN。
activation.feeTrx地址激活费,单位 TRX。
activation.paidAmountSun已扣激活金额,单位 SUN。
activation.paidAmountTrx已扣激活金额,单位 TRX。
activation.txHash地址激活交易 Hash;未发起或不可用时为 null。
activation.energyOrderId地址激活完成后创建的能量订单 ID;尚未创建或不适用时为 null。
activation.autoEnergySubscriptionId地址激活完成后创建的自动充能订阅 ID;尚未创建或不适用时为 null。
GET/v1/orders/getByOrderNo
订单查询

按外部订单号查询订单。适合接入方只保存自己的 orderNo 的场景。

curl --request GET \
  --url "$API_BASE_URL/v1/orders/getByOrderNo?orderNo=EXT-20260516001" \
  --header 'x-api-key: <YOUR_API_KEY>'
{
  "result": "SUCCESS",
  "order": {
    "id": 123,
    "orderNo": "EXT-20260516001",
    "orderTime": 3600,
    "orderType": 0,
    "paidAmount": 1500000,
    "receiverAddress": "TJqiMSSmRtm4LvXrYBWysz9DnNrFQDaBv9",
    "resourceAmount": 65000,
    "resourceType": 1,
    "status": 1,
    "failReason": null,
    "timeStamp": 1778918400000,
    "times": 1,
    "totalFee": 1500000,
    "updatedAt": "2026-05-16 12:00:00",
    "activation": null,
    "subscription": null
  },
  "reason": null,
  "message": null
}

订单返回字段

字段含义
id系统订单 ID。
orderNo创建订单时传入的外部订单号;同一个 API User 下唯一。
orderTime租期,单位秒。
orderType订单类型;当前能量租赁订单为 0。
paidAmount实际支付或已冻结金额,单位 SUN;失败退款流程以该字段为准。
receiverAddress资源接收 TRON 地址,格式为 Base58Check。
resourceAmount本次委托的能量数量。
resourceType资源类型;当前能量订单为 1。
status0=待处理, 1=已委托, 2=已完成, 3=委托中, -1=失败, -2=已退款。
failReason对外失败原因;成功或处理中时为 null。
timeStamp订单创建时间戳,毫秒。
times转账次数。
totalFee订单金额,单位 SUN。链上直充多付成交时,该字段为命中的报价档位金额;实际支付金额见 paidAmount。
updatedAt订单最后更新时间。
activation本订单关联的地址激活信息;普通订单或未创建地址激活时为 null。
activation.taskId地址激活 ID,用于查询激活进度。
activation.status地址激活整体状态。
activation.failReason地址激活失败原因;处理中或成功时为 null。
activation.currentStep当前地址激活步骤。
activation.activationStatus地址激活链上交易状态。
activation.feeSun地址激活费,单位 SUN。
activation.feeTrx地址激活费,单位 TRX。
activation.paidAmountSun已扣激活金额,单位 SUN。
activation.paidAmountTrx已扣激活金额,单位 TRX。
activation.txHash地址激活交易 Hash;未发起或不可用时为 null。
activation.energyOrderId地址激活完成后创建的能量订单 ID;尚未创建或不适用时为 null。
activation.autoEnergySubscriptionId地址激活完成后创建的自动充能订阅 ID;尚未创建或不适用时为 null。
GET/v1/tasks/{taskId}
地址激活查询

查询地址激活进度。只有在创建订单或自动充能订阅时开启 autoActivate 且接收地址未激活,系统才会在 activation 中返回 taskId;地址已激活时没有地址激活,也不会收取激活费。

curl --request GET \
  --url "$API_BASE_URL/v1/tasks/1001" \
  --header 'x-api-key: <YOUR_API_KEY>'
{
  "result": "SUCCESS",
  "activation": {
    "taskId": 1001,
    "status": "PROCESSING",
    "failReason": null,
    "currentStep": "EXECUTE_ACTIVATION",
    "activationStatus": "PROCESSING",
    "feeSun": 1200000,
    "feeTrx": "1.2",
    "paidAmountSun": 0,
    "paidAmountTrx": "0",
    "txHash": null,
    "energyOrderId": null,
    "autoEnergySubscriptionId": null
  },
  "reason": null,
  "message": null
}
GET/v1/auto-energy/subscription-quote
自动充能

返回当前首次 131000 能量费用、65000/131000 两档补能价格和独立隔夜费。报价不锁价;创建时可分别传入费用上限。

curl --request GET \
  --url "$API_BASE_URL/v1/auto-energy/subscription-quote" \
  --header 'x-api-key: <YOUR_API_KEY>'
{
  "result": "SUCCESS",
  "quote": {
    "targetEnergy": 131000,
    "smallTierMinimumAvailableEnergy": 64805,
    "initialFeeSun": 28000000,
    "smallRefillFeeSun": 14000000,
    "fullRefillFeeSun": 28000000,
    "overnightFeeSun": 2000000
  },
  "reason": null,
  "message": null
}
POST/v1/auto-energy/subscriptions
自动充能

为一个地址创建以 131000 Energy 为目标的持续托管分配。链上资源换算无法精确到整数,实际可用能量允许在目标值 ±0.3% 范围内波动。委托本身不过期;每次成功补能重新开始 24 小时计费窗口。

计费与更换规则:消耗后可用能量在 64805..130999(含边界)时按 65000 档计费,低于 64805 时按 131000 档计费;随后回收旧分配,并按 131000 目标重新计算委托量(允许 ±0.3% 偏差)。地址连续 24 小时未消耗时,不回收资源,只收独立隔夜费并继续维持委托。托管分配与普通订单分开记录,并使用自动充能专用回调。
字段是否必填说明
receiverAddress是TRON Base58Check 接收地址。
maxInitialFeeSun否首次 131000 能量费用上限。
maxOvernightFeeSun否每次独立隔夜费授权上限。
autoActivate否是否先激活未激活地址。
clientTaskNo否激活任务幂等号。
maxActivationFeeSun否地址激活费上限。
curl --request POST \
  --url "$API_BASE_URL/v1/auto-energy/subscriptions" \
  --header 'x-api-key: <YOUR_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '{
    "receiverAddress": "TJqiMSSmRtm4LvXrYBWysz9DnNrFQDaBv9",
    "maxInitialFeeSun": 30000000,
    "maxOvernightFeeSun": 5000000,
    "autoActivate": true,
    "maxActivationFeeSun": 2000000
  }'
{
  "result": "SUCCESS",
  "subscription": {
    "id": 18,
    "receiverAddress": "TJqiMSSmRtm4LvXrYBWysz9DnNrFQDaBv9",
    "status": "PENDING_ORDER",
    "displayStatus": "PENDING_ORDER",
    "targetEnergy": 131000,
    "maxOvernightFeeSun": 5000000,
    "currentDelegateHash": null,
    "delegateHashes": [],
    "lastChargeType": "INITIAL",
    "lastChargeFeeSun": 28000000,
    "currentOvernightFeeSun": 2000000,
    "nextOvernightAt": null,
    "activation": null
  },
  "reason": null,
  "message": null
}
GET/v1/auto-energy/subscriptions
自动充能

查询订阅、异步关闭订阅及查看独立计费流水。

接口说明
GET /v1/auto-energy/subscriptions?page=1&pageSize=10分页查询当前用户订阅。
GET /v1/auto-energy/subscriptions/{id}查询单个订阅。
POST /v1/auto-energy/subscriptions/{id}/close转为 CLOSING 并异步回收;完成后为 CLOSED。
GET /v1/auto-energy/subscriptions/{id}/billing-records?page=1&pageSize=10推荐使用的对外安全计费流水,包含 INITIAL、USAGE_TOPUP、OVERNIGHT。
GET /v1/auto-energy/subscriptions/{id}/charges?page=1&pageSize=10仅为兼容现有客户端保留的旧原始响应,新接入不再使用。

首次供能和消耗补能均按固定 86400 秒(24 小时)价格计费;过夜费为独立配置。订阅响应包含固定 targetEnergy=131000、公开委托 Hash、最近可用能量、下次过夜计费时间和最近收费摘要,不暴露内部资源分配 ID。计费记录包含收费类型、计价能量档位、费用、状态和覆盖区间。

Web3 API · 链上直存

无需注册、登录、API Key、预存余额或自建中转。获取付款指令 → 钱包链上转账 → 查询业务结果。接口复用现有链上直存业务。

Base URL: https://api.trxforgas.com · /web3/v1

使用本部署 options 返回的资产 ID 和合约地址,不要混用网络或向生产地址发送测试资产。以上公开地址随本接口版本部署后提供服务。

沿用原有业务规则

  • 能量:仅提供现有链上直存的 1 小时套餐;询价不建单、不锁价,最终按原有到账规则识别套餐。替其他地址租赁时,必须将 payment.memo 作为 TRX 转账备注发送。
  • Swap:TRON 上 TRX ↔ USDT。报价为预估,不承诺锁定输出;出款固定返回实际付款钱包,不支持另指定收款人。用户普通转账不需要 approve。
  • 跨链:quote 内部完成原有报价与确认下单;按返回的准确金额和必要备注,在 expiresAt 前付款。沿用现有路由开关、付款地址活跃单限制、到账重新询价和异常处理,不增加新的目标链 memo/tag 支持。
  • 收费、交付、退款及人工处理沿用现有产品规则,不新增锁价或自动退款承诺。钱包网络费另付,能量不包含带宽。

GET /web3/v1/options

返回 assets、energy、swap、bridge。包括资产精度与合约、服务开关、能量套餐、Swap 方向和可用跨链路由。资产 ID 为本部署范围内的 chain:asset;金额统一使用最小单位整数字符串。

energy.packages[].packageId: activated-1h, noActivated-1h; durationSeconds = 3600.

POST /web3/v1/quote

Content-Type: application/json. 仅传所选业务的字段;额外字段会被拒绝,包括 durationHours、durationSeconds 等租期参数。

type必填字段可选字段
energypayerAddress, packageIdreceiverAddress
swappayerAddress, fromAsset, toAsset, amountreceiverAddress (必须等于付款人)
bridgepayerAddress, fromAsset, toAsset, amount, receiverAddress—
{"type":"energy","payerAddress":"YOUR_TRON_ADDRESS","packageId":"activated-1h"}
{"type":"swap","payerAddress":"YOUR_TRON_ADDRESS","fromAsset":"tron:trx","toAsset":"tron:usdt","amount":"100000000"}
{"type":"bridge","payerAddress":"SOURCE_WALLET","fromAsset":"FROM_OPTIONS","toAsset":"FROM_OPTIONS","amount":"RAW_INTEGER","receiverAddress":"DESTINATION_WALLET"}

响应含 payment(chain、asset、address、amount、可选 memo)、receive、已包含的 fee、priceLocked=false 和 rules。能量/Swap 返回 queryBy=paymentTxHash,不返回订单 id;跨链返回 queryBy=id、完整查询 id 和带时区 ISO 8601 的 expiresAt,请保存完整 id。

能量 receive 含 energyAmount、durationSeconds;Swap/跨链含 asset、estimatedAmount。Swap 预估到账金额已扣除响应中的服务费。询价失败不返回付款地址。

GET /web3/v1/status

/web3/v1/status?type=energy&paymentChain=tron&paymentTxHash=HASH
/web3/v1/status?type=swap&paymentChain=tron&paymentTxHash=HASH
/web3/v1/status?type=bridge&id=COMPLETE_ID_FROM_QUOTE

哈希仅作为查询条件,不用于提交或确认付款。后台扫链独立于浏览器运行;历史能量直存也可查询,账户余额订单不会公开。同一 Swap 交易有多个入账事件时返回 payments[],逐项读取状态。

status含义
not_found尚未入库,或没有匹配的直存记录;不要重复付款。
waiting_payment跨链订单等待付款。
processing已发现付款,交付尚未完成。
completed原有业务记录表明交付完成。
settled多个入账事件均已结束,存在交付与退款混合结果;查看 payments[]。
expired跨链付款窗口已关闭。
refunding / refunded原有退款处理中 / 已记录完成。
attention_required按原有规则需要排查或人工处理,不代表系统承诺自动重试或退款。

响应提供 message、nextPollSeconds、paymentTxHash、带链标识的 resultTxHashes、receive 及已有的 refund/refunds 记录。按 nextPollSeconds 轮询,0 表示停止;关闭页面前保存钱包付款哈希。

限速与浏览器访问

无需 Cookie 或域名白名单,fetch 使用 credentials: omit。CORS 支持 GET/POST/OPTIONS。按品牌和真实 IP 限速:POST quote 每 60 秒 20 次,其余请求(含预检)每 60 秒共 120 次;跨链另沿用原有付款地址限流。HTTP 429 返回 Retry-After: 60。请求 IP、接口、HTTP 状态和耗时纳入现有 API 请求统计。

错误统一为 code/message:INVALID_REQUEST、UNSUPPORTED_FIELD、INVALID_PACKAGE、INVALID_AMOUNT、UNSUPPORTED_ASSET、RECEIVER_MUST_BE_PAYER、INVALID_QUERY(400);NOT_FOUND(404);SOURCE_ADDRESS_IN_USE、QUOTE_NEEDS_REFRESH(409);RATE_LIMITED(429);UNAVAILABLE(503)。既有访问封禁可返回 HTTP 403 与 error=request_blocked。不要通过再次付款处理接口错误。

JavaScript

const base = 'https://api.trxforgas.com';
async function web3(path, body) {
  const response = await fetch(base + '/web3/v1/' + path, {
    method: body ? 'POST' : 'GET', credentials: 'omit',
    headers: body ? { 'Content-Type': 'application/json' } : {},
    body: body ? JSON.stringify(body) : undefined
  });
  const data = await response.json();
  if (!response.ok) throw new Error(data.code + ': ' + data.message);
  return data;
}
const options = await web3('options');
const energy = await web3('quote', { type: 'energy', payerAddress,
  packageId: 'activated-1h' });
// Display energy.payment, then let the wallet send the transfer.
const result = await web3('status?' + new URLSearchParams({
  type: 'energy', paymentChain: 'tron', paymentTxHash
}));

下载能量、Swap、跨链三个完整最小接入示例. 钱包签名由接入方钱包完成;示例不会自动发起付款。

错误码

错误码含义
INVALID_REQUEST请求体、路径参数、查询参数或 JSON 类型不合法。
INVALID_API_KEY缺少或提供了无效的 x-api-key。
NOT_API_USER该 API Key 不属于 API User 账户。
USER_NOT_ACTIVEAPI User 账户未启用。
IP_NOT_ALLOWED调用方 IP 不在该 API User 的白名单内。
RATE_LIMITED当前限流窗口内请求过多。
API_USER_BLOCKED一般处罚在近 7 日错误数回落至阈值后,于下次 API 请求自动解除;跨账户访问触发的安全封禁必须由管理员解除。
DUPLICATE_ORDER_NO同一个 API User 下已经使用过该 orderNo。
ORDER_NOT_FOUND订单不存在,或不属于当前 API User。
ORDER_ACCESS_DENIED订单存在,但不属于当前 API User。
SUBSCRIPTION_NOT_FOUND自动充能订阅不存在,或不属于当前 API User。
INVALID_RECEIVER_ADDRESSreceiverAddress 为空,或不是有效的 TRON Base58Check 地址。
RECEIVER_NOT_ACTIVATEDreceiverAddress 未激活,不能接收能量委托。
INVALID_PRICE_CONFIG服务端价格配置异常,请联系管理员处理。
INVALID_ENERGY_TYPEenergyType 只能是 activated 或 noActivated。
INVALID_TIMEStimes 必须是 1 到 20 的整数。
INVALID_ORDER_DURATION当前品牌不支持该 durationHours。
INSUFFICIENT_BALANCEAPI User 可用余额不足。
INSUFFICIENT_PLATFORM_ENERGY_CAPACITY平台侧暂时无法满足本次资源需求,请稍后重试或联系管理员。
TRX_NEEDED_UNAVAILABLE服务端暂时无法计算委托所需的 TRX 数量,请稍后重试。
TIMEOUT订单在完成委托前超时,属于服务端处理结果。
INTERNAL_ERROR服务端发生未预期错误。请求准入检查暂不可用时返回 HTTP 500,不计入用户错误;请稍后重试。

LLM 契约摘要

下面的 JSON 是为 LLM / 自动化集成准备的精简契约摘要;完整机器可读规范请使用 OpenAPI JSON。

{
  "apiVersion": "v1",
  "apiRuntimeVersionUrl": "https://api.trxforgas.com/v1",
  "baseUrl": "从 WebApp 或 Telegram Bot 的 API User 中读取。不要拼接旧版 /api 前缀。",
  "auth": "x-api-key 请求头 + API User IP 白名单",
  "limits": "读接口默认 10 秒 30 次,写接口默认 10 秒 10 次,按 API Key + 接口路径统计。一般处罚:近 7 日可修正错误超过系统阈值时返回 API_USER_BLOCKED;错误数回落至阈值以内后,下次 API 请求自动恢复,也可由管理员解封。安全封禁:10 分钟内跨账户访问达到 3 次,必须由管理员解封。服务端或平台侧错误不计入封禁。",
  "callback": "配置 noticeUrl 后接收充值和普通订单状态回调;自动充能托管订单不进入普通订单回调,自动充能通过独立事件通知。",
  "pricing": "使用 GET /v1/auto-energy/subscription-quote 获取首次、两档补能和独立隔夜费报价;创建时使用 maxInitialFeeSun 与 maxOvernightFeeSun 控制费用上限。",
  "autoEnergy": "以 131000 Energy 为托管目标并允许 ±0.3% 链上换算偏差;64805 至 130999 按 65000 档计费,低于 64805 按 131000 档计费并按目标重新计算委托;空闲每 24 小时只收独立隔夜费。",
  "paths": [
    {
      "method": "GET",
      "path": "/v1",
      "auth": false,
      "purpose": "部署版本"
    },
    {
      "method": "GET",
      "path": "/v1/myInfo",
      "auth": true,
      "purpose": "API User 账户和充值地址"
    },
    {
      "method": "GET",
      "path": "/v1/swap/info",
      "auth": true,
      "purpose": "TRX/USDT 兑换参考汇率、报价时间、限额、手续费和兑换地址"
    },
    {
      "method": "POST",
      "path": "/v1/quote/precount",
      "auth": true,
      "purpose": "当前报价和接收地址激活状态检查"
    },
    {
      "method": "POST",
      "path": "/v1/energy-rental/orders",
      "auth": true,
      "purpose": "创建能量租赁订单"
    },
    {
      "method": "GET",
      "path": "/v1/orders/{id}",
      "auth": true,
      "purpose": "按平台订单 ID 查询"
    },
    {
      "method": "GET",
      "path": "/v1/orders/getByOrderNo",
      "auth": true,
      "purpose": "按外部 orderNo 查询"
    },
    {
      "method": "GET",
      "path": "/v1/tasks/{taskId}",
      "auth": true,
      "purpose": "查询自动激活 task 状态"
    },
    {
      "method": "GET",
      "path": "/v1/auto-energy/subscription-quote",
      "auth": true,
      "purpose": "查询自动充能订阅费"
    },
    {
      "method": "POST",
      "path": "/v1/auto-energy/subscriptions",
      "auth": true,
      "purpose": "创建自动充能订阅"
    },
    {
      "method": "GET",
      "path": "/v1/auto-energy/subscriptions",
      "auth": true,
      "purpose": "查询自动充能订阅列表"
    },
    {
      "method": "GET/POST",
      "path": "/v1/auto-energy/subscriptions/{id}",
      "auth": true,
      "purpose": "查询或中止订阅"
    }
  ],
  "moneyUnit": "SUN。1 TRX = 1,000,000 SUN。",
  "status": {
    "0": "待处理",
    "1": "已委托",
    "2": "已完成",
    "3": "委托中",
    "-1": "失败",
    "-2": "已退款"
  }
}