介绍
概述
MEXC 现货 API 为开发者提供现货交易相关的 REST API 和 WebSocket 推送服务,支持市场行情查询、账户资产查询、订单创建与撤销、订单查询、成交记录查询及实时行情订阅等功能。
开发者可以通过现货 API 构建交易工具、行情系统、资产管理系统及自动化交易应用。调用账户、交易等私有接口时,需要使用 API Key 进行鉴权,并按照现货 API 的签名规则生成签名。
API Key 设置
- 很多接口需要API Key才可以访问. 请参考这个页面来设置API Key.
- 设置API Key的同时,为了安全,建议设置IP访问白名单(未添加白名单有效期为90天).
- 设置可交易币对:您可在API管理页面“我的API Key —— 设置可交易币对”中设置该API Key允许的交易对.
- 续签:API Key到期前5天,您可在API管理页面“我的API Key —— 操作—— 续签”,将您的API Key有效期顺延90天.
- 永远不要把你的API key/secret告诉给任何人.
API Key 权限设置
在创建API Key时勾选所需要的权限
API 代码库
我们为开发者提供了Python,DotNET,Java,Javascript,Go五种语言的SDK,提供用户直接通过SDK调用API的方法。
https://github.com/mexcdevelop/mexc-api-demo
使用中遇到问题请通过提交问题反馈
Postman Collections
现在你可以通过Postman collection来快速体验、使用API接口。
如果想了解更多如何使用Postman,请访问: Mexc API Postman
接入URL
请选用以下的baseurl进行API请求:
https://api.mexc.com
HTTP 返回代码
- HTTP 4XX 错误码用于指示错误的请求内容、行为、格式。问题在于请求者。
- HTTP 401 表示身份认证、权限错误。
- HTTP 403 错误码表示违反WAF限制(Web应用程序防火墙)。
- HTTP 429 错误码表示警告访问频次超限,即将被封IP。
- HTTP 5XX 错误码用于指示MEXC服务端的问题。
请求格式
相应API接受GET,POST或DELETE类型的请求
- GET 方法的接口, 参数必须在 query string中发送。
- POST, PUT, 和 DELETE 方法的接口,参数可以在内容形式为application/x-www-form-urlencoded的 query string 中发送,也可以在 request body 中以application/json的形式发送。如果你喜欢,也可以混合这两种方式发送参数。
- 对参数的顺序不做要求。但如果同一个参数名在query string和request body中都有,query string中的会被优先采用。
返回格式
所有接口的返回数据均为JSON形式
Header操作的组成
请求Header中签名相关参数
| 组成部分 | 说明 |
|---|---|
X-MEXC-APIKEY | API key中的access key |
Content-Type | application/json |
签名
- 调用SIGNED接口时,除了接口本身所需的参数外,还需要在query string 或 request body中传递 signature, 即签名参数(在批量操作的API中,若参数值中有逗号等特殊符号,这些符号在签名时需要做URL encode,注意encode只支持大写)。
- 签名使用HMAC SHA256算法. API-KEY所对应的API-Secret作为 HMAC SHA256 的密钥,其他所有参数作为HMAC SHA256的操作对象,得到的输出即为签名。
- 签名 目前只支持小写。
- "totalParams"定义为与"request body"串联的"query string"。
时间安全
伪代码示例
if (timestamp < (serverTime + 1000) && (serverTime - timestamp) <= recvWindow)
{
// process request
}
else
{
// reject request
}
- 签名接口均需要传递timestamp参数,其值应当是请求发送时刻的unix时间戳(毫秒)。
- 服务器收到请求时会判断请求中的时间戳,如果是5000毫秒之前发出的,则请求会被认为无效。这个时间空窗值可以通过发送可选参数recvWindow来定义。
关于交易时效性互联网状况并不完全稳定可靠,因此你的程序本地到MEXC服务器的时延会有抖动。这是我们设置recvWindow的目的所在,如果你从事高频交易,对交易时效性有较高的要求,可以灵活设置recvWindow以达到你的要求。
POST /api/v3/order 举例
Example 1
HMAC SHA256 signature:
$ echo -n "symbol=BTCUSDT&side=BUY&type=LIMIT&quantity=1&price=11&recvWindow=5000×tamp=1644489390087" | openssl dgst -sha256 -hmac "45d0b3c26f2644f19bfb98b07741b2f5"
(stdin)= 323c96ab85a745712e95e63cad28903dd8292e4a905e99c4ee3932023843a117
curl command:
(HMAC SHA256)
$ curl -H "X-MEXC-APIKEY: mx0aBYs33eIilxBWC5" -X POST 'https://api.mexc.com/api/v3/order' -d 'symbol=BTCUSDT&side=BUY&type=LIMIT&quantity=1&price=11&recvWindow=5000×tamp=1644489390087&signature=323c96ab85a745712e95e63cad28903dd8292e4a905e99c4ee3932023843a117'
Example 2
HMAC SHA256 signature:
$ echo -n "symbol=BTCUSDT&side=BUY&type=LIMIT&quantity=1&price=11&recvWindow=5000×tamp=1644489390087" | openssl dgst -sha256 -hmac "45d0b3c26f2644f19bfb98b07741b2f5"
(stdin)= fd3e4e8543c5188531eb7279d68ae7d26a573d0fc5ab0d18eb692451654d837a
curl command:
(HMAC SHA256)
$ curl -H "X-MEXC-APIKEY: mx0aBYs33eIilxBWC5" -X POST 'https://api.mexc.com/api/v3/order' -d 'symbol=BTCUSDT&side=BUY&type=LIMIT&quantity=1&price=11&recvWindow=5000×tamp=1644489390087&signature=fd3e4e8543c5188531eb7279d68ae7d26a573d0fc5ab0d18eb692451654d837a'
Example 3
HMAC SHA256 signature:
$ echo -n "symbol=BTCUSDT&side=BUY&type=LIMITquantity=1&price=11&recvWindow=5000×tamp=1644489390087" | openssl dgst -sha256 -hmac "45d0b3c26f2644f19bfb98b07741b2f5"
(stdin)= d1a676610ceb39174c8039b3f548357994b2a34139a8addd33baadba65684592
curl command:
(HMAC SHA256)
$ curl -H "X-MEXC-APIKEY: mx0aBYs33eIilxBWC5" -X POST 'https://api.mexc.com/api/v3/order?symbol=BTCUSDT&side=BUY&type=LIMIT' -d 'quantity=1&price=11&recvWindow=5000×tamp=1644489390087&signature=d1a676610ceb39174c8039b3f548357994b2a34139a8addd33baadba65684592'
以下是在linux bash环境下使用 echo openssl 和curl工具实现的一个调用接口下单的示例 apikey、secret仅供示范
| Key | Value |
|---|---|
| apiKey | mx0aBYs33eIilxBWC5 |
| secretKey | 45d0b3c26f2644f19bfb98b07741b2f5 |
| 参数 | 取值 |
|---|---|
| symbol | BTCUSDT |
| side | BUY |
| type | LIMIT |
| quantity | 1 |
| price | 11 |
| recvWindow | 5000 |
| timestamp | 1644489390087 |
示例 1: 所有参数通过 request body 发送
- requestBody: symbol=BTCUSDT&side=BUY&type=LIMIT&quantity=1&price=11&recvWindow=5000×tamp=1644489390087
所有参数通过 query string 发送
- queryString: symbol=BTCUSDT&side=BUY&type=LIMIT&quantity=1&price=11&recvWindow=5000×tamp=1644489390087
示例 3: 混合使用 query string 和 request body
-
queryString: symbol=BTCUSDT&side=BUY&type=LIMIT
-
requestBody: quantity=1&price=11&recvWindow=5000×tamp=1644489390087
请注意,签名与示例3不同。 "LIMIT"和"quantity = 1"之间没有&。
限频规则
对REST API的访问有频率限制,当超出限制时,返回状态429:请求过于频繁。
需要携带access key进行访问的接口,以账号作为限速的基本单位;不需要携带access key进行访问的接口,以IP作为限速的基本单位。
限频说明
- 每个接口会标明是按照IP或者按照UID统计, 以及相应请求一次的权重值。不同接口拥有不同的权重,越消耗资源的接口权重就会越大。
- 按IP和按UID(account)两种模式分别统计, 两者互相独立。按IP权重限频的接口,所有接口共用300权重/10秒;按UID权重限频的接口,所有接口共用500权重/10秒。
超频报错
- 收到429时,您有责任停止发送请求,不得滥用API。
- 收到429后仍然继续违反访问限制,会被封禁IP。
- 频繁违反限制,封禁时间会逐渐延长,从最短2分钟到最长3天。
Retry-After的头会与带有418或429的响应发送,并且会给出以秒为单位的等待时长(如果是429)以防止禁令,或者如果是418,直到禁令结束。
WEBSOCKET 连接限制
- Websocket服务器访问频率限制为:100次/s。
- 如果用户发送的消息超过限制,连接会被断开连接。反复被断开连接的IP有可能被服务器屏蔽。
- 单个连接最多可以订阅 30 个Streams。
常见问题
Q1:一个用户可以申请多少个API Key?
每个账户最多可以创建30个API Key,未绑定ip地址的API Key有效期只有90天,到期自动失效。每个API Key最多绑定10个ip地址。
Q2:一个母账户可以申请多少个子账户?
每个母账户最多可以创建30个子账户,子账户会自动继承母账户费率,通过api创建的子账户无法在web端登陆。
Q3:为什么经常出现断线、超时的情况?
如果不能够稳定的访问,建议使用日本或者新加坡AWS云服务器进行访问。
Q4:超出限制频率报错后,该怎么做?
超出接口访问频率限制后,无法继续访问接口,10分钟后会恢复正常,要保持低于限制的频率访问接口。
Q5:一个账户最多可以下多少单?
每个账户最大可以同时拥有500个未完全成交的有效订单。
Q6:为什么WebSocket总是断开连接?
1.如果没有有效订阅的话,会在30s断开链接。 2.如果订阅成功后,60s内没有流量,会自动断开。 3.需在接收到服务端发送的Ping信息后回复Pong,保证连接的稳定。
Q7:WebSocket想要订阅多个频道为什么无效?
目前WebSocket单个链接最多可以订阅30个频道,超过30后则订阅无效,若想要订阅更多的频道,推荐建立多个链接。
联系我们
- MEXC API电报群 MEXC API Support Group
- 咨询文档中没有提及的API问题
- 咨询API或者websocket性能方面的问题
- 咨询做市相关的问题
- MEXC 客服 官网、app中在线客服
- 咨询关于钱包、短信、2FA等问题