Skip to content
GET/open/v1/webhooks/{id}/attempts

回调投递尝试

分页查询回调事件的单次投递记录,可按轮次筛选并查看 HTTP 状态、响应文本、耗时及错误。

本页 ID、地址、URL、交易哈希、金额和时间均为文档示例,请替换成自己账户的数据。所有 ID 和金额使用字符串;计数、页码与 HTTP 状态码使用 JSON 数值。金额使用六位精度最小单位字符串,例如 "100000000" 表示 100 USDT,"1000000" SUN 表示 1 TRX。

请求地址

http
GET /open/v1/webhooks/{id}/attempts

鉴权请求头

获取 access token,再按签名规则为实际请求生成 HMAC-SHA256 签名。四个鉴权头必须且只能提供一次。

字段类型必填说明示例值
X-App-Idstring规范正整数 appID。1234567890
X-Timestampstring当前 Unix 秒级时间戳,规范十进制字符串;有效时间窗口见签名指南。1788825600
X-Signstring本次请求的 64 位小写十六进制 HMAC-SHA256 签名。<本次请求签名>
Authorizationstring当前有效的 Bearer token。Bearer <ACCESS_TOKEN>

路径参数

字段类型必填说明示例值
idstring回调事件 ID,规范正整数十进制字符串,范围 1–9223372036854775807;不接受前导零、加号、空白或小数。123456789012345680

事件必须属于当前账户和当前网络;不存在、其他账户或其他网络的事件统一返回 404。

Query 参数

字段类型必填说明示例值
pageinteger(Query 字符串)页码,默认 1,最小为 1;空值按默认值处理。当前服务要求 page × page_size 不超过 9223372036854775807。1
page_sizeinteger(Query 字符串)每页数量,默认 20,范围 1–100;空值按默认值处理。20
round_idstring只查询此轮次;必须且只能出现一次,格式为规范正 int64 字符串。不传则查询事件全部轮次;传空字符串非法。123456789012345681

round_id 必须属于路径指定的事件,否则返回 404。它是投递轮次里的 id,不是 round_no。仅接受表中参数,不接受 status、时间或其他业务筛选;未知字段和重复 Query 键均返回 400。记录按尝试 id DESC 排序;total 是应用 round_id 条件后的尝试总数。

GET 请求体必须为空;不需要 request_id,不要发送 Idempotency-Key 请求头。当前服务按账户和网络限定可读范围。读取不会触发投递或创建新轮次。

http
GET /open/v1/webhooks/123456789012345680/attempts?page=1&page_size=20&round_id=123456789012345681

成功响应

HTTP 200,响应 Content-Type: application/jsonCache-Control: no-store

字段类型必填说明示例值
codeinteger成功时固定为 0。0
messagestring成功时固定为空字符串。""
dataobject本次请求的响应对象。见下方示例
data.networkstring资产所属网络:main(主网)或 nile(测试网络)。"nile"

data 完整字段

字段类型必填说明示例值
itemsobject[]当前页记录;无记录或超过最后一页时为 [],不是 null。见下方示例
totalinteger符合范围和筛选条件的记录总数,不是当前页数量。1
pageinteger实际使用的页码。1
page_sizeinteger实际使用的每页数量。20

data.items[] 完整字段

字段类型必填说明示例值
idstring单次投递尝试 ID。123456789012345682
event_idstring所属回调事件 ID。123456789012345680
round_idstring所属轮次的 ID,可用于 round_id 筛选。123456789012345681
round_nointeger所属轮次编号,从 1 开始。2
attemptinteger本轮内的尝试编号,1–20;新轮次从 1 重新计数。1
statusstring尝试状态:sending / succeeded / failed / unknown;与事件和轮次的状态枚举不同。succeeded
http_statusinteger 或 null接收端 HTTP 状态码;没有取得响应或结果未知时为 null。200
errorstring此次尝试的错误说明;没有错误时为空字符串。""
started_atstring尝试开始时间,RFC 3339 带时区。2026-09-08T00:20:00Z
finished_atstring 或 null尝试结束或恢复时标记结束的时间;sending 时为 null。2026-09-08T00:20:02Z
duration_msinteger 或 null已知完成结果的耗时,单位毫秒;sending 或中断后 unknown 可为 null。2000
response_bodystring接收端响应的展示文本,最多 65536 UTF-8 字节;没有响应为空字符串,可能被清理或截断。{"code":"SUCCESS"}
response_truncatedboolean正文超限或清理后超限而截断时为 true。false
created_atstring尝试记录创建时间,RFC 3339 带时区。2026-09-08T00:20:00Z
json
{
  "code": 0,
  "message": "",
  "data": {
    "network": "nile",
    "items": [
      {
        "id": "123456789012345682",
        "event_id": "123456789012345680",
        "round_id": "123456789012345681",
        "round_no": 2,
        "attempt": 1,
        "status": "succeeded",
        "http_status": 200,
        "error": "",
        "started_at": "2026-09-08T00:20:00Z",
        "finished_at": "2026-09-08T00:20:02Z",
        "duration_ms": 2000,
        "response_body": "{\"code\":\"SUCCESS\"}",
        "response_truncated": false,
        "created_at": "2026-09-08T00:20:00Z",
        "network": "nile"
      }
    ],
    "total": 1,
    "page": 1,
    "page_size": 20
  }
}

