高级 API 常见问题

Last updated: 2025年11月25日

使用 REST API 资金端点,客户可以向其 Kraken 账户存入资金或从中取出资金,并请求存款/提款交易的实时状态。

存款/取款在初始请求到交易完成之间需经历几个阶段,因此资金端点将根据调用时间返回不同的状态值。

注意,状态值最初来自互联网金融交易协议 (IFEX) 文件的第 16/17 页,但后期经过稍加修改,更适合加密货币交易(并非所有可能的状态值均已使用)。

存款

存款交易可能的状态值如下:

  • 已结算 = 存款已收到,但仍需在区块链上进行额外确认。

  • 成功 = 存款在区块链上已达到所需的确认次数。

  • 失败 = 存款失败(由于一个或多个原因)。

以下是上述状态值在 DepositStatus 端点响应中出现的一些示例:

已结算状态:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"QSB7IFM-Q3LT3X-NVAOKE","txid":"92c908ea2ea819d678d67130e4d20b625a8f97f3cfff45f906dde8cef41a046a","info":"D7SLwMBPqfFMCZ8EJDMoVEePpZAFFegLt8","amount":"997.00000000","fee":"0.00000000","time":1611308478,"status":"Settled"}]}

成功状态:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"QSB7IFM-Q3LT3X-NVAOKE","txid":"92c908ea2ea819d678d67130e4d20b625a8f97f3cfff45f906tdde8cef41a046a","info":"D7SLwMBPqfFMCZ8EJDMoVEePpZAFFegLt8","amount":"997.00000000","fee":"0.00000000","time":1611308478,"status":"Success"}]}

取款

取款交易可能的状态值如下:

  • 初始 = 取款请求已收到,正在核实有效性(账户有无资金限制等)。

  • 待处理 = 取款正在等待我方资金服务网关的处理。

  • 已结算 = 取款已发送至区块链(此时区块链交易 ID 将变得可用)。

  • 成功 = 取款交易在区块链上经过至少 1 次确认。

  • 冻结 = 取款被冻结,必须由资金服务团队进行手动核查。

  • 失败 = 取款失败(由于一个或多个原因)。

以下是上述状态值在 WithdrawStatus 端点响应中出现的一些示例:

初始状态:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"ASBCMYC-F5ETQT-34NMWT","txid":null,"info":"DGNBPsa2GhhtZGEZo79uF3WN2bTxFxmc9y","amount":"98.00000000","fee":"2.00000000","time":1612782924,"status":"Initial"}]}

待处理状态:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"ASBCMYC-F5ETQT-34NMWT","txid":null,"info":"DGNBPsa2GhhtZGEZo79uF3WN2bTxFxmc9y","amount":"98.00000000","fee":"2.00000000","time":1612782924,"status":"Pending"}]}

已结算状态:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"ASBCMYC-F5ETQT-34NMWT","txid":"064536e901f2cbfa6e279aa7a87c700b64e0ce561bf6e266788c47496f75106c","info":"DGNBPsa2GhhtZGEZo79uF3WN2bTxFxmc9y","amount":"98.00000000","fee":"2.00000000","time":1612782924,"status":"Settled"}]}

成功状态:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"ASBCMYC-F5ETQT-34NMWT","txid":"064536e901f2cbfa6e279aa7a87c700b64e0ce561bf6e266788c47496f75106c","info":"DGNBPsa2GhhtZGEZo79uF3WN2bTxFxmc9y","amount":"98.00000000","fee":"2.00000000","time":1612782924,"status":"Success"}]}

失败状态:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"ASBCMYC-F5ETQT-34NMWT","txid":null,"info":"DGNBPsa2GhhtZGEZo79uF3WN2bTxFxmc9y","amount":"98.00000000","fee":"2.00000000","time":1612782924,"status":"Failure","status-prop":"canceled"}]}

有关存款/取款的更多信息,请参阅我们的法定货币资金服务加密货币资金服务支持页面。

REST API OHLC 端点仅提供有限的历史数据,具体为所请求时间间隔的 720 个数据点。例如,请求 1 分钟时间间隔的 OHLC 数据将返回最近 720 分钟(12 小时)的数据。

对于需要额外 OHLC 或交易数据的应用程序,可以通过 REST API 交易端点检索我们市场的完整交易历史(历史时间和销售数据)。然后可以根据历史时间和销售数据创建任意时间范围和任意时间间隔的 OHLC。

交易端点接受一个名为 since 的可选参数,该参数指定了数据的起始日期/时间。since 值是纳秒级精度的 UNIX 时间戳(标准 UNIX 时间戳以秒为单位,后跟 9 位数字)。

