跳到主要内容

内部划转(永续 ↔ 现货)

描述

在用户的永续保证金账户与现货钱包之间原子性地移动 USDT。整个操作不涉及任何链上交易——后端在单个数据库事务中通过 FOR UPDATE 行锁同时维护两侧余额。要么两侧余额同时变动,要么均不变动;来自同一用户的并发划转会串行执行。

MVP 阶段仅支持 USDT

HTTP 请求

POST /spot/transfer(仅 JWT)

使用 API Key 认证的调用方将收到 403 API Key permission denied。详见 通用信息 → 认证

权重

0 — 当前 MVP 阶段不设每 IP 频率限制。

请求参数

名称类型必填描述
tokenSTRING必填划转的代币。MVP 阶段仅支持 USDT
directionENUM必填perp_to_spot 将 USDT 从永续保证金划入现货钱包;spot_to_perp 为反向操作。
amountDECIMAL必填以字符串表示的十进制金额(例如 "100"),必须为正数。

响应示例

200 OK

{
"direction": "perp_to_spot",
"token": "USDT",
"amount": "100",
"perp_balance_after": "4900",
"spot_balance_after": "5100"
}
字段说明
direction回显请求字段。
token回显请求字段。
amount已划转金额的十进制字符串,末尾零已去除。
perp_balance_after划转后永续账户的 available(可用)余额(十进制字符串)。
spot_balance_after划转后现货钱包的 available(可用)余额(十进制字符串)。

错误响应

HTTPerror
400INVALID_DIRECTIONdirection 不是 perp_to_spotspot_to_perp
400AMOUNT_NON_POSITIVEamount ≤ 0。
400INSUFFICIENT_BALANCE — 来源方的可用余额不足 amount
400UNSUPPORTED_TOKEN — 请求了 USDT 以外的代币。
403API Key permission denied — 调用方通过 API Key 认证。
500internal error — 数据库错误,请查看服务端日志。

完整列表:错误码

代码示例

cURL(JWT)

JWT="your_jwt_token"

curl -s -X POST "https://api-sepolia.p99.world/api/v1/spot/transfer" \
-H "Authorization: Bearer ${JWT}" \
-H "Content-Type: application/json" \
-d '{
"token": "USDT",
"direction": "perp_to_spot",
"amount": "100"
}'

Python

import requests

BASE_URL = "https://api-sepolia.p99.world/api/v1"
JWT = "your_jwt_token"

resp = requests.post(
f"{BASE_URL}/spot/transfer",
headers={
"Authorization": f"Bearer {JWT}",
"Content-Type": "application/json",
},
json={
"token": "USDT",
"direction": "perp_to_spot",
"amount": "100",
},
timeout=5,
)
resp.raise_for_status()
data = resp.json()
print(
f"transferred {data['amount']} {data['token']} "
f"perp_after={data['perp_balance_after']} "
f"spot_after={data['spot_balance_after']}"
)