撤单
描述
撤销调用方的单笔当前挂单或部分成交订单。接口返回订单的最终 canceled 状态。
HTTP 请求
DELETE /spot/orders/:id(JWT 或 API Key)
权重
0——订单接口不受按 IP 权重限制约束。撮合引擎内部设有 mpsc 积压队列;若队列溢出,本接口响应为 500 DB_ERROR(撤单场景下不会将引擎繁忙与数据库故障区分开)。
请求参数
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
id | STRING(路径参数) | 是 | 待撤销订单的 UUID。由新建订单的响应 id 字段返回。 |
响应示例
200 OK
{
"id": "9f2a1c4e-5b67-4d8a-bf93-2e1f4a6c8d10",
"symbol": "DFUSDT",
"side": "buy",
"type": "limit",
"tif": "gtc",
"price": "0.5000",
"quantity": "100",
"quote_quantity": null,
"filled_qty": "30",
"avg_fill_price": "0.499",
"status": "canceled",
"reject_reason": null,
"created_at": 1778400000,
"updated_at": 1778400120
}
| 字段 | 说明 |
|---|---|
status | 成功响应时始终为 canceled。参见订单状态。 |
filled_qty | 撤单前已成交的数量;部分成交订单可能不为零。 |
avg_fill_price | 撤单前所有成交的成交量加权平均价格。若无成交则为 "0"。 |
created_at, updated_at | UNIX 秒。updated_at 反映撤单时间。 |
错误响应
| HTTP | error | 触发条件 |
|---|---|---|
400 | invalid id | :id 不是有效的 UUID。 |
403 | FORBIDDEN | 订单存在,但属于其他用户。 |
404 | ORDER_NOT_FOUND | 订单不存在,或已处于终态(filled / canceled / rejected)。 |
500 | DB_ERROR | 数据库故障,或引擎命令队列已满 / 引擎正在重启——撤单不会返回 503 ENGINE_BUSY。请使用退避策略重试。 |
503 | spot trading disabled | 该服务器已关闭现货交易。 |
完整列表:错误码。
代码示例
cURL(JWT)
JWT="your_jwt_token"
ORDER_ID="9f2a1c4e-5b67-4d8a-bf93-2e1f4a6c8d10"
curl -s -X DELETE "https://api.prex.world/api/v1/spot/orders/${ORDER_ID}" \
-H "Authorization: Bearer ${JWT}"
cURL(HMAC API Key)
API_KEY="your_api_key"
API_SECRET="your_api_secret"
ORDER_ID="9f2a1c4e-5b67-4d8a-bf93-2e1f4a6c8d10"
TIMESTAMP=$(date +%s%3N)
PAYLOAD="timestamp=${TIMESTAMP}"
SIGNATURE=$(echo -n "${PAYLOAD}" | openssl dgst -sha256 -hmac "${API_SECRET}" | awk '{print $2}')
curl -s -X DELETE \
-H "X-MBX-APIKEY: ${API_KEY}" \
"https://api.prex.world/api/v1/spot/orders/${ORDER_ID}?timestamp=${TIMESTAMP}&signature=${SIGNATURE}"
Python
import time, hmac, hashlib, requests
API_KEY = "your_api_key"
API_SECRET = "your_api_secret"
BASE_URL = "https://api.prex.world/api/v1"
def signed_delete(path: str) -> dict:
ts = int(time.time() * 1000)
payload = f"timestamp={ts}"
sig = hmac.new(API_SECRET.encode(), payload.encode(), hashlib.sha256).hexdigest()
r = requests.delete(
f"{BASE_URL}{path}?timestamp={ts}&signature={sig}",
headers={"X-MBX-APIKEY": API_KEY},
timeout=5,
)
r.raise_for_status()
return r.json()
order_id = "9f2a1c4e-5b67-4d8a-bf93-2e1f4a6c8d10"
canceled = signed_delete(f"/spot/orders/{order_id}")
print(canceled["id"], canceled["status"], canceled["filled_qty"], "/", canceled["quantity"])