介绍
概述
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、PUT 或 DELETE 类型的请求。
- GET 方法的接口,参数必须通过 URL Query String 发送。
- POST、PUT 和 DELETE 方法的接口,参数可以全部通过 Query String 发送,也可以全部通过 Request Body 发送,或同时使用 Query String 和 Request Body。
- 当参数通过 Request Body 发送时,Body 必须使用
key=value&key=value&...的原始参数字符串格式,而不是 JSON Object。 - Request Body 可以不设置
Content-Type;也支持Content-Type: application/json。即使使用application/json,Body 内容仍应为上述原始参数字符串,而不是 JSON Object。 - 请勿使用
Content-Type: application/x-www-form-urlencoded,否则请求可能返回700013 Invalid content Type。 - 接口本身不要求固定的参数排列顺序,但生成签名时使用的参数顺序必须与实际发送的参数序列保持一致。生成签名后请勿重新排序参数。
- 如果同一个参数名同时存在于 Query String 和 Request Body 中,则 Query String 中的参数优先。
返回格式
所有接口的返回数据均为 JSON 形式。
Header操作的组成
请求 Header 中与鉴权、请求体相关的参数:
| 组成部分 | 说明 |
|---|---|
X-MEXC-APIKEY | API Key 中的 Access Key |
Content-Type | 可选。Request Body 场景支持 application/json;请勿使用 application/x-www-form-urlencoded |
Content-Type: application/json仅表示该 Header 可被接口接受,并不表示 Request Body 应使用 JSON Object 格式。Spot V3 的 Body 参数应使用key=value&...的原始参数字符串格式。
签名
- 调用 SIGNED 接口时,除接口本身所需参数外,还需要传递
signature(签名参数)。 - 除
signature外的请求参数可以通过 Query String、Request Body 或两者混合发送;signature可以通过 Query String 或 Request Body 发送,且signature本身不参与 HMAC 计算。 - Request Body 中的参数使用 raw
key=value&...格式。 - 签名使用 HMAC SHA256 算法;API Key 对应的 API Secret 作为 HMAC SHA256 的密钥。
totalParams = queryString + requestBody。其中queryString和requestBody均指生成signature前、除signature参数本身以外的实际参数字符串。两者直接拼接,中间不额外添加&。生成签名后,可将signature添加到 Query String 或 Request Body 中。- 签名输出目前只支持小写 hexadecimal。
- 在批量操作的 API 中,若参数值中有逗号等特殊符号,这些符号在签名时需要做 URL encode,注意 encode 只支持大写。
时间安全
伪代码示例
if (timestamp < (serverTime + 1000) && (serverTime - timestamp) <= recvWindow)
{
// process request
}
else
{
// reject request
}
- 签名接口均需要传递timestamp参数,其值应当是请求发送时刻的unix时间戳(毫秒)。
- 服务器收到请求时会判断请求中的时间戳,如果是5000毫秒之前发出的,则请求会被认为无效。这个时间空窗值可以通过发送可选参数recvWindow来定义。
关于交易时效性互联网状况并不完全稳定可靠,因此你的程序本地到MEXC服务器的时延会有抖动。这是我们设置recvWindow的目的所在,如果你从事高频交易,对交易时效性有较高的要求,可以灵活设置recvWindow以达到你的要求。
POST /api/v3/order 举例
以下是在 Linux bash 环境下使用 echo、openssl 和 curl 调用下单接口的示例;apiKey、secretKey 仅供示范。
| Key | Value |
|---|---|
| apiKey | mx0aBYs33eIilxBWC5 |
| secretKey | 45d0b3c26f2644f19bfb98b07741b2f5 |
| 参数 | 取值 |
|---|---|
| symbol | BTCUSDT |
| side | BUY |
| type | LIMIT |
| quantity | 1 |
| price | 11 |
| recvWindow | 5000 |
| timestamp | 1644489390087 |
Example 1:所有参数通过 Request Body 发送
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" \
-H "Content-Type: application/json" \
-X POST \
'https://api.mexc.com/api/v3/order' \
--data-raw 'symbol=BTCUSDT&side=BUY&type=LIMIT&quantity=1&price=11&recvWindow=5000×tamp=1644489390087&signature=fd3e4e8543c5188531eb7279d68ae7d26a573d0fc5ab0d18eb692451654d837a'
Example 2:所有参数通过 Query String 发送
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?symbol=BTCUSDT&side=BUY&type=LIMIT&quantity=1&price=11&recvWindow=5000×tamp=1644489390087&signature=fd3e4e8543c5188531eb7279d68ae7d26a573d0fc5ab0d18eb692451654d837a'
Example 3:混合使用 Query String 和 Request Body
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" \
-H "Content-Type: application/json" \
-X POST \
'https://api.mexc.com/api/v3/order?symbol=BTCUSDT&side=BUY&type=LIMIT' \
--data-raw 'quantity=1&price=11&recvWindow=5000×tamp=1644489390087&signature=d1a676610ceb39174c8039b3f548357994b2a34139a8addd33baadba65684592'
示例 1:所有参数通过 Request Body 发送
- queryString:
(empty)
- requestBody:
symbol=BTCUSDT&side=BUY&type=LIMIT&quantity=1&price=11&recvWindow=5000×tamp=1644489390087
- totalParams:
等于 requestBody
示例 2:所有参数通过 Query String 发送
- queryString:
symbol=BTCUSDT&side=BUY&type=LIMIT&quantity=1&price=11&recvWindow=5000×tamp=1644489390087
- requestBody:
(empty)
- totalParams:
等于 queryString
示例 3:混合使用 Query String 和 Request Body
- queryString:
symbol=BTCUSDT&side=BUY&type=LIMIT
- requestBody:
quantity=1&price=11&recvWindow=5000×tamp=1644489390087
- totalParams:
symbol=BTCUSDT&side=BUY&type=LIMITquantity=1&price=11&recvWindow=5000×tamp=1644489390087
Query String 与 Request Body 在生成 totalParams 时直接拼接,中间不会自动补充 &。因此本示例中 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等问题