3.1 注单查询 API
http
GET /api/v1/exchange/report/bets多条件分页查询交易所订单及其关联的提交(trade)。数据来源为历史库,可能有数秒同步延迟,保留最近 6 个月数据。请求须带入 HMAC 验证 Header。
TIP
本 API 限流 100 次 / 分钟(per api_key),超过返回 code:10060。
请求参数(Query String)
TIP
时间区间二选一:order_start_time/end_time(下单时间)或 settlement_start_time/end_time(结算时间),至少提供一组,跨度不超过 90 天。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| order_start_time / order_end_time | TRUE | string | 下单时间区间(start_time ≥,end_time ≤),RFC3339 UTC,例如 2026-05-19T00:00:00Z;若已提供结算时间区间则可省略 |
| settlement_start_time / settlement_end_time | 条件* | string | 结算时间区间(start_time ≥,end_time ≤),RFC3339 UTC;若已提供下单时间区间则可省略 |
| lang | FALSE | string | LANGUAGE_ZH_CN / LANGUAGE_EN(默认英文) |
| order_id | FALSE | string | 挂单号 |
| trade_id | FALSE | string | 撮合单号,筛选包含此撮合单的挂单 |
| idempotency_key | FALSE | string | 幂等键 |
| player_external_id / player_name | FALSE | string | 玩家 ID / 名称 |
| sport_id / tournament_id / event_id / market_id / outcome_id | FALSE | string | 赛事 / 联赛筛选 |
| side | FALSE | string | EXCHANGE_SIDE_BACK / EXCHANGE_SIDE_LAY |
| status | FALSE | string | 订单状态(见枚举) |
| settlement_status | FALSE | string | 结算状态筛选(见枚举) |
| currency | FALSE | string | 筛选币种,须与该代理绑定币种一致;见支援币种列表 |
| page / page_size | TRUE | integer | 分页,page 从 1 起,默认 1;page_size 默认 10,最大 200,传入 ≤0 或 >200 自动回退为 10 |
响应 data
data 包含 items[](订单)及分页字段。金额字段:usd_ 前缀为美元,无前缀为玩家币种。
json
{
"code": 0,
"message": "success",
"data": {
"items": [
{
"order_id": "019e0000-0000-0000-0000-000000000000",
"idempotency_key": "00000000-0000-0000-0000-000000000000",
"player_id": "00000000-0000-0000-0000-000000000000",
"player_external_id": "player1",
"player_name": "player1_name",
"agent_id": "00000000-0000-0000-0000-000000000001",
"agent_name": "agent_demo",
"sport_id": "sr:sport:1",
"sport_name": "足球",
"tournament_id": "sr:tournament:16",
"tournament_name": "World Cup",
"event_id": "sr:match:00000000",
"event_name": "Team A vs Team B",
"event_start_time": "2026-06-13T01:00:00Z",
"market_id": "1",
"market_name": "Match Winner",
"outcome_id": "1",
"outcome_name": "Team A",
"home_competitor_id": "sr:competitor:0001",
"home_competitor": "Team A",
"away_competitor_id": "sr:competitor:0002",
"away_competitor": "Team B",
"home_score": "1",
"away_score": "0",
"period_home_score": "1",
"period_away_score": "0",
"match_status": "6",
"event_status": "1",
"source_odds": "1.9",
"source_back_odds": "1.9",
"source_lay_odds": "2.23",
"source_active": true,
"side": "EXCHANGE_SIDE_BACK",
"odds": "1.91",
"currency": "EUR",
"mid_rate": "0.86",
"stake": "85",
"usd_stake": "98.83",
"deducted_amount": "85",
"usd_deducted_amount": "98.83",
"usd_filled": "98.83",
"usd_unmatched": "0",
"status": "EXCHANGE_ORDER_STATUS_FILLED",
"trades": [
{
"account_id": "00000000-0000-0000-0000-000000000000",
"name": "player1_name",
"event_id": "sr:match:00000000",
"market_id": "1",
"outcome_id": "1",
"order_id": "019e0000-0000-0000-0000-000000000000",
"trade_id": "00000000-0000-0000-0000-000000000070",
"side": "back",
"role": "taker",
"odds": "1.91",
"usd_stake": "98.83",
"usd_matched_delta": "98.83",
"matched_delta": "85",
"currency": "EUR",
"mid_rate": "0.86",
"fx_base": "85",
"fx_usd_base": "98.83",
"settlement_status": "EXCHANGE_TRADE_SETTLEMENT_STATUS_SETTLED",
"settlement_result": "EXCHANGE_TRADE_SETTLEMENT_RESULT_WIN",
"usd_settlement_pnl": "89.94",
"usd_net_pnl": "85.44",
"usd_commission": "4.50",
"settlement_pnl": "77.35",
"net_pnl": "73.48",
"commission": "3.87",
"commission_rate": "0.05",
"status": "accepted",
"trade_time": "2026-06-12T04:01:59Z",
"settled_time": "2026-06-13T04:33:09Z"
}
],
"total_pnl": "73.48",
"order_time": "2026-06-12T04:01:59Z",
"updated_at": "2026-06-13T04:33:09Z",
"client_ip": "0.0.0.0",
"device_type": "PC",
"device_id": "00000000000000000000000000000000",
"url": "https://backoffice.example.com/#/orders?order_id=019e0000-0000-0000-0000-000000000000&key=xxxx&exp=0000000000"
}
],
"total": 6,
"page": 1,
"page_size": 20,
"total_pages": 1
}
}items[] 字段
| 字段 | 类型 | 说明 |
|---|---|---|
| order_id | string | 挂单号,属唯一值 |
| idempotency_key | string | 幂等键 |
| player_id | string | 平台内部玩家 UUID |
| player_external_id | string | 玩家 ID(商户侧) |
| player_name | string | 玩家名称 |
| agent_id | string | 平台内部代理 UUID |
| agent_name | string | 代理名称 |
| sport_id | string | 运动 ID |
| sport_name | string | 运动名称 |
| tournament_id | string | 联赛 ID |
| tournament_name | string | 联赛名称 |
| event_id | string | 赛事 ID |
| event_name | string | 赛事名称 |
| event_start_time | string | 赛事开始时间(RFC3339 UTC) |
| market_id | string | 市场 ID |
| market_name | string | 市场名称 |
| outcome_id | string | 投注选项 ID |
| outcome_name | string | 投注选项名称 |
| specifiers | string | 市场参数(如 hcp=1.25);无参数市场为空字符串 |
| extended_specifiers | string | 延伸市场参数;variant 类型市场才有 |
| home_competitor_id / away_competitor_id | string | 主 / 客队 ID |
| home_competitor / away_competitor | string | 主 / 客队名称 |
| home_score / away_score | string | 主 / 客队当前比分;进行中或已结束赛事才回传 |
| period_home_score / period_away_score | string | 当前节 / 半场比分;进行中或已结束赛事才回传 |
| match_status | string | 比赛状态码 |
| event_status | string | 赛事状态码(见枚举) |
| source_odds | string | 来源参考赔率(欧洲赔率) |
| source_back_odds | string | 来源 Back 赔率(欧洲赔率) |
| source_lay_odds | string | 来源 Lay 赔率(欧洲赔率) |
| source_active | boolean | 市场是否活跃 |
| side | string | 投注方向(EXCHANGE_SIDE_*) |
| odds | string | 成交赔率(欧洲赔率,小数字符串) |
| currency | string | 玩家货币 |
| mid_rate | string | 下单时汇率(1 USD = mid_rate 玩家货币) |
| stake | string | 下注金额(玩家货币) |
| usd_stake | string | 下注金额(USD) |
| deducted_amount | string | 实际扣款(玩家货币) |
| usd_deducted_amount | string | 实际扣款(USD) |
| usd_filled | string | 已撮合金额(USD) |
| usd_unmatched | string | 未撮合金额(USD) |
| status | string | 订单状态(见枚举) |
| cancel_cause | string | 取消原因;仅 status = CANCELLED / PARTIAL_CANCELLED 时回传 |
| trades | array | 该订单的提交列表;仅含已撮合记录,若无任何撮合则为空数组 |
| total_pnl | string | 该订单最终净利(玩家货币,已扣佣金),见公式;结算完成前不回传 |
| order_time | string | 下单时间(RFC3339 UTC) |
| updated_at | string | 最后更新时间(RFC3339 UTC) |
| client_ip | string | 下单时客户端 IP |
| device_type | string | 装置类型(如 PC) |
| device_id | string | 装置识别码 |
| url | string | 后台注单详情页链接 |
trades[] 字段
一张挂单可拆分为多笔撮合,每次成功撮合则产生一笔 trade。
| 字段 | 类型 | 说明 |
|---|---|---|
| account_id | string | 玩家账户 UUID(同 player_id) |
| name | string | 玩家名称 |
| event_id | string | 赛事 ID |
| market_id | string | 市场 ID |
| specifiers | string | 市场参数(variant 类型市场才有) |
| outcome_id | string | 投注选项 ID |
| order_id | string | 所属挂单号,属唯一值 |
| trade_id | string | 撮合单号,属唯一值 |
| side | string | 方向 back / lay;决定盈亏正负号 |
| role | string | 角色 maker / taker;决定 commission_rate |
| odds | string | 提交赔率(欧洲赔率) |
| usd_stake | string | 下注金额(USD) |
| usd_matched_delta | string | 本次撮合金额(USD) |
| matched_delta | string | 本次撮合金额(玩家货币) |
| currency | string | 玩家货币 |
| mid_rate | string | 汇率(1 USD = mid_rate 玩家货币) |
| fx_base | string | 该订单最大曝险(玩家货币),与订单层级 deducted_amount 一致 |
| fx_usd_base | string | 该订单最大曝险(USD),与 usd_deducted_amount 一致 |
| settlement_status | string | 结算状态(见枚举) |
| settlement_result | string | 结算结果(见枚举) |
| usd_settlement_pnl | string | 结算盈亏(USD),见公式;结算前不回传 |
| usd_net_pnl | string | 结算净利(USD,已扣佣金),见公式;结算前不回传 |
| usd_commission | string | 佣金(USD),见公式 |
| settlement_pnl | string | 结算盈亏(玩家货币),见公式;结算前不回传 |
| net_pnl | string | 结算净利(玩家货币,已扣佣金),见公式;结算前不回传 |
| commission | string | 佣金(玩家货币),见公式 |
| commission_rate | string | 佣金率;taker = 0.05,maker = 0.03 |
| void_reason | string | 作废原因;仅 settlement_result = VOID 时回传 |
| status | string | 提交状态(accepted) |
| trade_time | string | 提交时间(RFC3339 UTC) |
| settled_time | string | 结算时间(RFC3339 UTC),结算前不回传 |
金额计算公式
TIP
所有玩家货币金额 = 对应 USD 金额 × mid_rate;USD 玩家 mid_rate = 1,数值相等。
结算盈亏 usd_settlement_pnl
| 情境 | 公式 |
|---|---|
| back 赢 | usd_matched_delta × (odds − 1) |
| back 输 | −usd_matched_delta |
| lay 赢 / 输 | 与对手方 back 相反,= −back_pnl |
| push / 全废(void_factor = 1) | 0 |
| 半废(void_factor = 0.5) | 上述结果 ÷ 2 |
| dead heat | 盈利方结果 × dead_heat_factor,输方不变 |
佣金 usd_commission
仅对盈利方收取:usd_settlement_pnl > 0 时 = usd_settlement_pnl × commission_rate,否则为 0。
净利 usd_net_pnl
usd_net_pnl = usd_settlement_pnl − usd_commission
玩家货币换算
settlement_pnl = usd_settlement_pnl × mid_rate
commission = usd_commission × mid_rate
net_pnl = settlement_pnl − commission
订单总净利 total_pnl
total_pnl = Σ 该订单所有 matched 提交之 net_pnl(玩家货币)
枚举
订单状态 status(前缀 EXCHANGE_ORDER_STATUS_)
| 值 | 说明 | 资金状态 |
|---|---|---|
| PENDING | 已下单,等待引擎确认 | 已扣款 |
| OPEN | 引擎确认,挂单中,等待撮合 | 已扣款 |
| PARTIALLY_FILLED | 部分撮合 | 已扣款 |
| FILLED | 全部撮合 | 已扣款 |
| CANCELLED | 取消(无任何撮合) | 全额退款 |
| PARTIAL_CANCELLED | 取消(已撮合部分保留,剩余退款) | 未交易部分退款 |
| FAILED | 下单失败,引擎拒绝 | 全额退款 |
结算状态 settlement_status(前缀 EXCHANGE_TRADE_SETTLEMENT_STATUS_)
| 值 | 说明 |
|---|---|
| PENDING | 待结算 |
| SETTLED | 已结算 |
| VOIDED | 已作废 |
结算结果 settlement_result(前缀 EXCHANGE_TRADE_SETTLEMENT_RESULT_)
| 值 | 说明 |
|---|---|
| UNSPECIFIED | 尚未结算 |
| WIN | 全赢 |
| HALF_WIN | 半赢 |
| PUSH | 平局退款 |
| HALF_LOSE | 半输 |
| LOSE | 全输 |
| VOID | 作废 |
赛事状态 event_status
| 值 | 英文标签 | 说明 |
|---|---|---|
| 0 | not_started | 比赛已排期,尚未开始 |
| 1 | live | 比赛正在进行中 |
| 2 | suspended | 比赛被暂停 |
| 3 | ended | 比赛已结束 |
| 4 | closed | 比赛结果已确认 |
提交状态组合说明
status / settlement_status / settlement_result 三个字段组合的业务含义:
| status | settlement_status | settlement_result | 业务含义 |
|---|---|---|---|
| pending | PENDING | UNSPECIFIED | 撮合中 |
| accepted | PENDING | UNSPECIFIED | 已撮合,等待赛事结算 |
| accepted | SETTLED | WIN | 已结算,赢 |
| accepted | SETTLED | HALF_WIN | 已结算,赢半(如让盘 0.25) |
| accepted | SETTLED | PUSH | 已结算,平局退款 |
| accepted | SETTLED | HALF_LOSE | 已结算,输半 |
| accepted | SETTLED | LOSE | 已结算,输 |
| accepted | VOIDED | VOID | 注单作废退款 |
| rejected | PENDING | UNSPECIFIED | 撮合失败退款 |