状态与空值

status 的四种取值为 sending(进行中)、succeeded(取得有效成功应答)、failed(本次失败)和 unknown(请求中断后无法确认投递结果)。一次尝试失败不等于整个轮次已经失败,后续仍可能自动重试。

sending 通常有 http_status: nullfinished_at: nullduration_ms: null。网络错误未取得 HTTP 响应时,完成后 http_status 仍可为 null。恢复后标记 unknown 的尝试可以有 finished_at,而 duration_ms 仍为 null,例如:

json
{
  "code": 0,
  "message": "",
  "data": {
    "network": "nile",
    "items": [
      {
        "id": "123456789012345683",
        "event_id": "123456789012345680",
        "round_id": "123456789012345681",
        "round_no": 2,
        "attempt": 2,
        "status": "unknown",
        "http_status": null,
        "error": "delivery result unknown after notifier interruption",
        "started_at": "2026-09-08T00:20:30Z",
        "finished_at": "2026-09-08T00:20:46Z",
        "duration_ms": null,
        "response_body": "",
        "response_truncated": false,
        "created_at": "2026-09-08T00:20:30Z",
        "network": "nile"
      }
    ],
    "total": 1,
    "page": 1,
    "page_size": 20
  }
}

响应保存与成功判定

response_body 最多保存 64 KiB(65536 字节)的 UTF-8 展示文本。无效 UTF-8 会替换,NUL 会转为可见转义文本;原始响应或清理后的文本超限时会截断,response_truncated 为 true,并判定本次失败。此字段可能不是完整 JSON,也不保证与原响应逐字节相同。

有效成功应答必须为 HTTP 200,正文为完整、合法的 UTF-8 JSON 对象,其中 code 的值为大小写精确的字符串 "SUCCESS"。允许其他字段;重复键、尾随数据、超过 64 KiB、读取失败、其他 HTTP 状态和其他 code 均不算成功。详情见回调通知指南

次数按尝试记录计数。结果未知的 unknown 也会占用本轮次数;不能假定接收端一定看到了每一条尝试。若未配置或关闭回调,事件可能直接失败而没有尝试记录,此时 items 为 []、total 为 0。

典型错误

错误响应不含 data;鉴权、账户状态、限流和超时等通用错误见通用错误说明

事件 ID、round_id 或分页格式/范围非法,以及 round_id 重复出现,均返回 HTTP 400。事件不存在、不属于当前账户和网络,或指定轮次不属于该事件时返回 HTTP 404。

HTTP 400:round_id 不是规范正整数

json
{
  "code": 400,
  "message": "round_id must be a positive integer string",
  "error_code": "INVALID_ARGUMENT",
  "trace_id": "0123456789abcdef0123456789abcdef"
}

HTTP 400:重复提供 round_id

json
{
  "code": 400,
  "message": "duplicate query parameter",
  "error_code": "INVALID_ARGUMENT",
  "trace_id": "0123456789abcdef0123456789abcdef"
}

HTTP 400:分页超出范围

json
{
  "code": 400,
  "message": "page or page_size out of range",
  "error_code": "INVALID_ARGUMENT",
  "trace_id": "0123456789abcdef0123456789abcdef"
}

HTTP 404:事件不可见或指定轮次不属于该事件

json
{
  "code": 404,
  "message": "record not found",
  "error_code": "RESOURCE_NOT_FOUND",
  "trace_id": "0123456789abcdef0123456789abcdef"
}

HTTP 401:token 缺失、无效或已过期

json
{
  "code": 401,
  "message": "authentication required or expired",
  "error_code": "TOKEN_INVALID_OR_EXPIRED",
  "trace_id": "0123456789abcdef0123456789abcdef"
}

完整字段与状态

查看全部响应字段、嵌套对象及枚举 · 业务状态与处理 · 错误码排查