例如,调用交易端点,如 https://api.kraken.com/0/public/Trades?pair=xbtusd&since=1559347200000000000,将返回自世界标准时间 2019 年 6 月 1 日 00:00:00 以来的 XBT/USD 历史时间和销售数据:

{"error":[],"result":{"XXBTZUSD":[["8552.90000","0.03190270",1559347203.7998,"s","m",""],["8552.90000","0.03155529",1559347203.8086,"s","m",""],["8552.90000","0.00510797",1559347203.9664,"s","m",""],["8552.90000","0.09047336",1559347203.9789,"s","m",""],["8552.90000","0.00328738",1559347203.9847,"s","m",""],["8552.90000","0.00492152",1559347203.9897,"s","m",""],["8552.90000","0.00201848",1559347203.9937,"s","m",""],["8552.90000","0.11422068",1559347203.9993,"s","m",""],["8552.90000","0.00425858",1559347204.071,"s","m",""],["8552.90000","0.00427679",1559347204.0762,"s","m",""],["8552.90000","0.06381401",1559347204.1662,"s","m",""]
...
["8579.50000","0.05379597",1559350785.248,"s","l",""],["8579.50000","0.94620403",1559350785.2936,"s","l",""],["8578.10000","0.45529068",1559350785.297,"s","l",""]],"last":"1559350785297011117"}}

后续对交易端点的调用应将 since 参数值替换为上一次调用结果中的 last 参数值,例如 https://api.kraken.com/0/public/Trades?pair=xbtusd&since=1559350785297011117

使用特殊的 since 0(零),将返回自开市(从第一次交易开始)以来的历史时间和销售数据。

用户参考信息是客户提供的订单 ID,可用于在某些订单管理任务(特别是取消订单)中替代实际(API 提供的)订单 ID。

用户参考信息的实施十分灵活,因此可以多种不同方式使用,包括:

  • 作为唯一 ID(每个订单都有不同的用户参考信息),

  • 将相关订单分组在一起(例如,将具有不同杠杆水平的订单分组),

  • 或作为备份 ID,以防实际订单 ID 缺失。

用户参考信息必须是介于 1 和 2,147,483,647 之间的数字值(本质上可以是任何 32 位正数),因此可以实施为简单计数器、有符号的随机 32 位值,甚至是以秒为单位的时间戳(尽管这将在世界标准时间 2038 年 1 月 19 日 3:14:07 后失效)。

使用用户参考信息下单

可以通过调用 AddOrder 端点并包含 userref 参数及以下用户参考信息,来下达附加用户参考信息的订单:

$ ./krakenapi AddOrder pair=xdgusd type=buy ordertype=limit price=0.1 volume=50 userref=27649653

{"error":[],"result":{"descr":{"order":"buy 50.00000000 XDGUSD @ limit 0.1000000"},"txid":["OQJSXE-F5FOM-IXHVL4"]}}

查看具有用户参考信息的订单

可以通过调用 Open/Closed/QueryOrders 端点并包含 userref 参数及以下现有用户参考信息,来查看已经附加用户参考信息的订单(在此情况下,用户参考信息作为筛选器,仅显示相关订单):

$ ./krakenapi OpenOrders userref=27649653

{"error":[],"result":{"open":{"OQJSXE-F5FOM-IXHVL4":{"refid":null,"userref":27649653,"status":"open","opentm":1629618802.9812,"starttm":0,"expiretm":0,"descr":{"pair":"XDGUSD","type":"buy","ordertype":"limit","price":"0.1000000","price2":"0","leverage":"none","order":"buy 50.00000000 XDGUSD @ limit 0.1000000","close":""},"vol":"50.00000000","vol_exec":"0.00000000","cost":"0.000000000","fee":"0.000000000","price":"0.000000000","stopprice":"0.000000000","limitprice":"0.000000000","misc":"","oflags":"fciq"}}}}

$ ./krakenapi ClosedOrders userref=38695724

{"error":[],"result":{"closed":{"O7YEFN-3V4RK-FBNSNM":{"refid":null,"userref":38695724,"status":"canceled","reason":"User requested","opentm":1629619539.3593,"closetm":1629619542.2246,"starttm":0,"expiretm":0,"descr":{"pair":"XBTUSD","type":"buy","ordertype":"limit","price":"25000.0","price2":"0","leverage":"none","order":"buy 0.00010000 XBTUSD @ limit 25000.0","close":""},"vol":"0.00010000","vol_exec":"0.00000000","cost":"0.00000","fee":"0.00000","price":"0.00000","stopprice":"0.00000","limitprice":"0.00000","misc":"","oflags":"fciq"}},"count":1}}

取消具有用户参考信息的订单

