API 快速入门 · 买方流程

通过 API 提交第一笔买单

此流程使用当前公开市场端点和现行买单合同。请在已登录的浏览器中创建凭据,将只显示一次的密钥保存在源代码之外,查看实时订单簿并确认平台额度,然后提交一笔幂等订单。

  1. 在面板中创建 Read + Buy 密钥

    连接 TRON 钱包并签名登录,打开 API 密钥面板,创建启用 Read 和 Buy 的密钥。创建密钥是浏览器会话操作;API 密钥不能创建另一个密钥,也不能提升自己的权限。

    完整密钥只显示一次。请将其复制到密钥管理器或临时 shell 环境变量,不要放入 URL、日志、截图、仓库或客户端 bundle。若已丢失,请撤销后重新创建。
  2. 读取公开实时价格和一档市场深度

    这些 GET 端点不需要凭据。价格按资源区分;深度还按租期和最小数量区分。选择 price_sun 前,请查看响应中的实时 asks。

    curl --silent --show-error --fail-with-body \
      'https://tet.energy/v1/price?resource=energy'
    
    curl --silent --show-error --fail-with-body \
      'https://tet.energy/v1/market/depth?resource=energy&duration=86400&min_lot=65000'
  3. 确认可用的平台额度

    使用同一密钥的 Read 权限检查 available_trx。示例订单会从内部可用余额预留 4.225 TRX:65 sun × 65,000 energy × 一个计费日。

    curl --silent --show-error --fail-with-body \
      'https://tet.energy/v1/balance' \
      -H 'Authorization: Bearer <YOUR_API_KEY>'
    内部余额不等于已连接钱包显示的 TRX 余额。GET /v1/balance 会在充值服务就绪时返回个人 deposit_address 和准确的 deposit_minimum_trx。仅当两者都存在时才充值:向 deposit_address 发送不少于该最低金额的真实 TRX,并等待确认后再使用。切勿向登录钱包转账;当前不支持提现。
  4. 使用唯一幂等键提交订单

    替换三个占位符。JSON 只包含 OrderCreate 的五个必填字段。示例采用一天期 energy 的最低价 65 sun;若没有价格不高于该限价的 ask,订单可能保持开放,因此示例并不保证成交。

    curl --silent --show-error --fail-with-body \
      -X POST 'https://tet.energy/v1/orders' \
      -H 'Authorization: Bearer <YOUR_API_KEY>' \
      -H 'Idempotency-Key: <UNIQUE_REQUEST_ID>' \
      -H 'Content-Type: application/json' \
      --data-binary '{
        "resource": "energy",
        "amount": 65000,
        "duration_sec": 86400,
        "price_sun": 65,
        "receiver_address": "<VALID_TRON_RECEIVER_ADDRESS>"
      }'

    首次创建返回 HTTP 201。使用相同 Idempotency-Key 和完全相同 body 重试时,返回已有订单和 HTTP 200。

    必填请求字段

    resource
    energy 或 bandwidth。
    amount
    资源单位的正整数数量。
    duration_sec
    当前提供的一个租期,以秒为单位;86400 表示一天。
    price_sun
    每个资源单位、每个计费日的 sun 限价,不能低于当前最低价。
    receiver_address
    接收所委托资源的有效 base58 TRON 地址,可以与登录钱包不同。
    重试规则。 仅在响应不确定且 body 完全相同时复用同一键。新的逻辑订单必须使用新键;同一键搭配不同 body 会返回 conflict。

排查当前错误合同

所有失败都使用同一个错误 envelope。联系支持时请保留 request_id 和响应头 X-Request-ID;其中不含您的密钥。

{
  "error": {
    "code": "<ERROR_CODE>",
    "message": "<MESSAGE>",
    "request_id": "<REQUEST_ID>"
  }
}
401 · unauthorized
缺少 Bearer 请求头,或凭据认证失败。格式错误、未知、内容不匹配和已撤销的密钥会故意返回相同结果。绝不要在 query string 中传递 api_key。
403 · forbidden
密钥已通过认证,但缺少所需 scope。请在已登录的面板中创建新的 Read + Buy 密钥;密钥不能自行升级权限。
402 · insufficient_balance
available_trx 无法覆盖托管预留金额。钱包中的 TRX 不满足此内部 ledger 检查。
422 · invalid_request
请求未通过验证。error.details 存在时会列出字段路径;服务层验证可能只返回 message。请检查可用租期、价格下限、正整数以及接收地址。
409 · conflict
同一个幂等键与不同订单 body 一起使用。不要修改重试请求;新订单请使用新键。
429 · rate_limited
停止发送请求,遵守 Retry-After 响应头,并采用退避策略重试。
503 · unavailable
服务或所需的实时网络比率暂时不可用。请稍后重试,不要使用猜测的价格或比率。