跳到主要内容

介绍

概述​

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-APIKEYAPI 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 仅供示范。

KeyValue
apiKeymx0aBYs33eIilxBWC5
secretKey45d0b3c26f2644f19bfb98b07741b2f5
参数取值
symbolBTCUSDT
sideBUY
typeLIMIT
quantity1
price11
recvWindow5000
timestamp1644489390087

Example 1:所有参数通过 Request Body 发送

HMAC SHA256 signature:

$ echo -n "symbol=BTCUSDT&side=BUY&type=LIMIT&quantity=1&price=11&recvWindow=5000&timestamp=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&timestamp=1644489390087&signature=fd3e4e8543c5188531eb7279d68ae7d26a573d0fc5ab0d18eb692451654d837a'

Example 2:所有参数通过 Query String 发送

HMAC SHA256 signature:

$ echo -n "symbol=BTCUSDT&side=BUY&type=LIMIT&quantity=1&price=11&recvWindow=5000&timestamp=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&timestamp=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&timestamp=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&timestamp=1644489390087&signature=d1a676610ceb39174c8039b3f548357994b2a34139a8addd33baadba65684592'

示例 1:所有参数通过 Request Body 发送

  • queryString:

(empty)

  • requestBody:

symbol=BTCUSDT&side=BUY&type=LIMIT&quantity=1&price=11&recvWindow=5000&timestamp=1644489390087

  • totalParams:

等于 requestBody

示例 2:所有参数通过 Query String 发送

  • queryString:

symbol=BTCUSDT&side=BUY&type=LIMIT&quantity=1&price=11&recvWindow=5000&timestamp=1644489390087

  • requestBody:

(empty)

  • totalParams:

等于 queryString

示例 3:混合使用 Query String 和 Request Body

  • queryString:

symbol=BTCUSDT&side=BUY&type=LIMIT

  • requestBody:

quantity=1&price=11&recvWindow=5000&timestamp=1644489390087

  • totalParams:

symbol=BTCUSDT&side=BUY&type=LIMITquantity=1&price=11&recvWindow=5000&timestamp=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等问题