可以通过调用 CancelOrder 端点并将用户参考信息用作 txid 值(替代订单 ID 值),来取消已经附加用户参考信息的订单:

$ ./krakenapi CancelOrder txid=16764529

{"error":[],"result":{"count":1}}

注意,所有具有相同用户参考信息的未结订单都将被取消,因此可以进行一次 CancelOrder 调用,以便同时取消多个订单(如以下响应中的 count3 所示):

$ ./krakenapi CancelOrder txid=48695624

{"error":[],"result":{"count":3}}

此问题可能与 Cloudflare 有关:

https://support.cloudflare.com/hc/en-us/articles/200169226-Why-am-I-getting-a-403-error-

注:Kraken 已启用“浏览器完整性检查”。

如果您的请求包含可疑的标题,则可能会发生这种情况。例如,您的请求可能缺少用户代理,或使用非标准用户代理;请检查您的请求标题。

如果您无法创建我们系统允许的任何标准请求,请向我们发送您尝试的请求的完整副本,包括您的 IP 地址和所有标题。这些信息将帮助我们展开进一步调查。

期货API

对于我们的期货 REST 和 WebSocket API (futures.kraken.com),我们提供一个使用 API URL demo-futures.kraken.com 的完整测试环境。

REST、WebSocket 和 FIX 测试环境

对于我们的现货 REST/WebSocket API 和 FIX API,我们目前仅为合格客户提供测试环境。访问此环境需要进行注册,您可以直接联系 API 团队开始注册。

使用 Validate 测试参数测试我们的 API

通过 REST API AddOrder 或 WebSocket API addOrder 端点下达订单时,可以使用 validate 输入参数来模拟订单。

调用 AddOrder/addOrder 时,将 validate 参数设置为真(validate=1、validate=真、validate=任何值等)将检查订单详情有无错误,但 API 响应将永远不会包含订单 ID(在没有验证参数的情况下,成功订单将始终返回订单 ID)。

带有 validate 参数的 AddOrder 调用示例(注意缺少订单 ID):

bash

Bash

$ ./krakenapi AddOrder pair=xdgusd type=buy ordertype=market volume=5000 validate=true{"error":[],"result":{"descr":{"order":"buy 5000.00000000 XDGUSD @ market"}}}

小额真实订单和/或极端价格订单

对于使用 Validate 参数的全面 API 测试,我们建议下达非常小额的市价订单(即最小订单规模),或价格与当前市场价格相差甚远的限价订单(例如,在市场价格为 $200 时下达限价订单以 $800 的价格卖出 ETH/USD)。

使用实时订单进行测试可便于您的 API 代码在真实世界条件下与我们的 API 互动,以确保测试全方位的准确性(您的订单如何影响订单簿等)。

出于安全原因,我们最近停止了对 TLS 1.0 和 1.1 的支持。如果您在尝试连接我们的 API 时遇到 SSL/TLS 连接错误消息,可能是由于使用了这些已经弃用的标准。您需要修改 API 客户端以强制使用 TLS 1.2/1.3,或将您的 .NET 版本升级到 4.6 或以上,此类版本将 TLS 1.2/1.3 作为标准。

以下 Google Sheet 可用于计算任何输入数据组合的 REST API 身份验证签名

  • API 私(秘)钥

  • API 端点(BalanceTradeBalanceQueryOrders 等)

  • Nonce 值(请参阅我们的什么是 nonce 支持页面,了解更多详细信息)

  • 端点输入参数(例如,asset=doge

计算器可用于验证身份验证算法是否已正确实施,从而避免在开发周期后期出现潜在问题(尤其是意外的无效密钥错误)。

使用说明

  1. 1

    在 Chrome(或任何其他最近使用的网络浏览器)中打开 REST API 身份验证计算器

  2. 2

    通过“文件 -> 复制”菜单将计算器复制到您自己的 Google Drive 中(您需要登录 Google 账户才能进行此操作)

  3. 3

    用您自己的 API 密钥和请求详情编辑 API 密钥API 端点nonce 值输入数据字段

  4. 4

    将计算得出的 API 身份验证签名与您自己的 API 代码计算得出的值进行比较(这两个值必须完全一致)

出于安全原因,我们建议使用带有临时 API 密钥的身份验证计算器,然后在证实您的身份验证签名实施正确后,从您的账户中删除 API 密钥。

示例

Screenshot_2021-06-21_at_14.42.35.png

使用我们的客户端包装库的主要优势在于您无需花费时间/精力创建 API 签名,因为我们已经为您完成。

如果您只打算调用公共方法,那么您可以选择不使用客户端包装库,因为不需要身份验证。

您可以在此查看可用的包装库列表。

需要更多帮助吗?