- 本篇列出接口的baseurl: https://sapi.asterdex.com
- 所有接口的响应都是 JSON 格式。
- 所有时间、时间戳均为UNIX时间,单位为毫秒。
- 很多接口需要API Key才可以访问.
- 设置API Key的同时,为了安全,建议设置IP访问白名单.
- 永远不要把你的API key/secret告诉给任何人
- TESTUSDT 或任何其他以 TEST 开头的交易对仅用于 Aster 的内部测试。请不要在这些以 TEST 开头的交易品种上进行交易。Aster 对因交易这些交易对而造成的资金损失不承担任何责任。但是,如果您遇到问题,您可以随时联系支持人员,我们将尽力帮助您收回资金。
- HTTP
4XX错误码用于指示错误的请求内容、行为、格式。问题在于请求者。 - HTTP
403错误码表示违反WAF限制(Web应用程序防火墙)。 - HTTP
429错误码表示警告访问频次超限,即将被封IP。 - HTTP
418表示收到429后继续访问,IP已经被封禁。 - HTTP
5XX错误码用于指示Aster服务侧的问题。
- 使用接口
/api/v1, 每个接口都有可能抛出异常;
API的错误代码返回形式如下:
{
"code": -1121,
"msg": "Invalid symbol."
}GET方法的接口, 参数必须在query string中发送。POST,PUT, 和DELETE方法的接口,参数可以在内容形式为application/x-www-form-urlencoded的query string中发送,也可以在request body中发送。- 对参数的顺序不做要求。
- 在
/api/v1/exchangeInforateLimits数组中包含与交易的有关REQUEST_WEIGHT和ORDERS速率限制相关的对象。这些在限制种类 (rateLimitType)下的枚举定义部分中进一步定义。 - 违反任何一个速率限制时,将返回429。
- 每个请求的回报中包含一个
X-MBX-USED-WEIGHT-(intervalNum)(intervalLetter)的头,其中包含当前IP所有请求的已使用权重。 - 每一个接口均有一个相应的权重(weight),有的接口根据参数不同可能拥有不同的权重。越消耗资源的接口权重就会越大。
- 收到429时,您有责任停止发送请求,不得滥用API。
- 收到429后仍然继续违反访问限制,会被封禁IP,并收到418错误码
- 频繁违反限制,封禁时间会逐渐延长,从最短2分钟到最长3天。
Retry-After的头会与带有418或429的响应发送,并且会给出以秒为单位的等待时长(如果是429)以防止禁令,或者如果是418,直到禁令结束。- 访问限制是基于IP的,而不是API Key
- 每个成功的下单回报将包含一个
X-MBX-ORDER-COUNT-(intervalNum)(intervalLetter)的头,其中包含当前账户已用的下单限制数量。 - 当下单数超过限制时,会收到带有429但不含
Retry-After头的响应。请检查GET api/v1/exchangeInfo的下单频率限制 (rateLimitType = ORDERS) 并等待封禁时间结束。 - 被拒绝或不成功的下单并不保证回报中包含以上头内容。
- 下单频率限制是基于每个账户计数的。
- Websocket服务器每秒最多接受5个消息。消息包括:
- PING帧
- PONG帧
- JSON格式的消息, 比如订阅, 断开订阅.
- 如果用户发送的消息超过限制,连接会被断开连接。反复被断开连接的IP有可能被服务器屏蔽。
- 单个连接最多可以订阅 1024 个Streams。
- 每个接口都有自己的鉴权类型,鉴权类型决定了访问时应当进行何种鉴权。
- 鉴权类型会在本文档中各个接口名称旁声明,如果没有特殊声明即默认为
NONE。 - 如果需要 API-keys,应当在HTTP头中以
X-MBX-APIKEY字段传递。 - API-keys 与 secret-keys 是大小写敏感的。
- 默认 API-keys 可访问所有鉴权路径.
| 鉴权类型 | 描述 |
|---|---|
| NONE | 不需要鉴权的接口 |
| TRADE | 需要有效的 API-Key 和签名 |
| USER_DATA | 需要有效的 API-Key 和签名 |
| USER_STREAM | 需要有效的 API-Key |
| MARKET_DATA | 需要有效的 API-Key |
TRADE和USER_DATA接口是 签名(SIGNED)接口.
- 调用
SIGNED接口时,除了接口本身所需的参数外,还需要在query string或request body中传递signature, 即签名参数。 - 签名使用
HMAC SHA256算法. API-KEY所对应的API-Secret作为HMAC SHA256的密钥,其他所有参数作为HMAC SHA256的操作对象,得到的输出即为签名。 签名大小写不敏感.- "totalParams"定义为与"request body"串联的"query string"。
- 签名接口均需要传递
timestamp参数,其值应当是请求发送时刻的unix时间戳(毫秒)。 - 服务器收到请求时会判断请求中的时间戳,如果是5000毫秒之前发出的,则请求会被认为无效。这个时间空窗值可以通过发送可选参数
recvWindow来定义。
逻辑伪代码如下:
if (timestamp < (serverTime + 1000) && (serverTime - timestamp) <= recvWindow)
{
// process request
}
else
{
// reject request
}关于交易时效性 互联网状况并不完全稳定可靠,因此你的程序本地到Aster服务器的时延会有抖动。这是我们设置recvWindow的目的所在,如果你从事高频交易,对交易时效性有较高的要求,可以灵活设置recvWindow以达到你的要求。
以下是在linux bash环境下使用 echo openssl 和curl工具实现的一个调用接口下单的示例 apikey、secret仅供示范
| Key | Value |
|---|---|
| apiKey | 4452d7e2ed4da80b74105e02d06328c71a34488c9fdd60a5a0900d42d584b795 |
| secretKey | fdde510a2b71fa43a43bff3e3cf7819c8c66df34633d338050f4f59664b3b313 |
| 参数 | 取值 |
|---|---|
| symbol | BNBUSDT |
| side | BUY |
| type | LIMIT |
| timeInForce | GTC |
| quantity | 5 |
| price | 1.1 |
| recvWindow | 5000 |
| timestamp | 1756187806000 |
Example 1 HMAC SHA256 signature:
$ echo -n "symbol=BNBUSDT&side=BUY&type=LIMIT&timeInForce=GTC&quantity=5&price=1.1&recvWindow=5000×tamp=1756187806000" | openssl dgst -sha256 -hmac "fdde510a2b71fa43a43bff3e3cf7819c8c66df34633d338050f4f59664b3b313"
(stdin)= e09169bf6c02ec4b29fa1bdc3a967f92c8c6cfcde0551ba1d477b2d3cf4c51b0curl command:
(HMAC SHA256)
$ curl -H "X-MBX-APIKEY: 4452d7e2ed4da80b74105e02d06328c71a34488c9fdd60a5a0900d42d584b795" -X POST 'https://sapi.asterdex.com/api/v1/order' -d 'symbol=BNBUSDT&side=BUY&type=LIMIT&timeInForce=GTC&quantity=5&price=1.1&recvWindow=5000×tamp=1756187806000&signature=e09169bf6c02ec4b29fa1bdc3a967f92c8c6cfcde0551ba1d477b2d3cf4c51b0'- requestBody:
symbol=BNBUSDT
&side=BUY
&type=LIMIT
&timeInForce=GTC
&quantity=5
&price=1.1
&recvWindow=5000
×tamp=1756187806000
Example 2 HMAC SHA256 signature:
$ echo -n "symbol=BNBUSDT&side=BUY&type=LIMIT&timeInForce=GTC&quantity=5&price=1.1&recvWindow=5000×tamp=1756187806000" | openssl dgst -sha256 -hmac "fdde510a2b71fa43a43bff3e3cf7819c8c66df34633d338050f4f59664b3b313"
(stdin)= e09169bf6c02ec4b29fa1bdc3a967f92c8c6cfcde0551ba1d477b2d3cf4c51b0 curl command:
(HMAC SHA256)
$ curl -H "X-MBX-APIKEY: 4452d7e2ed4da80b74105e02d06328c71a34488c9fdd60a5a0900d42d584b795" -X POST 'https://sapi.asterdex.com/api/v1/order?symbol=BNBUSDT&side=BUY&type=LIMIT&timeInForce=GTC&quantity=5&price=1.1&recvWindow=5000×tamp=1756187806000&signature=e09169bf6c02ec4b29fa1bdc3a967f92c8c6cfcde0551ba1d477b2d3cf4c51b0'- queryString:
symbol=BNBUSDT
&side=BUY
&type=LIMIT
&timeInForce=GTC
&quantity=5
&price=1.1
&recvWindow=5000
×tamp=1756187806000
这里的术语适用于全部文档,建议特别是新手熟读,也便于理解。
base asset指一个交易对的交易对象,即写在靠前部分的资产名, 比如BTCUSDT,BTC是base asset。quote asset指一个交易对的定价资产,即写在靠后部分的资产名, 比如BTCUSDT,USDT是quote asset。
交易对状态 (状态 status):
- TRADING 交易中
交易对类型:
- SPOT 现货
订单状态 (状态 status):
| 状态 | 描述 |
|---|---|
NEW |
订单被交易引擎接受 |
PARTIALLY_FILLED |
部分订单被成交 |
FILLED |
订单完全成交 |
CANCELED |
用户撤销了订单 |
REJECTED |
订单没有被交易引擎接受,也没被处理 |
EXPIRED |
订单被交易引擎取消, 比如 LIMIT FOK 订单没有成交 市价单没有完全成交 交易所维护期间被取消的订单 |
订单类型 (orderTypes, type):
- LIMIT 限价单
- MARKET 市价单
- STOP 限价止损单
- TAKE_PROFIT 限价止盈单
- STOP_MARKET 市价止损单
- TAKE_PROFIT_MARKET 市价止盈单
订单返回类型 (newOrderRespType):
- ACK
- RESULT
- FULL
订单方向 (方向 side):
- BUY 买入
- SELL 卖出
有效方式 (timeInForce):
这里定义了订单多久能够失效
| Status | Description |
|---|---|
GTC |
成交为止 订单会一直有效,直到被成交或者取消。 |
IOC |
无法立即成交的部分就撤销 订单在失效前会尽量多的成交。 |
FOK |
无法全部立即成交就撤销 如果无法全部成交,订单会失效。 |
GTX |
直到挂单成交 限价只挂单。 |
K线间隔:
m -> 分钟; h -> 小时; d -> 天; w -> 周; M -> 月
- 1m
- 3m
- 5m
- 15m
- 30m
- 1h
- 2h
- 4h
- 6h
- 8h
- 12h
- 1d
- 3d
- 1w
- 1M
限制种类 (rateLimitType)
REQUEST_WEIGHT
{
"rateLimitType": "REQUEST_WEIGHT",
"interval": "MINUTE",
"intervalNum": 1,
"limit": 1200
}ORDERS
{
"rateLimitType": "ORDERS",
"interval": "MINUTE",
"intervalNum": 1,
"limit": 100
}-
REQUEST_WEIGHT 单位时间请求权重之和上限
-
ORDERS 单位时间下单次数限制
限制间隔 (interval)
- MINUTE 分
过滤器,即Filter,定义了一系列交易规则。
共有两类,分别是针对交易对的过滤器symbol filters,和针对整个交易所的过滤器exchange filters(暂不支持)
/exchangeInfo 响应中的格式:
{
"minPrice": "556.72",
"maxPrice": "4529764",
"filterType": "PRICE_FILTER",
"tickSize": "0.01"
}价格过滤器 用于检测订单中 price 参数的合法性。包含以下三个部分:
minPrice定义了price/stopPrice允许的最小值。maxPrice定义了price/stopPrice允许的最大值。tickSize定义了price/stopPrice的步进间隔,即price必须等于minPrice+(tickSize的整数倍)
以上每一项均可为0,为0时代表这一项不再做限制。
逻辑伪代码如下:
price>=minPriceprice<=maxPrice- (
price-minPrice) %tickSize== 0
/exchangeInfo 响应中的格式:
{
"multiplierDown": "0.9500",
"multiplierUp": "1.0500",
"multiplierDecimal": "4",
"filterType": "PERCENT_PRICE"
}PERCENT_PRICE过滤器基于指数价格来定义价格的有效范围。
为了通过"价格百分比","价格"必须符合以下条件:
price<=indexPrice*multiplierUpprice> =indexPrice*multiplierDown
/exchangeInfo 响应中的格式:
{
"stepSize": "0.00100000",
"filterType": "LOT_SIZE",
"maxQty": "100000.00000000",
"minQty": "0.00100000"
}Lots是拍卖术语,LOT_SIZE 过滤器对订单中的 quantity 也就是数量参数进行合法性检查。包含三个部分:
minQty表示quantity允许的最小值。maxQty表示quantity允许的最大值。stepSize表示quantity允许的步进值。
逻辑伪代码如下:
quantity>=minQtyquantity<=maxQty- (
quantity-minQty) %stepSize== 0
*/exchangeInfo 响应中的格式:
{
"stepSize": "0.00100000",
"filterType": "MARKET_LOT_SIZE"
"maxQty": "100000.00000000",
"minQty": "0.00100000"
}MARKET_LOT_SIZE过滤器为交易对上的MARKET订单定义了数量(即拍卖中的"手数")规则。 共有3部分:
minQty定义了允许的最小quantity。maxQty定义了允许的最大数量。stepSize定义了可以增加/减少数量的间隔。
为了通过market lot size,quantity必须满足以下条件:
quantity>=minQtyquantity<=maxQty- (
quantity-minQty) %stepSize== 0
响应
{}GET /api/v1/ping
测试能否联通 Rest API。
权重: 1
参数: NONE
响应
{
"serverTime": 1499827319559
}GET /api/v1/time
测试能否联通 Rest API 并获取服务器时间。
权重: 1
参数: NONE
响应
{
"timezone": "UTC",
"serverTime": 1756197279679,
"rateLimits": [{
"rateLimitType": "REQUEST_WEIGHT",
"interval": "MINUTE",
"intervalNum": 1,
"limit": 6000
},
{
"rateLimitType": "ORDERS",
"interval": "MINUTE",
"intervalNum": 1,
"limit": 6000
},
{
"rateLimitType": "ORDERS",
"interval": "SECOND",
"intervalNum": 10,
"limit": 300
}
],
"exchangeFilters": [],
"assets": [{
"asset": "USD"
}, {
"asset": "USDT"
},
{
"asset": "BNB"
}
],
"symbols": [{
"status": "TRADING",
"baseAsset": "BNB",
"quoteAsset": "USDT",
"pricePrecision": 8,
"quantityPrecision": 8,
"baseAssetPrecision": 8,
"quotePrecision": 8,
"filters": [{
"minPrice": "0.01000000",
"maxPrice": "100000",
"filterType": "PRICE_FILTER",
"tickSize": "0.01000000"
},
{
"stepSize": "0.00100000",
"filterType": "LOT_SIZE",
"maxQty": "1000",
"minQty": "1"
},
{
"stepSize": "0.00100000",
"filterType": "MARKET_LOT_SIZE",
"maxQty": "900000",
"minQty": "0.00100000"
},
{
"limit": 200,
"filterType": "MAX_NUM_ORDERS"
},
{
"minNotional": "5",
"filterType": "MIN_NOTIONAL"
},
{
"maxNotional": "100",
"filterType": "MAX_NOTIONAL"
},
{
"maxNotional": "100",
"minNotional": "5",
"avgPriceMins": 5,
"applyMinToMarket": true,
"filterType": "NOTIONAL",
"applyMaxToMarket": true
},
{
"multiplierDown": "0",
"multiplierUp": "5",
"multiplierDecimal": "0",
"filterType": "PERCENT_PRICE"
},
{
"bidMultiplierUp": "5",
"askMultiplierUp": "5",
"bidMultiplierDown": "0",
"avgPriceMins": 5,
"multiplierDecimal": "0",
"filterType": "PERCENT_PRICE_BY_SIDE",
"askMultiplierDown": "0"
}
],
"orderTypes": [
"LIMIT",
"MARKET",
"STOP",
"STOP_MARKET",
"TAKE_PROFIT",
"TAKE_PROFIT_MARKET"
],
"timeInForce": [
"GTC",
"IOC",
"FOK",
"GTX"
],
"symbol": "BNBUSDT",
"ocoAllowed": false
}]
}GET /api/v1/exchangeInfo
获取交易规则和交易对信息。
权重: 1
参数: 无
响应
{
"lastUpdateId": 1027024,
"E":1589436922972, // 消息时间
"T":1589436922959, // 撮合引擎时间
"bids": [
[
"4.00000000", // 价位
"431.00000000" // 挂单量
]
],
"asks": [
[
"4.00000200",
"12.00000000"
]
]
}GET /api/v1/depth
权重:
基于限制调整:
| 限制 | 权重 |
|---|---|
| 5, 10, 20, 50 | 2 |
| 100 | 5 |
| 500 | 10 |
| 1000 | 20 |
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | YES | |
| limit | INT | NO | 默认 100. 可选值:[5, 10, 20, 50, 100, 500, 1000] |
响应
[
{
"id": 657,
"price": "1.01000000",
"qty": "5.00000000",
"baseQty": "4.95049505",
"time": 1755156533943,
"isBuyerMaker": false
}
]GET /api/v1/trades
获取近期成交
权重: 1
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | YES | |
| limit | INT | NO | 默认 500;最大1000 |
响应
[
{
"id": 1140,
"price": "1.10000000",
"qty": "7.27200000",
"baseQty": "6.61090909",
"time": 1756094288700,
"isBuyerMaker": false
}
]GET /api/v1/historicalTrades
获取历史成交。
权重: 20
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | YES | |
| limit | INT | NO | 默认 500; 最大值 1000. |
| fromId | LONG | NO | 从哪一条成交id开始返回. 缺省返回最近的成交记录。 |
响应
[
{
"a": 26129, // 归集成交ID
"p": "0.01633102", // 成交价
"q": "4.70443515", // 成交量
"f": 27781, // 被归集的首个成交ID
"l": 27781, // 被归集的末个成交ID
"T": 1498793709153, // 成交时间
"m": true, // 是否为主动卖出单
}
]GET /api/v1/aggTrades
归集交易与逐笔交易的区别在于,同一价格、同一方向、同一时间的trade会被聚合为一条
权重: 20
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | YES | |
| fromId | LONG | NO | 从包含fromId的成交id开始返回结果 |
| startTime | LONG | NO | 从该时刻之后的成交记录开始返回结果 |
| endTime | LONG | NO | 返回该时刻为止的成交记录 |
| limit | INT | NO | 默认 500; 最大 1000. |
- 如果发送startTime和endTime,间隔必须小于一小时。
- 如果没有发送任何筛选参数(fromId, startTime,endTime),默认返回最近的成交记录
响应
[
[
1499040000000, // 开盘时间
"0.01634790", // 开盘价
"0.80000000", // 最高价
"0.01575800", // 最低价
"0.01577100", // 收盘价(当前K线未结束的即为最新价)
"148976.11427815", // 成交量
1499644799999, // 收盘时间
"2434.19055334", // 成交额
308, // 成交笔数
"1756.87402397", // 主动买入成交量
"28.46694368", // 主动买入成交额
]
]GET /api/v1/klines
每根K线代表一个交易对。 每根K线的开盘时间可视为唯一ID
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | YES | |
| interval | ENUM | YES | 详见枚举定义:K线间隔 |
| startTime | LONG | NO | |
| endTime | LONG | NO | |
| limit | INT | NO | 默认 500; 最大 1500. |
- 如果未发送 startTime 和 endTime ,默认返回最近的交易。
响应
{
"symbol": "BTCUSDT",
"priceChange": "-94.99999800", //24小时价格变动
"priceChangePercent": "-95.960", //24小时价格变动百分比
"weightedAvgPrice": "0.29628482", //加权平均价
"prevClosePrice": "3.89000000", //上一次结束价格
"lastPrice": "4.00000200", //最近一次成交价
"lastQty": "200.00000000", //最近一次成交额
"bidPrice": "866.66000000", //最高的买入价格
"bidQty": "72.05100000", //最高的买入价格的数量
"askPrice": "866.73000000", //最低的卖出价
"askQty": "1.21700000", //最低的卖出价格的数量
"openPrice": "99.00000000", //24小时内第一次成交的价格
"highPrice": "100.00000000", //24小时最高价
"lowPrice": "0.10000000", //24小时最低价
"volume": "8913.30000000", //24小时成交量
"quoteVolume": "15.30000000", //24小时成交额
"openTime": 1499783499040, //24小时内,第一笔交易的发生时间
"closeTime": 1499869899040, //24小时内,最后一笔交易的发生时间
"firstId": 28385, // 首笔成交id
"lastId": 28460, // 末笔成交id
"count": 76, // 成交笔数
"baseAsset": "BTC", //基础代币
"quoteAsset": "USDT" //报价代币
}GET /api/v1/ticker/24hr
24 小时滚动窗口价格变动数据。 请注意,不携带symbol参数会返回全部交易对数据,此时返回的数据为示例相应的数组,不仅数据庞大,而且权重极高
权重: 1 单一交易对; 40 交易对参数缺失;
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | NO |
- 请注意,不携带symbol参数会返回全部交易对数据
响应
{
"symbol": "ADAUSDT",
"price": "1.30000000",
"time": 1649666690902
} OR
[
{
"symbol": "ADAUSDT",
"price": "1.30000000",
"time": 1649666690902
}
]GET /api/v1/ticker/price
获取交易对最新价格
权重: 1 单一交易对; 2 交易对参数缺失;
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | NO |
- 不发送交易对参数,则会返回所有交易对信息
响应
{
"symbol": "LTCBTC",
"bidPrice": "4.00000000",
"bidQty": "431.00000000",
"askPrice": "4.00000200",
"askQty": "9.00000000"
"time": 1589437530011 // 交易时间
}OR
[
{
"symbol": "LTCBTC",
"bidPrice": "4.00000000",
"bidQty": "431.00000000",
"askPrice": "4.00000200",
"askQty": "9.00000000",
"time": 1589437530011 // 交易时间
}
]GET /api/v1/ticker/bookTicker
返回当前最优的挂单(最高买单,最低卖单)
权重: 1 单一交易对; 2 交易对参数缺失;
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | NO |
- 不发送交易对参数,则会返回所有交易对信息
响应
{
"symbol": "APXUSDT",
"makerCommissionRate": "0.000200",
"takerCommissionRate": "0.000700"
}GET /api/v1/commissionRate
获取Symbol手续费。
权重: 20
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | YES | |
| recvWindow | LONG | NO | 赋值不能大于 60000 |
| timestamp | LONG | YES |
Response ACK:
{
"symbol": "BTCUSDT", // 交易对
"orderId": 28, // 系统的订单ID
"clientOrderId": "6gCrw2kRUAF9CvJDGP16IP", // 客户自己设置的ID
"updateTime": 1507725176595, // 交易的时间戳
"price": "0.00000000", // 订单价格
"avgPrice": "0.0000000000000000", //平均价格
"origQty": "10.00000000", // 用户设置的原始订单数量
"cumQty": "0", //累计数量
"executedQty": "10.00000000", // 交易的订单数量
"cumQuote": "10.00000000", // 累计交易的金额
"status": "FILLED", // 订单状态
"timeInForce": "GTC", // 订单的时效方式
"stopPrice": "0", //触发价格
"origType": "LIMIT", //触发前订单类型
"type": "LIMIT", // 订单类型, 比如市价单,现价单等
"side": "SELL", // 订单方向,买还是卖
}POST /api/v1/order (HMAC SHA256)
发送下单。
权重: 1
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | YES | |
| side | ENUM | YES | 详见枚举定义:订单方向 |
| type | ENUM | YES | 详见枚举定义:订单类型 |
| timeInForce | ENUM | NO | 详见枚举定义:有效方式 |
| quantity | DECIMAL | NO | |
| quoteOrderQty | DECIMAL | NO | |
| price | DECIMAL | NO | |
| newClientOrderId | STRING | NO | 客户自定义的唯一订单ID。 如果未发送,则自动生成 |
| stopPrice | DECIMAL | NO | 仅 STOP, STOP_MARKET , TAKE_PROFIT,TAKE_PROFIT_MARKET 需要此参数。 |
| recvWindow | LONG | NO | 赋值不能大于 60000 |
| timestamp | LONG | YES |
基于订单 type不同,强制要求某些参数:
| 类型 | 强制要求的参数 |
|---|---|
LIMIT |
timeInForce, quantity, price |
MARKET |
quantity 或 quoteOrderQty |
STOP和TAKE_PROFIT |
quantity, price, stopPrice |
STOP_MARKET和TAKE_PROFIT_MARKET |
quantity, stopPrice |
其他信息:
- 下
MARKETSELL市价单,用户通过QUANTITY控制想用市价单卖出的基础资产数量。- 比如在
BTCUSDT交易对上下一个MARKETSELL市价单, 通过QUANTITY让用户指明想卖出多少BTC。
- 比如在
- 下
MARKETBUY的市价单,用户使用quoteOrderQty控制想用市价单买入的报价资产数量,QUANTITY将由系统根据市场流动性计算出来。 * 比如在BTCUSDT交易对上下一个MARKETBUY市价单, 通过quoteOrderQty让用户选择想使用多少USDT买入BTC。 - 使用
quoteOrderQty的市价单MARKET不会突破LOT_SIZE的限制规则; 报单会按给定的quoteOrderQty尽可能接近地被执行。 - 除非之前的订单已经成交, 不然设置了相同的
newClientOrderId订单会被拒绝。
响应
{
"symbol": "BTCUSDT", // 交易对
"orderId": 28, // 系统的订单ID
"clientOrderId": "6gCrw2kRUAF9CvJDGP16IP", // 客户自己设置的ID
"updateTime": 1507725176595, // 交易的时间戳
"price": "0.00000000", // 订单价格
"avgPrice": "0.0000000000000000", //平均价格
"origQty": "10.00000000", // 用户设置的原始订单数量
"cumQty": "0", //累计数量
"executedQty": "10.00000000", // 交易的订单数量
"cumQuote": "10.00000000", // 累计交易的金额
"status": "CANCELED", // 订单状态
"timeInForce": "GTC", // 订单的时效方式
"stopPrice": "0", //触发价格
"origType": "LIMIT", //触发前订单类型
"type": "LIMIT", // 订单类型, 比如市价单,现价单等
"side": "SELL", // 订单方向,买还是卖
}DELETE /api/v1/order (HMAC SHA256)
取消有效订单。
权重: 1
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | YES | |
| orderId | LONG | NO | |
| origClientOrderId | STRING | NO | |
| recvWindow | LONG | NO | |
| timestamp | LONG | YES |
orderId 或 origClientOrderId 必须至少发送一个
响应
{
"orderId": 38, // 系统订单号
"symbol": "ADA25SLP25", // 交易对
"status": "FILLED", // 订单状态
"clientOrderId": "afMd4GBQyHkHpGWdiy34Li", // 用户自定义的订单号
"price": "20", // 委托价格
"avgPrice": "12.0000000000000000", // 平均成交价
"origQty": "10", // 原始委托数量
"executedQty": "10", // 成交量
"cumQuote": "120", // 成交金额
"timeInForce": "GTC", // 有效方法
"type": "LIMIT", // 订单类型
"side": "BUY", // 买卖方向
"stopPrice": "0", // 触发价
"origType": "LIMIT", // 触发前订单类型
"time": 1649913186270, // 订单时间
"updateTime": 1649913186297 // 更新时间
}GET /api/v1/order (HMAC SHA256)
查询订单状态。
- 请注意,如果订单满足如下条件,不会被查询到:
- 订单的最终状态为
CANCELED或者EXPIRED, 并且 - 订单没有任何的成交记录, 并且
- 订单生成时间 + 7天 < 当前时间
- 订单的最终状态为
权重: 1
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | YES | |
| orderId | LONG | NO | |
| origClientOrderId | STRING | NO | |
| recvWindow | LONG | NO | |
| timestamp | LONG | YES |
注意:
- 至少需要发送
orderId与origClientOrderId中的一个
响应
{
"orderId": 38, // 系统订单号
"symbol": "ADA25SLP25", // 交易对
"status": "NEW", // 订单状态
"clientOrderId": "afMd4GBQyHkHpGWdiy34Li", // 用户自定义的订单号
"price": "20", // 委托价格
"avgPrice": "12.0000000000000000", // 平均成交价
"origQty": "10", // 原始委托数量
"executedQty": "10", // 成交量
"cumQuote": "120", // 成交金额
"timeInForce": "GTC", // 有效方法
"type": "LIMIT", // 订单类型
"side": "BUY", // 买卖方向
"stopPrice": "0", // 触发价
"origType": "LIMIT", // 触发前订单类型
"time": 1649913186270, // 订单时间
"updateTime": 1649913186297 // 更新时间
}GET /api/v1/openOrder (HMAC SHA256)
查询订单状态。
权重: 1
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | YES | |
| orderId | LONG | NO | |
| origClientOrderId | STRING | NO | |
| recvWindow | LONG | NO | |
| timestamp | LONG | YES |
注意:
- 至少需要发送
orderId与origClientOrderId中的一个
响应
[
{
"orderId": 349661, // 系统订单号
"symbol": "BNBUSDT", // 交易对
"status": "NEW", // 订单状态
"clientOrderId": "LzypgiMwkf3TQ8wwvLo8RA", // 用户自定义的订单号
"price": "1.10000000", // 委托价格
"avgPrice": "0.0000000000000000", // 平均成交价
"origQty": "5", // 原始委托数量
"executedQty": "0", // 成交量
"cumQuote": "0", // 成交金额
"timeInForce": "GTC", // 有效方法
"type": "LIMIT", // 订单类型
"side": "BUY", // 买卖方向
"stopPrice": "0", // 触发价
"origType": "LIMIT", // 触发前订单类型
"time": 1756252940207, // 订单时间
"updateTime": 1756252940207, // 更新时间
}
]GET /api/v1/openOrders (HMAC SHA256)
获取交易对的所有当前挂单, 请小心使用不带交易对参数的调用。
权重:
- 带symbol 1
- 不带 40
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | NO | |
| recvWindow | LONG | NO | |
| timestamp | LONG | YES |
- 不带symbol参数,会返回所有交易对的挂单
响应
{
"code": 200,
"msg": "The operation of cancel all open order is done."
}DEL /api/v1/allOpenOrders (HMAC SHA256)
权重:
- 1
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | YES | |
| orderIdList | STRING | NO | id数组字符串 |
| origClientOrderIdList | STRING | NO | clientOrderId数组字符串 |
| recvWindow | LONG | NO | |
| timestamp | LONG | YES |
响应
[
{
"orderId": 349661, // 系统订单号
"symbol": "BNBUSDT", // 交易对
"status": "NEW", // 订单状态
"clientOrderId": "LzypgiMwkf3TQ8wwvLo8RA", // 用户自定义的订单号
"price": "1.10000000", // 委托价格
"avgPrice": "0.0000000000000000", // 平均成交价
"origQty": "5", // 原始委托数量
"executedQty": "0", // 成交量
"cumQuote": "0", // 成交金额
"timeInForce": "GTC", // 有效方法
"type": "LIMIT", // 订单类型
"side": "BUY", // 买卖方向
"stopPrice": "0", // 触发价
"origType": "LIMIT", // 触发前订单类型
"time": 1756252940207, // 订单时间
"updateTime": 1756252940207, // 更新时间
}
]GET /api/v1/allOrders (HMAC SHA256)
获取所有帐户订单; 有效,已取消或已完成。
- 请注意,如果订单满足如下条件,不会被查询到:
- 订单生成时间 + 7天 < 当前时间
权重: 5
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | YES | |
| orderId | LONG | NO | |
| startTime | LONG | NO | |
| endTime | LONG | NO | |
| limit | INT | NO | 默认 500; 最大 1000. |
| recvWindow | LONG | NO | |
| timestamp | LONG | YES |
- 查询时间范围最大不得超过7天
- 默认查询最近7天内的数据
响应:
{
"tranId": 21841, //交易id
"status": "SUCCESS" //状态
}POST /api/v1/asset/wallet/transfer (HMAC SHA256)
权重: 5
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| amount | DECIMAL | YES | 数量 |
| asset | STRING | YES | 资产 |
| clientTranId | STRING | YES | 交易id |
| kindType | STRING | YES | 交易类型 |
| recvWindow | LONG | NO | |
| timestamp | LONG | YES | 时间戳 |
注意:
- kindType 取值为FUTURE_SPOT(期货转现货),SPOT_FUTURE(现货转期货)
响应:
{
"tranId": 21841, //交易id
"status": "SUCCESS" //状态
}POST /api/v1/asset/sendToAddress (HMAC SHA256)
权重: 1
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| amount | DECIMAL | YES | 数量 |
| asset | STRING | YES | 资产 |
| toAddress | STRING | YES | 目标地址 |
| clientTranId | STRING | NO | 交易id |
| recvWindow | LONG | NO | |
| timestamp | LONG | YES | 时间戳 |
注意:
- toAddress必须存在, 且不能为发送方账户
- toAddress为evm地址
- clientTranId如果传入则长度最少为20
响应
{
"tokenPrice": 1.00019000,
"gasCost": 0.5000,
"gasUsdValue": 0.5
}GET /api/v1/aster/withdraw/estimateFee
权重: 1
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| chainId | STRING | YES | |
| asset | STRING | YES |
注意:
- chainId: 1(ETH),56(BSC),42161(Arbi)
- gasCost: 提现所需的最少数量的手续费
响应
{
"withdrawId": "1014729574755487744",
"hash":"0xa6d1e617a3f69211df276fdd8097ac8f12b6ad9c7a49ba75bbb24f002df0ebb"
}POST /api/v1/aster/user-withdraw (HMAC SHA256)
权重: 5
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| chainId | STRING | YES | |
| asset | STRING | YES | |
| amount | STRING | YES | |
| fee | STRING | YES | |
| receiver | STRING | YES | |
| nonce | STRING | YES | 当前时间的微秒值 |
| userSignature | STRING | YES | |
| recvWindow | LONG | NO | |
| timestamp | LONG | YES |
注意:
- chainId: 1(ETH),56(BSC),42161(Arbi)
- receiver : 当前账户的地址
- 如果期货余额不足,会从spot账户划转到期货账户,进行提现
- userSignature demo
const domain = {
name: 'Aster',
version: '1',
chainId: 56,
verifyingContract: ethers.ZeroAddress,
}
const currentTime = Date.now() * 1000
const types = {
Action: [
{name: "type", type: "string"},
{name: "destination", type: "address"},
{name: "destination Chain", type: "string"},
{name: "token", type: "string"},
{name: "amount", type: "string"},
{name: "fee", type: "string"},
{name: "nonce", type: "uint256"},
{name: "aster chain", type: "string"},
],
}
const value = {
'type': 'Withdraw',
'destination': '0xD9cA6952F1b1349d27f91E4fa6FB8ef67b89F02d',
'destination Chain': 'BSC',
'token': 'USDT',
'amount': '10.123400',
'fee': '1.234567891',
'nonce': currentTime,
'aster chain': 'Mainnet',
}
const signature = await signer.signTypedData(domain, types, value)响应
111111POST /api/v1/getNonce
权重: 1
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| address | STRING | YES | |
| userOperationType | STRING | YES | CREATE_API_KEY |
| network | STRING | NO |
注意:
- userOperationType 仅可取值: CREATE_API_KEY
- network: sol网络必须传入SOL,其他忽略
- 限流单IP一分钟60次
响应
{
"apiKey": "bb3b24d0a3dec88cb06be58a257e4575cb0b1bb256ad6fd90ae8fd0ee1d102ae",
"apiSecret": "9fe8f5642ae1961674ea0cb7f957fa99dc8e0421b607c985a963ad2ced90ae1c"
}POST /api/v1/createApiKey
权重: 1
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| address | STRING | YES | |
| userOperationType | STRING | YES | CREATE_API_KEY |
| network | STRING | NO | |
| userSignature | STRING | YES | |
| apikeyIP | STRING | NO | |
| desc | STRING | YES | |
| recvWindow | LONG | NO | |
| timestamp | LONG | YES |
注意:
- userOperationType 仅可取值: CREATE_API_KEY
- network: sol网络必须传入SOL,其他忽略
- desc: 同一账户不能重复,长度不能超过20个字符
- apikeyIP ip数组以,分隔
- 限流单IP一分钟60次
- userSignature evm demo
const nonce = 111111
const message = 'You are signing into Astherus ${nonce}' ;
const signature = await signer.signMessage(message);响应
{
"feeTier": 0,
"canTrade": true,
"canDeposit": true,
"canWithdraw": true,
"canBurnAsset": true,
"updateTime": 0,
"balances": [
{
"asset": "BTC",
"free": "4723846.89208129",
"locked": "0.00000000"
},
{
"asset": "LTC",
"free": "4763368.68006011",
"locked": "0.00000000"
}
]
}GET /api/v1/account (HMAC SHA256)
获取当前账户信息。
权重: 5
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| recvWindow | LONG | NO | |
| timestamp | LONG | YES |
响应
[
{
"symbol": "BNBUSDT",
"id": 1002,
"orderId": 266358,
"side": "BUY",
"price": "1",
"qty": "2",
"quoteQty": "2",
"commission": "0.00105000",
"commissionAsset": "BNB",
"time": 1755656788798,
"counterpartyId": 19,
"createUpdateId": null,
"maker": false,
"buyer": true
}
] GET /api/v1/userTrades (HMAC SHA256)
获取账户指定交易对的成交历史
权重: 5
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| symbol | STRING | NO | |
| orderId | LONG | NO | 必须要和参数symbol一起使用. |
| startTime | LONG | NO | |
| endTime | LONG | NO | |
| fromId | LONG | NO | 起始Trade id。 默认获取最新交易。 |
| limit | INT | NO | 默认 500; 最大 1000. |
| recvWindow | LONG | NO | |
| timestamp | LONG | YES |
- 如果
startTime和endTime均未发送, 只会返回最近7天的数据。 - startTime 和 endTime 的最大间隔为7天
- 不能同时传
fromId与startTime或endTime
- 本篇所列出的所有wss接口的baseurl为: wss://sstream.asterdex.com
- Streams有单一原始 stream 或组合 stream
- 单一原始 streams 格式为 /ws/<streamName>
- 组合streams的URL格式为 /stream?streams=<streamName1>/<streamName2>/<streamName3>
- 订阅组合streams时,事件payload会以这样的格式封装: {"stream":"<streamName>","data":<rawPayload>}
- stream名称中所有交易对均为 小写
- 每个到 sstream.asterdex.com 的链接有效期不超过24小时,请妥善处理断线重连。
- 每3分钟,服务端会发送ping帧,客户端应当在10分钟内回复pong帧,否则服务端会主动断开链接。允许客户端发送不成对的pong帧(即客户端可以以高于10分钟每次的频率发送pong帧保持链接)。
- 以下数据可以通过websocket发送以实现订阅或取消订阅数据流。示例如下。
- 响应内容中的
id是无符号整数,作为往来信息的唯一标识。 - 如果相应内容中的
result为null,表示请求发送成功。
响应
{
"result": null,
"id": 1
}- 请求
{
"method": "SUBSCRIBE",
"params":
[
"btcusdt@aggTrade",
"btcusdt@depth"
],
"id": 1
}
响应
{
"result": null,
"id": 312
}- 请求
{
"method": "UNSUBSCRIBE",
"params":
[
"btcusdt@depth"
],
"id": 312
}
响应
{
"result": [
"btcusdt@aggTrade"
],
"id": 3
}-
请求
{
"method": "LIST_SUBSCRIPTIONS",
"id": 3
}
当前,唯一可以设置的属性是设置是否启用combined("组合")信息流。
当使用/ws/("原始信息流")进行连接时,combined属性设置为false,而使用 /stream/进行连接时则将属性设置为true。
响应
{
"result": null,
"id": 5
}- 请求
{
"method": "SET_PROPERTY",
"params":
[
"combined",
true
],
"id": 5
}
响应
{
"result": true, // Indicates that combined is set to true.
"id": 2
}-
请求
{
"method": "GET_PROPERTY",
"params":
[
"combined"
],
"id": 2
}
###错误信息
| 错误信息 | 描述 |
|---|---|
| {"code": 0, "msg": "Unknown property"} | SET_PROPERTY 或 GET_PROPERTY中应用的参数无效 |
| {"code": 1, "msg": "Invalid value type: expected Boolean", "id": '%s'} | 仅接受true或false |
| {"code": 2, "msg": "Invalid request: property name must be a string"} | 提供的属性名无效 |
| {"code": 2, "msg": "Invalid request: request ID must be an unsigned integer"} | 参数id未提供或id值是无效类型 |
{"code": 2, "msg": "Invalid request: unknown variant %s, expected one of SUBSCRIBE, UNSUBSCRIBE, LIST_SUBSCRIPTIONS, SET_PROPERTY, GET_PROPERTY at line 1 column 28"} |
错字提醒,或提供的值不是预期类型 |
| {"code": 2, "msg": "Invalid request: too many parameters"} | 数据中提供了不必要参数 |
| {"code": 2, "msg": "Invalid request: property name must be a string"} | 未提供属性名 |
{"code": 2, "msg": "Invalid request: missing field method at line 1 column 73"} |
数据未提供method |
| {"code":3,"msg":"Invalid JSON: expected value at line %s column %s"} | JSON 语法有误. |
Payload:
{
"e": "aggTrade", // 事件类型
"E": 123456789, // 事件时间
"s": "BNBBTC", // 交易对
"a": 12345, // 归集交易ID
"p": "0.001", // 成交价格
"q": "100", // 成交数量
"f": 100, // 被归集的首个交易ID
"l": 105, // 被归集的末次交易ID
"T": 123456785, // 成交时间
"m": true, // 买方是否是做市方。如true,则此次成交是一个主动卖出单,否则是一个主动买入单。
}归集交易 stream 推送交易信息,是对单一订单的集合。
Stream 名称: <symbol>@aggTrade
Update Speed: 实时
Payload:
{
"e": "trade", // 事件类型
"E": 123456789, // 事件时间
"s": "BNBBTC", // 交易对
"t": 12345, // 交易ID
"p": "0.001", // 成交价格
"q": "100", // 成交数量
"T": 123456785, // 成交时间
"m": true, // 买方是否是做市方。如true,则此次成交是一个主动卖出单,否则是一个主动买入单。
}Stream Name: <symbol>@trade
逐笔交易推送每一笔成交的信息。成交,或者说交易的定义是仅有一个吃单者与一个挂单者相互交易
Payload:
{
"e": "kline", // 事件类型
"E": 123456789, // 事件时间
"s": "BNBBTC", // 交易对
"k": {
"t": 123400000, // 这根K线的起始时间
"T": 123460000, // 这根K线的结束时间
"s": "BNBBTC", // 交易对
"i": "1m", // K线间隔
"f": 100, // 这根K线期间第一笔成交ID
"L": 200, // 这根K线期间末一笔成交ID
"o": "0.0010", // 这根K线期间第一笔成交价
"c": "0.0020", // 这根K线期间末一笔成交价
"h": "0.0025", // 这根K线期间最高成交价
"l": "0.0015", // 这根K线期间最低成交价
"v": "1000", // 这根K线期间成交量
"n": 100, // 这根K线期间成交笔数
"x": false, // 这根K线是否完结(是否已经开始下一根K线)
"q": "1.0000", // 这根K线期间成交额
"V": "500", // 主动买入的成交量
"Q": "0.500", // 主动买入的成交额
"B": "123456" // 忽略此参数
}
}K线stream逐秒推送所请求的K线种类(最新一根K线)的更新。
Stream Name: <symbol>@kline_<interval>
Update Speed: 2000ms
K线图间隔参数:
m -> 分钟; h -> 小时; d -> 天; w -> 周; M -> 月
- 1m
- 3m
- 5m
- 15m
- 30m
- 1h
- 2h
- 4h
- 6h
- 8h
- 12h
- 1d
- 3d
- 1w
- 1M
Payload:
{
"e": "24hrMiniTicker", // 事件类型
"E": 123456789, // 事件时间
"s": "BNBBTC", // 交易对
"c": "0.0025", // 最新成交价格
"o": "0.0010", // 24小时前开始第一笔成交价格
"h": "0.0025", // 24小时内最高成交价
"l": "0.0010", // 24小时内最低成交价
"v": "10000", // 成交量
"q": "18" // 成交额
}按Symbol刷新的最近24小时精简ticker信息
Stream 名称: <symbol>@miniTicker
Update Speed: 1000ms
Payload:
[
{
// 数组每一个元素对应一个交易对,内容与 \<symbol\>@miniTicker相同
}
]同上,只是推送所有交易对.需要注意的是,只有更新的ticker才会被推送.
Stream名称: !miniTicker@arr
Update Speed: 1000ms
Payload:
{
"e": "24hrTicker", // 事件类型
"E": 123456789, // 事件时间
"s": "BNBBTC", // 交易对
"p": "0.0015", // 24小时价格变化
"P": "250.00", // 24小时价格变化(百分比)
"w": "0.0018", // 平均价格
"c": "0.0025", // 最新成交价格
"Q": "10", // 最新成交交易的成交量
"o": "0.0010", // 整整24小时前,向后数的第一次成交价格
"h": "0.0025", // 24小时内最高成交价
"l": "0.0010", // 24小时内最低成交价
"v": "10000", // 24小时内成交量
"q": "18", // 24小时内成交额
"O": 0, // 统计开始时间
"C": 86400000, // 统计结束时间
"F": 0, // 24小时内第一笔成交交易ID
"L": 18150, // 24小时内最后一笔成交交易ID
"n": 18151 // 24小时内成交数
}每秒推送单个交易对的过去24小时滚动窗口标签统计信息。
Stream 名称: <symbol>@ticker
Update Speed: 1000ms
Payload:
[
{
// Same as <symbol>@ticker payload
}
]推送全市场所有交易对刷新的24小时完整ticker信息。需要注意的是,没有更新的ticker不会被推送。
Stream Name: !ticker@arr
Update Speed: 1000ms
Payload:
{
"u":400900217, // order book updateId
"s":"BNBUSDT", // 交易对
"b":"25.35190000", // 买单最优挂单价格
"B":"31.21000000", // 买单最优挂单数量
"a":"25.36520000", // 卖单最优挂单价格
"A":"40.66000000" // 卖单最优挂单数量
}实时推送指定交易对最优挂单信息
Stream Name: <symbol>@bookTicker
Update Speed: 实时
Payload:
{
// 同 <symbol>@bookTicker payload
}实时推送所有交易对最优挂单信息
Stream Name: !bookTicker
Update Speed: 实时
Payload:
{
"e": "depthUpdate", // Event type
"E": 123456789, // Event time
"T": 123456788, // Transaction time
"s": "BTCUSDT", // Symbol
"U": 100, // First update ID in event
"u": 120, // Final update ID in event
"pu": 99, // Final update Id in last stream(ie `u` in last stream)
"bids": [ // Bids to be updated
[
"0.0024", // Price level to be updated
"10" // Quantity
]
],
"asks": [ // Asks to be updated
[
"0.0026", // Price level to be updated
"100" // Quantity
]
]
} 每秒或每100毫秒推送有限档深度信息。levels表示几档买卖单信息, 可选 5/10/20档
Stream Names: <symbol>@depth<levels> 或 <symbol>@depth<levels>@100ms.
Update Speed: 1000ms 或 100ms
Payload:
{
"e": "depthUpdate", // Event type
"E": 123456789, // Event time
"T": 123456788, // Transaction time
"s": "BTCUSDT", // Symbol
"U": 100, // First update ID in event
"u": 120, // Final update ID in event
"pu": 99, // Final update Id in last stream(ie `u` in last stream)
"b": [ // Bids to be updated
[
"5.4", // Price level to be updated
"10" // Quantity
]
],
"a": [ // Asks to be updated
[
"5.6", // Price level to be updated
"100" // Quantity
]
]
} 每秒或每100毫秒推送orderbook的变化部分(如果有)
Stream Name: <symbol>@depth 或 <symbol>@depth@100ms
Update Speed: 1000ms 或 100ms
- 订阅 wss://sstream.asterdex.com/ws/bnbbtc@depth
- 开始缓存收到的更新。同一个价位,后收到的更新覆盖前面的。
- 访问Rest接口 https://sapi.asterdex.com/api/v1/depth?symbol=BNBBTC&limit=1000 获得一个1000档的深度快照
- 将目前缓存到的信息中
u<= 步骤3中获取到的快照中的lastUpdateId的部分丢弃(丢弃更早的信息,已经过期)。 - 将深度快照中的内容更新到本地orderbook副本中,并从websocket接收到的第一个
U<=lastUpdateId+1 且u>=lastUpdateId+1 的event开始继续更新本地副本。 - 每一个新event的
U应该恰好等于上一个event的u+1,否则可能出现了丢包,请从step3重新进行初始化。 - 每一个event中的挂单量代表这个价格目前的挂单量绝对值,而不是相对变化。
- 如果某个价格对应的挂单量为0,表示该价位的挂单已经撤单或者被吃,应该移除这个价位。
- 本篇所列出API接口的base url : https://sapi.asterdex.com
- 用于订阅账户数据的
listenKey从创建时刻起有效期为60分钟 - 可以通过
PUT一个listenKey延长60分钟有效期 - 可以通过
DELETE一个listenKey立即关闭当前数据流,并使该listenKey无效 - 在具有有效
listenKey的帐户上执行POST将返回当前有效的listenKey并将其有效期延长60分钟 - websocket接口的baseurl: wss://sstream.asterdex.com
- U订阅账户数据流的stream名称为 /ws/<listenKey>
- 每个链接有效期不超过24小时,请妥善处理断线重连。
响应
{
"listenKey": "pqia91ma19a5s61cv6a81va65sdf19v8a65a1a5s61cv6a81va65sdf19v8a65a1"
}POST /api/v1/listenKey
开始一个新的数据流。除非发送 keepalive,否则数据流于60分钟后关闭。如果该帐户具有有效的listenKey,则将返回该listenKey并将其有效期延长60分钟。
权重: 1
参数: NONE
响应
{}PUT /api/v1/listenKey
有效期延长至本次调用后60分钟,建议每30分钟发送一个 ping 。
权重: 1
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| listenKey | STRING | YES |
响应
{}DELETE /api/v1/listenKey
关闭用户数据流。
权重: 1
参数:
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| listenKey | STRING | YES |
每当帐户余额发生更改时,都会发送一个事件outboundAccountPosition,其中包含可能由生成余额变动的事件而变动的资产。
Payload
{
"B":[// 余额
{
"a":"SLP25", // 资产名称
"f":"10282.42029415", // 可用余额
"l":"653.00000001" // 冻结余额
},
{
"a":"ADA25",
"f":"9916.96229880",
"l":"34.00510000"
}
],
"e":"outboundAccountPosition", // 事件类型
"T":1649926447190, // 账户末次更新时间戳
"E":1649926447205 // 事件时间
"m":"WITHDRAW" // 事件推出原因
}订单通过executionReport事件进行更新。
Payload
{
"s":"ADA25SLP25", // 交易对
"c":"Xzh0gnxT41PStbwqOtXnjD", // 客户端自定订单ID
"S":"SELL", // 订单方向
"o":"LIMIT", // 订单类型
"f":"GTC", // 有效方式
"q":"10.001000", // 订单原始数量
"p":"19.1000000000", // 订单原始价格
"ap":"19.0999999955550656", //平均价格
"P":"0", // 条件订单触发价格
"x":"TRADE", // 本次事件的具体执行类型
"X":"PARTIALLY_FILLED", // 订单的当前状态
"i":27, // 订单ID
"l":"1", // 订单末次成交量
"z":"8.999000", // 订单累计已成交量
"L":"19.1000000000", // 订单末次成交价格
"n":"0.00382000", // 手续费数量
"N":"SLP25", // 手续费资产类型
"T":1649926447190, // 成交时间
"t":18, // 成交ID
"m":true, // 该成交是作为挂单成交吗?
"ot":"LIMIT", //初始订单类型
"O":0, // 订单时间
"Z":"171.88089996", // 累计报价资产交易数量
"Y":"19.1000000000000000", // 最近报价交易数量
"Q":"0", // 报价数量
"e":"executionReport", // 事件类型
"E":1649926447209 // 事件时间
} 执行类型:
- NEW 新订单
- CANCELED 订单被取消
- REJECTED 新订单被拒绝
- TRADE 订单有新成交
- EXPIRED 订单失效(根据订单的Time In Force参数)
#错误代码
error JSON payload:
{
"code":-1121,
"msg":"Invalid symbol."
}错误由两部分组成:错误代码和消息。 代码是通用的,但是消息可能会有所不同。
- An unknown error occured while processing the request.
- 处理请求时发生未知错误。
- Internal error; unable to process your request. Please try again.
- 内部错误; 无法处理您的请求。 请再试一次.
- You are not authorized to execute this request.
- 您无权执行此请求。
- Too many requests queued.
- 排队的请求过多。
- Too many requests; please use the websocket for live updates.
- 请求权重过多; 请使用websocket获取最新更新。
- Too many requests; current limit is %s requests per minute. Please use the websocket for live updates to avoid polling the API.
- 请求权重过多; 当前限制为每分钟%s请求权重。 请使用websocket进行实时更新,以避免轮询API。
- Way too many requests; IP banned until %s. Please use the websocket for live updates to avoid bans.
- 请求权重过多; IP被禁止,直到%s。 请使用websocket进行实时更新,以免被禁。
- This IP is already on the white list
- IP地址已经在白名单
- No such IP has been white listed
- 白名单上没有此IP地址
- An unexpected response was received from the message bus. Execution status unknown.
- 从消息总线收到意外的响应。执行状态未知。
- Timeout waiting for response from backend server. Send status unknown; execution status unknown.
- 等待后端服务器响应超时。 发送状态未知; 执行状态未知。
- Unsupported order combination.
- 不支持当前的下单参数组合
- Too many new orders.
- 新订单太多。
- Too many new orders; current limit is %s orders per %s.
- 新订单太多; 当前限制为每%s %s个订单。
- This service is no longer available.
- 该服务不可用。
- This operation is not supported.
- 不支持此操作。
- Timestamp for this request is outside of the recvWindow.
- 此请求的时间戳在recvWindow之外。
- Timestamp for this request was 1000ms ahead of the server's time.
- 此请求的时间戳比服务器时间提前1000毫秒。
- Signature for this request is not valid.
- 此请求的签名无效。
- Start time is greater than end time.
- 参数里面的开始时间在结束时间之后
- Illegal characters found in a parameter.
- 在参数中发现非法字符。
- Illegal characters found in parameter '%s'; legal range is '%s'.
- 在参数
%s中发现非法字符; 合法范围是%s。
- Too many parameters sent for this endpoint.
- 为此端点发送的参数太多。
- Too many parameters; expected '%s' and received '%s'.
- 参数太多;预期为
%s并收到了%s。 - Duplicate values for a parameter detected.
- 检测到的参数值重复。
- A mandatory parameter was not sent, was empty/null, or malformed.
- 未发送强制性参数,该参数为空/空或格式错误。
- Mandatory parameter '%s' was not sent, was empty/null, or malformed.
- 强制参数
%s未发送,为空/空或格式错误。 - Param '%s' or '%s' must be sent, but both were empty/null!
- 必须发送参数
%s或%s,但两者均为空!
- An unknown parameter was sent.
- 发送了未知参数。
- Not all sent parameters were read.
- 并非所有发送的参数都被读取。
- Not all sent parameters were read; read '%s' parameter(s) but was sent '%s'.
- 并非所有发送的参数都被读取; 读取了
%s参数,但被发送了%s。
- A parameter was empty.
- 参数为空。
- Parameter '%s' was empty.
- 参数
%s为空。
- A parameter was sent when not required.
- 发送了不需要的参数。
- Parameter '%s' sent when not required.
- 发送了不需要参数
%s。
- Precision is over the maximum defined for this asset.
- 精度超过为此资产定义的最大值。
- No orders on book for symbol.
- 交易对没有挂单。
- TimeInForce parameter sent when not required.
- 发送的
TimeInForce参数不需要。
- Invalid timeInForce.
- 无效的
timeInForce
- Invalid orderType.
- 无效订单类型。
- Invalid side.
- 无效买卖方向。
- New client order ID was empty.
- 新的客户订单ID为空。
- Original client order ID was empty.
- 客户自定义的订单ID为空。
- Invalid interval.
- 无效时间间隔。
- Invalid symbol.
- 无效的交易对。
- This listenKey does not exist.
- 此
listenKey不存在。
- Lookup interval is too big.
- 查询间隔太大。
- More than %s hours between startTime and endTime.
- 从开始时间到结束时间之间超过
%s小时。
- Combination of optional parameters invalid.
- 可选参数组合无效。
- Invalid data sent for a parameter.
- 发送的参数为无效数据。
- Data sent for parameter '%s' is not valid.
- 发送参数
%s的数据无效。
- Invalid newOrderRespType.
- 无效的 newOrderRespType。
- NEW_ORDER_REJECTED
- 新订单被拒绝
- CANCEL_REJECTED
- 取消订单被拒绝
- Order does not exist.
- 订单不存在。
- API-key format invalid.
- API-key 格式无效。
- Invalid API-key, IP, or permissions for action.
- 无效的API密钥,IP或操作权限。
- No trading window could be found for the symbol. Try ticker/24hrs instead.
- 找不到该交易对的交易窗口。 尝试改为24小时自动报价。
- Balance is insufficient.
- 余额不足
- Unable to fill.
- 无法成交
- Order would immediately trigger.
- 订单可能被立刻触发
- ReduceOnly Order is rejected.
ReduceOnly订单被拒绝
- Position is not sufficient.
- 持仓不足
- Reach max open order limit.
- 挂单量达到上限
- This OrderType is not supported when reduceOnly.
- 当前订单类型不支持
reduceOnly
- Invalid order status.
- 订单状态不正确
- Price less than 0.
- 价格小于0
- Price greater than max price.
- 价格超过最大值
- Quantity less than zero.
- 数量小于0
- Quantity less than min quantity.
- 数量小于最小值
- Quantity greater than max quantity.
- 数量大于最大值
- Stop price less than zero.
- 触发价小于最小值
- Stop price greater than max price.
- 触发价大于最大值
- Tick size less than zero.
- 价格精度小于0
- Max price less than min price.
- 最大价格小于最小价格
- Max qty less than min qty.
- 最大数量小于最小数量
- Step size less than zero.
- 步进值小于0
- Max num orders less than zero.
- 最大订单量小于0
- Price less than min price.
- 价格小于最小价格
- Price not increased by tick size.
- 价格增量不是价格精度的倍数。
- Client order id is not valid.
- 客户订单ID有误。
- Client order id length should not be more than 36 chars
- 客户订单ID长度应该不多于36字符
- Price is higher than mark price multiplier cap.
- Multiplier up less than zero.
- 价格上限小于0
- Multiplier down less than zero.
- 价格下限小于0
- Composite scale too large.
- Target strategy invalid for orderType '%s',reduceOnly '%b'.
- 目标策略值不适合
%s订单状态, 只减仓%b。
- Invalid depth limit.
- 深度信息的
limit值不正确。 - '%s' is not valid depth limit.
%s不是合理的深度信息的limit值。
- market status sent is not valid.
- 发送的市场状态不正确。
- Qty not increased by step size.
- 数量的递增值不是步进值的倍数。
- Price is lower than mark price multiplier floor.
- Multiplier decimal less than zero.
- Commission invalid.
- 收益值不正确
%sless than zero.%s少于0%sabsolute value greater than%s%s绝对值大于%s
- Invalid account type.
- 账户类型不正确。
- Tick size precision is invalid.
- 价格精度小数点位数不正确。
- Step size precision is invalid.
- 步进值小数点位数不正确。
- Invalid parameter working type
- 不正确的参数类型
- Invalid parameter working type:
%s - 不正确的参数类型:
%s
- Exceed maximum cancel order size.
- 超过可以取消的最大订单量。
- Invalid parameter working type:
%s - 不正确的参数类型:
%s
- Balance Type is invalid.
- 余额类型不正确。
- Reach max stop order limit.
- 达到止损单的上限。
- Amount must be positive.
- 数量必须是正整数
- Invalid api key type.
- API key的类型不正确
- Invalid api public key
- API key不正确
- maxPrice and priceDecimal too large,please check.
- maxPrice和priceDecimal太大,请检查。
- Invalid position side.
- 仓位方向不正确。
- Order's position side does not match user's setting.
- 订单的持仓方向和用户设置不一致。
- Invalid or improper reduceOnly value.
- 仅减仓的设置不正确。
- Method is not allowed currently. Upcoming soon.
- 方法不支持
- Invalid price spread threshold
- 无效的价差阀值
- User can only place reduce only order
- 用户只能下仅减仓订单
- User can not place order currently
- 用户当前不能下单
- clientTranId is not valid
- clientTranId不正确
- Client tran id length should be less than 64 chars
- 客户的tranId长度应该小于64个字符
- clientTranId is duplicated
- clientTranId重复
- Client tran id should be unique within 7 days
- 客户的tranId应在7天内唯一
- ReduceOnly Order Failed. Please check your existing position and open orders
- 仅减仓订单失败。请检查现有的持仓和挂单
- The counterparty's best price does not meet the PERCENT_PRICE filter limit
- 交易对手的最高价格未达到PERCENT_PRICE过滤器限制
- Invalid activation price
- 无效的激活价格
- Quantity must be zero with closePosition equals true
- 数量必须为0,当closePosition为true时
- Reduce only must be true with closePosition equals true
- Reduce only 必须为true,当closePosition为true时
- Order type can not be market if it's unable to cancel
- 订单类型不能为市价单如果不能取消
- Invalid symbol status for opening position
- 无效的交易对状态
- Symbol is closed
- 交易对已下架
- REJECT: take profit or stop order will be triggered immediately
- 拒绝:止盈止损单将立即被触发
- Order's notional must be no smaller than 5.0 (unless you choose reduce only)
- 订单的名义价值不可以小于5,除了使用reduce only
- Order's notional must be no smaller than %s (unless you choose reduce only)
- 订单的名义价值不可以小于
%s,除了使用reduce only
- Invalid time interval
- 无效的间隔
- Maximum time interval is %s days
- 最大的时间间隔为
%s天
- Price is higher than stop price multiplier cap.
- 止盈止损订单价格不应高于触发价与报价乘数上限的乘积
- Limit price can't be higher than %s.
- 止盈止损订单价格不应高于
%s
- Price is lower than stop price multiplier floor.
- 止盈止损订单价格不应低于触发价与报价乘数下限的乘积
- Limit price can't be lower than %s.
- 止盈止损订单价格不应低于
%sf