OpenAPI 接口说明
通过 REST API 获取行情、账户与下单,支持用户接入程序化/量化交易。所有接口均需在请求头携带 X-API-Key 进行鉴权(含行情接口,以确认用户已付费)。
接入说明
- Base URL:
https://<你的域名>/api,例如https://your-domain.com/api - API 密钥:在「我的」创建,每个密钥收费 200,000 LQL,密钥仅创建时展示一次请妥善保存
- 鉴权:所有接口(含行情)均需在请求头携带
X-API-Key: ll_<你的密钥>,未携带或无效返回 401,账户冻结返回 403 - Content-Type:POST 请求请使用
application/json - 统一错误响应:响应体为
{ "error": "<message>" }。状态码:400 参数/业务错误、401 未授权、403 账户冻结、404 资源不存在、500 服务器错误
认证
在「我的」中创建 API 密钥(每个密钥收费 200,000 LQL),请求时在 Header 中携带:
X-API-Key: your_api_key_here
以上列出的开放接口全部需携带有效 X-API-Key,否则返回 401。
接口列表
行情需 X-API-Key
GET
/api/market/depthquery: symbol, depth?订单簿深度GET
/api/market/klinequery: symbol, interval, from?, to?K 线GET
/api/market/tradesquery: symbol, limit?最新成交账户需 X-API-Key
GET
/api/account/balance账户余额GET
/api/account/positions持仓GET
/api/account/fund-flowsquery: limit?, type?资金流水交易需 X-API-Key
POST
/api/trade/order限价单下单GET
/api/trade/ordersquery: symbol?, limit?委托查询DELETE
/api/trade/order/[orderId]撤单接口详细规范
以下各接口均采用统一结构:请求(参数表)、成功响应(JSON 与字段说明)、错误响应(HTTP 状态码与说明)。所有接口均需在 Header 中携带 X-API-Key。
1. 订单簿深度
GET /api/market/depth
请求
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
symbol | string | 是 | 标的符号,如 NOVA |
depth | number | 否 | 档位数量,默认 20,最大 100 |
成功响应 (200)
{ "symbol": "NOVA", "bids": [[128.5, 10], [128.0, 20]], "asks": [[129.0, 15], [129.5, 8]] }| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
symbol | string | 是 | 标的符号 |
bids | array | 是 | 买盘,每项 [price, amount],按价格从高到低 |
asks | array | 是 | 卖盘,每项 [price, amount],按价格从低到高 |
错误响应
| HTTP 状态码 | 说明 |
|---|---|
| 400 | 缺少 symbol 或参数无效 |
| 401 | 未授权(缺少或无效 X-API-Key) |
| 403 | 账户已冻结 |
| 500 | 服务器内部错误 |
2. K 线
GET /api/market/kline
请求
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
symbol | string | 是 | 标的符号 |
interval | string | 是 | K 线周期:1m / 5m / 15m / 1h / 4h / 1d |
from | number | 否 | 起始时间,Unix 秒 |
to | number | 否 | 结束时间 Unix 秒;缺省到当前,时间跨度最多 7 天 |
成功响应 (200)
{ "symbol": "NOVA", "interval": "1h", "klines": [[1704067200, 100, 102, 99, 101.5, 1000], ...] }| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
symbol | string | 是 | 标的符号 |
interval | string | 是 | K 线周期 |
klines | array | 是 | 每项 [ts, open, high, low, close, volume],ts 为 Unix 秒 |
错误响应
| HTTP 状态码 | 说明 |
|---|---|
| 400 | 缺少 symbol、interval 无效或参数非法 |
| 401 | 未授权 |
| 403 | 账户已冻结 |
| 404 | 标的不存在 |
| 500 | 服务器内部错误 |
3. 最新成交
GET /api/market/trades
请求
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
symbol | string | 是 | 标的符号 |
limit | number | 否 | 返回条数,默认 50,最大 200 |
成功响应 (200)
{ "symbol": "NOVA", "trades": [{ "price": 128.5, "amount": 10, "side": "buy", "time": 1704067200000 }] }| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
symbol | string | 是 | 标的符号 |
trades | array | 是 | 成交列表 |
trades[].price | number | 是 | 成交价格 |
trades[].amount | number | 是 | 成交数量 |
trades[].side | string | 是 | 主动方方向:buy / sell |
trades[].time | number | 是 | 成交时间,毫秒时间戳 |
错误响应
| HTTP 状态码 | 说明 |
|---|---|
| 400 | 缺少 symbol 或参数无效 |
| 401 | 未授权 |
| 403 | 账户已冻结 |
| 500 | 服务器内部错误 |
4. 账户余额
GET /api/account/balance
请求
无查询参数。
成功响应 (200)
{ "balances": [{ "currency": "LQL", "available": 50000, "frozen": 1000 }, { "currency": "NOVA", "available": 100, "frozen": 0 }] }| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
balances | array | 是 | 余额列表 |
balances[].currency | string | 是 | 资产类型:LQL 或标的符号 |
balances[].available | number | 是 | 可用数量 |
balances[].frozen | number | 是 | 冻结数量 |
错误响应
| HTTP 状态码 | 说明 |
|---|---|
| 401 | 未授权 |
| 403 | 账户已冻结 |
| 404 | 用户不存在 |
| 500 | 服务器内部错误 |
5. 持仓
GET /api/account/positions
请求
无查询参数。
成功响应 (200)
{ "positions": [{ "symbol": "NOVA", "name": "Nova Asset", "amount": 100, "frozen": 10, "availableToSell": 90, "avgCost": 120, "markPrice": 128.5 }] }| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
positions | array | 是 | 仅返回 amount > 0 的持仓 |
positions[].symbol | string | 是 | 标的符号 |
positions[].name | string | 是 | 标的名称 |
positions[].amount | number | 是 | 持仓数量 |
positions[].frozen | number | 是 | 挂单冻结数量 |
positions[].availableToSell | number | 是 | 可卖数量 |
positions[].avgCost | number | 是 | 持仓成本 |
positions[].markPrice | number | 否 | 最新价(最新成交价) |
错误响应
| HTTP 状态码 | 说明 |
|---|---|
| 401 | 未授权 |
| 403 | 账户已冻结 |
| 404 | 用户不存在 |
| 500 | 服务器内部错误 |
6. 资金流水
GET /api/account/fund-flows
请求
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
limit | number | 否 | 返回条数,默认 50,最大 200 |
type | string | 否 | 按类型筛选:trade_settle、api_key_fee、invite_bonus 等 |
成功响应 (200)
{ "flows": [{ "id": "clx...", "type": "trade_settle", "currency": "LQL", "amount": 100, "createdAt": "2024-01-01T12:00:00.000Z" }] }| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
flows | array | 是 | 流水列表 |
flows[].id | string | 是 | 流水 ID |
flows[].type | string | 是 | 类型:issue、trade_freeze、trade_settle、invite_bonus、api_key_fee 等 |
flows[].currency | string | 是 | 币种 |
flows[].amount | number | 是 | 变动数量 |
flows[].createdAt | string | 是 | ISO 8601 时间 |
错误响应
| HTTP 状态码 | 说明 |
|---|---|
| 401 | 未授权 |
| 403 | 账户已冻结 |
| 500 | 服务器内部错误 |
7. 下单
POST /api/trade/order
请求 Body (JSON)
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
symbol | string | 是 | 标的符号 |
side | string | 是 | 方向:buy / sell |
type | string | 是 | 订单类型,当前仅支持 limit |
price | number | 是 | 限价单价格,必须 > 0 |
amount | number | 是 | 数量,必须 > 0 |
成功响应 (200)
{ "orderId": "clx...", "filledAmount": 0, "trades": [] }| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
orderId | string | 是 | 订单 ID |
filledAmount | number | 是 | 已成交数量 |
trades | array | 是 | 成交明细,每项含 price、amount、takerSide 等 |
错误响应
| HTTP 状态码 | 说明 |
|---|---|
| 400 | 缺少必填字段、side/type 非法、价格或数量无效、标的不存在或未上市、余额/持仓不足等 |
| 401 | 未授权 |
| 403 | 账户已冻结 |
| 500 | 服务器内部错误 |
8. 委托查询
GET /api/trade/orders
请求
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
symbol | string | 否 | 按标的筛选 |
limit | number | 否 | 返回条数,默认 100。仅返回未完全成交的委托(pending/partial) |
成功响应 (200)
{ "orders": [{ "id": "clx...", "symbol": "NOVA", "side": "buy", "type": "limit", "price": 128.5, "amount": 10, "filledAmount": 2, "remaining": 8, "status": "partial", "createdAt": "2024-01-01T12:00:00.000Z" }] }| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
orders | array | 是 | 委托列表,仅 remaining > 0 |
orders[].id | string | 是 | 订单 ID |
orders[].symbol | string | 是 | 标的符号 |
orders[].side | string | 是 | buy / sell |
orders[].type | string | 是 | limit |
orders[].price | number | 否 | 限价 |
orders[].amount | number | 是 | 委托数量 |
orders[].filledAmount | number | 是 | 已成交数量 |
orders[].remaining | number | 是 | 未成交数量 |
orders[].status | string | 是 | pending / partial |
orders[].createdAt | string | 是 | ISO 8601 时间 |
错误响应
| HTTP 状态码 | 说明 |
|---|---|
| 401 | 未授权 |
| 403 | 账户已冻结 |
| 500 | 服务器内部错误 |
9. 撤单
DELETE /api/trade/order/[orderId]
请求
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
orderId | string | 是 | 路径参数,订单 ID |
成功响应 (200)
{ "ok": true }错误响应
| HTTP 状态码 | 说明 |
|---|---|
| 401 | 未授权 |
| 403 | 账户已冻结 |
| 404 | 订单不存在或不属于当前用户 |
| 500 | 服务器内部错误 |
调用示例
将 your-domain.com 替换为你的部署域名,your_api_key 替换为你在「我的」中创建的 API 密钥。
订单簿深度
curl -X GET "https://your-domain.com/api/market/depth?symbol=NOVA&depth=20" \ -H "X-API-Key: your_api_key"
下单(POST body JSON)
curl -X POST "https://your-domain.com/api/trade/order" \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-d '{"symbol":"NOVA","side":"buy","type":"limit","price":128.5,"amount":10}'委托查询
curl -X GET "https://your-domain.com/api/trade/orders?symbol=NOVA&limit=100" \ -H "X-API-Key: your_api_key"
撤单
curl -X DELETE "https://your-domain.com/api/trade/order/订单ID" \ -H "X-API-Key: your_api_key"
在「我的」中创建并管理 API 密钥
前往个人中心