下单(Web v1)
POST /v1/orders
Web v1 原生 — 由 Rocky 浏览器前端使用。机器人请使用 FAPI 下单。
鉴权:Authorization: Bearer <session_token> — 即 POST /v1/wallet/verify(先调 POST /v1/wallet/challenge)返回的 session_token,会话有效期 24 小时。订单归属于会话对应的用户,请求体里没有 user_id 字段。
请求
POST /v1/orders
Authorization: Bearer <session_token>
Content-Type: application/json
{
"symbol": "BTC-PERP",
"side": "BUY",
"price": "76500.00",
"qty": "0.001",
"leverage": 10,
"idempotency_key": "ui-1748275200-abc",
"tp_price": "78000.00",
"sl_price": "75000.00"
}
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
symbol | string | 是 | Rocky 永续 symbol,如 BTC-PERP。 |
side | string | 是 | BUY 或 SELL(大写)。 |
price | string | 是 | 限价,> 0。Web v1 订单一律为限价单。 |
qty | string | 是 | 数量,> 0。 |
leverage | integer | 是 | 1–100。 |
idempotency_key | string | 是 | 15 分钟内用同一 key 重发,返回原来的 order_id(200)。 |
tp_price | string | 否 | 附带的止盈触发价;BUY 时必须高于 price,SELL 时必须低于 price。 |
sl_price | string | 否 | 附带的止损触发价;BUY 时必须低于 price,SELL 时必须高于 price。 |
leverage 取值 1–100(后端校验;此前该字段虽被接受但会被静默封顶到系统级 10x —— 现在保证金与成交都按订单实际请求的杠杆计算)。持仓的杠杆由开仓(或最近一次同向加仓)的那笔订单决定;只减仓/平仓订单的 leverage 字段不影响它所平掉的那部分敞口的保证金计算 —— 那部分始终按持仓既有杠杆解锁。
tp_price / sl_price(传了且非空时)会在订单被接受后,为会话用户 + symbol 挂上全仓平仓的 TP/SL。这是尽力而为:TP/SL 写入失败只记日志,不会让下单失败。
响应 — 200
{ "order_id": "0196a1b2c3d4e5f6a7b8c9d0e1f2a3b4" }
返回新建的 order_id(去掉连字符的 UUID)。
错误(响应体为纯文本):400 参数非法(side 不是 BUY/SELL、leverage 超出 1–100、price/qty 非正、未知 symbol、tp_price/sl_price 在 price 错误一侧)—— 下单被拒同样是 400:insufficient available balance、market … is not active、trading paused (IF threshold) / high-leverage orders paused;401 缺少 / 无效的 session token;422 请求体无法反序列化(缺字段 / 类型错);503 trading service 挂掉;504 trading service 超时。