更新交易对状态
描述
将现货交易对在 listed (已上线)、halted (已暂停) 和 delisted (已下架) 状态之间进行切换。
仅管理员。 服务器须设置 ADMIN_API_KEY 环境变量,且请求 头中须传入 X-API-Key。
重要——下架行为: 将
status设为"delisted"时,系统首先通过cancel_market引擎调用清空订单簿(撤销所有挂单并退款),之后再将数据库中的状态改为已下架。此机制确保市场被标记为终态之前,所有锁定余额均已归还给用户。下架后,任何新的下单请求均将以410 MARKET_DELISTED拒绝。此操作不可逆——无法从delisted状态回退。
完整状态转换表参见市场状态枚举。
HTTP 请求
PATCH /admin/spot/markets/:id/status (X-API-Key: ADMIN_API_KEY)
:id 为交易对标识符(如 DFUSDT)。区分大小写。
权重
0 — 管理员接口不设权重限制。每次市场变更都会向撮合引擎发送 ReloadMarket 命令,使内存中的 MarketCache 无需重启即可获取最新配置。
请求参数
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
status | ENUM | 必填 | 目标市场状态。必须为 listed、halted、delisted 之一 。参见市场状态。 |
响应示例
200 OK
{
"ok": true,
"id": "DFUSDT",
"status": "halted"
}
| 字段 | 说明 |
|---|---|
ok | 成功时始终为 true。 |
id | 已更新的交易对标识符,原样返回。 |
status | 实际应用后的新市场状态。 |
错误响应
| HTTP | error | 触发条件 |
|---|---|---|
400 | INVALID_STATUS | status 不是 listed、halted、delisted 之一。 |
500 | DB_ERROR | 更新时发生意外的 Postgres 错误。请查看服务器日志。 |
完整列表:错误代码。
代码示例
cURL
ADMIN_API_KEY="your_admin_api_key"
MARKET_ID="DFUSDT"
# Halt a market (pause trading, resting orders stay on the book)
curl -s -X PATCH "https://api-sepolia.p99.world/api/v1/admin/spot/markets/${MARKET_ID}/status" \
-H "X-API-Key: ${ADMIN_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"status": "halted"}'
# Delist a market (drains the book first, then marks terminal)
curl -s -X PATCH "https://api-sepolia.p99.world/api/v1/admin/spot/markets/${MARKET_ID}/status" \
-H "X-API-Key: ${ADMIN_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"status": "delisted"}'
Python
import requests
ADMIN_API_KEY = "your_admin_api_key"
BASE_URL = "https://api-sepolia.p99.world/api/v1"
def set_market_status(market_id: str, status: str) -> dict:
r = requests.patch(
f"{BASE_URL}/admin/spot/markets/{market_id}/status",
json={"status": status},
headers={"X-API-Key": ADMIN_API_KEY, "Content-Type": "application/json"},
timeout=10, # delist may take longer due to book drain
)
r.raise_for_status()
return r.json()
# Halt trading
result = set_market_status("DFUSDT", "halted")
print(result["ok"], result["id"], result["status"])
# Delist (irreversible — drains book first)
result = set_market_status("DFUSDT", "delisted")
print(result["ok"], result["id"], result["status"])