From ac0ceb0ab83f9f59bebf3fa4ab250ac90931bb16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=AB=E5=B8=81=E6=96=B0=E5=8A=A0=E5=9D=A1API?= <89068425+huobi-sg@users.noreply.github.com> Date: Thu, 2 Sep 2021 09:58:08 +0800 Subject: [PATCH 01/32] Update index.html.md --- source/index.html.md | 7511 ++++++------------------------------------ 1 file changed, 948 insertions(+), 6563 deletions(-) diff --git a/source/index.html.md b/source/index.html.md index 263433aea84..34a7698289e 100644 --- a/source/index.html.md +++ b/source/index.html.md @@ -9,6 +9,7 @@ toc_footers: includes: search: true + --- # 更新日志 @@ -24,132 +25,11 @@ table th { -| 生效时间
(UTC +8) | 接口 | 变化 | 摘要 | -| ---------- | --------- | --------- | --------------- | -| 2021.8.12 | `market.$symbol.ticker` | 新增 | 增加聚合行情(Ticker)数据 | -| 2021.8.12 | `market.$symbol.mbp.$levels` | 优化 | 增加400档深度数据| -| 2021.7.23 | `GET /v1/account/history`
| 优化 | 账户流水接口中的变动类型,即“transact-types”增加分类明细,如注3. | -| 2021.6.12 | `GET/v2/account/valuation` | 新增 | 获取平台资产总估值 | -| 2021.5.26 | `GET /v1/order/orders/getClientOrder`
`POST /v1/order/orders/place`
` POST /v1/order/orders/submitCancelClientOrder` | 优化 | clientOrderId的有效期从原订单创建8小时内有效改为:对于已完结状态订单,2小时内有效。
对于用户下单时传入的clientOrderId 的唯一性将不再进行校验 | -| 2021.5.12 | GET `/v2/etp/transactions` | 优化 | "etpNames"和"transactTypes"变更为"必填"且“只能填一个” | -| 2021.3.1 | `POST /v2/sub-user/deduct-mode` | 新增 | 新增“设置母子用户手续费抵扣(HT或点卡)”接口 | -| 2021.3.1 | `GET /v2/sub-user/account-list` | 优化 | 新增“母子用户手续费抵扣”参数 | -| 2021.2.28 | Account and order Websocket v1 | 删除 | 资产和订单WebSocket v1接口关闭 | -| 2021.2.1 | `POST /v2/account/repayment` | 优化 | 通用还币接口支持逐仓杠杆还币 | -| 2021.1.19 19:00 | `GET /v1/order/matchresults` | 优化 | 增加start-time/end-time参数,支持用户指定“时间范围“查询订单 | -| 2021.1.19 19:00 | `GET /v2/etp/limit` | 新增 | 新增ETP持仓限额接口 | -| 2021.1.5 19:00 | `POST/v2/algo-orders/cancel-all-after` | 新增 | 新增自动撤单接口 | -| 2021.1.5 19:00 | accounts.update#${mode} | 优化 | 增加mode=2:
accounts.update#2
在账户余额发生变动或可用余额发生变动时均推送且一起推送。 | -| 2020.12.16 19:00 | `GET /v1/order/matchresults`,
`GET /v1/order/orders/{order-id}/matchresults` | 优化 | 新增参数抵扣状态:fee-deduct-state( 抵扣中:ongoing/ 抵扣完成:done),来代表手续费抵扣中和抵扣完成的状态 | -| 2020.12.14 19:00 | `POST /v2/etp/{transactId}/cancel`
`POST /v2/etp/batch-cancel` | 新增 | 新增杠杆ETP单个撤单接口和杠杆ETP批量撤单接口 | -| 2020.11.26 19:00 | `GET /v2/user/uid` | 新增 | 新增获取用户UID接口 | -| 2020.10.16 19:00 | `orders#${symbol}` | 优化 | 订单创建事件新增accountId | -| 2020.10.10 19:00 | `POST /v2/account/repayment`,
`GET /v2/account/repayment` | 新增 | 新增通用还币接口及还币交易记录查询接口 | -| 2020.8.28 19:00 | `GET /v1/common/symbols` | 优化 | 新增API交易使能标记 | -| 2020.8.21 19:00 | `accounts.update#${mode}`,
`accounts` | 优化 | 新增账户变更事件类型deposit,withdraw | -| 2020.8.11 19:00 | `GET /v1/common/symbols`,
`GET /market/etp`,
`market.$symbol.etp`,
`GET /market/history/kline`,
`market.$symbol$.kline.$period$`,
`GET /v2/etp/reference`,
`POST /v2/etp/creation`,
`POST /v2/etp/redemption`,
`GET /v2/etp/transactions`,
`GET /v2/etp/transaction`,
`GET /v2/etp/rebalance` | 新增+优化 | 新增/优化相关接口支持杠杆ETP | -| 2020.8.10 19:00 | `GET v1/stable-coin/quote`,
`POST v1/stable-coin/exchange` | 优化 | 新增稳定币兑换手续费字段 | -| 2020.8.4 19:00 | `GET /v1/account/history` | 优化 | 新增返回字段“next-id” | -| 2020.8.3 19:00 | `POST /v2/algo-orders`,
`GET /v2/algo-orders/opening`,
`GET /v2/algo-orders/history`,
`GET /v2/algo-orders/specific` | 优化 | 新增追踪委托 | -| 2020.7.24 19:00 | `trade.clearing#${symbol}#${mode}` | 优化 | 新增撤单推送 | -| 2020.7.17 19:00 | `GET /v2/account/asset-valuation` | 新增 | 新增账户资产估值查询节点 | -| 2020.7.16 19:00 | `GET /v1/common/symbols` | 优化 | 新增返回字段 | -| 2020.7.10 19:00 | `GET /v2/point/account`,
`POST /v2/point/transfer` | 新增 | 新增点卡余额查询节点及点卡划转节点 | -| 2020.7.10 19:00 | `POST /v1/order/batch-orders` | 优化 | 限频值调整 | -| 2020.7.8 19:00 | `orders#{symbol}` | 优化 | 新增两个事件类型 | -| 2020.6.27 19:00 | `GET /v2/market-status` | 新增 | 新增市场状态查询节点 | -| 2020.6.27 19:00 | `market.$symbol.mbp.$levels` | 优化 | 新增五档MBP逐笔增量订阅 | -| 2020.6.27 19:00 | 若干新增节点 | 新增 | 新增策略委托相关节点 | -| 2020.6.24 19:00 | `GET /v1/order/orders/{order-id}/matchresults`
`GET /v1/order/matchresults` | 优化 | 增加fee-currency字段 | -| 2020.6.24 19:00 | `GET /v2/account/withdraw/address` | 新增 | 提币地址查询 | -| 2020.6.23 19:00 | 若干新增节点 | 新增 | 新增C2C杠借币相关节点 | -| 2020.6.16 10:00 | `GET /v2/sub-user/user-list`,
`GET /v2/sub-user/user-state`,
`GET /v2/sub-user/account-list` | 新增 | 新增子用户列表查询、子用户状态查询、子用户账户查询接口 | -| 2020.6.15 19:00 | `POST /v2/sub-user/api-key-generation`,
`POST /v2/sub-user/api-key-modification` | 优化 | 增加单用户可创建API Key数量以及增加单个API Key可绑定IP地址数量 | -| 2020.6.11 19:00 | `POST /v1/account/transfer` | 优化 | 新增币币账户与逐仓杠杠账户的划转,逐仓杠杠账户内部的划转 | -| 2020.6.11 19:00 | `GET /v1/query/deposit-withdraw` | 优化 | 新增返回提币失败原因 | -| 2020.6.5 19:00 | `POST /v2/sub-user/api-key-generation`,
`GET /v2/user/api-key`,
`POST /v2/sub-user/api-key-modification`,
`POST /v2/sub-user/api-key-deletion` | 新增 | 新增母子用户API key管理接口 | -| 2020.6.4 19:00 | 若干私有REST接口 | 优化 | 变更限频值 | -| 2020.6.1 19:00 | `orders#${symbol}` | 优化 | Taker订单成交前首推创建事件 | -| 2020.6.1 19:00 | `GET /v2/reference/transact-fee-rate`,
`GET /v1/order/orders/{order-id}/matchresults`,
`GET /v1/order/matchresults`,
`trade.clearing#${symbol}`,
`GET /v1/account/history`,
`accounts`, `accounts.update#${mode}` | 优化 | 支持交易手续费返佣相关字段 | -| 2020.5.29 19:00 | `POST /v2/sub-user/tradable-market` | 新增 | 新增母用户设置子用户交易权限接口 | -| 2020.5.29 19:00 | `POST /v2/sub-user/transferability` | 新增 | 新增母用户设置子用户资产转出权限接口 | -| 2020.5.29 19:00 | `POST /v2/sub-user/creation` | 新增 | 新增子用户创建接口 | -| 2020.5.29 19:00 | `POST /v1/account/transfer` | 新增 | 新增通用资产划转接口 | -| 2020.4.28 11:00 | `market.$symbol.mbp.$levels` & `market.$symbol.mbp.refresh.$levels` | 优化 | 支持所有交易对 | -| 2020.4.27 11:00 | `orders#${symbol}` | 优化 | 更改IOC订单的更新行为 | -| 2020.4.17 11:00 | `GET /v2/account/deposit/address`,
`GET /v2/sub-user/deposit-address`,
`GET /v1/query/deposit-withdraw`,
`GET /v2/sub-user/query-deposit` | 新增 | 支持子用户充值 | -| 2020.4.3 11:00 | `orders#${symbol}` | 新增 | 新增v2版本订单更新推送主题 | -| 2020.3.31 21:00 | `accounts.update#${mode}` | 优化 | 订阅成功后首推各账户初始值 | -| 2020.3.31 11:00 | `GET /v2/account/ledger` | 新增 | 新增财务流水查询接口 | -| 2020.3.30 19:00 | `market.$symbol.mbp.refresh.$levels` | 新增 | 新增MBP全量推送接口 | -| 2020.3.30 19:00 | `POST /v1/order/orders/place`,
`POST /v1/order/batch-orders`,
`GET /v1/order/openOrders`,
`GET /v1/order/orders/{order-id}`,
`GET /v1/order/orders/getClientOrder`,
`GET /v1/order/orders/`
`{order-id}/matchresults`,
`GET /v1/order/orders`,
`GET /v1/order/history`,
`GET /v1/order/matchresults`,
`orders.$symbol`,
`trade.clearing#${symbol}`,
`orders.$symbol.update` | 优化 | 增加FOK订单类型 | -| 2020.3.27 19:00 | `GET /v1/order/orders`
`GET /v1/order/history` | 优化 | 已完全撤销订单的可查询范围缩短为2小时 | -| 2020.3.24 19:00 | `market.$symbol.mbp.$levels` | 优化 | 增加可请求交易代码 | -| 2020.3.17 19:00 | `GET /v1/order/matchresults` | 优化 | size取值上限由100上调至500 | -| 2020.3.12 19:00 | `GET /market/tickers` | 优化 | 增加买一卖一字段 | -| 2020.3.5 19:00 | `GET /v1/fee/fee-rate/get` | 删除 | 移除旧版费率查询接口 | -| 2020.3.2 11:00 | `GET https://status.huobigroup.com`
`/api/v2/summary.json` | 新增 | 新增获取当前系统状态接口 | -| 2020.2.28 11:00 | 母子用户相关接口 | 优化 | 将文档中“母子账号”的称谓更改为“母子用户” | -| 2020.2.28 11:00 | `GET /v1/cross-margin/loan-orders`,
`GET /v1/cross-margin/accounts/balance` | 优化 | 新增可选请求参数 | -| 2020.2.28 11:00 | `GET /v1/subuser/aggregate-balance`,
`GET /v1/account/accounts/{sub-uid}` | 优化 | 新增账户类型字段枚举值 | -| 2020.2.28 11:00 | `POST /v1/cross-margin/transfer-in`,
`POST /v1/cross-margin/transfer-out`,
`GET /v1/cross-margin/loan-info`,
`POST /v1/cross-margin/orders`,
`POST /v1/cross-margin/orders/`
`{order-id}/repay`,
`GET /v1/cross-margin/loan-orders`,
`GET /v1/cross-margin/accounts/balance` | 优化 | 允许授权子用户调用该接口 | -| 2020.2.5 19:00 | `GET /v1/order/orders/{order-id}`,
`GET /v1/order/orders/getClientOrder`,
`GET /v1/order/openOrders`,
`GET /v1/order/orders`,
`GET /v1/order/history` | 优化 | 新增client-order-id字段 | -| 2020.2.5 19:00 | `GET /v1/order/orders` | 优化 | 新增start-time/end-time请求参数 | -| 2020.2.3 19:00 | `GET /v2/reference/transact-fee-rate` | 新增 | 新增交易手续费率查询节点 | -| 2020.2.3 19:00 | `GET /v2/reference/currencies` | 优化 | 增加底层链字段 | -| 2020.2.3 19:00 | `GET /v1/margin/loan-info` | 优化 | 增加抵扣后实际币息率字段 | -| 2020.1.10 19:00 | `GET /v1/cross-margin/loan-info` | 优化 | 增加抵扣后实际币息率字段 | -| 2020.1.7 19:00 | `GET /v1/account/history` | 优化 | 允许子用户调用此节点 | -| 2019.12.27 19:00 | `POST /v2/sub-user/management` | 新增 | 新增冻结/解冻子用户接口 | -| 2019.12.27 19:00 | `POST /v1/order/orders/batchcancel` | 优化 | 允许以client order ID为请求参数批量撤单 | -| 2019.12.27 19:00 | `POST /v1/order/batch-orders` | 新增 | 新增批量下单节点 | -| 2019.12.23 15:00 | `market.$symbol.mbp.$levels` | 新增 | 新增深度行情增量推送订阅主题 | -| 2019.12.05 11:00 | `trade.clearing#${symbol}` & `accounts.update#${mode}` | 新增 | 新增v2版本资产及订单推送订阅主题 | -| 2019.11.22 15:00 | `GET /v1/order/orders`
`GET /v1/order/history` | 优化 | 已完全撤销的历史订单可查询时间范围缩短为最近1天 | -| 2019.11.13 19:00 | `GET /v1/margin/loan-info`
`GET /v1/cross-margin/loan-info` | 新增 | 新增借币币息及额度查询节点 | -| 2019.11.08 19:45 | `GET /v1/order/orders/{order-id}/matchresult`
`GET /v1/order/matchresults` | 新增 | 新增返回字段trade-id | -| 2019.10.18 19:00 | `GET /v1/account/history` | 新增 | 新增账户流水查询节点 | -| 2019.10.12 11:00 | `POST /v1/dw/withdraw/api/create` | 优化 | 设置ERC20为USDT的默认链 | -| 2019.10.11 10:00 | 支持全仓杠杆资产划转、借币、还币、查询借币订单、查询账户余额等相关节点 | 新增 | 新增全仓杠杆相关节点 | -| 2019.10.09 20:00 | `GET /market/trade`
`GET /market/history/trade`
`market.$symbol.trade.detail` | 优化 | 新增返回字段trade id | -| 2019.09.25 20:00 | `GET /v2/account/withdraw/quota` | 新增 | 新增提币额度查询节点 | -| 2019.09.23 15:00 | `POST /v1/order/orders/`
`{order-id}/submitcancel`
`POST /v1/order/orders/batchcancel` | 优化 | 优化错误码返回 | -| 2019.09.20 10:00 | `GET /v2/reference/currencies` | 新增 | 新增币链参考信息节点 | -| 2019.09.19 16:00 | `market.$symbol.bbo` | 新增 | 新增买一卖一逐笔推送 | -| 2019.09.18 20:00 | `GET /v1/subuser/aggregate-balance`
`GET /v1/account/accounts/{sub-uid}`
`GET /v1/margin/loan-orders`
`GET /v1/margin/accounts/balance` | 新增 | 支持子用户逐仓杠杆交易 | -| 2019.09.16 15:00 | `GET /v2/account/deposit/address` | 新增 | 新增APIv2节点 - 充币地址查询 | -| 2019.09.11 17:00 | `GET /v1/stable-coin/quote`
`POST /v1/stable-coin/exchange` | 新增 | 新增稳定币兑换节点 | -| 2019.09.11 16:00 | 删除部分代码示例 | 删除 | 删除部分代码示例 | -| 2019.09.10 10:00 | 除了`POST /v1/order/orders/submitCancelClientOrder`
`GET /v1/order/openOrders`
之外其他订单相关API | 修改 | 除节点"POST /v1/order/orders/submitCancelClientOrder" & "GET /v1/order/openOrders"以外,去除了其它节点中订单状态取值submitting以及cancelling | -| 2019.09.09 11:00 | `POST /v1/order/orders/submitCancelClientOrder` | 修改 | 修改返回数据描述 | -| 2019.09.09 10:00 | `GET /v1/order/orders`
`GET /v1/order/matchresults` | 修改 | 修改请求字段start-date与end-date的默认值及取值范围的描述 | -| 2019.09.02 18:00 | `POST /v1/order/orders/batchCancelOpenOrders` | 优化 | 更改请求字段"symbol"的描述 | -| 2019.09.02 16:00 | 删除稳定币兑换相关节点。 | 删除 | | -| 2019.08.29 21:00 | 下单、查询、订阅接口 | 新增 | 支持止盈止损订单类型。 | -| 2019.08.21 18:00 | `GET /v1/order/openOrders` | 优化 | 修改请求字段列表。 | -| 2019.08.05 18:00 | `orders.$symbol.update` | 新增 | 新增字段"client-order-id"和"order-type"。 | -| 2019.08.02 18:00 | `orders.$symbol.update` | 优化 | 修改对字段"unfilled-amount"的描述。 | -| 2019.07.23 21:00 | `GET /v1/order/orders/{order-id}/matchresult`
`GET /v1/order/matchresults` | 新增 | 新增手续费抵扣详情字段。 | -| 2019.07.23 20:00 | `GET /v1/fee/fee-rate/get` | 新增 | 新增费率查询接口。 | -| 2019.07.22 12:00 | `GET /v1/order/orders/{order-id}/matchresults`
`GET /v1/order/matchresults` | 新增 | 新增成交角色"role"字段以标识每笔成交角色是"taker"还是"maker"。 | -| 2019.07.11 20:00 | `POST /v1/order/orders/place`
`POST /v1/order/orders/submitCancelClientOrder`
`GET /v1/order/orders/getClientOrder` | 优化/新增 | 下单/撤单/查询可基于client order ID。 | -| 2019.07.08 12:00 | Websocket 订单资产推送接口 | 优化 | 优化Websocket 订单资产推送接口[心跳和限频](#5ea2e0cde2-3)。 | -| 2019.06.14 16:00 | `POST /v1/dw/withdraw/api/create` | 优化 | 支持快速提币 | -| 2019.06.17 16:00 | `GET /v1/stable_coin/exchange_rate`
`POST /v1/stable_coin/exchange` | 新增 | 新增接口支持用户随时获取最新的稳定币兑换汇率信息,并对稳定币执行兑入或兑出。 | -| 2019.06.12 16:00 | `GET /v1/common/symbols` | 优化 | 对交易对基础信息接口返回的内容进行优化,该优化向后兼容 | -| 2019.06.06 18:00 | `GET /v1/query/deposit-withdraw` | 优化 | 对充提记录查询接口的请求参数进行优化,该优化向后兼容 | -| 2019.06.05 20:00 | 所有需要验签的接口 | 优化 | 访问验签接口时,API Key需要有适当的权限,现有的API Key都默认有全部权限。权限分为3类:读取,交易和提币。每个接口相应的权限类别均已更新在各接口说明中 | -| 2019.06.10 00:00 | `GET /v1/order/orders`
`GET /v1/order/matchresults` | 修改 | 查询窗口调整为48小时,可查询整体时间范围不变 | -| 2019.05.15 10:00 | `POST /v1/futures/transfer` | 新增 | 提供币币与合约账户间的资产划转 | -| 2019.04.29 19:00 | `GET /v1/order/history` | 新增 | 新增最近48小时内历史订单查询节点。新节点的上线后,现有订单查询节点“GET /v1/order/orders”仍将被保留。然而,新节点“GET /v1/order/history”被赋予更高服务等级。极端情况下,当服务荷载超过系统既定阈值时,节点“GET /v1/order/orders”的服务可能会不可用,而新节点“GET /v1/order/history”仍将继续提供服务。另外,火币正在计划支持另一个新节点专门用于用户48小时外的历史订单查询。此新节点上线的同时,现有节点“GET /v1/order/orders”将被弃用。火币将及时告知用户这一变更,一旦变更时间确定。 | -| 2019.04.17 10:00 | `GET /v1/order/orders` | 修改 | 文档优化,增加Start-date限制说明 | -| 2019.04.16 10:00 | `GET /v1/order/openOrders` | 修改 | 文档错误,参数account-id和symbol都是必填参数 | -| 2019.01.17 07:00 | Websocket accounts | 修改 | 增加订阅参数 model;
订阅返回的内容中不再推送交易子账户冻结余额的变化。 | -| 2018.07.10 11:00 | `GET /market/history/kline` | 修改 | `size` 取值范围由 [1-1000] 修改为 [1-2000]。 | -| 2018.07.06 16:00 | `POST /v1/order/orders/place` | 修改 | 添加 `buy-limit-maker`,`sell-limit-maker` 两种下单类型支持;
新增获取某个帐号下指定交易对或者所有交易对的所有尚未成交订单接口: `/v1/order/openOrders`。 | -| 2018.07.06 16:00 | `GET /v1/order/openOrders`
`POST /v1/order/orders/batchCancelOpenOrders` | 新增 | 新增获取某个帐号下指定交易对或者所有交易对的所有尚未成交订单接口;
新增批量取消某个帐号下指定的订单列表中所有订单接口。 | -| 2018.07.02 16:00 | ETF 相关接口 | 新增 | 本次接口变更主要是支持 HB10 ETF 的换入和换出。 | -| 2018.06.20 16:00 | `GET /market/tickers` | 新增 | 新增 Tickers 接口,Tickers 为当前所有交易对行情数据。 | + +| 生效时间
(UTC +8) | 接口 | 变化 | 摘要 | +| -------------------- | ----------------------- | ---- | -------------------------- | +| 2021.8.24 | `market.$symbol.ticker` | 新增 | 增加聚合行情(Ticker)数据 | +| | | | | # 简介 @@ -199,7 +79,7 @@ table th { 创建成功后请务必记住以下信息: - `Access Key` API 访问密钥 - + - `Secret Key` 签名认证加密所使用的密钥(仅申请时可见) + ## SDK与代码示例 **SDK(推荐)** @@ -250,6 +131,7 @@ WebSocket是HTML5一种新的协议(Protocol)。它实现了客户端与服 私有接口可用于交易管理和账户管理。每个私有请求必须使用您的API Key进行签名验证。 ## 接入URLs + 您可以自行比较使用api.huobi.pro和api-aws.huobi.pro两个域名的延迟情况,选择延迟低的进行使用。 其中,api-aws.huobi.pro域名对使用aws云服务的用户做了一定的链路延迟优化。 @@ -274,7 +156,7 @@ WebSocket是HTML5一种新的协议(Protocol)。它实现了客户端与服 **Websocket Feed(资产和订单)** -**`wss://api.huobi.pro/ws/v2`** +wss://api.huobi.pro/ws/v2 **`wss://api-aws.huobi.pro/ws/v2`** @@ -288,6 +170,7 @@ WebSocket是HTML5一种新的协议(Protocol)。它实现了客户端与服 为保证API服务的稳定性,建议使用日本AWS云服务器进行访问。如使用中国大陆境内的客户端服务器,连接的稳定性将难以保证。 + ## 签名认证 ### 签名说明 @@ -371,6 +254,7 @@ api.huobi.pro\n 时间戳(Timestamp)需要以YYYY-MM-DDThh:mm:ss格式添加并且进行 URL 编码。时间戳有效时间5分钟。 + 经过排序之后 `AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx` @@ -440,63 +324,6 @@ api.huobi.pro\n } ` -## 子用户 - -子用户可以用来隔离资产与交易,资产可以在母子用户之间划转;子用户只能在子用户内进行交易,并且子用户之间资产不能直接划转,只有母用户有划转权限。 - -子用户拥有独立的登录账号密码和 API Key,均由母用户在网页端进行管理。 - -每个母用户可创建200个子用户,每个子用户可创建20组Api Key,每个Api Key可对应设置读取、交易两种权限。 - -子用户的 API Key 也可绑定 IP 地址, 有效期的限制与母用户的API Key一致。 - -您可以点击 这里 创建子用户并管理。 - -子用户可以访问所有公共接口,包括基本信息和市场行情,子用户可以访问的私有接口如下: - -| 接口 | 说明 | | -| ------------------------------------------------------------ | ------------------------------- | ---- | -| [POST /v1/order/orders/place](#fd6ce2a756) | 创建并执行订单 | | -| [POST /v1/order/orders/{order-id}/submitcancel](#4e53c0fccd) | 撤销一个订单 | | -| [POST /v1/order/orders/submitCancelClientOrder](#client-order-id) | 撤销订单(基于client order ID) | | -| [POST /v1/order/orders/batchcancel](#ad00632ed5) | 批量撤销订单 | | -| [POST /v1/order/orders/batchCancelOpenOrders](#open-orders) | 撤销当前委托订单 | | -| [GET /v1/order/orders/{order-id}](#92d59b6aad) | 查询一个订单详情 | | -| [GET /v1/order/orders](#d72a5b49e7) | 查询当前委托、历史委托 | | -| [GET /v1/order/openOrders](#95f2078356) | 查询当前委托订单 | | -| [GET /v1/order/matchresults](#0fa6055598) | 查询成交 | | -| [GET /v1/order/orders/{order-id}/matchresults](#56c6c47284) | 查询某个订单的成交明细 | | -| [GET /v1/account/accounts](#bd9157656f) | 查询当前用户的所有账户 | | -| [GET /v1/account/accounts/{account-id}/balance](#870c0ab88b) | 查询指定账户的余额 | | -| [POST /v1/futures/transfer](#e227a2a3e8) | 币币与合约账户间的资产划转 | | -| [POST /v1/dw/transfer-in/margin](#0d3c2e7382) | 从币币交易账户划转至杠杆账户 | | -| [POST /v1/dw/transfer-out/margin](#0d3c2e7382) | 从杠杆账户划转至币币交易账户 | | -| [POST /v1/margin/orders](#48cca1ce88) | 申请借币 | | -| [POST /v1/margin/orders/{order-id}/repay](#48aa7c8199) | 归还借币 | | -| [GET /v1/margin/loan-orders](#e52396720a) | 查询借币记录 | | -| [GET /v1/margin/accounts/balance](#6e79ba8e80) | 查询杠杆账户余额 | | -| [GET /v1/account/history](#84f1b5486d) | 查询账户流水 | | -| [POST /v1/cross-margin/transfer-in](#0d3c2e7382-2) | 资产划转 | | -| [POST /v1/cross-margin/transfer-out](#0d3c2e7382-2) | 资产划转 | | -| [GET /v1/cross-margin/loan-info](#e257b9b6a0-2) | 查询借币币息率及额度 | | -| [POST /v1/cross-margin/orders](#0ef2de08fa-2) | 申请借币 | | -| [POST /v1/cross-margin/orders/{order-id}/repay](#097277f9fc-2) | 归还借币 | | -| [GET /v1/cross-margin/loan-orders](#1e90599f7f-2) | 查询借币订单 | | -| [GET /v1/cross-margin/accounts/balance](#bf3a643133-2) | 借币账户详情 | | -| [GET /v2/account/ledger](#2f6797c498) | 查询财务流水 | | -| [POST /v1/account/transfer](#0d3c2e7382) | 资产划转 | | -| [GET /v2/point/account](#0d7f115f63) | 查询点卡余额 | | -| [POST /v2/point/transfer](#c71521e5d9) | 点卡划转 | | -| [GET /v2/etp/reference](#8bb7c6b75e) | 杠杆ETP基础参考信息 | | -| [POST /v2/etp/creation](#etp-4) | 杠杆ETP换入 | | -| [POST /v2/etp/redemption](#etp-5) | 杠杆ETP换出 | | -| [GET /v2/etp/transactions](#etp-6) | 获取杠杆ETP换入换出记录 | | -| [GET /v2/etp/transaction](#etp-7) | 获取特定杠杆ETP换入换出记录 | | -| [GET /v2/etp/rebalance](#etp-8) | 获取杠杆ETP调仓记录 | | - - ## 业务字典 @@ -516,29 +343,18 @@ account-id可通过/v1/account/accounts接口获取,并根据account-type区 账户类型包括: -* spot:现货账户 -* otc:OTC账户 -* margin:逐仓杠杆账户,该账户类型以subType区分具体币种对账户 -* super-margin(或cross-margin):全仓杠杆账户 -* point:点卡账户 -* minepool:矿池账户 -* etf:ETF账户 -* 抵押借贷:crypto-loans - -更多信息,可以点击火币成长学院 进行了解。 +* spot:现货账户 # 接入说明 ## 接口概览 -| 接口分类 | 分类链接 | 概述 | -| -------------- | ---------------------------- | ------------------------------------------------ | -| 基础类 | /v1/common/* | 基础类接口,包括币种、币种对、时间戳等接口 | -| 行情类 | /market/* | 公共行情类接口,包括成交、深度、行情等 | -| 账户类 | /v1/account/* /v1/subuser/* | 账户类接口,包括账户信息,子用户等 | -| 订单类 | /v1/order/* | 订单类接口,包括下单、撤单、订单查询、成交查询等 | -| 逐仓杠杆类 | /v1/margin/* | 逐仓杠杆类接口,包括借币、还币、查询等 | -| 全仓杠杆类接口 | /v1/cross-margin/* | 全仓杠杆类接口,包括借币、还币、查询等 | +| 接口分类 | 分类链接 | 概述 | +| -------- | ---------------------------- | ------------------------------------------------ | +| 基础类 | /v1/common/* | 基础类接口,包括币种、币种对、时间戳等接口 | +| 行情类 | /market/* | 公共行情类接口,包括成交、深度、行情等 | +| 账户类 | /v1/account/* /v1/subuser/* | 账户类接口,包括账户信息,子用户等 | +| 订单类 | /v1/order/* | 订单类接口,包括下单、撤单、订单查询、成交查询等 | 该分类为大类整理,部分接口未遵循此规则,请根据需求查看有关接口文档。 @@ -553,6 +369,7 @@ account-id可通过/v1/account/accounts接口获取,并根据account-type区 ## 限频规则 除已单独标注限频值为NEW的接口外 -
+ * 每个API Key 在1秒之内限制10次
* 若接口不需要API Key,则每个IP在1秒内限制10次
@@ -624,6 +441,7 @@ account-id可通过/v1/account/accounts接口获取,并根据account-type区 ## 最佳实践 ###安全类 + - 强烈建议:在申请API Key时,请绑定您的IP地址,以此来保证您的API Key仅能在您自己的IP上使用。另外,在API Key未绑定IP时,有效期为90天,绑定IP后,则永远不会过期。 - 强烈建议:不要将API Key暴露给任何人(包括第三方软件或机构),API Key代表了您的账户权限,API Key的暴露可能会对您的信息、资金造成损失,若API Key泄露,请尽快删除并重新创建。 @@ -705,26 +523,18 @@ API[在线演示](https://open.huobigroup.com/)可以让用户不需要写任何 针对某类或某个API的问题,请查看每章API的错误码和常见问题。 ### Q1:什么是UID和account-id? -A:UID是用户ID,是标示每个用户的唯一ID(包括母用户和子用户),UID可以在Web或App界面的个人信息里查看到,也可以通过接口 `GET /v2/user/uid`获得。 + +A:UID是用户ID,是标示每个用户的唯一ID(包括母用户和子用户),UID可以在Web界面的个人信息里查看到,也可以通过接口 `GET /v2/user/uid`获得。 account-id则是该用户下不同业务账户的ID,需要通过`GET /v1/account/accounts`接口获取,并根据account-type区分具体账户。如果需要开通某个账户,需要首先通过Web或App开通并向该账户进行转账。 -账户类型包括但不限于如下账户(合约账户不包括在内): +账户类型包括但不限于如下账户: - spot 现货账户 -- otc OTC账户 -- margin 逐仓杠杆账户,该账户类型以subType区分具体币种对账户 -- super-margin(或cross-margin) 全仓杠杆账户 -- investment C2C杠杆借出账户 -- borrow C2C杠杆借入账户 -- point 点卡账户 -- minepool 矿池账户 -- etf ETF账户 ### Q2:一个用户可以申请多少个API Key? 每个母用户可创建20组API Key,每个API Key可对应设置读取、交易、提币三种权限。 -每个母用户还可创建200个子用户,每个子用户可创建20组API Key,每个API Key可对应设置读取、交易两种权限。 以下是三种权限的说明: @@ -842,7 +652,6 @@ api-aws.huobi.pro域名对使用aws云服务的用户做了链路延迟优化, 欢迎有优秀 maker 策略且交易量大的用户参与长期做市商项目。如果您的火币现货账户或者合约账户中有折合大于10BTC资产(币币和合约账户分开统计),请提供以下信息发送邮件至: - [MM_service@huobi.com](mailto:MM_service@huobi.com) Huobi Global(现货 / 杠杆)做市商申请; -- [dm_mm@huobi.com](mailto:dm_mm@huobi.com) HBDM(合约)做市商申请。 1. 提供 UID (需不存在返佣关系的 UID); 2. 提供其他交易平台 maker 交易量截图证明(比如30天内成交量,或者 VIP 等级等); @@ -852,12 +661,12 @@ api-aws.huobi.pro域名对使用aws云服务的用户做了链路延迟优化, 做市商项目不支持点卡抵扣、VIP、交易量相关活动以及任何形式的返佣活动。 + ## 技术支持 使用过程中如有问题或者建议,您可选择以下任一方式联系我们: -- 加入官方QQ群(Huobi Global Spot API交流群 1160839820),入群申请请注明UID和编程语言。 -- 通过官网的“帮助中心”或者发送邮件至support@huobigroup.com联系客服。 +- 通过官网的“帮助中心”或者发送邮件至customersupport@huobi.sg联系客服。 如您遇到API错误,请按照如下模板向我们反馈问题。 @@ -1053,40 +862,40 @@ curl "https://status.huobigroup.com/api/v2/summary.json" ### 返回字段 -|字段名称 | 数据类型 | 描述 -|--------- | -----------| ----------- -|page | | 火币现货status page页面基本信息 -|{id | string | 页面id -|name | string | 页面名称 -|url | string | 页面地址 -|time_zone | string | 时区 -|updated_at} | string | 页面更新时间 -|components | | 系统组件及状态 -|[{id | string | 组件id -|name | string | 组件名称,如Order submission、Order cancellation、Deposit等 -|status | string | 组件状态,取值范围为:operational,degraded_performance,partial_outage,major_outage,under maintenance -|created_at | string | 组件创建时间 -|updated_at | string | 组件更新时间 -|.......}] | | 其他字段明细,请参考返回示例 -|incidents | | 系统故障事件及状态,若当前无故障则返回为空 -|[{id | string | 事件id -|name | string | 事件名称 -|status | string | 事件状态,取值范围为:investigating,identified,monitoring,resolved -|created_at | string | 事件创建时间 -|updated_at | string | 事件更新时间 -|.......}] | | 其他字段明细,请参考返回示例 -|scheduled_maintenances| | 系统计划维护事件及状态,若当前无计划维护则返回为空 -|[{id | string | 事件id -|name | string | 事件名称 -|status | string | 事件状态,取值范围为:scheduled,in progress,verifying,completed -|created_at | string | 事件创建时间 -|updated_at | string | 事件更新时间 -|scheduled_for | string | 计划维护开始时间 -|scheduled_until | string | 计划维护结束时间 -|.......}] | | 其他字段明细,请参考返回示例 -|status | | 系统整体状态 -|{indicator | string | 系统状态指标,取值范围为:none,minor,major,critical,maintenance -|description} | string | 系统状态描述,取值范围为:All Systems Operational,Minor Service Outager,Partial System Outage,Partially Degraded Service,Service Under Maintenance +| 字段名称 | 数据类型 | 描述 | +| ---------------------- | -------- | ------------------------------------------------------------ | +| page | | 火币现货status page页面基本信息 | +| {id | string | 页面id | +| name | string | 页面名称 | +| url | string | 页面地址 | +| time_zone | string | 时区 | +| updated_at} | string | 页面更新时间 | +| components | | 系统组件及状态 | +| [{id | string | 组件id | +| name | string | 组件名称,如Order submission、Order cancellation、Deposit等 | +| status | string | 组件状态,取值范围为:operational,degraded_performance,partial_outage,major_outage,under maintenance | +| created_at | string | 组件创建时间 | +| updated_at | string | 组件更新时间 | +| .......}] | | 其他字段明细,请参考返回示例 | +| incidents | | 系统故障事件及状态,若当前无故障则返回为空 | +| [{id | string | 事件id | +| name | string | 事件名称 | +| status | string | 事件状态,取值范围为:investigating,identified,monitoring,resolved | +| created_at | string | 事件创建时间 | +| updated_at | string | 事件更新时间 | +| .......}] | | 其他字段明细,请参考返回示例 | +| scheduled_maintenances | | 系统计划维护事件及状态,若当前无计划维护则返回为空 | +| [{id | string | 事件id | +| name | string | 事件名称 | +| status | string | 事件状态,取值范围为:scheduled,in progress,verifying,completed | +| created_at | string | 事件创建时间 | +| updated_at | string | 事件更新时间 | +| scheduled_for | string | 计划维护开始时间 | +| scheduled_until | string | 计划维护结束时间 | +| .......}] | | 其他字段明细,请参考返回示例 | +| status | | 系统整体状态 | +| {indicator | string | 系统状态指标,取值范围为:none,minor,major,critical,maintenance | +| description} | string | 系统状态描述,取值范围为:All Systems Operational,Minor Service Outager,Partial System Outage,Partially Degraded Service,Service Under Maintenance | ## 获取当前市场状态 @@ -1203,14 +1012,6 @@ curl "https://api.huobi.pro/v1/common/symbols" | buy-market-max-order-value | true | float | 交易对市价买单最大下单金额,以计价币种为单位(NEW) | | min-order-value | true | float | 交易对限价单和市价买单最小下单金额 ,以计价币种为单位 | | max-order-value | false | float | 交易对限价单和市价买单最大下单金额 ,以折算后的USDT为单位(NEW) | -| leverage-ratio | true | float | 交易对杠杆最大倍数(仅对逐仓杠杆交易对、全仓杠杆交易对、杠杆ETP交易对有效) | -| underlying | false | string | 标的交易代码 (仅对杠杆ETP交易对有效) | -| mgmt-fee-rate | false | float | 持仓管理费费率 (仅对杠杆ETP交易对有效) | -| charge-time | false | string | 持仓管理费收取时间 (24小时制,GMT+8,格式:HH:MM:SS,仅对杠杆ETP交易对有效) | -| rebal-time | false | string | 每日调仓时间 (24小时制,GMT+8,格式:HH:MM:SS,仅对杠杆ETP交易对有效) | -| rebal-threshold | false | float | 临时调仓阈值 (以实际杠杆率计,仅对杠杆ETP交易对有效) | -| init-nav | false | float | 初始净值(仅对杠杆ETP交易对有效) | -| api-trading | true | string | API交易使能标记(有效值:enabled, disabled) | ## 获取所有币种 @@ -1234,17 +1035,14 @@ curl "https://api.huobi.pro/v1/common/currencys" > Response: ```json - "data": [ - "usdt", - "eth", - "etc" - ] + "data": [ "usdt", "eth", "etc" ] ``` ### 返回字段 + ## APIv2 币链参考信息 此节点用于查询各币种及其所在区块链的静态参考信息(公共数据) @@ -1267,79 +1065,7 @@ curl "https://api.huobi.pro/v2/reference/currencies?currency=usdt" > Response: ```json -{ - "code":200, - "data":[ - { - "chains":[ - { - "chain":"trc20usdt", - "displayName":"", - "baseChain": "TRX", - "baseChainProtocol": "TRC20", - "isDynamic": false, - "depositStatus":"allowed", - "maxTransactFeeWithdraw":"1.00000000", - "maxWithdrawAmt":"280000.00000000", - "minDepositAmt":"100", - "minTransactFeeWithdraw":"0.10000000", - "minWithdrawAmt":"0.01", - "numOfConfirmations":999, - "numOfFastConfirmations":999, - "withdrawFeeType":"circulated", - "withdrawPrecision":5, - "withdrawQuotaPerDay":"280000.00000000", - "withdrawQuotaPerYear":"2800000.00000000", - "withdrawQuotaTotal":"2800000.00000000", - "withdrawStatus":"allowed" - }, - { - "chain":"usdt", - "displayName":"", - "baseChain": "BTC", - "baseChainProtocol": "OMNI", - "isDynamic": false, - "depositStatus":"allowed", - "maxWithdrawAmt":"19000.00000000", - "minDepositAmt":"0.0001", - "minWithdrawAmt":"2", - "numOfConfirmations":30, - "numOfFastConfirmations":15, - "transactFeeRateWithdraw":"0.00100000", - "withdrawFeeType":"ratio", - "withdrawPrecision":7, - "withdrawQuotaPerDay":"90000.00000000", - "withdrawQuotaPerYear":"111000.00000000", - "withdrawQuotaTotal":"1110000.00000000", - "withdrawStatus":"allowed" - }, - { - "chain":"usdterc20", - "displayName":"", - "baseChain": "ETH", - "baseChainProtocol": "ERC20", - "isDynamic": false, - "depositStatus":"allowed", - "maxWithdrawAmt":"18000.00000000", - "minDepositAmt":"100", - "minWithdrawAmt":"1", - "numOfConfirmations":999, - "numOfFastConfirmations":999, - "transactFeeWithdraw":"0.10000000", - "withdrawFeeType":"fixed", - "withdrawPrecision":6, - "withdrawQuotaPerDay":"180000.00000000", - "withdrawQuotaPerYear":"200000.00000000", - "withdrawQuotaTotal":"300000.00000000", - "withdrawStatus":"allowed" - } - ], - "currency":"usdt", - "instStatus":"normal" - } - ] -} - +{ "code":200, "data":[ { "chains":[ { "chain":"trc20usdt", "displayName":"", "baseChain": "TRX", "baseChainProtocol": "TRC20", "isDynamic": false, "depositStatus":"allowed", "maxTransactFeeWithdraw":"1.00000000", "maxWithdrawAmt":"280000.00000000", "minDepositAmt":"100", "minTransactFeeWithdraw":"0.10000000", "minWithdrawAmt":"0.01", "numOfConfirmations":999, "numOfFastConfirmations":999, "withdrawFeeType":"circulated", "withdrawPrecision":5, "withdrawQuotaPerDay":"280000.00000000", "withdrawQuotaPerYear":"2800000.00000000", "withdrawQuotaTotal":"2800000.00000000", "withdrawStatus":"allowed" }, { "chain":"usdt", "displayName":"", "baseChain": "BTC", "baseChainProtocol": "OMNI", "isDynamic": false, "depositStatus":"allowed", "maxWithdrawAmt":"19000.00000000", "minDepositAmt":"0.0001", "minWithdrawAmt":"2", "numOfConfirmations":30, "numOfFastConfirmations":15, "transactFeeRateWithdraw":"0.00100000", "withdrawFeeType":"ratio", "withdrawPrecision":7, "withdrawQuotaPerDay":"90000.00000000", "withdrawQuotaPerYear":"111000.00000000", "withdrawQuotaTotal":"1110000.00000000", "withdrawStatus":"allowed" }, { "chain":"usdterc20", "displayName":"", "baseChain": "ETH", "baseChainProtocol": "ERC20", "isDynamic": false, "depositStatus":"allowed", "maxWithdrawAmt":"18000.00000000", "minDepositAmt":"100", "minWithdrawAmt":"1", "numOfConfirmations":999, "numOfFastConfirmations":999, "transactFeeWithdraw":"0.10000000", "withdrawFeeType":"fixed", "withdrawPrecision":6, "withdrawQuotaPerDay":"180000.00000000", "withdrawQuotaPerYear":"200000.00000000", "withdrawQuotaTotal":"300000.00000000", "withdrawStatus":"allowed" } ], "currency":"usdt", "instStatus":"normal" } ]} ``` ### 响应数据 @@ -1440,18 +1166,7 @@ curl "https://api.huobi.pro/market/history/kline?period=1day&size=200&symbol=btc > Response: ```json -[ - { - "id": 1499184000, - "amount": 37593.0266, - "count": 0, - "open": 1935.2000, - "close": 1879.0000, - "low": 1856.0000, - "high": 1940.0000, - "vol": 71031537.97866500 - } -] +[ { "id": 1499184000, "amount": 37593.0266, "count": 0, "open": 1935.2000, "close": 1879.0000, "low": 1856.0000, "high": 1940.0000, "vol": 71031537.97866500 }] ``` ### 响应数据 @@ -1476,6 +1191,7 @@ curl "https://api.huobi.pro/market/history/kline?period=1day&size=200&symbol=btc ```shell curl "https://api.huobi.pro/market/detail/merged?symbol=ethusdt" ``` + ### HTTP 请求 - GET `/market/detail/merged` @@ -1489,19 +1205,7 @@ curl "https://api.huobi.pro/market/detail/merged?symbol=ethusdt" > Response: ```json -{ - "id":1499225271, - "ts":1499225271000, - "close":1885.0000, - "open":1960.0000, - "high":1985.0000, - "low":1856.0000, - "amount":81486.2926, - "count":42122, - "vol":157052744.85708200, - "ask":[1885.0000,21.8804], - "bid":[1884.0000,1.6702] -} +{ "id":1499225271, "ts":1499225271000, "close":1885.0000, "open":1960.0000, "high":1985.0000, "low":1856.0000, "amount":81486.2926, "count":42122, "vol":157052744.85708200, "ask":[1885.0000,21.8804], "bid":[1884.0000,1.6702]} ``` ### 响应数据 @@ -1522,10 +1226,13 @@ curl "https://api.huobi.pro/market/detail/merged?symbol=ethusdt" ## 所有交易对的最新 Tickers 获得所有交易对的 tickers。 + ```shell curl "https://api.huobi.pro/market/tickers" ``` + + ### HTTP 请求 - GET `/market/tickers` @@ -1537,36 +1244,7 @@ curl "https://api.huobi.pro/market/tickers" > Response: ```json -[ - { - "open":0.044297, // 开盘价 - "close":0.042178, // 收盘价 - "low":0.040110, // 最低价 - "high":0.045255, // 最高价 - "amount":12880.8510, - "count":12838, - "vol":563.0388715740, - "symbol":"ethbtc", - "bid":0.007545, - "bidSize":0.008, - "ask":0.008088, - "askSize":0.009 - }, - { - "open":0.008545, - "close":0.008656, - "low":0.008088, - "high":0.009388, - "amount":88056.1860, - "count":16077, - "vol":771.7975953754, - "symbol":"ltcbtc", - "bid":0.007545, - "bidSize":0.008, - "ask":0.008088, - "askSize":0.009 - } -] +[ { "open":0.044297, // 开盘价 "close":0.042178, // 收盘价 "low":0.040110, // 最低价 "high":0.045255, // 最高价 "amount":12880.8510, "count":12838, "vol":563.0388715740, "symbol":"ethbtc", "bid":0.007545, "bidSize":0.008, "ask":0.008088, "askSize":0.009 }, { "open":0.008545, "close":0.008656, "low":0.008088, "high":0.009388, "amount":88056.1860, "count":16077, "vol":771.7975953754, "symbol":"ltcbtc", "bid":0.007545, "bidSize":0.008, "ask":0.008088, "askSize":0.009 }] ``` ### 响应数据 @@ -1609,6 +1287,7 @@ curl "https://api.huobi.pro/market/depth?symbol=btcusdt&type=step2" | type | string | true | step0 | 深度的价格聚合度,具体说明见下方 | step0,step1,step2,step3,step4,step5 | | + **参数type的各值说明** | 取值 | 说明 | @@ -1623,31 +1302,13 @@ curl "https://api.huobi.pro/market/depth?symbol=btcusdt&type=step2" > Response: ```json -{ - "version": 31615842081, - "ts": 1489464585407, - "bids": [ - [7964, 0.0678], // [price, size] - [7963, 0.9162], - [7961, 0.1], - [7960, 12.8898], - [7958, 1.2], - ... - ], - "asks": [ - [7979, 0.0736], - [7980, 1.0292], - [7981, 5.5652], - [7986, 0.2416], - [7990, 1.9970], - ... - ] - } +{ "version": 31615842081, "ts": 1489464585407, "bids": [ [7964, 0.0678], // [price, size] [7963, 0.9162], [7961, 0.1], [7960, 12.8898], [7958, 1.2], ... ], "asks": [ [7979, 0.0736], [7980, 1.0292], [7981, 5.5652], [7986, 0.2416], [7990, 1.9970], ... ] } ``` ### 响应数据 + | 字段名称 | 数据类型 | 描述 | | -------- | -------- | ---------------------------------- | | ts | integer | 调整为新加坡时间的时间戳,单位毫秒 | @@ -1662,6 +1323,7 @@ curl "https://api.huobi.pro/market/depth?symbol=btcusdt&type=step2" ```shell curl "https://api.huobi.pro/market/trade?symbol=ethusdt" ``` + ### HTTP 请求 - GET `/market/trade` @@ -1675,25 +1337,13 @@ curl "https://api.huobi.pro/market/trade?symbol=ethusdt" > Response: ```json -{ - "id": 600848670, - "ts": 1489464451000, - "data": [ - { - "id": 600848670, - "trade-id": 102043494568, - "price": 7962.62, - "amount": 0.0122, - "direction": "buy", - "ts": 1489464451000 - } - ] -} +{ "id": 600848670, "ts": 1489464451000, "data": [ { "id": 600848670, "trade-id": 102043494568, "price": 7962.62, "amount": 0.0122, "direction": "buy", "ts": 1489464451000 } ]} ``` ### 响应数据 + | 字段名称 | 数据类型 | 描述 | | --------- | -------- | -------------------------------------------------- | | id | integer | 唯一交易id(将被废弃) | @@ -1710,6 +1360,7 @@ curl "https://api.huobi.pro/market/trade?symbol=ethusdt" ```shell curl "https://api.huobi.pro/market/history/trade?symbol=ethusdt&size=2" ``` + ### HTTP 请求 - GET `/market/history/trade` @@ -1724,49 +1375,13 @@ curl "https://api.huobi.pro/market/history/trade?symbol=ethusdt&size=2" > Response: ```json -[ - { - "id":31618787514, - "ts":1544390317905, - "data":[ - { - "amount":9.000000000000000000, - "ts":1544390317905, - "trade-id": 102043483472, - "id":3161878751418918529341, - "price":94.690000000000000000, - "direction":"sell" - }, - { - "amount":73.771000000000000000, - "ts":1544390317905, - "trade-id": 102043483473 - "id":3161878751418918532514, - "price":94.660000000000000000, - "direction":"sell" - } - ] - }, - { - "id":31618776989, - "ts":1544390311353, - "data":[ - { - "amount":1.000000000000000000, - "ts":1544390311353, - "trade-id": 102043494568, - "id":3161877698918918522622, - "price":94.710000000000000000, - "direction":"buy" - } - ] - } -] +[ { "id":31618787514, "ts":1544390317905, "data":[ { "amount":9.000000000000000000, "ts":1544390317905, "trade-id": 102043483472, "id":3161878751418918529341, "price":94.690000000000000000, "direction":"sell" }, { "amount":73.771000000000000000, "ts":1544390317905, "trade-id": 102043483473 "id":3161878751418918532514, "price":94.660000000000000000, "direction":"sell" } ] }, { "id":31618776989, "ts":1544390311353, "data":[ { "amount":1.000000000000000000, "ts":1544390311353, "trade-id": 102043494568, "id":3161877698918918522622, "price":94.710000000000000000, "direction":"buy" } ] }] ``` ### 响应数据 + | 参数 | 数据类型 | 描述 | | --------- | -------- | -------------------------------------------------- | | id | integer | 唯一交易id(将被废弃) | @@ -1799,22 +1414,13 @@ curl "https://api.huobi.pro/market/detail?symbol=ethusdt" > Response: ```json -{ - "amount":613071.438479561, - "open":86.21, - "close":94.35, - "high":98.7, - "id":31619471534, - "count":138909, - "low":84.63, - "version":31619471534, - "vol":5.6617373443873316E7 -} +{ "amount":613071.438479561, "open":86.21, "close":94.35, "high":98.7, "id":31619471534, "count":138909, "low":84.63, "version":31619471534, "vol":5.6617373443873316E7} ``` ### 响应数据 + | 字段名称 | 数据类型 | 描述 | | -------- | -------- | ---------------------------------------- | | id | integer | 响应id | @@ -1848,28 +1454,7 @@ curl "https://api.huobi.pro/market/etp?symbol=btc3lusdt" > Response ```json -{ - "ch":"market.btc3lusdt.etp", - "status":"ok", - "ts":1597890198849, - "tick":{ - "actualLeverage":2.988538205272293, - "nav":17.463067985747816, - "outstanding":98338.57818006596, - "symbol":"btc3lusdt", - "navTime":1597890198525, - "basket":[ - { - "amount":0.004438693860243208, - "currency":"btc" - }, - { - "amount":-34.725977870927, - "currency":"usdt" - } - ] - } -} +{ "ch":"market.btc3lusdt.etp", "status":"ok", "ts":1597890198849, "tick":{ "actualLeverage":2.988538205272293, "nav":17.463067985747816, "outstanding":98338.57818006596, "symbol":"btc3lusdt", "navTime":1597890198525, "basket":[ { "amount":0.004438693860243208, "currency":"btc" }, { "amount":-34.725977870927, "currency":"usdt" } ] }} ``` ### 响应数据 @@ -1927,28 +1512,7 @@ API Key 权限:读取
> Response: ```json -{ - "data": [ - { - "id": 100001, - "type": "spot", - "subtype": "", - "state": "working" - } - { - "id": 100002, - "type": "margin", - "subtype": "btcusdt", - "state": "working" - }, - { - "id": 100003, - "type": "otc", - "subtype": "", - "state": "working" - } - ] -} +{ "data": [ { "id": 100001, "type": "spot", "subtype": "", "state": "working" } { "id": 100002, "type": "margin", "subtype": "btcusdt", "state": "working" }, { "id": 100003, "type": "otc", "subtype": "", "state": "working" } ]} ``` ### 响应数据 @@ -1970,7 +1534,7 @@ API Key 权限:读取
查询指定账户的余额,支持以下账户: -spot:现货账户, margin:逐仓杠杆账户,otc:OTC 账户,point:点卡账户,super-margin:全仓杠杆账户, investment: C2C杠杆借出账户, borrow: C2C杠杆借入账户 +spot:现货账户 ### HTTP 请求 @@ -1985,43 +1549,25 @@ spot:现货账户, margin:逐仓杠杆账户,otc:OTC 账户,point: > Response: ```json -{ - "data": { - "id": 100009, - "type": "spot", - "state": "working", - "list": [ - { - "currency": "usdt", - "type": "trade", - "balance": "5007.4362872650" - }, - { - "currency": "usdt", - "type": "frozen", - "balance": "348.1199920000" - } - ] - } -} +{ "data": { "id": 100009, "type": "spot", "state": "working", "list": [ { "currency": "usdt", "type": "trade", "balance": "5007.4362872650" }, { "currency": "usdt", "type": "frozen", "balance": "348.1199920000" } ] }} ``` ### 响应数据 -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| -------- | -------- | -------- | -------- | ------------------------------------------------------------ | -| id | true | long | 账户 ID | | -| state | true | string | 账户状态 | working:正常 lock:账户被锁定 | -| type | true | string | 账户类型 | spot:现货账户, margin:逐仓杠杆账户, otc:OTC 账户, point:点卡账户, super-margin:全仓杠杆账户, investment: C2C杠杆借出账户, borrow: C2C杠杆借入账户,矿池账户: minepool, ETF账户: etf, 抵押借贷账户: crypto-loans | -| list | false | Array | | | +| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | +| -------- | -------- | -------- | -------- | ------------------------------- | +| id | true | long | 账户 ID | | +| state | true | string | 账户状态 | working:正常 lock:账户被锁定 | +| type | true | string | 账户类型 | spot:现货账户 | +| list | false | Array | | | list字段说明 -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| -------- | -------- | -------- | ---- | ------------------------------------------------------------ | -| balance | true | string | 余额 | | -| currency | true | string | 币种 | | -| type | true | string | 类型 | trade: 交易余额,frozen: 冻结余额, loan: 待还借贷本金, interest: 待还借贷利息, lock: 锁仓, bank: 储蓄 | +| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | +| -------- | -------- | -------- | ---- | --------------------------------------------- | +| balance | true | string | 余额 | | +| currency | true | string | 币种 | | +| type | true | string | 类型 | trade: 交易余额,frozen: 冻结余额, lock: 锁仓 | ## 获取平台资产总估值 @@ -2037,145 +1583,38 @@ API Key 权限:读取 ### 请求参数 -|参数| 是否必填| 数据类型| 描述| 默认值 |取值范围| -| ---------- | -------- | ------ | ------------------------------------------------------------ | ------ | -------- | -|accountType |false |string| 账户类型,详见账户类型数据字典 | -|valuationCurrency |false |string| 不填默认为btc估值(目前暂只支持BTC估值) +| 参数 | 是否必填 | 数据类型 | 描述 | 默认值 | 取值范围 | +| ----------------- | -------- | -------- | ---------------------------------------- | ------ | -------- | +| accountType | false | string | 账户类型,详见账户类型数据字典 | | | +| valuationCurrency | false | string | 不填默认为btc估值(目前暂只支持BTC估值) | | | > Responds: ```lang=json -{ - "message": null, - "success": true, - "code":200, - "data":"{ - "todayProfit": null, - "updated": null, - "totalBalance": "68232.925885978428351309", - "todayProfitRate": null, - "profitAccountBalanceList": [ - { - "distributionType": "1", - "success": true, - "accountBalance": "68232.925885978428351309" - }, - { - "distributionType": "2", - "success": true, - "accountBalance": "0" - }, - { - "distributionType": "3", - "success": true, - "accountBalance": "0" - }, - { - "distributionType": "4", - "success": true, - "accountBalance": "0" - }, - { - "distributionType": "5", - "success": true, - "accountBalance": "0" - }, - { - "distributionType": "6", - "success": true, - "accountBalance": "0" - }, - { - "distributionType": "7", - "success": true, - "accountBalance": "0" - }, - { - "distributionType": "8", - "success": true, - "accountBalance": "0" - }, - { - "distributionType": "9", - "success": true, - "accountBalance": "0" - }, - { - "distributionType": "10", - "success": true, - "accountBalance": "0" - }, - { - "distributionType": "11", - "success": true, - "accountBalance": "0" - }, - { - "distributionType": "12", - "success": true, - "accountBalance": "0" - }, - { - "distributionType": "13", - "success": true, - "accountBalance": "0" - }, - { - "distributionType": "14", - "success": true, - "accountBalance": "0" - }, - { - "distributionType": "15", - "success": true, - "accountBalance": "0" - }, - { - "distributionType": "16", - "success": false, - "accountBalance": "0" - } - ] - - }" -} +{ "message": null, "success": true, "code":200, "data":"{ "todayProfit": null, "updated": null, "totalBalance": "68232.925885978428351309", "todayProfitRate": null, "profitAccountBalanceList": [ { "distributionType": "1", "success": true, "accountBalance": "68232.925885978428351309" }, { "distributionType": "2", "success": true, "accountBalance": "0" }, { "distributionType": "3", "success": true, "accountBalance": "0" }, { "distributionType": "4", "success": true, "accountBalance": "0" }, { "distributionType": "5", "success": true, "accountBalance": "0" }, { "distributionType": "6", "success": true, "accountBalance": "0" }, { "distributionType": "7", "success": true, "accountBalance": "0" }, { "distributionType": "8", "success": true, "accountBalance": "0" }, { "distributionType": "9", "success": true, "accountBalance": "0" }, { "distributionType": "10", "success": true, "accountBalance": "0" }, { "distributionType": "11", "success": true, "accountBalance": "0" }, { "distributionType": "12", "success": true, "accountBalance": "0" }, { "distributionType": "13", "success": true, "accountBalance": "0" }, { "distributionType": "14", "success": true, "accountBalance": "0" }, { "distributionType": "15", "success": true, "accountBalance": "0" }, { "distributionType": "16", "success": false, "accountBalance": "0" } ] }"} ``` ### 响应数据 -| 参数名称 | 数据类型 | 描述 | -| -------- | -------- | -------- | -|todayProfit|String|今日总收益,按估值参数计价 -|todayProfitRate|Long|今日收益率 -|accountList|List|账户资产列表 -|{accountType|String|账户类型 -|accountBalance|String|账户资产 -|success}|Boolean|账户资产是否成功获取,为false时accountBalance返回0 -|timestamp |long |数据返回时间,为unix time in millisecond| +| 参数名称 | 数据类型 | 描述 | +| --------------- | -------------------- | ------------------------------------------------- | +| todayProfit | String | 今日总收益,按估值参数计价 | +| todayProfitRate | Long | 今日收益率 | +| accountList | List | 账户资产列表 | +| {accountType | String | 账户类型 | +| accountBalance | String | 账户资产 | +| success} | Boolean | 账户资产是否成功获取,为false时accountBalance返回0 | +| timestamp | long | 数据返回时间,为unix time in millisecond | ### 账户类型数据字典 -|code| 说明 -|-----|-----| -| 1 | 币币账户 | -| 2 | 逐仓杠杆账户 | -| 3 | 全仓杠杆账户 | -| 4 | 交割合约账户 | -| 5 | 法币账户 | -| 6 | 矿池账户 | -| 7 | 永续合约账户 | -| 8 | C2C出借账户 | -| 9 | C2C借款账户 | -| 10 | 存币宝账户 | -| 11 | 正向合约账户 | -| 12 | 期权合约账户 | -| 13 | 场外期权账户 | -| 14 | 抵押借贷账户 | -| 15 | 网格交易账户 | -| 16 | 挖矿宝账户 | - - - -## 获取指定账户资产估值(现货、杠杆、OTC) + +| code | 说明 | +| ---- | -------- | +| 1 | 币币账户 | + + + +## 获取指定账户资产估值(现货) API Key 权限:读取 @@ -2189,26 +1628,20 @@ API Key 权限:读取 ### 请求参数 -| 参数 | 是否必填 | 数据类型 | 描述 | 默认值 | 取值范围 | -| ----------------- | -------- | -------- | --------------------------------------------------------- | ------ | ------------------------------------------------------------ | -| accountType | true | string | 账户类型 | NA | spot:现货账户, margin:逐仓杠杆账户,otc:OTC 账户,super-margin:全仓杠杆账户 | -| valuationCurrency | false | string | 资产估值法币,即资产按哪个法币为单位进行估值。 | BTC | 可选法币有:BTC、CNY、USD、JPY、KRW、GBP、TRY、EUR、RUB、VND、HKD、TWD、MYR、SGD、AED、SAR (大小写敏感) | -| subUid | false | long | 子用户的 UID,若不填,则返回API key所属用户的账户资产估值 | NA | | +| 参数 | 是否必填 | 数据类型 | 描述 | 默认值 | 取值范围 | +| ----------------- | -------- | -------- | --------------------------------------------------------- | ------ | ----------------------------------- | +| accountType | true | string | 账户类型 | NA | spot:现货账户 | +| valuationCurrency | false | string | 资产估值法币,即资产按哪个法币为单位进行估值。 | BTC | 可选法币有:USD、SGD (大小写敏感) | +| subUid | false | long | 子用户的 UID,若不填,则返回API key所属用户的账户资产估值 | NA | | > Responds: ```json -{ - "code": 200, - "data": { - "balance": "34.75", - "timestamp": 1594901254363 - }, - "ok": true -} +{ "code": 200, "data": { "balance": "34.75", "timestamp": 1594901254363 }, "ok": true} ``` ### 返回字段 + | 参数 | 是否必须 | 数据类型 | 说明 | | --------- | -------- | -------- | ---------------------------------------- | | balance | true | string | 按照某一个法币为单位的总资产估值 | @@ -2219,20 +1652,6 @@ API Key 权限:读取 API Key 权限:交易
-该节点为母用户和子用户进行资产划转的通用接口。
- -母用户和子用户均支持的功能包括:
-1、币币账户与逐仓杠杠账户之间的划转;
-2、逐仓杠杠不同账户间相同币种的直接划转,如逐仓杠杠BTC/USDT账户和ETH/USDT账户,相同币种USDT可直接划转;
- -仅母用户支持的功能包括:
-1、母用户币币账户与子用户币币账户间的划转;
-2、不同子用户币币账户间划转;
- -仅子用户支持的功能包括:
-1、子用户币币账户向母用户下的其他子用户币币账户划转,此权限默认关闭,需母用户授权。授权接口为 `POST /v2/sub-user/transferability`;
-2、子用户币币账户向母用户币币账户划转;
- 其他划转功能将逐步上线,敬请期待。
### HTTP 请求 @@ -2241,31 +1660,22 @@ API Key 权限:交易
### 请求参数 -| 参数 | 是否必填 | 数据类型 | 说明 | 取值范围 | -| ----------------- | -------- | -------- | ----------------------------------- | -------------------------------- | -| from-user | true | long | 转出用户uid | 母用户uid,子用户uid | -| from-account-type | true | string | 转出账户类型 | spot,margin | -| from-account | true | long | 转出账户id | | -| to-user | true | long | 转入用户uid | 母用户uid,子用户uid | -| to-account-type | true | string | 转入账户类型 | spot,margin | -| to-account | true | long | 转入账户id | | -| currency | true | string | 币种,即btc, ltc, bch, eth, etc ... | 取值参考GET /v1/common/currencys | -| amount | true | string | 划转金额 | | +| 参数 | 是否必填 | 数据类型 | 说明 | 取值范围 | +| ------------ | -------- | -------- | ----------------------------------- | -------------------------------- | +| from-account | true | long | 转出账户id | | +| to-account | true | long | 转入账户id | | +| currency | true | string | 币种,即btc, ltc, bch, eth, etc ... | 取值参考GET /v1/common/currencys | +| amount | true | string | 划转金额 | | > Response: ```json -{ - "status": "ok", - "data": { - "transact-id": 220521190, - "transact-time": 1590662591832 - } -} +{ "status": "ok", "data": { "transact-id": 220521190, "transact-time": 1590662591832 }} ``` ### 响应数据 + | 参数 | 是否必须 | 数据类型 | 说明 | 取值范围 | | --------------- | -------- | -------- | ---------- | --------------- | | status | true | string | 状态 | "ok" or "error" | @@ -2291,7 +1701,7 @@ API Key 权限:读取
| -------------- | -------- | -------- | ------------------------------------------------------------ | -------------------- | ------------------------------------------------------------ | | account-id | true | string | 账户编号,取值参考 `GET /v1/account/accounts` | | | | currency | false | string | 币种,即btc, ltc, bch, eth, etc ...(取值参考`GET /v1/common/currencys`) | | | -| transact-types | false | string | 变动类型,可多选,以逗号分隔,包含动账类型列表详见注3 | all | trade (交易),etf(ETF申购), transact-fee(交易手续费), fee-deduction(手续费抵扣), transfer(划转), credit(借币), liquidation(清仓), interest(币息), deposit(充币),withdraw(提币), withdraw-fee(提币手续费), exchange(兑换), other-types(其他),rebate(交易返佣) | +| transact-types | false | string | 变动类型,可多选,以逗号分隔,包含动账类型列表详见注3 | all | trade (交易), transact-fee(交易手续费), transfer(划转), deposit(充币),withdraw(提币), withdraw-fee(提币手续费), exchange(兑换), other-types(其他) | | start-time | false | long | 远点时间 unix time in millisecond. 以transact-time为key进行检索. 查询窗口最大为1小时. 窗口平移范围为最近30天. | ((end-time) – 1hour) | [((end-time) – 1hour), (end-time)] | | end-time | false | long | 近点时间unix time in millisecond. 以transact-time为key进行检索. 查询窗口最大为1小时. 窗口平移范围为最近30天. | current-time | [(current-time) – 29days,(current-time)] | | sort | false | string | 检索方向 | asc | asc or desc | @@ -2301,31 +1711,7 @@ API Key 权限:读取
> Response: ```json -{ - "status": "ok", - "data": [ - { - "account-id": 5260185, - "currency": "btc", - "transact-amt": "0.002393000000000000", - "transact-type": "transfer", - "record-id": 89373333576, - "avail-balance": "0.002393000000000000", - "acct-balance": "0.002393000000000000", - "transact-time": 1571393524526 - }, - { - "account-id": 5260185, - "currency": "btc", - "transact-amt": "-0.002393000000000000", - "transact-type": "transfer", - "record-id": 89373382631, - "avail-balance": "0E-18", - "acct-balance": "0E-18", - "transact-time": 1571393578496 - } - ] -} +{ "status": "ok", "data": [ { "account-id": 5260185, "currency": "btc", "transact-amt": "0.002393000000000000", "transact-type": "transfer", "record-id": 89373333576, "avail-balance": "0.002393000000000000", "acct-balance": "0.002393000000000000", "transact-time": 1571393524526 }, { "account-id": 5260185, "currency": "btc", "transact-amt": "-0.002393000000000000", "transact-type": "transfer", "record-id": 89373382631, "avail-balance": "0E-18", "acct-balance": "0E-18", "transact-time": 1571393578496 } ]} ``` ### 响应数据 @@ -2357,296 +1743,13 @@ API Key 权限:读取
注3:
变动类型包含动账类型明细列表: -| 变动类型 | 动账类型 | 描述 | -| ------------- | -------- | ------- | -| trade | match-income | 撮合成交收入 | -| trade | match-payout | 撮合成交支付 | -| trade | otc-trade | OTC交易资产同步 | -| trade | point-purchased | 购买点卡 | -| trade | point-purchased-pay | 购买点卡支付 | -| trade | member-purchase | 会员购买 | -| trade | matching-transfer-frozen-to-clearing-v2 | 撮合成交转账冻结子账户到清算子帐户 | -| trade | matching-transfer-clearing-to-trade-v2 | 撮合成交转账清算子账户到交易子帐户 | -| trade | otc-options-user-to-principal-clct-v2 | 用户涡轮业务账户到涡轮本金归集账户 | -| trade | otc-options-income-to-user-v2 | 涡轮收益归集账户到用户涡轮账户 | -| etf | etf-subscription-apply-transfer | 用户冻结账户转到系统ETF账户 | -| etf | etf-subscription-apply-cancel | 系统ETF账户转到用户trade账户 | -| etf | etf-subscription-settle-transfer | 系统ETF账户转到用户trade账户 | -| etf | etf-subscription-apply-receivable | 系统ETF应付账户转到用户的ETF账户,用于认购申请平账 | -| etf | etf-subscription-settle-receivable | 用户的ETF账户转到系统ETF应付账户,用于认购结算平账 | -| etf | etf-subscription-open-position-todo | 系统ETF账户转到建仓的普通账户 | -| etf | etf-subscription-open-position-done | 建仓的普通账户转到系统ETF账户 | -| etf | etf-purchase-cancel | 系统ETF账户转到用户trade账户 | -| etf | etf-purchase-apply-transfer | 用户冻结账户转到系统ETF账户 | -| etf | etf-purchase-settle-transfer | 系统ETF账户转到用户trade账户 | -| etf | etf-redemption-cancel | 系统ETF账户转到用户币币账户 | -| etf | etf-redemption-apply-transfer | 用户冻结账户转到系统ETF账户 | -| etf | etf-redemption-settle-transfer | 系统ETF账户转到用户币币账户 | -| transact-fee | matching-transfer-fee-v2 | 撮合成交手续费转账清算子账户到系统子账户 | -| transact-fee | otc-trade-fee | OTC交易手续费同步 | -| transact-fee | point-etf-fee-deduction | 抵扣ETF手续费返还币 | -| transact-fee | otc-charge-in | OTC收费 | -| transact-fee | otc-charge-out | OTC退费 | -| transact-fee | etf-subscription-charge-receivable | 用户的ETF账户转到系统ETF应付账户,用于认购手续费平账 | -| transact-fee | matching-transfer-fee-v3 | 撮合成交手续费转账清算子账户到系统子账户 | -| fee-deduction | point-fee-deduction-v3 | 抵扣手续费 | -| fee-deduction | point-fee-deduction-pay-v2 | 抵扣手续费支付 | -| fee-deduction | point-fee-deduction-pay-v3 | 抵扣手续费支付 | -| fee-deduction | revert-point-fee-deduction-pay | 抵扣手续费的点卡返还用户 | -| fee-deduction | point-interest-deduction-pay | 抵扣借贷利息支付点卡 | -| fee-deduction | point-etf-fee-deduction-pay | 抵扣ETF手续费支付点卡 | -| fee-deduction | trade-fee-deduction | 抵扣手续费 | -| fee-deduction | otc-point-pay | OTC点卡支付费用 | -| fee-deduction | trade-fee-deduction-pay-user-trade-to-match | 抵扣手续费支付-用户交易账户划转到清算账户 | -| fee-deduction | trade-fee-deduction-user-trade-to-match | 新版抵扣手续费支付-用户交易账户划转到清算账户 | -| fee-deduction | revert-point-fee-deduction | 抵扣手续费归还系统账户 | -| fee-deduction | super-margin-interest-deduct-repay | 利息抵扣:用户交易账户转到系统利息账户 | -| transfer | user-account-transfer-inner-in | 用户内部转账转入 | -| transfer | user-account-transfer-inner-out | 用户内部转账转出消账 | -| transfer | mine-account-to-user-account | 矿池账户转用户 | -| transfer | user-account-to-mine-account | 用户转矿池账户 | -| transfer | otc-transfer-in | 转账划入OTC | -| transfer | otc-transfer-in-v2 | 转账划入OTC | -| transfer | otc-transfer-out | 转账划出OTC | -| transfer | otc-transfer-out-v2 | 转账划出OTC | -| transfer | margin-transfer-in | 借贷划转: 现货交易账户转到借贷交易账户 | -| transfer | margin-transfer-out | 借贷划转: 借贷交易账户转到现货交易账户 | -| transfer | point-transfer | 点卡转让 | -| transfer | point-transfer-pay | 点卡转让支付 | -| transfer | mine-pool-transfer-in | 矿池账户转入 | -| transfer | mine-pool-transfer-out | 矿池账户转出 | -| transfer | chat-transfer-in | 转账划入chat | -| transfer | chat-transfer-in-v2 | 转账划入chat | -| transfer | chat-transfer-out | 转账划出chat | -| transfer | chat-transfer-out-v2 | 转账划出chat | -| transfer | chat-to-otc | chat划转至OTC | -| transfer | otc-to-chat | OTC划转至chat | -| transfer | master-transfer-in | 子账户转到母账户 | -| transfer | master-transfer-out | 母账户转到子账户 | -| transfer | margin-to-margin | 借贷划转: 逐仓杠杆交易账户转到逐仓杠杆交易账户 | -| transfer | master-point-transfer-in | 子账户转到母账户,点卡 | -| transfer | master-point-transfer-out | 母账户转到子账户,点卡 | -| transfer | sub-transfer | 子子划转 | -| transfer | sub-point-transfer | 子子点卡划转 | -| transfer | futures-transfer-in | 转账划入合约账户 | -| transfer | futures-transfer-in-v2 | 转账划入合约账户V2| -| transfer | futures-transfer-out | 转账划出合约账户 | -| transfer | futures-transfer-out-v2 | 转账划出合约账户V2 | -| transfer | institution-transfer-in | 转账划入机构 | -| transfer | institution-transfer-in-v2 | 转账划入机构 | -| transfer | institution-transfer-out | 转账划出机构 | -| transfer | institution-transfer-out-v2 | 转账划出机构 | -| transfer | swap-transfer-in | 转账划入合约账户 | -| transfer | swap-transfer-out | 转账划出合约账户 | -| transfer | dm-swap-transfer-in | 转账划入反向永续合约账户 | -| transfer | dm-swap-transfer-out | 转账划出反向永续合约账户 | -| transfer | option-transfer-in | 转账划入期权账户 | -| transfer | option-transfer-out | 转账划出期权账户 | -| transfer | cfd-transfer-in | 转账划入CFD账户 | -| transfer | cfd-transfer-out | 转账划出CFD账户 | -| transfer | super-margin-transfer-out | 全仓杠杆交易账户转入 | -| transfer | super-margin-transfer-in | 全仓杠杆交易账户转出 | -| transfer | japan-donations-operation-to-system | 运营账户到捐款系统账户 | -| transfer | japan-donations-system-to-operation | 捐款系统账户到运营账户 | -| transfer | japan-donations-system-to-user | 日本首里城火灾捐款付款:捐款系统账户 到 普通用户账户 | -| transfer | japan-donations-user-to-system | 日本首里城火灾捐款收款:普通用户账户 到 捐款系统账户 | -| transfer | japan-discount-user-to-system | 币币账户 到 折扣抢购系统账户 | -| transfer | japan-discount-system-to-user | 折扣抢购系统账户 到 币币账户 | -| transfer | japan-discount-operation-to-system | 运营账户 到 折扣抢购系统账户 | -| transfer | japan-discount-system-to-operation | 折扣抢购系统账户 到 运营账户 | -| transfer | directed-card-system-to-operation | 系统定向点卡专项转款账户到运营账户 | -| transfer | directed-card-operation-to-system | 运营账户到系统定向点卡专项转款账户 | -| transfer | system-to-user-account | 土耳其兑换系统账户到用户账户 | -| transfer | user-account-to-system | 用户账户到土耳其兑换系统账户 | -| transfer | liquidity-account-to-system | 香港流动性运营账户到土耳其兑换系统账户 | -| transfer | system-to-liquidity-account | 土耳其兑换系统账户到香港流动性运营账户 | -| transfer | linear-swap-transfer-in | 转账划入正向永续账户 | -| transfer | linear-swap-transfer-out | 转账划出正向永续账户 | -| transfer | custody-transfer-in | 转账划入香港站资金账户 | -| transfer | custody-transfer-out | 转账划出香港站资金账户 | -| transfer | operation-to-margin-trade | 运营账户到逐仓杠杆账户 | -| transfer | margin-trade-to-operation | 逐仓杠杆账户到运营账户 | -| transfer | grid-transfer-in | 网格划转: 现货交易账户转到网格交易账户 | -| transfer | grid-transfer-out | 网格划转: 网格交易账户转到现货交易账户 | -| transfer | otc-generic-transfer-in | OTC账户 通用划转划入 | -| transfer | otc-generic-transfer-out | OTC账户 通用划转转出 | -| transfer | spot-generic-transfer-in | 币币账户 通用划转划入 | -| transfer | spot-generic-transfer-out | 币币账户 通用划转转出 | -| transfer | margin-generic-transfer-in | 逐仓杠杆 通用划转划入 | -| transfer | margin-generic-transfer-out | 逐仓杠杆 通用划转转出 | -| transfer | point-generic-transfer-in | 点卡 通用划转划入 | -| transfer | point-generic-transfer-out | 点卡 通用划转转出 | -| transfer | minepool-generic-transfer-in | 矿池 通用划转划入 | -| transfer | minepool-generic-transfer-out | 矿池 通用划转转出 | -| transfer | super-margin-generic-transfer-in | 全仓杠杆 通用划转划入 | -| transfer | super-margin-generic-transfer-out | 全仓杠杆 通用划转转出 | -| transfer | investment-generic-transfer-in | C2C出借账户 通用划转划入 | -| transfer | investment-generic-transfer-out | C2C出借账户 通用划转转出 | -| transfer | borrow-generic-transfer-in | C2C借款账户 通用划转划入 | -| transfer | borrow-generic-transfer-out | C2C借款账户 通用划转转出 | -| transfer | deposit-earning-generic-transfer-in | Savings理财账户 通用划转划入 | -| transfer | deposit-earning-generic-transfer-out | Savings理财账户 通用划转转出 | -| transfer | crypto-loans-generic-transfer-in | 质押借贷 通用划转划入 | -| transfer | crypto-loans-generic-transfer-out | 质押借贷 通用划转转出 | -| transfer | grid-trading-generic-transfer-in | 网格交易账户 通用划转划入 | -| transfer | grid-trading-generic-transfer-out | 网格交易账户 通用划转转出 | -| transfer | mine-pool-mall-lease-spot-to-settlement-system | 商城算力租赁收款UID划转到商城算力租赁结算系统账户 | -| transfer | mine-pool-mall-lease-settlement-system-to-spot | 商城算力租赁结算系统账户划转到用户UID币币账户 | -| transfer | kr-savings-spot-to-clct | 用户币币账户到系统理财归集账户 | -| transfer | kr-savings-clct-to-transition-spot | 系统理财归集账户到指定财务中转账户(用户账户) | -| transfer | kr-savings-transition-spot-to-intermediate | 指定财务中转账户(用户账户)到系统理财中间账户 | -| transfer | kr-savings-return-to-spot | 系统理财归还账户到用户币币账户 | -| transfer | kr-savings-income-to-spot | 系统理财收益账户到用户币币账户 | -| transfer | kr-savings-transition-spot-to-clct | 指定财务中转账户(用户账户)到系统理财归集账户 | -| transfer | jp-coupon-ops-to-sys | 运营账户 到 优惠券系统账户 | -| transfer | jp-coupon-sys-to-spot | 优惠券系统账户 到 用户币币 | -| transfer | otc-options-master-transfer-in | 涡轮业务专用:子账户转到母账户 | -| transfer | otc-options-master-transfer-in-manual | 手工涡轮业务专用:子账户转到母账户 | -| transfer | otc-options-master-transfer-out | 涡轮业务专用:母账户转到子账户 | -| transfer | otc-options-master-transfer-out-manual | 手工涡轮业务专用:母账户转到子账户 | -| transfer | mine-pool-staking-lock | 用户币币转到用户锁仓 | -| transfer | mine-pool-staking-unlock | 用户锁仓转到用户币币 | -| transfer | mine-pool-staking-reward-system-to-spot | 系统账户-备付金账户转到用户币币 | -| transfer | airdrop-user-spot-oneside-in | 空投用户账户入账 | -| transfer | project-airdrop-user-spot-oneside-in | 项目方空投用户账户入账 | -| credit | margin-loan-transfer | 申请借贷: 系统现金池转到用户交易账户 | -| credit | margin-loan-transfer-v2 | 申请借贷: 系统现金池转到用户交易账户 | -| credit | margin-repay-loan-transfer | 归还借贷本金: 用户交易冻结账户转到系统现金池 | -| credit | margin-repay-loan-transfer-v2 | 归还借贷本金: 用户交易账户转到系统现金池 | -| credit | super-margin-loan-transfer | 申请借贷: 系统现金池转到用户交易账户 | -| credit | super-margin-repay | 还款: 用户交易账户转到系统借贷资金池 | -| credit | auto-super-margin-repay | 自动还款: 用户交易账户转到系统借贷资金池 | -| credit | operations-account-recycling-user-trade-principal | 运营账户回收用户交易子账户借款本金转账 | -| credit | operations-account-to-outside-loan-account | 运营账户->场外借贷用户 | -| credit | outside-loan-account-to-operations-account | 场外借贷用户->运营账户 | -| credit | pledged-loan-lending | 质押借贷-借出 | -| credit | pledged-loan-receiving | 质押借贷-收款 | -| credit | super-margin-loan-receivable | 申请借贷: 用户应付本金转到系统应收本金 | -| credit | super-margin-interest-accrued | 借贷计息: 用户应付利息转到系统应收利息 | -| credit | super-margin-interest-deduct-refund | 利息抵扣: 系统应收利息转到用户应付利息 | -| credit | super-margin-refund | 还款: 系统应收本金转到用户应付本金 | -| credit | margin-repay-loan-receivable | 归还借贷本金: 系统应收本金转到用户应付本金 | -| credit | margin-repay-loan-receivable-v2 | 归还借贷本金: 系统应收本金转到用户应付本金 | -| credit | otc-options-user-asset-ops-borrow | 财务运营账户到涡轮运营子账户(现货账户)- 借款 | -| credit | otc-options-user-asset-ops-borrow-debt | 财务运营账户到涡轮运营子账户(涡轮应收本金账户)- 借款 | -| credit | otc-options-user-asset-ops-repay | 涡轮运营子账户到财务运营账户(现货账户)-还款 | -| credit | otc-options-user-asset-ops-repay-debt | 涡轮运营子账户到财务运营账户(涡轮应还本金账户)- 还款 | -| liquidation | margin-auto-repay-interest-transfer | 归还借贷利息: 用户交易账户转到系统实收本金 | -| liquidation | margin-auto-repay-interest-transfer-v2 | 归还借贷利息: 用户交易账户转到系统实收本金 | -| liquidation | margin-auto-repay-loan-transfer | 归还借贷本金: 用户交易账户转到系统现金池 | -| liquidation | margin-auto-repay-loan-transfer-v2 | 归还借贷本金: 用户交易账户转到系统现金池 | -| interest | margin-repay-interest-transfer | 归还借贷利息: 用户交易冻结账户转到系统实收本金 | -| interest | margin-repay-interest-transfer-v2 | 归还借贷利息: 用户交易账户转到系统实收本金 | -| interest | point-interest-deduction | 抵扣借贷利息返还币 | -| interest | super-margin-interest-repay | 还息:用户交易账户转到系统已收利息 | -| interest | auto-super-margin-interest-repay | 自动还息:用户交易账户转到系统已收利息 | -| interest | margin-repay-interest-receivable | 归还借贷利息: 系统应收利息转到用户应付利息 | -| interest | margin-repay-interest-receivable-v2 | 归还借贷利息: 系统应收利息转到用户应付利息 | -| interest | margin-interest-accrued | 借贷计息: 用户应付利息转到系统应收利息 | -| interest | margin-interest-accrued-v2 | 借贷计息: 用户应付利息转到系统应收利息 | -| deposit | user-account-deposit | 用户账户充值转账 | -| deposit | user-account-fast-deposit | 用户账户快速充值转账 | -| deposit | user-credit-loan-to-system | 用户撤销充值,欠费币币账户转账到系统账户 | -| deposit | user-account-mgt-special-deposit | 用户账户MGT异常充值 | -| deposit | operations-account-deposit-compensate-expenditure | 充币业务补偿支出 | -| deposit | operations-account-deposit-compensate-earning | 充币业务补偿收入 | -| withdraw | user-apply-withdraw | 用户申请提现冻结 | -| withdraw | user-apply-fiat-withdraw | 用户申请法币Fiat提现冻结 | -| withdraw | user-account-withdraw | 用户账户提现转账 | -| withdraw | user-account-fast-withdraw | 用户账户快速提现转账 | -| withdraw | operations-account-withdraw-compensate-expenditure | 提币业务补偿支出 | -| withdraw | operations-account-withdraw-compensate-earning | 提币业务补偿收入 | -| withdraw-fee | system-withdraw-fee-in | 扣用户提现手续费 | -| withdraw-fee | system-withdraw-fee-out | 返还用户提现手续费 | -| exchange | stable-currency-transfer-in-v2 | 系统稳定币转给用户 | -| exchange | stable-currency-transfer-out-v2 | 用户稳定币转给系统 | -| rebate | negative-maker-sys-oneside-out | 负maker系统账户出账 | -| rebate | negative-maker-user-oneside-in | 负maker用户账户入账 | -| etp | etp-purchase-transfer | 申购的USDT: 用户账户转到杠杆代币申购赎回系统账户 | -| etp | etp-purchase-receivable | 申购的杠杆代币: 杠杆代币申购赎回系统账户-杠杆代币转到用户账户 | -| etp | etp-purchase-charge | 申购手续费: 用户账户转到杠杆代币收入系统账户 | -| etp | etp-redemption-transfer | 赎回的杠杆代币: 用户账户转到杠杆代币申购赎回系统账户 | -| etp | etp-redemption-settle-transfer | 给赎回的USDT: 杠杆代币申购赎回系统账户转到用户账户 | -| etp | etp-redemption-charge | 赎回手续费: 杠杆代币申购赎回系统账户转到杠杆代币收入系统账户 | -| etp | etp-management-charge | 划转管理费: 用户账户转到杠杆代币收入系统账户 | -| etp | etp-cash-concentration | 收入归集: 杠杆代币收入系统账户转到收入归集系统账户 | -| etp | etp-usdt-hedge-sys-to-user | USDT对冲: 杠杆代币申购赎回系统账户转到用户账户 | -| etp | etp-usdt-hedge-user-to-sys | USDT对冲: 用户账户转到杠杆代币申购赎回系统账户 | -| etp | etp-futures-hedge-sys-to-user | 合约对冲: 杠杆代币申购赎回系统账户转到用户账户 | -| etp | etp-futures-hedge-user-to-sys | 合约对冲: 用户账户转到杠杆代币申购赎回系统账户 | -| etp | etp-usdt-spot-sys-to-user | 杠杆代币申购赎回系统账户转到用户杠杆代币现货管理账户 | -| etp | etp-usdt-spot-user-to-sys | 用户杠杆代币现货管理账户转到杠杆代币申购赎回系统账户 | -| savings | deposit-earning-to-spot | 理财账户转到币币账户 | -| savings | spot-to-deposit-earning | 币币账户转到理财账户 | -| savings | deposit-earning-to-collect | 理财账户转到资金归集账户 | -| savings | collect-to-deposit-earning | 资金归集账户转到理财账户 | -| savings | operation-to-collect | 运营账户转到资金归集账户 | -| savings | collect-to-operation | 资金归集账户转到运营账户 | -| savings | operation-to-interest | 运营账户转到利息支付账户 | -| savings | interest-to-operation | 利息支付账户转到运营账户 | -| savings | interest-to-deposit-earning | 利息支付账户转到理财账户 | -| savings | deposit-earning-to-interest | 理财账户转到利息支付账户 | -| savings | collect-to-expend | 资金归集账户转到资金支出账户 | -| savings | expend-to-collect | 资金支出账户转到资金归集账户 | -| savings | expend-to-operation | 资金支出账户转到运营账户 | -| savings | operation-to-expend | 运营账户转到资金支出账户 | -| other-types | operations-account-transfer-in | 运营账户转入转账 | -| other-types | operations-account-transfer-out | 运营账户转出转账 | -| other-types | operations-account-user-event-in | 运营账户活动策划转入 | -| other-types | operations-account-user-event-out | 运营账户活动策划转出 | -| other-types | operations-account-loan-to-user-trade | 运营账户借款给用户交易子账户转账 | -| other-types | operations-account-expenditure | 运营账户支出转账 | -| other-types | inspire-account-to-user-account | 激励账户到用户 | -| other-types | user-account-to-inspire-account | 用户账户到激励账户 | -| other-types | activity-account-to-user-account | 活动账户转用户 | -| other-types | user-account-to-activity-account | 用户转活动账户 | -| other-types | brokerage-account-to-user-account | 返佣账户转用户 | -| other-types | user-account-to-brokerage-account | 用户转返佣账户 | -| other-types | exchange-operation-to-user | 交易所运营账户转到用户trade账户:拨款 | -| other-types | operations-account-earning | 运营账户收入转账 | -| other-types | market-account-to-user-account | 市场账户转用户 | -| other-types | user-account-to-market-account | 用户转市场账户 | -| other-types | trade-account-to-user-account | 交易账户转用户 | -| other-types | user-account-to-trade-account | 用户转交易账户 | -| other-types | backup-account-to-user-account | 备用转用户 | -| other-types | user-account-to-backup-account | 用户转备用 | -| other-types | fork-transfer-in | 分叉币转换生成 | -| other-types | fork-transfer-out | 分叉币转换消耗 | -| other-types | point-purchased-gift | 购买点卡赠币 | -| other-types | matching-fee-brokerage | 手续费返佣金 | -| other-types | matching-fee-brokerage-point | 手续费返佣点卡 | -| other-types | api-matching-fee-brokerage | 渠道返佣金 | -| other-types | api-matching-fee-brokerage-point | 渠道返佣点卡 | -| other-types | matching-fee-cashback | 手续费返现金 | -| other-types | matching-fee-cashback-point | 手续费返现点卡 | -| other-types | exchange-fee-to-user | 交易所手续费账户转到邀请人账户 | -| other-types | otc-adjust-account-in | OTC手动给用户充值 | -| other-types | otc-adjust-account-out | OTC手动给用户扣款 | -| other-types | otc-adjust-transfer-in | OTC强制增加用户欠费 | -| other-types | otc-adjust-transfer-out | OTC强制增加用户资产 | -| other-types | option-liquidity-borrow | 期权流动性借出 | -| other-types | option-liquidity-refund | 期权流动性还款 | -| other-types | option-liquidity-other-borrow | 期权其他借出 | -| other-types | option-liquidity-other-refund | 期权其他还款 | -| other-types | linear-swap-liquidity-borrow | 正向永续合约流动性借出 | -| other-types | linear-swap-liquidity-refund | 正向永续合约流动性还款 | -| other-types | linear-swap-liquidity-other-borrow | 正向永续合约其他借出 | -| other-types | linear-swap-liquidity-other-refund | 正向永续合约其他还款 | -| other-types | otc-options-principal-clct-to-user-asset-ops-v3 | 手工涡轮本金归集账户到涡轮运营母账户 | -| other-types | otc-options-income-to-user-asset-ops-manual | 手工涡轮收益归集账户到涡轮运营母账户 | -| other-types | otc-options-user-asset-ops-to-income-manual | 手工涡轮运营母账户到涡轮收益归集账户 | -| other-types | finance-clear-spot-to-sys-usa-jp | 美/日籍用户清退资产返还收款 | -| other-types | finance-clear-sys-to-spot-usa-jp | 美/日籍用户清退资产返还借出 | -| other-types | change-coin-chain-spot-to-sys | 换币换链收入 | -| other-types | change-coin-chain-sys-to-spot | 换币换链支出 | -| other-types | huoban-fund-spot-to-sys | 火伴基金收款 | -| other-types | huoban-fund-sys-to-spot | 火伴基金借出 | -| other-types | huoban-fund-interest-spot-to-sys | 火伴基金利息收入 | -| other-types | head-hunting-sys-to-spot | 猎头费支出 | -| other-types | project-activity-spot-to-sys | 项目方出资活动收入 | -| other-types | project-activity-sys-to-spot | 项目方出资活动支出 | -| other-types | operation-to-super-margin-trade | 运营账户转到用户账户-全仓杠杆账户 | -| other-types | super-margin-trade-to-operation | 用户账户-全仓杠杆账户转到运营账户 | +| 变动类型 | 动账类型 | 描述 | +| -------------------- | ----------------------------- | --------------------- | +| trade | match-income | 撮合成交收入 | +| transfer | spot-generic-transfer-in | 币币账户 通用划转划入 | +| transfer{ account-id | spot-generic-transfer-outlong | 币币账户 通用划转转出 | +| deposit | user-account-deposit | 用户账户充值转账 | +| withdraw | user-account-withdraw | 用户账户提现转账 | ## 财务流水 @@ -2686,53 +1789,26 @@ endTime缺省值:当前时间 > Response: ```json -{ -"code": 200, -"message": "success", -"data": [ - { - "accountId": 5260185, - "currency": "btc", - "transactAmt": 1.000000000000000000, - "transactType": "transfer", - "transferType": "margin-transfer-out", - "transactId": 0, - "transactTime": 1585573286913, - "transferer": 5463409, - "transferee": 5260185 - }, - { - "accountId": 5260185, - "currency": "btc", - "transactAmt": -1.000000000000000000, - "transactType": "transfer", - "transferType": "margin-transfer-in", - "transactId": 0, - "transactTime": 1585573281160, - "transferer": 5260185, - "transferee": 5463409 - } -] -} +{"code": 200,"message": "success","data": [ { "accountId": 5260185, "currency": "btc", "transactAmt": 1.000000000000000000, "transactType": "transfer", "transferType": "margin-transfer-out", "transactId": 0, "transactTime": 1585573286913, "transferer": 5463409, "transferee": 5260185 }, { "accountId": 5260185, "currency": "btc", "transactAmt": -1.000000000000000000, "transactType": "transfer", "transferType": "margin-transfer-in", "transactId": 0, "transactTime": 1585573281160, "transferer": 5260185, "transferee": 5463409 }]} ``` ### 响应数据 -| 字段名称 | 数据类型 | 是否必需 | 描述 | 取值范围 | -| ------------ | -------- | -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| code | integer | TRUE | 状态码 | | -| message | string | FALSE | 错误描述(如有) | | -| data | object | TRUE | 按用户请求参数sort中定义的顺序排列 | | -| { accountId | integer | TRUE | 账户编号 | | -| currency | string | TRUE | 币种 | | -| transactAmt | number | TRUE | 变动金额(入账为正 or 出账为负) | | -| transactType | string | TRUE | 变动类型 | transfer(划转) | -| transferType | string | FALSE | 划转类型(仅对transactType=transfer有效) | otc-to-pro(otc到现货), pro-to-otc(现货到otc), futures-to-pro(交割合约到现货), pro-to-futures(现货到交割合约), dm-swap-to-pro(币本位永续合约到现货), dm-pro-to-swap(现货到币本位永续合约), margin-transfer-in(转入到逐仓杠杆), margin-transfer-out(从逐仓杠杆转出), pro-to-super-margin(现货到全仓杠杆), super-margin-to-pro(全仓杠杆到现货), master-transfer-in(转入到母用户), master-transfer-out(从母用户转出), sub-transfer-in(转入到子用户), sub-transfer-out(从子用户转出) | -| transactId | integer | TRUE | 交易流水号 | | -| transactTime | integer | TRUE | 交易时间 | | -| transferer | integer | FALSE | 付款方账户ID | | -| transferee } | integer | FALSE | 收款方账户ID | | -| nextId | integer | FALSE | 下页起始编号(仅在查询结果需要分页返回时包含此字段,见注3。) | | +| 字段名称 | 数据类型 | 是否必需 | 描述 | 取值范围 | +| ------------ | -------- | -------- | ------------------------------------------------------------ | ---------------- | +| code | integer | TRUE | 状态码 | | +| message | string | FALSE | 错误描述(如有) | | +| data | object | TRUE | 按用户请求参数sort中定义的顺序排列 | | +| { accountId | integer | TRUE | 账户编号 | | +| currency | string | TRUE | 币种 | | +| transactAmt | number | TRUE | 变动金额(入账为正 or 出账为负) | | +| transactType | string | TRUE | 变动类型 | transfer(划转) | +| transferType | string | FALSE | 划转类型(仅对transactType=transfer有效) | | +| transactId | integer | TRUE | 交易流水号 | | +| transactTime | integer | TRUE | 交易时间 | | +| transferer | integer | FALSE | 付款方账户ID | | +| transferee } | integer | FALSE | 收款方账户ID | | +| nextId | integer | FALSE | 下页起始编号(仅在查询结果需要分页返回时包含此字段,见注3。) | | 注3:
仅当用户请求查询的时间范围内的数据条目超出单页限制(由“limit“字段设定)时,服务器才返回”nextId“字段。用户收到服务器返回的”nextId“后 –
@@ -2740,4804 +1816,1105 @@ endTime缺省值:当前时间 2) 如需继续查询下页数据,应再次请求查询并将服务器返回的“nextId”作为“fromId“,其它请求参数不变。
3) 作为数据库记录ID,“nextId”和“fromId”除了用来翻页查询外,无其它业务含义。
+# 钱包(充提相关) -## 币币现货账户与合约账户划转 - -API Key 权限:交易
+## 简介 -此接口用户币币现货账户与合约账户之间的资产划转。 +充提相关接口提供了充提记录等查询功能。 -从现货现货账户转至合约账户,类型为`pro-to-futures`; 从合约账户转至现货账户,类型为`futures-to-pro` + +## 充提记录 -### HTTP 请求 +此节点用于查询充提记录,母子用户均可用 -- POST ` /v1/futures/transfer` +API Key 权限:读取
+限频值(NEW):20次/2s -> Request +### HTTP 请求 -```json -{ - "currency": "btc", - "amount": "0.001", - "type": "pro-to-futures" -} -``` +- GET `/v1/query/deposit-withdraw` ### 请求参数 -|参数名称 | 数据类型 | 是否必需 | 默认值 | 描述|取值范围 -|--------- | --------- | -------- | ------- | -----------|---------| -|currency | string | true | NA | 币种, e.g. btc|| -|amount | decimal | true | NA | 划转数量|| -|type | string | true | NA | 划转类型| 从合约账户到现货账户:“futures-to-pro”,从现货账户到合约账户: “pro-to-futures”| - +| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | +| -------- | -------- | ------ | ---------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| currency | false | string | 币种 | | btc, ltc, bch, eth, etc ...(取值参考`GET /v1/common/currencys`) | +| type | true | string | 充值或提币 | | deposit 或 withdraw,子用户仅可用deposit | +| from | false | string | 查询起始 ID | 缺省时,默认值direct相关。当direct为‘prev’时,from 为1 ,从旧到新升序返回;当direct为’next‘时,from为最新的一条记录的ID,从新到旧降序返回 | | +| size | false | string | 查询记录大小 | 100 | 1-500 | +| direct | false | string | 返回记录排序方向 | 缺省时,默认为“prev” (升序) | “prev” (升序)or “next” (降序) | > Response: ```json -{ - "data": 12345 - "status": "ok" -} +{ "data": [ { "id": 1171, "type": "deposit", "currency": "xrp", "tx-hash": "ed03094b84eafbe4bc16e7ef766ee959885ee5bcb265872baaa9c64e1cf86c2b", "amount": 7.457467, "address": "rae93V8d2mdoUQHwBDBdM4NHCMehRJAsbm", "address-tag": "100040", "fee": 0, "state": "safe", "created-at": 1510912472199, "updated-at": 1511145876575 }, ... ]} ``` ### 响应数据 -| 参数名称 | 数据类型 | 描述 | -| -------- | -------- | ---------------------------- | -| data | Long | Transfer id | -| status | string | "ok" or "error" | -| err-code | string | 错误码,具体错误码请见列表 | -| err-msg | string | 错误消息,具体消息内容请列表 | +| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | +| ----------- | -------- | -------- | ------------------------------------------------------------ | ---------------------------------------- | +| id | true | long | 充币或者提币订单id,翻页查询时from参数取自此值 | | +| type | true | string | 类型 | 'deposit', 'withdraw', 子用户仅有deposit | +| currency | true | string | 币种 | | +| tx-hash | true | string | 交易哈希。如果是“快速提币”,则提币不通过区块链,该值为空。 | | +| chain | true | string | 链名称 | | +| amount | true | float | 个数 | | +| address | true | string | 目的地址 | | +| address-tag | true | string | 地址标签 | | +| fee | true | float | 手续费 | | +| state | true | string | 状态 | 状态参见下表 | +| error-code | false | string | 提币失败错误码,仅type为”withdraw“,且state为”reject“、”wallet-reject“和”failed“时有。 | | +| error-msg | false | string | 提币失败错误描述,仅type为”withdraw“,且state为”reject“、”wallet-reject“和”failed“时有。 | | +| created-at | true | long | 发起时间 | | +| updated-at | true | long | 最后更新时间 | | -### 错误码 -| 错误码 | 错误消息(中文) | 错误消息(英文) | -| ---------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| base-msg | (具体内容参见之后的列表说明) | | -| base-currency-error | 币种无效 | The currency is invalid | -| frequent-invoke | 操作过于频繁,请稍后重试。(如果超过1分钟10次,系统返回该error-code) | the operation is too frequent. Please try again later | -| banned-by-blacklist | 黑名单限制 | Blacklist restriction | -| dw-insufficient-balance | 可划转余额不足,最大可划转 {0}。(币币账户的余额不足。) | Insufficient balance. You can only transfer {0} at most. | -| dw-account-transfer-unavailable | 转账暂时不可用 | account transfer unavailable | -| dw-account-transfer-error | 由于其他服务不可用导致的划转失败 | account transfer error | -| dw-account-transfer-failed | 划转失败。请稍后重试或联系客服 | Failed to transfer. Please try again later. | -| dw-account-transfer-failed-account-abnormality | 账户异常,划转失败。请稍后重试或联系客服 | Account abnormality, failed to transfer。Please try again later. | - -### base-msg对应的err-msg列表 -| 错误码 | 错误消息(中文) | 错误消息(英文) | -| -------- | -------------------------------------------- | ------------------------------------------------------------ | -| base-msg | 用户没有入金权限 | Unable to transfer in currently. Please contact customer service. | -| base-msg | 用户没有出金权限 | Unable to transfer out currently. Please contact customer service. | -| base-msg | 合约状态异常,无法出入金 | Abnormal contracts status. Can’t transfer. | -| base-msg | 子账号没有入金权限,请联系客服 | Sub-account doesn't own the permissions to transfer in. Please contact customer service. | -| base-msg | 子账号没有出金权限,请联系客服 | Sub-account doesn't own the permissions to transfer out. Please contact customer service. | -| base-msg | 子账号没有划转权限,请登录主账号授权 | The sub-account does not have transfer permissions. Please login main account to authorize. | -| base-msg | 可划转余额不足 | Insufficient amount available. | -| base-msg | 单笔转出的数量不能低于{0}{1} | The single transfer-out amount must be no less than {0}{1}. | -| base-msg | 单笔转出的数量不能高于{0}{1} | The single transfer-out amount must be no more than {0}{1}. | -| base-msg | 单笔转入的数量不能低于{0}{1} | The single transfer-in amount must be no less than {0}{1}. | -| base-msg | 单笔转入的数量不能高于{0}{1} | The single transfer-in amount must be no more than {0}{1}. | -| base-msg | 您当日累计转出量超过{0}{1},暂无法转出 | Your accumulative transfer-out amount is over the daily maximum, {0}{1}. You can't transfer out for the time being. | -| base-msg | 您当日累计转入量超过{0}{1},暂无法转入 | Your accumulative transfer-in amount is over the daily maximum, {0}{1}. You can't transfer in for the time being. | -| base-msg | 您当日累计净转出量超过{0}{1},暂无法转出 | Your accumulative net transfer-out amount is over the daily maximum, {0}{1}. You can't transfer out for the time being. | -| base-msg | 您当日累计净转入量超过{0}{1},暂无法转入 | Your accumulative net transfer-in amount is over the daily maximum, {0}{1}. You can't transfer in for the time being. | -| base-msg | 超过平台当日累计最大转出量限制,暂无法转出 | The platform's accumulative transfer-out amount is over the daily maximum. You can't transfer out for the time being. | -| base-msg | 超过平台当日累计最大转入量限制,暂无法转入 | The platform's accumulative transfer-in amount is over the daily maximum. You can't transfer in for the time being. | -| base-msg | 超过平台当日累计最大净转出量限制,暂无法转出 | The platform's accumulative net transfer-out amount is over the daily maximum. You can't transfer out for the time being. | -| base-msg | 超过平台当日累计最大净转入量限制,暂无法转入 | The platform's accumulative net transfer-in amount is over the daily maximum. You can't transfer in for the time being. | -| base-msg | 划转失败,请稍后重试或联系客服 | Transfer failed. Please try again later or contact customer service. | -| base-msg | 服务异常,划转失败,请稍后再试 | Abnormal service, transfer failed. Please try again later. | -| base-msg | 您尚未开通合约交易,无访问权限 | You don’t have access permission as you have not opened contracts trading. | -| base-msg | 合约品种不存在 | This contract type doesn't exist. | - -## 点卡余额查询 - -此节点既可查询到“不限时”点卡的余额,也可查询到“限时”点卡的余额、分组ID、及各组有效期。
-此节点仅可查询到限时/不限时点卡的余额,不可查询到其它币种余额。
-母用户可查询母用户或子用户点卡余额。
-点卡兑换仅可通过官网页面或APP完成。
+- 虚拟币充值状态定义: -API Key 权限:读取
-限频值:2次/秒
-子用户可调用
+| 状态 | 描述 | +| ---------- | ------------------------------------ | +| unknown | 状态未知 | +| confirming | 区块确认中 | +| confirmed | 区块已完成,已经上账,可以划转和交易 | +| safe | 区块已确认,可以提币 | +| orphan | 区块已被孤立 | -### HTTP 请求 +- 虚拟币提币状态定义: -- GET `/v2/point/account` +| 状态 | 描述 | +| --------------- | ------------ | +| verifying | 待验证 | +| failed | 验证失败 | +| submitted | 已提交 | +| reexamine | 审核中 | +| canceled | 已撤销 | +| pass | 审批通过 | +| reject | 审批拒绝 | +| pre-transfer | 处理中 | +| wallet-transfer | 已汇出 | +| wallet-reject | 钱包拒绝 | +| confirmed | 区块已确认 | +| confirm-error | 区块确认错误 | +| repealed | 已撤销 | -### 请求参数 +## 常见错误码 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | --------- | ----- | -| subUid | string | FALSE |子用户UID(仅对母用户查询子用户点卡余额场景有效) | +以下是充提相关接口返回的返回码、返回消息以及说明。 -> Response: +| 返回码 | 返回消息 | 说明 | +| ------ | ------------------------------------ | ------------ | +| 200 | success | 请求成功 | +| 500 | error | 系统错误 | +| 1002 | unauthorized | 未授权 | +| 1003 | invalid signature | 验签失败 | +| 2002 | invalid field value in "field name" | 非法字段取值 | +| 2003 | missing mandatory field "field name" | 强制字段缺失 | -```json -{ - "code": 200, - "data": { - "accountId": "14403739", - "groupIds": [ - { - "groupId": 26, - "expiryDate": 1594396800000, - "remainAmt": "0.3" - } - ], - "acctBalance": "0.30000000", - "accountStatus": "working" - }, - "success": true -} -``` +## 常见问题 -### 响应数据 +### Q1:为什么创建提币时返回api-not-support-temp-addr错误? -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | --------- | ----- | -| code | integer | TRUE |状态码 | -| message | string | FALSE |错误描述(如有) | -| data | object | TRUE | | -| { accountId | string | TRUE |账户ID | -| accountStatus | string | TRUE | 账户状态(working 正常, lock 锁定, fl-sys 系统自动爆仓, fl-mgt 手动爆仓, fl-end 爆仓结束, fl-negative 穿仓) | -| acctBalance | string | TRUE |账户余额 | -| groupIds | object | TRUE | 点卡分组ID列表 | -| { groupId | long | TRUE | 点卡分组ID | -| expiryDate | long | TRUE | 点卡到期日(unix time in millisecond) | -| remainAmt }} | string | TRUE |剩余数量 | +A:因安全考虑,API创建提币时仅支持已在提币地址列表中的地址,暂不支持使用API添加地址至提币地址列表中,需在网页端或APP端添加地址后才可在API中进行提币操作。 -注:
-- 限时点卡分组ID = 母用户兑换该组限时点卡时的交易ID
-- 不限时点卡分组ID = 0
-- 不限时点卡到期日 = 空
+### Q2:为什么USDT提币时返回Invaild-Address错误? -## 点卡划转 +A:USDT币种为典型的一币多链币种, 创建提币订单时应填写chain参数对应地址类型。以下表格展示了链和chain参数的对应关系: -此节点既可划转“不限时”点卡,也可划转“限时”点卡。
-此节点仅支持不限时/限时点卡的划转,不支持其它币种的划转。
-此节点仅支持母子用户点卡(point)账户间划转。
-如果登录用户为母用户,该节点支持双向划转,即母向子划转和子向母划转。
-如果登录用户为子用户,该节点仅支持单向划转,即子向母划转。
-母用户将限时点卡从子用户转回时应先行查询子用户点卡的groupId。
+| 链 | chain 参数 | +| -------------- | ---------- | +| ERC20 (默认) | usdterc20 | +| OMNI | usdt | +| TRX | trc20usdt | -API Key 权限:交易
-限频值:2次/秒
-子用户可调用
+如果chain参数为空,则默认的链为ERC20,或者也可以显示将参数赋值为`usdterc20`。 -### HTTP 请求 +如果要提币到OMNI或者TRX,则chain参数应该填写usdt或者trc20usdt。chain参数可使用值请参考 `GET /v2/reference/currencies` 接口。 -- POST `/v2/point/transfer` +### Q3:创建提币时fee字段应该怎么填? -### 请求参数 +A:请参考 GET /v2/reference/currencies接口返回值,返回信息中withdrawFeeType为提币手续费类型,根据类型选择对应字段设置提币手续费。 -| 名称 | 类型 | 是否必需 | 描述 | -| ------- | ------ | -------- | ----------------------------- | -| fromUid | string | TRUE | 转出方UID | -| toUid | string | TRUE | 转入方UID | -| groupId | long | TRUE | 点卡分组ID | -| amount | string | TRUE | 划转数量(最高精度: 8位小数) | +提币手续费类型包含: -注:
-- 如传参点卡分组ID=0,意味着该笔划转为不限时点卡划转。
+- transactFeeWithdraw : 单次提币手续费(仅对固定类型有效,withdrawFeeType=fixed) +- minTransactFeeWithdraw : 最小单次提币手续费(仅对区间类型有效,withdrawFeeType=circulated or ratio) +- maxTransactFeeWithdraw : 最大单次提币手续费(仅对区间类型和有上限的比例类型有效,withdrawFeeType=circulated or ratio +- transactFeeRateWithdraw : 单次提币手续费率(仅对比例类型有效,withdrawFeeType=ratio) -> Response: +### Q4:如何查看我的提币额度? -```json -{ - "code": 200, - "data": { - "transactId": "74", - "transactTime": 1594370136458 - }, - "success": true -} -``` +A:请参考/v2/account/withdraw/quota接口返回值,返回信息中包含您查询币种的单次、当日、当前、总提币额度以及剩余额度的信息。 -### 响应数据 +若您有大额提币需求,且提币数额超出相关限额,可联系官方客服进行沟通。 -| 名称 | 类型 | 是否必需 | 描述 | -| -------------- | ------- | -------- | ---------------------------------------- | -| code | integer | TRUE | 状态码 | -| message | string | FALSE | 错误描述(如有) | -| data | object | TRUE | | -| { transactId | string | TRUE | 划转交易ID | -| transactTime } | long | TRUE | 划转交易时间(unix time in millisecond) | +# 现货 -## 常见错误码 +## 简介 -以下是账户相关接口返回的错误码、错误消息以及说明。 +现货交易接口提供了下单、撤单、订单查询、成交明细查询、手续费率查询等功能。 -| 错误码 | 错误消息 | 说明 | -| ------ | ------------------------------------------- | --------------------------------------------------- | -| 500 | system error | 调用内部服务异常 | -| 1002 | forbidden | 禁止操作,如用户入参中accountId与UID不一致 | -| 2002 | "invalid field value in `currency`" | currency不符合正则规则^[a-z0-9]{2,10}$ | -| 2002 | "invalid field value in `transactTypes`" | 变动类型transactTypes不是“transfer” | -| 2002 | "invalid field value in `sort`" | 分页请求参数不是合法的"asc或desc" | -| 2002 | "value in `fromId` is not found in record” | 未找到fromId | -| 2002 | "invalid field value in `accountId`" | 查询参数中accountId为空 | -| 2002 | "value in `startTime` exceeded valid range" | 入参查询时间大于当前时间,或者距离当前时间超过180天 | -| 2002 | "value in `endTime` exceeded valid range") | 查询结束时间小于开始时间,或者查询时间跨度大于10天 | + -# 钱包(充提相关) +以下是订单业务相关的字段说明 -## 简介 +**订单类型 (type)**:订单类型由方向和行为类型组合而成,[方向]-[行为类型] -充提相关接口提供了充币地址、提币地址、提币额度、充提记录等查询,以及提币、取消提币等功能。 +方向: - +- buy: 买 +- sell: 卖 -## 充币地址查询 +行为类型: -此节点用于查询特定币种(IOTA除外)在其所在区块链中的充币地址,母子用户均可用 +- market:市价单,该类型订单仅需指定下单金额或下单数量,不需要指定价格,订单在进入撮合时,会直接与对手方进行成交,直至金额或数量低于最小成交金额或成交数量为止。 +- limit:限价单,该类型订单需指定下单价格,下单数量。 -API Key 权限:读取
-限频值(NEW):20次/2s +**订单来源 (source)**: - +- spot-api:现货API交易 -```shell -curl "https://api.huobi.pro/v2/account/deposit/address?currency=btc" -``` + -### HTTP 请求 +**订单状态 (state)**: -- GET ` /v2/account/deposit/address` +- created:已创建,该状态订单尚未进入撮合队列。 +- submitted : 已挂单等待成交,该状态订单已进入撮合队列当中。 +- partial-filled : 部分成交,该状态订单在撮合队列当中,订单的部分数量已经被市场成交,等待剩余部分成交。 +- filled : 已成交。该状态订单不在撮合队列中,订单的全部数量已经被市场成交。 +- partial-canceled : 部分成交撤销。该状态订单不在撮合队列中,此状态由partial-filled转化而来,订单数量有部分被成交,但是被撤销。 +- canceling : 撤销中。该状态订单正在被撤销的过程中,因订单最终需在撮合队列中剔除才会被真正撤销,所以此状态为中间过渡态。 +- canceled : 已撤销。该状态订单不在撮合订单中,此状态订单没有任何成交数量,且被成功撤销。 -### 请求参数 +**相关ID** -| 字段名称 | 是否必需 | 类型 | 字段描述 | 取值范围 | -| -------- | -------- | ------ | -------- | ------------------------------------------------------------ | -| currency | true | string | 币种 | btc, ltc, bch, eth, etc ...(取值参考`GET /v1/common/currencys`) | +- order-id : 订单的唯一编号 -> Response: - -```json -{ - "code": 200, - "data": [ - { - "currency": "btc", - "address": "1PSRjPg53cX7hMRYAXGJnL8mqHtzmQgPUs", - "addressTag": "", - "chain": "btc" - } - ] -} -``` +- client-order-id : 客户自定义ID,该ID在下单时传入,与下单成功后返回的order-id对应。 -### 响应数据 + client-order-id 时效:对于已完结状态订单,2小时内有效。(其他状态订单有效时间仍为8小时有效)即订单创建超过2h,将无法使用clientOrderId查询已完结状态订单,建议用户通过orderid进行查询。其中,已完结订单状态包括部分成交已撤销、已撤销和完全成交。 +- 。 允许的字符包括字母(大小写敏感)、数字、下划线 (_)和横线(-),最长64位 -| 字段名称 | 是否必需 | 数据类型 | 字段描述 | 取值范围 | -| ---------- | -------- | -------- | ---------------- | -------- | -| code | true | int | 状态码 | | -| message | false | string | 错误描述(如有) | | -| data | true | object | | | -| {currency | true | string | 币种 | | -| address | true | string | 充币地址 | | -| addressTag | true | string | 充币地址标签 | | -| chain } | true | string | 链名称 | | +- match-id : 订单在撮合中的顺序编号 -## 提币额度查询 +- trade-id : 成交的唯一编号 -此节点用于查询各币种提币额度,限母用户可用 +## 下单 -API Key 权限:读取
-限频值(NEW):20次/2s +API Key 权限:交易 +限频值;100次/2s -```shell -curl "https://api.huobi.pro/v2/account/withdraw/quota?currency=btc" -``` +发送一个新订单到火币以进行撮合。 ### HTTP 请求 -- GET ` /v2/account/withdraw/quota` - -### 请求参数 - -| 字段名称 | 是否必需 | 类型 | 字段描述 | 取值范围 | -| -------- | -------- | ------ | -------- | ------------------------------------------------------------ | -| currency | true | string | 币种 | btc, ltc, bch, eth, etc ...(取值参考`GET /v1/common/currencys`) | +- POST ` /v1/order/orders/place` -> Response: +> Request: ```json -{ - "code": 200, - "data": - { - "currency": "btc", - "chains": [ - { - "chain": "btc", - "maxWithdrawAmt": "200.00000000", - "withdrawQuotaPerDay": "200.00000000", - "remainWithdrawQuotaPerDay": "200.000000000000000000" - } - } - ] -} +{ "account-id": "100009", "amount": "10.1", "price": "100.1", "source": "api", "symbol": "ethusdt", "type": "buy-limit", "client-order-id": "a0001"} ``` -### 响应数据 +### 请求参数 -| 字段名称 | 是否必需 | 数据类型 | 字段描述 | 取值范围 | -| ------------------------- | -------- | -------- | ---------------- | -------- | -| code | true | int | 状态码 | | -| message | false | string | 错误描述(如有) | | -| data | true | object | | | -| currency | true | string | 币种 | | -| chains | true | object | | | -| { chain | true | string | 链名称 | | -| maxWithdrawAmt | true | string | 单次最大提币金额 | | -| withdrawQuotaPerDay | true | string | 当日提币额度 | | -| remainWithdrawQuotaPerDay | true | string | 当日提币剩余额度 | | +| 参数名称 | 数据类型 | 是否必需 | 默认值 | 描述 | +| --------------- | -------- | -------- | -------- | ------------------------------------------------------------ | +| account-id | string | true | NA | 账户 ID,取值参考 `GET /v1/account/accounts`。现货交易使用 ‘spot’ 账户的 account-id | +| symbol | string | true | NA | 交易对,即btcusdt, ethbtc...(取值参考`GET /v1/common/symbols`) | +| type | string | true | NA | 订单类型,包括buy-market, sell-market, buy-limit, sell-limit,(说明见下文) | +| amount | string | true | NA | 订单交易量(市价买单为订单交易额) | +| price | string | false | NA | 订单价格(对市价单无效) | +| source | string | false | spot-api | 现货交易填写“spot-api” | +| client-order-id | string | false | NA | 用户自编订单号(最大长度64个字符,须在8小时内保持唯一性) | -## 提币地址查询 -API Key 权限:读取
+**buy-limit-maker** -该节点用于查询API key可用的提币地址,限母用户可用。
+当“下单价格”>=“市场最低卖出价”,订单提交后,系统将拒绝接受此订单; - +当“下单价格”<“市场最低卖出价”,提交成功后,此订单将被系统接受。 -### HTTP 请求 +**sell-limit-maker** -- GET `/v2/account/withdraw/address` +当“下单价格”<=“市场最高买入价”,订单提交后,系统将拒绝接受此订单; -### 请求参数 +当“下单价格”>“市场最高买入价”,提交成功后,此订单将被系统接受。 -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| -------- | -------- | ------ | ------------------------------------------------------ | ------------------------------ | ------------------------------------------------------------ | -| currency | true | string | 币种 | | btc, ltc, bch, eth, etc ...(取值参考`GET /v1/common/currencys`) | -| chain | false | string | 链名称 | 如不填,返回所有链的提币地址 | | -| note | false | string | 地址备注 | 如不填,返回所有备注的提币地址 | | -| limit | false | int | 单页最大返回条目数量 | 100 | [1,500] | -| fromId | false | long | 起始编号(提币地址ID,仅在下页查询时有效,详细见备注) | NA | | > Response: ```json -{ - "code": 200, - "data": [ - { - "currency": "usdt", - "chain": "usdt", - "note": "币安", - "addressTag": "", - "address": "15PrEcqTJRn4haLeby3gJJebtyf4KgWmSd" - } - ] -} +{ "data": "59378"} ``` ### 响应数据 -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ---------- | -------- | -------- | ------------------------------------------------------------ | -------- | -| code | true | int | 状态码 | | -| message | false | string | 错误描述(如有) | | -| data | true | object | | | -| { currency | true | string | 币种 | | -| chain | true | string | 链名称 | | -| note | true | string | 地址备注 | | -| addressTag | false | string | 地址标签,如有 | | -| address } | true | string | 地址 | | -| nextId | false | long | 下页起始编号(提币地址ID,仅在查询结果需要分页返回时,包含此字段,详细见备注) | | - -备注:
-仅当用户请求查询的数据条目超出单页限制(由“limit“字段设定)时,服务器才返回”nextId“字段。用户收到服务器返回的”nextId“后 –
-1)须知晓后续仍有数据未能在本页返回;
-2)如需继续查询下页数据,应再次请求查询并将服务器返回的“nextId”作为“fromId“,其它请求参数不变。
-3)作为数据库记录ID,“nextId”和“fromId”除了用来翻页查询外,无其它业务含义。
- - -## 虚拟币提币 - -此节点用于将现货账户的数字币提取到区块链地址(已存在于提币地址列表)而不需要多重(短信、邮件)验证,限母用户可用 - -API Key 权限:提币
-限频值(NEW):20次/2s - - +返回的主数据对象是一个对应下单单号的字符串。 + +如client order ID(在8小时内)被复用,节点将返回错误消息invalid.client.order.id。 + +## 批量下单 + +API Key 权限:交易
+限频值(NEW):50次/2s
+ +一个批量最多10张订单 ### HTTP 请求 -- POST ` /v1/dw/withdraw/api/create` +- POST ` /v1/order/batch-orders` > Request: ```json -{ - "address": "0xde709f2102306220921060314715629080e2fb77", - "amount": "0.05", - "currency": "eth", - "fee": "0.01" -} +[ { "account-id": "123456", "price": "7801", "amount": "0.001", "symbol": "btcusdt", "type": "sell-limit", "client-order-id": "c1" }, { "account-id": "123456", "price": "7802", "amount": "0.001", "symbol": "btcusdt", "type": "sell-limit", "client-order-id": "d2" }] ``` ### 请求参数 -| 参数名称 | 是否必须 | 类型 | 描述 | 取值范围 | -| -------- | -------- | ------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| address | true | string | 提币地址 | 仅支持在官网上相应币种[地址列表](https://www.hbg.com/zh-cn/withdraw_address/) 中的地址 | -| amount | true | string | 提币数量 | | -| currency | true | string | 资产类型 | btc, ltc, bch, eth, etc ...(取值参考`GET /v1/common/currencys`) | -| fee | true | string | 转账手续费 | | -| chain | false | string | 取值参考`GET /v2/reference/currencies`,例如提USDT至OMNI时须设置此参数为"usdt",提USDT至TRX时须设置此参数为"trc20usdt",其他币种提币无须设置此参数 | | -| addr-tag | false | string | 虚拟币共享地址tag,适用于xrp,xem,bts,steem,eos,xmr | 格式, "123"类的整数字符串 | +| 参数名称 | 数据类型 | 是否必需 | 默认值 | 描述 | +| --------------- | -------- | -------- | -------- | ------------------------------------------------------------ | +| [{ account-id | string | true | NA | 账户 ID,取值参考 `GET /v1/account/accounts`。现货交易使用 ‘spot’ 账户的 account-id | +| symbol | string | true | NA | 交易对,即btcusdt, ethbtc...(取值参考`GET /v1/common/symbols`) | +| type | string | true | NA | 订单类型,包括buy-market, sell-market, buy-limit, sell-limit(说明见下文) | +| amount | string | true | NA | 订单交易量(市价买单为订单交易额) | +| price | string | false | NA | 订单价格(对市价单无效) | +| source | string | false | spot-api | 现货交易填写“spot-api” | +| client-order-id | string | false | NA | 用户自编订单号(最大长度64个字符,须在8小时内保持唯一性) | + +**buy-limit-maker** + +当“下单价格”>=“市场最低卖出价”,订单提交后,系统将拒绝接受此订单; + +当“下单价格”<“市场最低卖出价”,提交成功后,此订单将被系统接受。 + +**sell-limit-maker** + +当“下单价格”<=“市场最高买入价”,订单提交后,系统将拒绝接受此订单; + +当“下单价格”>“市场最高买入价”,提交成功后,此订单将被系统接受。 > Response: ```json -{ - "data": 700 -} +{ "status": "ok", "data": [ { "order-id": 61713400772, "client-order-id": "c1" }, { "order-id": 61713400940, "client-order-id": "d2" } ]} ``` ### 响应数据 +| 字段名称 | 数据类型 | 描述 | +| --------------- | -------- | ------------------------------------ | +| [{ order-id | integer | 订单编号 | +| client-order-id | string | 用户自编订单号(如有) | +| err-code | string | 订单被拒错误码(仅对被拒订单有效) | +| err-msg }] | string | 订单被拒错误信息(仅对被拒订单有效) | -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| -------- | -------- | -------- | ------- | -------- | -| data | false | long | 提币 ID | | +如client order ID(在8小时内)被复用,节点返回先前订单的order ID及client order ID。 +## 撤销订单 -## 取消提币 +API Key 权限:交易
+限频值(NEW):100次/2s -此节点用于取消已提交的提币请求,限母用户可用 +此接口发送一个撤销订单的请求。 -API Key 权限:提币
-限频值(NEW):20次/2s + ### HTTP 请求 -- POST ` /v1/dw/withdraw-virtual/{withdraw-id}/cancel` +- POST ` /v1/order/orders/{order-id}/submitcancel` -### 请求参数 -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| ----------- | -------- | ---- | --------------------- | ------ | -------- | -| withdraw-id | true | long | 提币 ID,填在 path 中 | | | +### 请求参数 +| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | +| -------- | -------- | ------ | ------------------------- | ------ | -------- | +| order-id | true | string | 订单ID,填在path中 | | | +| symbol | false | string | 交易对,填在URL请求参数中 | | | -> Response: +> Success response: ```json -{ - "data": 700 -} +{ "data": "59378"} ``` ### 响应数据 +返回的主数据对象是一个对应下单单号的字符串。 -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| -------- | -------- | -------- | ------- | ------------------------------------------------ | -| data | false | long | 提币 ID | (取消成功返回提币ID,取消失败返回错误码和原因) | +### 错误码 -## 充提记录 +> Failure response: + +```json +{ "status": "error", "err-code": "order-orderstate-error", "err-msg": "订单状态错误", "order-state":-1 // 当前订单状态} +``` + +返回字段列表中,order-state的可能取值包括 - + +| order-state | Description | +| ----------- | ------------------------------------------------------------ | +| -1 | order was already closed in the long past (order state = canceled, partial-canceled, filled, partial-filled) | +| 1 | created | +| 3 | submitted | +| 4 | partial-filled | +| 5 | partial-canceled | +| 6 | filled | +| 7 | canceled | +| 10 | cancelling | + +## 撤销订单(基于client order ID) + +API Key 权限:交易
+限频值(NEW):100次/2s + +此接口基于client-order-id(8小时内有效)发送一个撤销订单的请求。 + + + -此节点用于查询充提记录,母子用户均可用 -API Key 权限:读取
-限频值(NEW):20次/2s ### HTTP 请求 -- GET `/v1/query/deposit-withdraw` +- POST ` /v1/order/orders/submitCancelClientOrder` + +> Request: + +```json +{ "client-order-id": "a0001"} +``` ### 请求参数 -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| -------- | -------- | ------ | ---------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| currency | false | string | 币种 | | btc, ltc, bch, eth, etc ...(取值参考`GET /v1/common/currencys`) | -| type | true | string | 充值或提币 | | deposit 或 withdraw,子用户仅可用deposit | -| from | false | string | 查询起始 ID | 缺省时,默认值direct相关。当direct为‘prev’时,from 为1 ,从旧到新升序返回;当direct为’next‘时,from为最新的一条记录的ID,从新到旧降序返回 | | -| size | false | string | 查询记录大小 | 100 | 1-500 | -| direct | false | string | 返回记录排序方向 | 缺省时,默认为“prev” (升序) | “prev” (升序)or “next” (降序) | +| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | +| --------------- | -------- | ------ | ------------------------------------------------------------ | ------ | -------- | +| client-order-id | true | string | 用户自编订单号,必须8小时内已有该订单存在,否则下次下单时不允许用此值 | | | + > Response: ```json -{ - "data": - [ - { - "id": 1171, - "type": "deposit", - "currency": "xrp", - "tx-hash": "ed03094b84eafbe4bc16e7ef766ee959885ee5bcb265872baaa9c64e1cf86c2b", - "amount": 7.457467, - "address": "rae93V8d2mdoUQHwBDBdM4NHCMehRJAsbm", - "address-tag": "100040", - "fee": 0, - "state": "safe", - "created-at": 1510912472199, - "updated-at": 1511145876575 - }, - ... - ] -} +{ "data": "10"} ``` ### 响应数据 -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ----------- | -------- | -------- | ------------------------------------------------------------ | ---------------------------------------- | -| id | true | long | 充币或者提币订单id,翻页查询时from参数取自此值 | | -| type | true | string | 类型 | 'deposit', 'withdraw', 子用户仅有deposit | -| currency | true | string | 币种 | | -| tx-hash | true | string | 交易哈希。如果是“快速提币”,则提币不通过区块链,该值为空。 | | -| chain | true | string | 链名称 | | -| amount | true | float | 个数 | | -| address | true | string | 目的地址 | | -| address-tag | true | string | 地址标签 | | -| fee | true | float | 手续费 | | -| state | true | string | 状态 | 状态参见下表 | -| error-code | false | string | 提币失败错误码,仅type为”withdraw“,且state为”reject“、”wallet-reject“和”failed“时有。 | | -| error-msg | false | string | 提币失败错误描述,仅type为”withdraw“,且state为”reject“、”wallet-reject“和”failed“时有。 | | -| created-at | true | long | 发起时间 | | -| updated-at | true | long | 最后更新时间 | | +| 字段名称 | 数据类型 | 描述 | +| -------- | -------- | ---------- | +| data | integer | 撤单状态码 | +| Status Code | Description | +| ----------- | ------------------------------------------------------------ | +| -1 | order was already closed in the long past (order state = canceled, partial-canceled, filled, partial-filled) | +| 0 | client-order-id not found | +| 1 | created | +| 3 | submitted | +| 4 | partial-filled | +| 5 | partial-canceled | +| 6 | filled | +| 7 | canceled | +| 10 | cancelling | -- 虚拟币充值状态定义: -| 状态 | 描述 | -| ---------- | ------------------------------------ | -| unknown | 状态未知 | -| confirming | 区块确认中 | -| confirmed | 区块已完成,已经上账,可以划转和交易 | -| safe | 区块已确认,可以提币 | -| orphan | 区块已被孤立 | -- 虚拟币提币状态定义: +## 自动撤销订单 -| 状态 | 描述 | -| --------------- | ------------ | -| verifying | 待验证 | -| failed | 验证失败 | -| submitted | 已提交 | -| reexamine | 审核中 | -| canceled | 已撤销 | -| pass | 审批通过 | -| reject | 审批拒绝 | -| pre-transfer | 处理中 | -| wallet-transfer | 已汇出 | -| wallet-reject | 钱包拒绝 | -| confirmed | 区块已确认 | -| confirm-error | 区块确认错误 | -| repealed | 已撤销 | +API Key 权限:交易
-## 常见错误码 +为了防止API用户在发生网络故障或用户端系统故障与火币系统失去联系时,给用户造成意外损失,火币新增自动撤单接口,当用户与火币发生意外断连时,能自动帮用户取消全部委托单,以避免损失,即提供Dead man's switch功能。若开启,在设定的时间数完前,接口没有被再次调用,则用户所有现货委托单将被取消(最大支持撤500单)。 -以下是充提相关接口返回的返回码、返回消息以及说明。 +### HTTP 请求 -| 返回码 | 返回消息 | 说明 | -| ------ | ------------------------------------ | ------------ | -| 200 | success | 请求成功 | -| 500 | error | 系统错误 | -| 1002 | unauthorized | 未授权 | -| 1003 | invalid signature | 验签失败 | -| 2002 | invalid field value in "field name" | 非法字段取值 | -| 2003 | missing mandatory field "field name" | 强制字段缺失 | +- POST `/v2/algo-orders/cancel-all-after` -## 常见问题 +> Request: -### Q1:为什么创建提币时返回api-not-support-temp-addr错误? -A:因安全考虑,API创建提币时仅支持已在提币地址列表中的地址,暂不支持使用API添加地址至提币地址列表中,需在网页端或APP端添加地址后才可在API中进行提币操作。 +```json +{ "timeout": "10"} +``` -### Q2:为什么USDT提币时返回Invaild-Address错误? -A:USDT币种为典型的一币多链币种, 创建提币订单时应填写chain参数对应地址类型。以下表格展示了链和chain参数的对应关系: +### 请求参数 -| 链 | chain 参数 | -| -------------- | ---------- | -| ERC20 (默认) | usdterc20 | -| OMNI | usdt | -| TRX | trc20usdt | +| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | +| -------- | -------- | ---- | ------------------------------------ | ------ | ---------------- | +| timeout | true | int | 超时时间(单位:秒),设置建议见附注 | NA | 0或者大于等于5秒 | -如果chain参数为空,则默认的链为ERC20,或者也可以显示将参数赋值为`usdterc20`。 -如果要提币到OMNI或者TRX,则chain参数应该填写usdt或者trc20usdt。chain参数可使用值请参考 `GET /v2/reference/currencies` 接口。 +> 响应示例-开启成功 +> Response: -### Q3:创建提币时fee字段应该怎么填? -A:请参考 GET /v2/reference/currencies接口返回值,返回信息中withdrawFeeType为提币手续费类型,根据类型选择对应字段设置提币手续费。 +```json +{"code": 200,"data": [ { "currentTime":"1587971400", "triggerTime":"1587971460" }]} +``` -提币手续费类型包含: -- transactFeeWithdraw : 单次提币手续费(仅对固定类型有效,withdrawFeeType=fixed) -- minTransactFeeWithdraw : 最小单次提币手续费(仅对区间类型有效,withdrawFeeType=circulated or ratio) -- maxTransactFeeWithdraw : 最大单次提币手续费(仅对区间类型和有上限的比例类型有效,withdrawFeeType=circulated or ratio -- transactFeeRateWithdraw : 单次提币手续费率(仅对比例类型有效,withdrawFeeType=ratio) +> 响应示例-关闭成功 +> Response: -### Q4:如何查看我的提币额度? -A:请参考/v2/account/withdraw/quota接口返回值,返回信息中包含您查询币种的单次、当日、当前、总提币额度以及剩余额度的信息。 +```json +{"code": 200,"data": [ { "currentTime":"1587971400", "triggerTime":"0" }]} +``` -若您有大额提币需求,且提币数额超出相关限额,可联系官方客服进行沟通。 -# 子用户管理 +> 响应示例-开启/关闭失败 +> Response: -## 简介 +```json +{"code": 2003,"message": "missing mandatory field"} +``` + +### 响应数据 -子用户管理接口了子用户的创建、查询、权限设置、转账,子用户API Key的创建、修改、查询、删除,子用户充提地址、余额的查询等功能。 +| **参数名称** | **是否必须** | **数据类型** | **描述** | +| ------------- | ------------ | ------------ | ---------------- | +| code | true | int | 状态码 | +| message | false | string | 错误描述(如有) | +| data | true | object | | +| { currentTime | true | long | 当前时间 | +| triggerTime } | true | long | 触发时间 | - -## 设置子用户手续费抵扣模式 +## 查询当前未成交订单 -此接口用于设置子用户手续费抵扣模式(子用户抵扣或母用户抵扣) +API Key 权限:读取
+限频值(NEW):50次/2s -API Key 权限:交易 +查询已提交但是仍未完全成交或未被撤销的订单。 ### HTTP 请求 -- POST /v2/sub-user/deduct-mode +- GET `/v1/order/openOrders` + +> Request: + +```json +{ "account-id": "100009", "symbol": "ethusdt", "side": "buy"} +``` ### 请求参数 -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| ---------- | -------- | ------ | --------------------------------------------- | ------ | -------- | -| subUids | true | long | 子用户UID列表(支持多填,最多50个,逗号分隔) | NA | | -| deductMode | true | string | 抵扣模式,母账户抵扣:master 子账户抵扣:sub | NA | | +| 参数名称 | 数据类型 | 是否必需 | 默认值 | 描述 | +| ---------- | -------- | ------------------------------------------------ | ------ | ------------------------------------------------------------ | +| account-id | string | true | NA | 账户 ID,取值参考 `GET /v1/account/accounts`。现货交易使用‘spot’账户的 account-id;逐仓杠杆交易,请使用 ‘margin’ 账户的 account-id;全仓杠杆交易,请使用 ‘super-margin’ 账户的 account-id;c2c杠杆交易,请使用borrow账户的account-id | +| symbol | string | ture | NA | 交易对,即btcusdt, ethbtc...(取值参考`GET /v1/common/symbols`) | +| side | string | false | both | 指定只返回某一个方向的订单,可能的值有: buy, sell. 默认两个方向都返回。 | +| types | string | false | | 查询的订单类型组合,使用逗号分割 | +| from | string | false | | 查询起始 ID,如果是向后查询,则赋值为上一次查询结果中得到的最后一条id ;如果是向前查询,则赋值为上一次查询结果中得到的第一条id | +| direct | string | false (如字段'from'已设定,此字段'direct'为必填) | | 查询方向,prev 向前;next 向后 | +| size | int | false | 100 | 返回订单的数量,最大值500。 | > Response: ```json -{ - -"code": 200, -"data": [ - { - "subUid": "132208121", - "deductMode": "sub" - } -] -} +{ "data": [ { "id": 5454937, "symbol": "ethusdt", "account-id": 30925, "amount": "1.000000000000000000", "price": "0.453000000000000000", "created-at": 1530604762277, "type": "sell-limit", "filled-amount": "0.0", "filled-cash-amount": "0.0", "filled-fees": "0.0", "source": "web", "state": "submitted" } ]} ``` ### 响应数据 -| 参数名称 | | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ----------- | ---- | -------- | -------- | ---------------- | -------- | -| code | | true | int | 状态码 | | -| message | | false | string | 错误描述(如有) | | -| data | | true | object | | | -| {subUid | | true | string | 子用户UID | | -| deductMode | | true | string | 抵扣模式 | | -| errCode | | true | string | 错误码 | | -| errMessage} | | false | string | 错误信息 | | +| 字段名称 | 数据类型 | 描述 | +| ------------------ | -------- | ------------------------------------------------------ | +| id | integer | 订单id,无大小顺序,可作为下一次翻页查询请求的from字段 | +| client-order-id | string | 用户自编订单号(所有open订单可返回client-order-id) | +| symbol | string | 交易对, 例如btcusdt, ethbtc | +| price | string | limit order的交易价格 | +| created-at | int | 订单创建的调整为新加坡时间的时间戳,单位毫秒 | +| type | string | 订单类型 | +| filled-amount | string | 订单中已成交部分的数量 | +| filled-cash-amount | string | 订单中已成交部分的总价格 | +| filled-fees | string | 已交交易手续费总额(准确数值请参考matchresults接口) | +| source | string | 订单来源 | +| state | string | 订单状态,包括created, submitted, partial-filled | -## +## 批量撤销所有订单 -## 母子用户API key信息查询 +API Key 权限:交易
+限频值(NEW):50次/2s -此接口用于母用户查询自身的API key信息,以及母用户查询子用户的API key信息 +此接口发送批量撤销所有(单次最大100个)订单的请求。 -API Key 权限:读取 + ### HTTP 请求 -- GET `/v2/user/api-key` - -### 请求参数 -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| --------- | -------- | ------ | ----------------------------------------------------------- | ------ | -------- | -| uid | true | long | 母用户UID,子用户UID | NA | | -| accessKey | false | string | API key的access key,若缺省,则返回UID对应用户的所有API key | NA | | - -> Response: - -```json -{ - "code": 200, - "message": "success", - "data": [ - { - "accessKey": "4ba5cdf2-4a92c5da-718ba144-dbuqg6hkte", - "status": "normal", - "note": "62924133", - "permission": "readOnly,trade", - "ipAddresses": "1.1.1.1,1.1.1.2", - "validDays": -1, - "createTime": 1591348751000, - "updateTime": 1591348751000 - } - ] -} -``` - -### 响应数据 -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ------------- | -------- | -------- | ----------------------- | ----------------------------- | -| code | true | int | 状态码 | | -| message | false | string | 错误描述(如有) | | -| data | true | object | | | -| [{ accessKey | true | string | access key | | -| note | true | string | API key备注 | | -| permission | true | string | API key权限 | | -| ipAddresses | false | string | API key绑定的IP地址 | | -| validDays | true | int | API key剩余有效天数 | 若为-1,则表示永久有效 | -| status | true | string | API key当前状态 | normal(正常),expired(已过期) | -| createTime | true | long | API key创建时间 | | -| updateTime }] | true | long | API key最近一次修改时间 | | - -## 母子用户获取用户UID - -此接口用于母子用户查询本用户UID - -API Key 权限:读取 - -### HTTP 请求 +- POST ` /v1/order/orders/batchCancelOpenOrders` -- GET `/v2/user/uid` ### 请求参数 -无 + +| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | +| ---------- | -------- | ------ | ------------------------------------------------------------ | ------ | ------------------------------------------------- | +| account-id | false | string | 账户ID,取值参考 `GET /v1/account/accounts` | | | +| symbol | false | string | 交易代码列表(最多10 个symbols,多个交易代码间以逗号分隔),btcusdt, ethbtc...(取值参考`/v1/common/symbols`) | all | | +| types | false | string | 订单类型组合,使用逗号分割 | | 所有可能的订单类型(见本章节简介) | +| side | false | string | 主动交易方向 | | “buy”或“sell”,缺省将返回所有符合条件尚未成交订单 | +| size | false | int | 撤销订单的数量 | 100 | [0,100] | > Response: ```json -{ - "code": 200, - "data": 63628520 -} +{ "status": "ok", "data": { "success-count": 2, "failed-count": 0, "next-id": 5454600 }} ``` -### 响应数据 -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| -------- | -------- | -------- | ---------------- | -------- | -| code | true | int | 状态码 | | -| message | false | string | 错误描述(如有) | | -| data | true | long | 用户UID | | +### 响应数据 +| 参数名称 | 是否必须 | 数据类型 | 描述 | +| ------------- | -------- | -------- | ---------------------------------------------------- | +| success-count | true | int | 成功取消的订单数 | +| failed-count | true | int | 取消失败的订单数 | +| next-id | true | long | 下一个可以撤销的订单号,返回-1表示没有可以撤销的订单 | -## 子用户创建 +## 批量撤销指定订单 -此接口用于母用户进行子用户创建,单次最多50个 +API Key 权限:交易
+限频值(NEW):50次/2s -API Key 权限:交易 +此接口同时为多个订单(基于id)发送取消请求,建议通过order-ids来撤单,比client-order-ids更快更稳定。 ### HTTP 请求 -- POST `/v2/sub-user/creation` +- POST ` /v1/order/orders/batchcancel` > Request: ```json -{ -"userList": - [ - { - "userName":"test123", - "note":"huobi" - }, - { - "userName":"test456", - "note":"huobi" - } - ] -} +{ "client-order-ids": [ "5983466", "5722939", "5721027", "5719487" ]} ``` ### 请求参数 -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| ----------- | -------- | ------ | -------------------------------------------------- | ------ | ------------------------------------------------------------ | -| userList | true | object | | | | -| [{ userName | true | string | 子用户名,子用户身份的重要标识,要求火币平台内唯一 | NA | 6至20位字母和数字的组合,可为纯字母;若字母和数字的组合,需以字母开头;字母不区分大小写; | -| note }] | false | string | 子用户备注,无唯一性要求 | NA | 最多20位字符,字符类型不限 | + +| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | +| ---------------- | -------- | -------- | ------------------------------------------------------------ | ------ | ------------------ | +| order-ids | false | string[] | 订单编号列表(order-ids和client-order-ids必须且只能选一个填写,不超过50张订单),建议通过order-ids来撤单,比client-order-ids更快更稳定 | | 单次不超过50个订单 | +| client-order-ids | false | string[] | 用户自编订单号列表(order-ids和client-order-ids必须且只能选一个填写,不超过50张订单),必须已有该订单存在,否则下次下单时不允许用此值 | | 单次不超过50个订单 | > Response: ```json -{ - "code": 200, - "data": [ - { - "userName": "test123", - "note": "huobi", - "uid": 123 - }, - { - "userName": "test456", - "note": "huobi", - "errCode": "2002", - "errMessage": "value in user name duplicated with existing record" - } - ] -} +{ "status": "ok", "data": { "success": [ "5983466" ], "failed": [ { "err-msg": "Incorrect order state", "order-state": 7, "order-id": "", "err-code": "order-orderstate-error", "client-order-id": "first" }, { "err-msg": "Incorrect order state", "order-state": 7, "order-id": "", "err-code": "order-orderstate-error", "client-order-id": "second" }, { "err-msg": "The record is not found.", "order-id": "", "err-code": "base-not-found", "client-order-id": "third" } ] }} ``` ### 响应数据 -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ------------- | -------- | -------- | -------------------------------------------- | -------- | -| code | true | int | 状态码 | | -| message | false | string | 错误描述(如有) | | -| data | true | object | | | -| [{ userName | true | string | 子用户名 | | -| note | false | string | 子用户备注(仅对有备注的子用户有效) | | -| uid | false | long | 子用户UID(仅对创建成功的子用户有效) | | -| errCode | false | string | 创建失败错误码(仅对创建失败的子用户有效) | | -| errMessage }] | false | string | 创建失败错误原因(仅对创建失败的子用户有效) | | -## 获取子用户列表 +| 字段名称 | 数据类型 | 描述 | +| --------- | -------- | ------------------------------------------------------------ | +| { success | string[] | 撤单成功订单列表(可为order-id列表或client-order-id列表,以用户请求为准) | +| failed } | string[] | 撤单失败订单列表(可为order-id列表或client-order-id列表,以用户请求为准) | -母用户通过此接口可获取所有子用户的UID列表及各用户状态 +撤单失败订单列表 - -API Key 权限:读取 +| 字段名称 | 数据类型 | 描述 | +| --------------- | -------- | ------------------------------------------------------------ | +| [{ order-id | string | 订单编号(如用户创建订单时包含order-id,返回中也须包含此字段) | +| client-order-id | string | 用户自编订单号(如用户创建订单时包含client-order-id,返回中也须包含此字段) | +| err-code | string | 订单被拒错误码(仅对被拒订单有效) | +| err-msg | string | 订单被拒错误信息(仅对被拒订单有效) | +| order-state }] | string | 当前订单状态(若有) | + +返回字段列表中,order-state的可能取值包括 - + +| order-state | Description | +| ----------- | ------------------------------------------------------------ | +| -1 | order was already closed in the long past (order state = canceled, partial-canceled, filled, partial-filled) | +| 1 | created | +| 3 | submitted | +| 4 | partial-filled | +| 5 | partial-canceled | +| 6 | filled | +| 7 | canceled | +| 10 | cancelling | + +## 查询订单详情 + +API Key 权限:读取
+限频值(NEW):50次/2s + +此接口返回指定订单的最新状态和详情。通过API创建的订单,撤销超过2小时后无法查询。通过API创建的订单返回order-id,按此order-id查询订单还是返回base-record-invalid是因为系统内部处理有延迟,但是不影响成交。建议您后续重试查询或者通过订阅订单推送WebSocket消息查询。 ### HTTP 请求 -- GET `/v2/sub-user/user-list` +- GET `/v1/order/orders/{order-id}` + ### 请求参数 -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| -------- | -------- | ---- | -------------------------------- | ------ | -------- | -| fromId | FALSE | long | 查询起始编号(仅对翻页查询有效) | | | +| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | +| -------- | -------- | ------ | ------------------ | ------ | -------- | +| order-id | true | string | 订单ID,填在path中 | | | + > Response: ```json -{ - "code": 200, - "data": [ - { - "uid": 63628520, - "userState": "normal" - }, - { - "uid": 132208121, - "userState": "normal" - } - ] -} +{ "data": { "id": 59378, "symbol": "ethusdt", "account-id": 100009, "amount": "10.1000000000", "price": "100.1000000000", "created-at": 1494901162595, "type": "buy-limit", "field-amount": "10.1000000000", "field-cash-amount": "1011.0100000000", "field-fees": "0.0202000000", "finished-at": 1494901400468, "user-id": 1000, "source": "api", "state": "filled", "canceled-at": 0 }} ``` ### 响应数据 -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ----------- | -------- | -------- | ------------------------------------------ | ------------ | -| code | TRUE | int | 状态码 | | -| message | FALSE | string | 错误描述(如有) | | -| data | TRUE | object | | | -| { uid | TRUE | long | 子用户UID | | -| userState } | TRUE | string | 子用户状态 | lock, normal | -| nextId | FALSE | long | 下页查询起始编号(仅在存在下页数据时返回) | | +| 字段名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | +| ----------------- | -------- | -------- | ------------------------------------------------------------ | ---------------------------------- | +| account-id | true | long | 账户 ID | | +| amount | true | string | 订单数量 | | +| canceled-at | false | long | 订单撤销时间 | | +| created-at | true | long | 订单创建时间 | | +| field-amount | true | string | 已成交数量 | | +| field-cash-amount | true | string | 已成交总金额 | | +| field-fees | true | string | 已成交手续费(准确数值请参考matchresults接口) | | +| finished-at | false | long | 订单变为终结态的时间,不是成交时间,包含“已撤单”状态 | | +| id | true | long | 订单ID | | +| client-order-id | false | string | 用户自编订单号(所有open订单可返回client-order-id(如有);仅7天内(基于订单创建时间)的closed订单(state <> canceled)可返回client-order-id(如有);仅8小时内(基于订单创建时间)的closed订单(state = canceled)可返回client-order-id(如有)) | | +| price | true | string | 订单价格 | | +| source | true | string | 订单来源 | api | +| state | true | string | 订单状态 | 所有可能的订单状态(见本章节简介) | +| symbol | true | string | 交易对 | btcusdt, ethbtc, rcneth ... | +| type | true | string | 订单类型 | 所有可能的订单类型(见本章节简介) | + -##冻结/解冻子用户 +## 查询订单详情(基于client order ID) -API Key 权限:交易
-限频值(NEW):20次/2s +API Key 权限:读取
+限频值(NEW):50次/2s -此接口用于母用户对其下一个子用户进行冻结和解冻操作 +此接口返回指定用户自编订单号(8小时内)的订单最新状态和详情。通过API创建的订单,撤销超过2小时后无法查询。建议通过GET `/v1/order/orders/{order-id}`来撤单,比使用clientOrderId更快更稳定 -###HTTP 请求 +### HTTP 请求 -- POST `/v2/sub-user/management` +- GET `/v1/order/orders/getClientOrder` ### 请求参数 -| 参数 | 是否必填 | 数据类型 | 长度 | 说明 | 取值范围 | -| ------ | -------- | -------- | ---- | ----------- | ------------------------ | -| subUid | true | long | - | 子用户的UID | - | -| action | true | string | - | 操作类型 | lock(冻结),unlock(解冻) | +| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | +| ------------- | -------- | ------ | -------------- | ------ | -------- | +| clientOrderId | true | string | 用户自编订单号 | | | > Response: ```json -{ - "code": 200, - "data": { - "subUid": 12902150, - "userState":"lock"} -} +{ "data": { "id": 59378, "symbol": "ethusdt", "account-id": 100009, "amount": "10.1000000000", "price": "100.1000000000", "created-at": 1494901162595, "type": "buy-limit", "field-amount": "10.1000000000", "field-cash-amount": "1011.0100000000", "field-fees": "0.0202000000", "finished-at": 1494901400468, "user-id": 1000, "source": "api", "state": "filled", "canceled-at": 0 }} ``` ### 响应数据 -| 参数 | 是否必填 | 数据类型 | 长度 | 说明 | 取值范围 | -| --------- | -------- | -------- | ---- | ---------- | -------------------------- | -| subUid | true | long | - | 子用户UID | - | -| userState | true | string | - | 子用户状态 | lock(已冻结),normal(正常) | +| 字段名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | +| ----------------- | -------- | -------- | ------------------------------------------------------------ | ---------------------------------- | +| account-id | true | long | 账户 ID | | +| amount | true | string | 订单数量 | | +| canceled-at | false | long | 订单撤销时间 | | +| created-at | true | long | 订单创建时间 | | +| field-amount | true | string | 已成交数量 | | +| field-cash-amount | true | string | 已成交总金额 | | +| field-fees | true | string | 已成交手续费(准确数值请参考matchresults接口) | | +| finished-at | false | long | 订单变为终结态的时间,不是成交时间,包含“已撤单”状态 | | +| id | true | long | 订单ID | | +| client-order-id | false | string | 用户自编订单号(仅8小时内(基于订单创建时间)的订单可被查询,订单状态是终态的2小时内可查询) | | +| price | true | string | 订单价格 | | +| source | true | string | 订单来源 | api | +| state | true | string | 订单状态 | 所有可能的订单状态(见本章节简介) | +| symbol | true | string | 交易对 | btcusdt, ethbtc, rcneth ... | +| type | true | string | 订单类型 | 所有可能的订单类型(见本章节简介) | +如client order ID不存在,返回如下错误信息 +{ + "status": "error", + "err-code": "base-record-invalid", + "err-msg": "record invalid", + "data": null +} -## 获取特定子用户的用户状态 +## 成交明细 -母用户通过此接口可获取特定子用户的用户状态 +API Key 权限:读取
+限频值(NEW):50次/2s -API Key 权限:读取 +此接口返回指定订单的成交明细。 ### HTTP 请求 -- GET `/v2/sub-user/user-state` +- GET `/v1/order/orders/{order-id}/matchresults` ### 请求参数 -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| -------- | -------- | ---- | --------- | ------ | -------- | -| subUid | TRUE | long | 子用户UID | | | +| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | +| -------- | -------- | ------ | ------------------ | ------ | -------- | +| order-id | true | string | 订单ID,填在path中 | | | + > Response: ```json -{ - "code": 200, - "data": { - "uid": 132208121, - "userState": "normal" - } -} +{ "data": [ { "id": 29553, "order-id": 59378, "match-id": 59335, "trade-id": 100282808529, "symbol": "ethusdt", "type": "buy-limit", "source": "api", "price": "100.1000000000", "filled-amount": "9.1155000000", "filled-fees": "0.0182310000", "created-at": 1494901400435, "role": "maker", "filled-points": "0.0", “fee-deduct-state”:"done", "fee-deduct-currency": "" } ... ]} ``` ### 响应数据 -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ----------- | -------- | -------- | ---------------- | ------------ | -| code | TRUE | int | 状态码 | | -| message | FALSE | string | 错误描述(如有) | | -| data | TRUE | object | | | -| { uid | TRUE | long | 子用户UID | | -| userState } | TRUE | string | 子用户状态 | lock, normal | + -##设置子用户交易权限 +| 字段名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | +| ------------- | -------- | -------- | ------------------------------------------------------------ | ---------------------------------- | +| created-at | true | long | 该成交记录创建的时间戳(略晚于成交时间) | | +| filled-amount | true | string | 成交数量 | | +| filled-fees | true | string | 交易手续费(正值)或交易返佣金(负值) | | +| fee-currency | true | string | 交易手续费或交易返佣币种(买单的交易手续费币种为基础币种,卖单的交易手续费币种为计价币种;买单的交易返佣币种为计价币种,卖单的交易返佣币种为基础币种) | | +| id | true | long | 订单成交记录ID | | +| match-id | true | long | 撮合ID,订单在撮合中执行的顺序ID | | +| order-id | true | long | 订单ID,成交所属订单的ID | | +| trade-id | false | integer | Unique trade ID (NEW)唯一成交编号,成交时产生的唯一编号ID | | +| price | true | string | 成交价格 | | +| source | true | string | 订单来源 | api | +| symbol | true | string | 交易对 | btcusdt, ethbtc, rcneth ... | +| type | true | string | 订单类型 | 所有可能的订单类型(见本章节简介) | +| role | true | string | 成交角色 | maker,taker | -API Key 权限:交易 +注:
-此接口用于母用户批量设置子用户的交易权限。 -子用户的现货交易权限默认开通无须设置。 +- filled-fees中的交易返佣金额可能不会实时到账。
-###HTTP 请求 +## 搜索历史订单 -- POST `/v2/sub-user/tradable-market` +API Key 权限:读取
+限频值(NEW):50次/2s -### 请求参数 +此接口基于搜索条件查询历史订单。通过API创建的订单,撤销超过2小时后无法查询。 -| 参数 | 是否必填 | 数据类型 | 长度 | 说明 | 取值范围 | -| ----------- | -------- | -------- | ---- | --------------------------------------------- | ---------------------------- | -| subUids | true | string | - | 子用户UID列表(支持多填,最多50个,逗号分隔) | - | -| accountType | true | string | - | 账户类型 | isolated-margin,cross-margin | -| activation | true | string | - | 账户激活状态 | activated,deactivated | +用户可选择以“时间范围”查询历史订单,以替代原先的以“日期范围“查询方式。 -> Response: - -```json -{ - "code": 200, - "data": [ - { - "subUid": "132208121", - "accountType": "isolated-margin", - "activation": "activated" - } - ] -} -``` - -### 响应数据 - -| 参数 | 是否必填 | 数据类型 | 长度 | 说明 | 取值范围 | -| ----------- | -------- | -------- | ---- | ---------------------------------------------------------- | ---------------------------- | -| code | true | int | - | 状态码 | | -| message | false | string | - | 错误描述(如有) | | -| data | true | object | | | | -| {subUid | true | string | - | 子用户UID | - | -| accountType | true | string | - | 账户类型 | isolated-margin,cross-margin | -| activation | true | string | - | 账户激活状态 | activated,deactivated | -| errCode | false | int | - | 请求被拒错误码(仅在设置该subUid市场准入权限错误时返回) | | -| errMessage} | false | string | - | 请求被拒错误消息(仅在设置该subUid市场准入权限错误时返回) | | - -## 设置子用户资产转出权限 - -API Key 权限:交易 - -此接口用于母用户批量设置子用户的资产转出权限。 -子用户的资金转出权限包括: -- 由子用户现货(spot)账户转出至同一母用户下另一子用户的现货(spot)账户; -- 由子用户现货(spot)账户转出至母用户现货(spot)账户(无须设置,默认开通)。 - -###HTTP 请求 - -- POST `/v2/sub-user/transferability` - -### 请求参数 - -| 参数 | 是否必填 | 数据类型 | 长度 | 说明 | 取值范围 | -| ------------- | -------- | -------- | ---- | --------------------------------------------- | ---------- | -| subUids | true | string | - | 子用户UID列表(支持多填,最多50个,逗号分隔) | - | -| accountType | false | string | - | 账户类型(如不填,缺省值spot) | spot | -| transferrable | true | bool | - | 可划转权限 | true,false | - -> Response: - -```json -{ - "code": 200, - "data": [ - { - "accountType": "spot", - "transferrable": true, - "subUid": 13220823 - } - ] -} -``` - -### 响应数据 +- 如用户填写start-time AND/OR end-time查询历史订单,服务器将按照用户指定的“时间范围“查询并返回,并忽略start-date/end-date参数。此方式的查询窗口大小限定为最大48小时,窗口平移范围为最近180天。 -| 参数 | 是否必填 | 数据类型 | 长度 | 说明 | 取值范围 | -| ------------- | -------- | -------- | ---- | ---------------------------------------------------------- | ---------- | -| code | true | int | - | 状态码 | | -| message | false | string | - | 错误描述(如有) | | -| data | true | object | | | | -| {subUid | true | long | - | 子用户UID | - | -| accountType | true | string | - | 账户类型 | spot | -| transferrable | true | bool | - | 可划转权限 | true,false | -| errCode | false | int | - | 请求被拒错误码(仅在设置该subUid市场准入权限错误时返回) | | -| errMessage} | false | string | - | 请求被拒错误消息(仅在设置该subUid市场准入权限错误时返回) | | +- 如用户不填写start-time/end-time参数,而填写start-date AND/OR end-date查询历史订单,服务器将按照用户指定的“日期范围“查询并返回。此方式的查询窗口大小限定为最大2天,窗口平移范围为最近180天。 -## 获取特定子用户的账户列表 +- 如用户既不填写start-time/end-time参数,也不填写start-date/end-date参数,服务器将缺省以当前时间为end-time,返回最近48小时内的历史订单。 -母用户通过此接口可获取特定子用户的Account ID列表及各账户状态 +火币Global建议用户以“时间范围“查询历史订单。未来,火币Global将下线以”日期范围“查询历史订单的方式,并另行通知。 -API Key 权限:读取 ### HTTP 请求 -- GET `/v2/sub-user/account-list` - -### 请求参数 - -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| -------- | -------- | ---- | --------- | ------ | -------- | -| subUid | TRUE | long | 子用户UID | | | +- GET `/v1/order/orders` -> Response: +> Request: ```json -{ - "code": 200, - "data": { - "uid": 132208121, - "deductMode": "sub", - "list": [ - { - "accountType": "isolated-margin", - "activation": "activated" - }, - { - "accountType": "cross-margin", - "activation": "deactivated" - }, - { - "accountType": "spot", - "activation": "activated", - "transferrable": true, - "accountIds": [ - { - "accountId": 12255180, - "accountStatus": "normal" - } - ] - } - ] - } -} +{ "account-id": "100009", "amount": "10.1", "price": "100.1", "source": "api", "symbol": "ethusdt", "type": "buy-limit"} ``` -### 响应数据 - -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ----------------- | -------- | -------- | ------------------------------------------------- | ------------------------------------------------- | -| code | TRUE | int | 状态码 | | -| message | FALSE | string | 错误描述(如有) | | -| data | TRUE | object | | | -| { uid | TRUE | long | 子用户UID | | -| deductMode | TRUE | | | | -| list | TRUE | object | | | -| { accountType | TRUE | string | 账户类型 | spot, isolated-margin, cross-margin, futures,swap | -| activation | TRUE | string | 账户激活状态 | activated, deactivated | -| transferrable | FALSE | bool | 可划转权限(仅对accountType=spot有效) | true, false | -| accountIds | FALSE | object | | | -| { accountId | TRUE | string | 账户ID | | -| subType | FALSE | string | 账户子类型(仅对accountType=isolated-margin有效) | | -| accountStatus }}} | TRUE | string | 账户状态 | normal, locked | - -## 子用户API key创建 - -此接口用于母用户创建子用户的API key - -API Key 权限:交易 -### HTTP 请求 +### 请求参数 -- POST `/v2/sub-user/api-key-generation` +| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | +| ---------- | -------- | ------ | ------------------------------------------------------------ | --------------------------- | ------------------------------------------------------------ | +| symbol | true | string | 交易对 | | btcusdt, ethbtc...(取值参考`GET /v1/common/symbols`) | +| types | false | string | 查询的订单类型组合,使用逗号分割 | | 所有可能的订单类型(见本章节简介) | +| start-time | false | long | 查询开始时间, 时间格式UTC time in millisecond。 以订单生成时间进行查询 | -48h 查询结束时间的前48小时 | 取值范围 [((end-time) – 48h), (end-time)] ,查询窗口最大为48小时,窗口平移范围为最近180天,已完全撤销的历史订单的查询窗口平移范围只有最近2小时(state="canceled") | +| end-time | false | long | 查询结束时间, 时间格式UTC time in millisecond。 以订单生成时间进行查询 | present | 取值范围 [(present-179d), present] ,查询窗口最大为48小时,窗口平移范围为最近180天,已完全撤销的历史订单的查询窗口平移范围只有最近2小时(state="canceled") | +| states | true | string | 查询的订单状态组合,使用','分割 | | 所有可能的订单状态(见本章节简介) | +| from | false | string | 查询起始 ID | | 如果是向后查询,则赋值为上一次查询结果中得到的最后一条id ;如果是向前查询,则赋值为上一次查询结果中得到的第一条id | +| direct | false | string | 查询方向 | | prev 向前;next 向后 | +| size | false | string | 查询记录大小 | 100 | [1, 100] | -### 请求参数 -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| ----------- | -------- | ------ | ---------------------------------------------------- | ------ | ------------------------------------------------------------ | -| otpToken | true | string | 母用户的谷歌验证码,母用户须在官网页面启用GA二次验证 | NA | 6个字符,纯数字 | -| subUid | true | long | 子用户UID | NA | | -| note | ture | string | API key备注 | NA | 最多255位字符,字符类型不限 | -| permission | true | string | API key权限 | NA | 取值范围:readOnly、trade,其中readOnly必传,trade选传,两个间用半角逗号分隔。 | -| ipAddresses | false | string | API key绑定的IPv4/IPv6主机地址或IPv4网络地址 | NA | 最多绑定20个,多个IP地址用半角逗号分隔,如:192.168.1.1,202.106.96.0/24。如果未绑定任何IP地址,API key有效期仅为90天。 | > Response: ```json -{ - "code": 200, - "data": { - "accessKey": "2b55df29-vf25treb80-1535713d-8aea2", - "secretKey": "c405c550-6fa0583b-fb4bc38e-d317e", - "note": "62924133", - "permission": "trade,readOnly", - "ipAddresses": "1.1.1.1,1.1.1.2" - } -} +{ "data": [ { "id": 59378, "symbol": "ethusdt", "account-id": 100009, "amount": "10.1000000000", "price": "100.1000000000", "created-at": 1494901162595, "type": "buy-limit", "field-amount": "10.1000000000", "field-cash-amount": "1011.0100000000", "field-fees": "0.0202000000", "finished-at": 1494901400468, "user-id": 1000, "source": "api", "state": "filled", "canceled-at": 0 } ... ]} ``` ### 响应数据 -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ------------- | -------- | -------- | ------------------- | -------- | -| code | true | int | 状态码 | | -| message | false | string | 错误描述(如有) | | -| data | true | object | | | -| { note | true | string | API key备注 | | -| accessKey | true | string | access key | | -| secretKey | true | string | secret key | | -| permission | true | string | API key权限 | | -| ipAddresses } | false | string | API key绑定的IP地址 | | - - -## 修改子用户API key - -此接口用于母用户修改子用户的API key - -API Key 权限:交易 -### HTTP 请求 - -- POST `/v2/sub-user/api-key-modification` - -### 请求参数 -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| ----------- | -------- | ------ | ------------------------- | ------ | ------------------------------------------------------------ | -| subUid | true | long | 子用户的uid | NA | | -| accessKey | true | string | 子用户API key的access key | NA | | -| note | false | string | API key备注 | NA | 最多255位字符 | -| permission | false | string | API key权限 | NA | 取值范围:readOnly、trade,其中readOnly必传,trade选传,两个间用半角逗号分隔。 | -| ipAddresses | false | string | API key绑定的IP地址 | NA | IPv4/IPv6主机地址或IPv4网络地址,最多绑定20个,多个IP地址用半角逗号分隔,如:192.168.1.1,202.106.96.0/24。如果未绑定任何IP地址,API key有效期仅为90天。 | - -> Response: - -```json -{ - "code": 200, - "data": { - "note": "test", - "permission": "readOnly", - "ipAddresses": "1.1.1.3" - } -} -``` +| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | +| ----------------- | -------- | -------- | ------------------------------------------------------------ | ---------------------------------- | +| account-id | true | long | 账户 ID | | +| amount | true | string | 订单数量 | | +| canceled-at | false | long | 接到撤单申请的时间 | | +| created-at | true | long | 订单创建时间 | | +| field-amount | true | string | 已成交数量 | | +| field-cash-amount | true | string | 已成交总金额 | | +| field-fees | true | string | 已成交手续费(准确数值请参考matchresults接口) | | +| finished-at | false | long | 最后成交时间 | | +| id | true | long | 订单ID,无大小顺序,可作为下一次翻页查询请求的from字段 | | +| client-order-id | false | string | 用户自编订单号(所有open订单可返回client-order-id(如有);仅7天内(基于订单创建时间)的closed订单(state <> canceled)可返回client-order-id(如有);仅8小时内(基于订单创建时间)的closed订单(state = canceled)可被查询) | | +| price | true | string | 订单价格 | | +| source | true | string | 订单来源 | 所有可能的订单来源(见本章节简介) | +| state | true | string | 订单状态 | 所有可能的订单状态(见本章节简介) | +| symbol | true | string | 交易对 | btcusdt, ethbtc, rcneth ... | +| type | true | string | 订单类型 | 所有可能的订单类型(见本章节简介) | -### 响应数据 -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ------------- | -------- | -------- | ------------------- | -------- | -| code | true | int | 状态码 | | -| message | false | string | 错误描述(如有) | | -| data | true | object | | | -| { note | false | string | API key备注 | | -| permission | false | string | API key权限 | | -| ipAddresses } | false | string | API key绑定的IP地址 | | +### start-date, end-date相关错误码 +| 错误码 | 对应错误场景 | +| ------------------ | ------------------------------------------------------------ | +| invalid_interval | start date小于end date; 或者 start date 与end date之间的时间间隔大于2天 | +| invalid_start_date | start date是一个180天之前的日期;或者start date是一个未来的日期 | +| invalid_end_date | end date 是一个180天之前的日期;或者end date是一个未来的日期 | -## 删除子用户API key +## 搜索最近48小时内历史订单 -此接口用于母用户删除子用户的API key +API Key 权限:读取
+限频值(NEW):20次/2s -API Key 权限:交易 +此接口基于搜索条件查询最近48小时内历史订单。通过API创建的订单,撤销超过2小时后无法查询。 ### HTTP 请求 -- POST `/v2/sub-user/api-key-deletion` - -### 请求参数 -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| --------- | -------- | ------ | ------------------------- | ------ | -------- | -| subUid | true | long | 子用户的uid | NA | | -| accessKey | true | string | 子用户API key的access key | NA | | +- GET `/v1/order/history` -> Response: +> Request: ```json -{ - "code": 200, - "data": null -} +{ "symbol": "btcusdt", "start-time": "1556417645419", "end-time": "1556533539282", "direct": "prev", "size": "10"} ``` -### 响应数据 -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| -------- | -------- | -------- | ---------------- | -------- | -| code | true | int | 状态码 | | -| message | false | string | 错误描述(如有) | | - - -## 资产划转(母子用户之间) - -API Key 权限:交易
-限频值(NEW):2次/2s - -母用户执行母子用户之间的划转 - -### HTTP 请求 - -- POST ` /v1/subuser/transfer` - ### 请求参数 -| 参数 | 是否必填 | 数据类型 | 说明 | 取值范围 | | -| --------------- | -------- | -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ---- | -| sub-uid | true | long | 子用户uid | - | | -| currency | true | string | 币种,即btc, ltc, bch, eth, etc ...(取值参考`GET /v1/common/currencys`) | - | | -| amount | true | decimal | 划转金额 | - | | -| client-order-id | false | string | 用户自编订单号(幂等使用,长度10个字符) | | | -| type | true | string | 划转类型 | master-transfer-in(子用户划转给母用户虚拟币)/ master-transfer-out (母用户划转给子用户虚拟币)/master-point-transfer-in (子用户划转给母用户点卡)/master-point-transfer-out(母用户划转给子用户点卡) | | +| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | +| ---------- | -------- | ------ | ------------------------------------------------------------ | -------------- | ------------------------------------------------------ | +| symbol | false | string | 交易对 | all | btcusdt, ethbtc...(取值参考`GET /v1/common/symbols`) | +| start-time | false | long | 查询起始时间(含) | 48小时前的时刻 | UTC time in millisecond | +| end-time | false | long | 查询结束时间(含) | 查询时刻 | UTC time in millisecond | +| direct | false | string | 订单查询方向(注:仅在检索出的总条目数量超出size字段限定时起作用;如果检索出的总条目数量在size 字段限定内,direct 字段不起作用。) | next | prev 向前, next 向后 | +| size | false | int | 每次返回条目数量 | 100 | [10,1000] | > Response: ```json -{ - "data":123456, - "status":"ok" -} +{ "status": "ok", "data": [ { "id": 31215214553, "symbol": "btcusdt", "account-id": 4717043, "amount": "1.000000000000000000", "price": "1.000000000000000000", "created-at": 1556533539282, "type": "buy-limit", "field-amount": "0.0", "field-cash-amount": "0.0", "field-fees": "0.0", "finished-at": 1556533568953, "source": "web", "state": "canceled", "canceled-at": 1556533568911 } ]} ``` ### 响应数据 -| 参数 | 是否必填 | 数据类型 | 长度 | 说明 | 取值范围 | | -| ------ | -------- | -------- | ---- | ---------- | --------------- | ---- | -| data | true | int | - | 划转订单id | - | | -| status | true | | - | 状态 | "OK" or "Error" | | - -### 错误码 +| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | +| ----------------- | -------- | -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| {account-id | true | long | 账户 ID | | +| amount | true | string | 订单数量 | | +| canceled-at | false | long | 接到撤单申请的时间 | | +| created-at | true | long | 订单创建时间 | | +| field-amount | true | string | 已成交数量 | | +| field-cash-amount | true | string | 已成交总金额 | | +| field-fees | true | string | 已成交手续费(准确数值请参考matchresults接口) | | +| finished-at | false | long | 最后成交时间 | | +| id | true | long | 订单ID,无大小顺序 | | +| client-order-id | false | string | 用户自编订单号(仅48小时内(基于订单创建时间)的closed订单(state <> canceled)可返回client-order-id(如有);仅8小时内(基于订单创建时间)的closed订单(state = canceled)可被查询) | | +| price | true | string | 订单价格 | | +| source | true | string | 订单来源 | 所有可能的订单来源(见本章节简介) | +| state | true | string | 订单状态 | partial-canceled 部分成交撤销, filled 完全成交, canceled 已撤销 | +| symbol | true | string | 交易对 | btcusdt, ethbtc, rcneth ... | +| type} | true | string | 订单类型 | 所有可能的订单类型(见本章节简介) | +| next-time | false | long | 下一查询起始时间(当请求字段”direct”为”prev”时有效), 下一查询结束时间(当请求字段”direct”为”next”时有效)。注:仅在检索出的总条目数量超出size字段限定时,此返回字段存在。 | UTC time in millisecond | -| error_code | 说明 | 类型 | | -| ------------------------------------------- | -------------------------------- | ------ | ---- | -| account-transfer-balance-insufficient-error | 账户余额不足 | string | | -| base-operation-forbidden | 禁止操作(母子用户关系错误时报) | string | | -## 子用户充币地址查询 +## 当前和历史成交 -此节点用于母用户查询子用户特定币种(IOTA除外)在其所在区块链中的充币地址,限母用户可用 +API Key 权限:读取
+限频值(NEW):20次/2s -API Key 权限:读取 +此接口基于搜索条件查询当前和历史成交记录。 ### HTTP 请求 -- GET `/v2/sub-user/deposit-address` +- GET `/v1/order/matchresults` + ### 请求参数 -| 字段名称 | 是否必需 | 类型 | 描述 | 默认值 | 取值范围 | -| -------- | -------- | ------ | --------- | ------ | ------------------------------------------------------------ | -| subUid | true | long | 子用户UID | NA | 限填1个 | -| currency | true | string | 币种 | NA | btc, ltc, bch, eth, etc ...(取值参考`GET /v1/common/currencys`) | +| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | +| ---------- | -------- | ------ | ------------------------------------------------------------ | --------------------------- | ------------------------------------------------------------ | +| symbol | true | string | 交易对 | N/A | btcusdt, ethbtc...(取值参考`GET /v1/common/symbols`) | +| types | false | string | 查询的订单类型组合,使用','分割 | all | 所有可能的订单类型(见本章节简介) | +| start-time | false | long | 查询开始时间, 时间格式UTC time in millisecond。 以订单生成时间进行查询 | -48h 查询结束时间的前48小时 | 取值范围 [((end-time) – 48h), (end-time)] ,查询窗口最大为48小时,窗口平移范围为最近120天。 | +| end-time | false | long | 查询结束时间, 时间格式UTC time in millisecond。 以订单生成时间进行查询 | present | 取值范围 [(present-120d), present] ,查询窗口最大为48小时,窗口平移范围为最近120天。 | +| from | false | string | 查询起始 ID | N/A | 如果是向后查询,则赋值为上一次查询结果中得到的最后一条id(不是trade-id) ;如果是向前查询,则赋值为上一次查询结果中得到的第一条id(不是trade-id) | +| direct | false | string | 查询方向 | next | prev 向前;next 向后 | +| size | false | string | 查询记录大小 | 100 | [1,500] | > Response: ```json -{ - "code": 200, - "data": [ - { - "currency": "btc", - "address": "1PSRjPg53cX7hMRYAXGJnL8mqHtzmQgPUs", - "addressTag": "", - "chain": "btc" - } - ] -} +{ "data": [ { "id": 29553, "order-id": 59378, "match-id": 59335, "symbol": "ethusdt", "type": "buy-limit", "source": "api", "price": "100.1000000000", "filled-amount": "9.1155000000", "filled-fees": "0.0182310000", "created-at": 1494901400435, "trade-id": 100282808529, "role": taker, "filled-points": "0.0", “fee-deduct-state”:"done", "fee-deduct-currency": "" } ... ]} ``` ### 响应数据 -| 字段名称 | 是否必需 | 数据类型 | 字段描述 | 取值范围 | -| ---------- | -------- | -------- | ---------------- | -------- | -| code | true | int | 状态码 | | -| message | false | string | 错误描述(如有) | | -| data | true | object | | | -| { currency | true | string | 币种 | | -| address | true | string | 充币地址 | | -| addressTag | true | string | 充币地址标签 | | -| chain } | true | string | 链名称 | | - - -## 子用户充币记录查询 - -此节点用于母用户查询子用户充值记录,限母用户可用 - -API Key 权限:读取 + -### HTTP 请求 +| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | +| ------------- | -------- | -------- | ------------------------------------------------------------ | ---------------------------------- | +| created-at | true | long | 该成交记录创建的时间戳(略晚于成交时间) | | +| filled-amount | true | string | 成交数量 | | +| filled-fees | true | string | 交易手续费(正值)或交易返佣(负值) | | +| fee-currency | true | string | 交易手续费或交易返佣币种(买单的交易手续费币种为基础币种,卖单的交易手续费币种为计价币种;买单的交易返佣币种为计价币种,卖单的交易返佣币种为基础币种) | | +| id | true | long | 订单成交记录 ID,无大小顺序,可作为下一次翻页查询请求的from字段 | | +| match-id | true | long | 撮合 ID | | +| order-id | true | long | 订单 ID | | +| trade-id | false | integer | 唯一成交编号 | | +| price | true | string | 成交价格 | | +| source | true | string | 订单来源 | api | +| symbol | true | string | 交易对 | btcusdt, ethbtc, rcneth ... | +| type | true | string | 订单类型 | 所有可能的订单类型(见本章节简介) | +| role | true | string | 成交角色 | maker,taker | -- GET `/v2/sub-user/query-deposit` +注:
-### 请求参数 +- filled-fees中的交易返佣金额可能不会实时到账;
-| 参数名称 | 数据类型 | 是否必需 | 描述 | -| --------- | -------- | -------- | ----------------------------------------------------- | -| subUid | long | TRUE | 子用户UID,限填1个 | -| currency | string | FALSE | 币种,缺省值所有币种 | -| startTime | long | FALSE | 远点时间,以createTime进行检索,取值范围及缺省值见注1 | -| endTime | long | FALSE | 近点时间,以createTime进行检索,取值范围及缺省值见注2 | -| sort | string | FALSE | 检索方向,asc 由远及近, desc 由近及远,缺省值desc | -| limit | int | FALSE | 单页最大返回条目数量 [1,500] (缺省值100) | -| fromId | long | FALSE | 起始充币订单ID,仅在下页查询时有效见注3 | +### start-date, end-date相关错误码 -注1:
-startTime取值范围:[(endTime - 30天), endTime]
-startTime缺省值:(endTime - 30天)
+| 错误码 | 对应错误场景 | +| ------------------ | ------------------------------------------------------------ | +| invalid_interval | start date小于end date; 或者 start date 与end date之间的时间间隔大于2天 | +| invalid_start_date | start date是一个61天之前的日期;或者start date是一个未来的日期 | +| invalid_end_date | end date 是一个61天之前的日期;或者end date是一个未来的日期 | -注2:
-endTime取值范围:不限
-endTime缺省值:当前时间
-注3:
-仅当用户请求查询的时间范围内的数据条目超出单页限制(由“limit“字段设定)时,服务器才返回”nextId“字段。用户收到服务器返回的”nextId“后 –
-1)须知晓后续仍有数据未能在本页返回;
-2)如需继续查询下页数据,应再次请求查询并将服务器返回的“nextId”作为“fromId“,其它请求参数不变。
-3)作为数据库记录ID,“nextId”和“fromId”除了用来翻页查询外,无其它业务含义。
+## 获取用户当前手续费率 +Api用户查询交易对费率,一次限制最多查10个交易对,子用户的费率和母用户保持一致 -> Response: +API Key 权限:读取 -```json -{ - "code": 200, - "data": [ - { - "id": 33419472, - "currency": "ltc", - "chain": "ltc", - "amount": 0.001000000000000000, - "address": "LUuuPs5C5Ph3cZz76ZLN1AMLSstqG5PbAz", - "state": "safe", - "txHash": "847601d249861da56022323514870ddb96456ec9579526233d53e690264605a7", - "addressTag": "", - "createTime": 1587033225787, - "updateTime": 1587033716616 - } - ] -} +```shell +curl "https://api.huobi.pro/v2/reference/transact-fee-rate?symbols=btcusdt,ethusdt,ltcusdt" ``` -### 响应数据 - -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ------------ | -------- | ---------- | ------------------------------------------------------------ | ------------ | -| code | true | int | 状态码 | | -| message | false | string | 错误描述(如有) | | -| data | true | object | | | -| { id | true | long | 充币订单id | | -| currency | true | string | 币种 | | -| txHash | true | string | 交易哈希 | | -| chain | true | string | 链名称 | | -| amount | true | bigdecimal | 个数 | | -| address | true | string | 地址 | | -| addressTag | true | string | 地址标签 | | -| state | true | string | 状态 | 状态参见下表 | -| createTime | true | long | 发起时间 | | -| updateTime } | true | long | 最后更新时间 | | -| nextId | false | long | 下页起始编号(充币订单ID,仅在查询结果需要分页返回时,包含此字段) | | - -- 虚拟币充值状态定义: - -| 状态 | 描述 | -| ---------- | -------- | -| unknown | 状态未知 | -| confirming | 确认中 | -| confirmed | 已确认 | -| safe | 已完成 | -| orphan | 待确认 | - -## 子用户余额(汇总) - -API Key 权限:读取
-限频值(NEW):2次/2s - -母用户查询其下所有子用户的各币种汇总余额 - ### HTTP 请求 -- GET `/v1/subuser/aggregate-balance` +- GET `/v2/reference/transact-fee-rate` ### 请求参数 -无 +| 参数 | 数据类型 | 是否必须 | 默认值 | 描述 | 取值范围 | +| ------- | -------- | -------- | ------ | ------------------------ | ------------------------------------------------------- | +| symbols | string | true | NA | 交易对,可多填,逗号分隔 | btcusdt, ethbtc...(取值参考`GET /v1/common/symbols`)> | > Response: ```json -{ - "status": "ok", - "data": [ - { - "currency": "eos", - "type": "spot", - "balance": "1954559.809500000000000000" - }, - { - "currency": "btc", - "type": "spot", - "balance": "0.000000000000000000" - }, - { - "currency": "usdt", - "type": "spot", - "balance": "2925209.411300000000000000" - }, - ... - ] -} +{ "code": "200", "data": [ { "symbol": "btcusdt", "makerFeeRate":"0.002", "takerFeeRate":"0.002", "actualMakerRate": "0.002", "actualTakerRate":"0.002 }, { "symbol": "ethusdt", "makerFeeRate":"0.002", "takerFeeRate":"0.002", "actualMakerRate": "0.002", "actualTakerRate":"0.002 }, { "symbol": "ltcusdt", "makerFeeRate":"0.002", "takerFeeRate":"0.002", "actualMakerRate": "0.002", "actualTakerRate":"0.002 } ]} ``` ### 响应数据 -| 参数 | 是否必填 | 数据类型 | 长度 | 说明 | 取值范围 | | -| ------ | -------- | -------- | ---- | ---- | --------------- | ---- | -| status | true | | - | 状态 | "OK" or "Error" | | -| data | true | list | - | | - | | - -- data - -| 参数 | 是否必填 | 数据类型 | 长度 | 说明 | 取值范围 | | -| -------- | -------- | -------- | ---- | ------------------------------------ | ------------------------------------------------------------ | ---- | -| currency | 是 | string | - | 币种 | - | | -| type | 是 | string | - | 账户类型 | spot:现货账户,point:点卡账户, margin:逐仓杠杆账户,super-margin:全仓杠杆账户 | | -| balance | 是 | string | - | 账户余额(可用余额和冻结余额的总和) | - | | - -## 子用户余额 +| | 字段名称 | 数据类型 | 描述 | | +| ---- | ----------------- | -------- | ------------------------------------------------------------ | ---- | +| | code | integer | 状态码 | | +| | message | string | 错误描述(如有) | | +| | data | object | | | +| | { symbol | string | 交易代码 | | +| | makerFeeRate | string | 基础费率 - 被动方,如适用交易手续费返佣,返回返佣费率(负值) | | +| | takerFeeRate | string | 基础费率 - 主动方 | | +| | actualMakerRate | string | 抵扣后费率 - 被动方,如不适用抵扣或未启用抵扣,返回基础费率;如适用交易手续费返佣,返回返佣费率(负值) | | +| | actualTakerRate } | string | 抵扣后费率 – 主动方,如不适用抵扣或未启用抵扣,返回基础费率 | | -API Key 权限:读取
-限频值(NEW):20次/2s +注:
-母用户查询子用户各币种账户余额 +- 如makerFeeRate/actualMakerRate为正值,该字段意为交易手续费率;
+- 如makerFeeRate/actualMakerRate为负值,该字段意为交易返佣费率。
-### HTTP 请求 +## 常见错误码 -- GET `/v1/account/accounts/{sub-uid}` +以下是交易相关接口返回的返回码以及说明。 -### 请求参数 - -| 参数 | 是否必填 | 数据类型 | 长度 | 说明 | 取值范围 | | -| ------- | -------- | -------- | ---- | ------------ | -------- | ---- | -| sub-uid | true | long | - | 子用户的 UID | - | | - -> Response: - -```json -{ - "status": "ok", - "data": [ - { - "id": 9910049, - "type": "spot", - "list": - [ - { - "currency": "btc", - "type": "trade", - "balance": "1.00" - }, - { - "currency": "eth", - "type": "trade", - "balance": "1934.00" - } - ] - }, - { - "id": 9910050, - "type": "point", - "list": [] - } - ] -} -``` - -### 响应数据 - - -| 参数 | 是否必填 | 数据类型 | 长度 | 说明 | 取值范围 | | -| ---- | -------- | -------- | ---- | ---------- | ------------------------------------------------------------ | ---- | -| id | - | long | - | 子用户 UID | - | | -| type | - | string | - | 账户类型 | spot:现货账户,point:点卡账户, margin:逐仓杠杆账户,super-margin:全仓杠杆账户 | | -| list | - | object | - | - | - | | - -- list - -| 参数 | 是否必填 | 数据类型 | 长度 | 说明 | 取值范围 | | -| -------- | -------- | -------- | ---- | -------- | --------------------------------- | ---- | -| currency | - | string | - | 币种 | - | | -| type | - | string | - | 账户类型 | trade:交易账户,frozen:冻结账户 | | -| balance | - | decimal | - | 账户余额 | - | | - -## 常见错误码 - -以下是子用户相关接口返回的返回码、返回消息以及说明。 - -| 错误码 | 返回消息 | 说明 | -| ------ | --------------------------------------------------------- | ---------------------------------- | -| 1002 | "forbidden" | 禁止操作,如该账户不允许创建子用户 | -| 1003 | "unauthorized” | 未认证 | -| 2002 | invalid field value | 参数错误 | -| 2014 | number of sub account in the request exceeded valid range | 子账户数量达到限制 | -| 2014 | number of api key in the request exceeded valid range | API Key数量超过限制 | -| 2016 | invalid request while value specified in sub user states | 冻结/解冻失败 | - -# 现货 / 杠杆交易 - -## 简介 - -现货/杠杆交易接口提供了下单、撤单、订单查询、成交明细查询、手续费率查询等功能。 - - - -以下是订单业务相关的字段说明 - -**订单类型 (type)**:订单类型由方向和行为类型组合而成,[方向]-[行为类型] - -方向: - -- buy: 买 -- sell: 卖 - -行为类型: - -- market:市价单,该类型订单仅需指定下单金额或下单数量,不需要指定价格,订单在进入撮合时,会直接与对手方进行成交,直至金额或数量低于最小成交金额或成交数量为止。 -- limit:限价单,该类型订单需指定下单价格,下单数量。 -- limit-maker:只做maker单,即限价挂单,该订单在进入撮合时,只能作为maker进入市场深度,若订单会作为taker成交,则会被直接取消。 -- ioc:立即成交或取消(immediately or cancel),该订单在进入撮合后,若不能直接成交,则会被直接取消(部分成交后,剩余部分也会被取消)。 -- limit-fok: 立即完全成交否则完全取消(fill or kill),该订单在进入撮合后,若不能立即完全成交,则会被完全取消。 -- market-grid:网格交易市价单(暂不支持API下单)。 -- limit-grid:网格交易限价单(暂不支持API下单)。 -- stop-limit:止盈止损单,设置高于或低于市场价格的订单,当订单到达触发价格后,才会正式的进入撮合队列。该类型已被策略委托订单代替,请使用策略委托订单。 - -**订单来源 (source)**: - -- spot-api:现货API交易 -- margin-api:逐仓杠杆API交易 -- super-margin-api:全仓杠杆API交易 -- c2c-margin-api:C2C杠杆API交易 -- grid-trading-sys:网格交易(暂不支持API下单) - -**订单状态 (state)**: - -- created:已创建,该状态订单尚未进入撮合队列。 -- submitted : 已挂单等待成交,该状态订单已进入撮合队列当中。 -- partial-filled : 部分成交,该状态订单在撮合队列当中,订单的部分数量已经被市场成交,等待剩余部分成交。 -- filled : 已成交。该状态订单不在撮合队列中,订单的全部数量已经被市场成交。 -- partial-canceled : 部分成交撤销。该状态订单不在撮合队列中,此状态由partial-filled转化而来,订单数量有部分被成交,但是被撤销。 -- canceling : 撤销中。该状态订单正在被撤销的过程中,因订单最终需在撮合队列中剔除才会被真正撤销,所以此状态为中间过渡态。 -- canceled : 已撤销。该状态订单不在撮合订单中,此状态订单没有任何成交数量,且被成功撤销。 - -**相关ID** - -- order-id : 订单的唯一编号 - -- client-order-id : 客户自定义ID,该ID在下单时传入,与下单成功后返回的order-id对应。 - - client-order-id 时效:对于已完结状态订单,2小时内有效。(其他状态订单有效时间仍为8小时有效)即订单创建超过2h,将无法使用clientOrderId查询已完结状态订单,建议用户通过orderid进行查询。其中,已完结订单状态包括部分成交已撤销、已撤销和完全成交。 - -- 。 允许的字符包括字母(大小写敏感)、数字、下划线 (_)和横线(-),最长64位 - -- match-id : 订单在撮合中的顺序编号 - -- trade-id : 成交的唯一编号 - -## 下单 - -API Key 权限:交易 -限频值;100次/2s - -发送一个新订单到火币以进行撮合。 - -### HTTP 请求 - -- POST ` /v1/order/orders/place` - -> Request: - -```json -{ - "account-id": "100009", - "amount": "10.1", - "price": "100.1", - "source": "api", - "symbol": "ethusdt", - "type": "buy-limit", - "client-order-id": "a0001" -} -``` - -### 请求参数 - -| 参数名称 | 数据类型 | 是否必需 | 默认值 | 描述 | -| --------------- | -------- | -------- | -------- | ------------------------------------------------------------ | -| account-id | string | true | NA | 账户 ID,取值参考 `GET /v1/account/accounts`。现货交易使用 ‘spot’ 账户的 account-id;逐仓杠杆交易,请使用 ‘margin’ 账户的 account-id;全仓杠杆交易,请使用 ‘super-margin’ 账户的 account-id | -| symbol | string | true | NA | 交易对,即btcusdt, ethbtc...(取值参考`GET /v1/common/symbols`) | -| type | string | true | NA | 订单类型,包括buy-market, sell-market, buy-limit, sell-limit, buy-ioc, sell-ioc, buy-limit-maker, sell-limit-maker(说明见下文), buy-stop-limit, sell-stop-limit, buy-limit-fok, sell-limit-fok, buy-stop-limit-fok, sell-stop-limit-fok | -| amount | string | true | NA | 订单交易量(市价买单为订单交易额) | -| price | string | false | NA | 订单价格(对市价单无效) | -| source | string | false | spot-api | 现货交易填写“spot-api”,逐仓杠杆交易填写“margin-api”,全仓杠杆交易填写“super-margin-api”, C2C杠杆交易填写"c2c-margin-api" | -| client-order-id | string | false | NA | 用户自编订单号(最大长度64个字符,须在8小时内保持唯一性) | -| stop-price | string | false | NA | 止盈止损订单触发价格 | -| operator | string | false | NA | 止盈止损订单触发价运算符 gte – greater than and equal (>=), lte – less than and equal (<=) | - - -**buy-limit-maker** - -当“下单价格”>=“市场最低卖出价”,订单提交后,系统将拒绝接受此订单; - -当“下单价格”<“市场最低卖出价”,提交成功后,此订单将被系统接受。 - -**sell-limit-maker** - -当“下单价格”<=“市场最高买入价”,订单提交后,系统将拒绝接受此订单; - -当“下单价格”>“市场最高买入价”,提交成功后,此订单将被系统接受。 - -> Response: - -```json -{ - "data": "59378" -} -``` - -### 响应数据 - -返回的主数据对象是一个对应下单单号的字符串。 - -如client order ID(在8小时内)被复用,节点将返回错误消息invalid.client.order.id。 - -## 批量下单 - -API Key 权限:交易
-限频值(NEW):50次/2s
- -一个批量最多10张订单 - -### HTTP 请求 - -- POST ` /v1/order/batch-orders` - -> Request: - -```json -[ - { - "account-id": "123456", - "price": "7801", - "amount": "0.001", - "symbol": "btcusdt", - "type": "sell-limit", - "client-order-id": "c1" - }, - { - "account-id": "123456", - "price": "7802", - "amount": "0.001", - "symbol": "btcusdt", - "type": "sell-limit", - "client-order-id": "d2" - } -] -``` - -### 请求参数 - -| 参数名称 | 数据类型 | 是否必需 | 默认值 | 描述 | -| --------------- | -------- | -------- | -------- | ------------------------------------------------------------ | -| [{ account-id | string | true | NA | 账户 ID,取值参考 `GET /v1/account/accounts`。现货交易使用 ‘spot’ 账户的 account-id;逐仓杠杆交易,请使用 ‘margin’ 账户的 account-id;全仓杠杆交易,请使用 ‘super-margin’ 账户的 account-id; C2C杠杆交易,请使用borrow账户的account-id | -| symbol | string | true | NA | 交易对,即btcusdt, ethbtc...(取值参考`GET /v1/common/symbols`) | -| type | string | true | NA | 订单类型,包括buy-market, sell-market, buy-limit, sell-limit, buy-ioc, sell-ioc, buy-limit-maker, sell-limit-maker(说明见下文), buy-stop-limit, sell-stop-limit, buy-limit-fok, sell-limit-fok, buy-stop-limit-fok, sell-stop-limit-fok | -| amount | string | true | NA | 订单交易量(市价买单为订单交易额) | -| price | string | false | NA | 订单价格(对市价单无效) | -| source | string | false | spot-api | 现货交易填写“spot-api”,逐仓杠杆交易填写“margin-api”,全仓杠杆交易填写“super-margin-api”, C2C杠杆交易填写"c2c-margin-api" | -| client-order-id | string | false | NA | 用户自编订单号(最大长度64个字符,须在8小时内保持唯一性) | -| stop-price | string | false | NA | 止盈止损订单触发价格 | -| operator }] | string | false | NA | 止盈止损订单触发价运算符 gte – greater than and equal (>=), lte – less than and equal (<=) | - -**buy-limit-maker** - -当“下单价格”>=“市场最低卖出价”,订单提交后,系统将拒绝接受此订单; - -当“下单价格”<“市场最低卖出价”,提交成功后,此订单将被系统接受。 - -**sell-limit-maker** - -当“下单价格”<=“市场最高买入价”,订单提交后,系统将拒绝接受此订单; - -当“下单价格”>“市场最高买入价”,提交成功后,此订单将被系统接受。 - -> Response: - -```json -{ - "status": "ok", - "data": [ - { - "order-id": 61713400772, - "client-order-id": "c1" - }, - { - "order-id": 61713400940, - "client-order-id": "d2" - } - ] -} -``` - -### 响应数据 - -| 字段名称 | 数据类型 | 描述 | -| --------------- | -------- | ------------------------------------ | -| [{ order-id | integer | 订单编号 | -| client-order-id | string | 用户自编订单号(如有) | -| err-code | string | 订单被拒错误码(仅对被拒订单有效) | -| err-msg }] | string | 订单被拒错误信息(仅对被拒订单有效) | - -如client order ID(在8小时内)被复用,节点返回先前订单的order ID及client order ID。 - -## 撤销订单 - -API Key 权限:交易
-限频值(NEW):100次/2s - -此接口发送一个撤销订单的请求。 - - -### HTTP 请求 - -- POST ` /v1/order/orders/{order-id}/submitcancel` - - -### 请求参数 - -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| -------- | -------- | ------ | ------------------ | ------ | -------- | -| order-id | true | string | 订单ID,填在path中 | | | -| symbol | false | string | 交易对,填在URL请求参数中 | | | - -> Success response: - -```json -{ - "data": "59378" -} -``` - -### 响应数据 - -返回的主数据对象是一个对应下单单号的字符串。 - -### 错误码 - -> Failure response: - -```json -{ - "status": "error", - "err-code": "order-orderstate-error", - "err-msg": "订单状态错误", - "order-state":-1 // 当前订单状态 -} -``` - -返回字段列表中,order-state的可能取值包括 - - -| order-state | Description | -| ----------- | ------------------------------------------------------------ | -| -1 | order was already closed in the long past (order state = canceled, partial-canceled, filled, partial-filled) | -| 1 | created | -| 3 | submitted | -| 4 | partial-filled | -| 5 | partial-canceled | -| 6 | filled | -| 7 | canceled | -| 10 | cancelling | - -## 撤销订单(基于client order ID) - -API Key 权限:交易
-限频值(NEW):100次/2s - -此接口基于client-order-id(8小时内有效)发送一个撤销订单的请求。 - - - - - - -### HTTP 请求 - -- POST ` /v1/order/orders/submitCancelClientOrder` - -> Request: - -```json -{ - "client-order-id": "a0001" -} -``` - -### 请求参数 - -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| --------------- | -------- | ------ | ------------------------------------------------------------ | ------ | -------- | -| client-order-id | true | string | 用户自编订单号,必须8小时内已有该订单存在,否则下次下单时不允许用此值 | | | - - -> Response: - -```json -{ - "data": "10" -} -``` -### 响应数据 - -| 字段名称 | 数据类型 | 描述 | -| -------- | -------- | ---------- | -| data | integer | 撤单状态码 | - -| Status Code | Description | -| ----------- | ------------------------------------------------------------ | -| -1 | order was already closed in the long past (order state = canceled, partial-canceled, filled, partial-filled) | -| 0 | client-order-id not found | -| 1 | created | -| 3 | submitted | -| 4 | partial-filled | -| 5 | partial-canceled | -| 6 | filled | -| 7 | canceled | -| 10 | cancelling | - - - -## 自动撤销订单 - -API Key 权限:交易
- -为了防止API用户在发生网络故障或用户端系统故障与火币系统失去联系时,给用户造成意外损失,火币新增自动撤单接口,当用户与火币发生意外断连时,能自动帮用户取消全部委托单,以避免损失,即提供Dead man's switch功能。若开启,在设定的时间数完前,接口没有被再次调用,则用户所有现货委托单将被取消(最大支持撤500单)。 - -### HTTP 请求 - -- POST `/v2/algo-orders/cancel-all-after` - -> Request: - -```json -{ - "timeout": "10" -} -``` - -### 请求参数 - -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| --------------- | -------- | ------ | ----------- | ------ | -------- | -| timeout | true | int | 超时时间(单位:秒),设置建议见附注 | NA | 0或者大于等于5秒 | - - -> 响应示例-开启成功 -Response: - -```json -{ -"code": 200, -"data": [ - { - "currentTime":"1587971400", - "triggerTime":"1587971460" - } -] -} -``` - - -> 响应示例-关闭成功 -Response: - -```json -{ -"code": 200, -"data": [ - { - "currentTime":"1587971400", - "triggerTime":"0" - } -] -} -``` - - -> 响应示例-开启/关闭失败 -Response: - -```json -{ -"code": 2003, -"message": "missing mandatory field" -} -``` -### 响应数据 - -| **参数名称** | **是否必须** | **数据类型** | **描述** | -| ------------- | ------------ | ------------ | ---------------- | -| code | true | int | 状态码 | -| message | false | string | 错误描述(如有) | -| data | true | object | | -| { currentTime | true | long | 当前时间 | -| triggerTime } | true | long | 触发时间 | - - -## 查询当前未成交订单 - -API Key 权限:读取
-限频值(NEW):50次/2s - -查询已提交但是仍未完全成交或未被撤销的订单。 - -### HTTP 请求 - -- GET `/v1/order/openOrders` - -> Request: - -```json -{ - "account-id": "100009", - "symbol": "ethusdt", - "side": "buy" -} -``` - -### 请求参数 - -| 参数名称 | 数据类型 | 是否必需 | 默认值 | 描述 | -| ---------- | -------- | ------------------------------------------------ | ------ | ------------------------------------------------------------ | -| account-id | string | true | NA | 账户 ID,取值参考 `GET /v1/account/accounts`。现货交易使用‘spot’账户的 account-id;逐仓杠杆交易,请使用 ‘margin’ 账户的 account-id;全仓杠杆交易,请使用 ‘super-margin’ 账户的 account-id;c2c杠杆交易,请使用borrow账户的account-id | -| symbol | string | ture | NA | 交易对,即btcusdt, ethbtc...(取值参考`GET /v1/common/symbols`) | -| side | string | false | both | 指定只返回某一个方向的订单,可能的值有: buy, sell. 默认两个方向都返回。 | -| types | string | false | |查询的订单类型组合,使用逗号分割| -| from | string | false | | 查询起始 ID,如果是向后查询,则赋值为上一次查询结果中得到的最后一条id ;如果是向前查询,则赋值为上一次查询结果中得到的第一条id | -| direct | string | false (如字段'from'已设定,此字段'direct'为必填) | | 查询方向,prev 向前;next 向后 | -| size | int | false | 100 | 返回订单的数量,最大值500。 | - -> Response: - -```json -{ - "data": [ - { - "id": 5454937, - "symbol": "ethusdt", - "account-id": 30925, - "amount": "1.000000000000000000", - "price": "0.453000000000000000", - "created-at": 1530604762277, - "type": "sell-limit", - "filled-amount": "0.0", - "filled-cash-amount": "0.0", - "filled-fees": "0.0", - "source": "web", - "state": "submitted" - } - ] -} -``` - -### 响应数据 - -| 字段名称 | 数据类型 | 描述 | -| ------------------ | -------- | ------------------------------------------------------ | -| id | integer | 订单id,无大小顺序,可作为下一次翻页查询请求的from字段 | -| client-order-id | string | 用户自编订单号(所有open订单可返回client-order-id) | -| symbol | string | 交易对, 例如btcusdt, ethbtc | -| price | string | limit order的交易价格 | -| created-at | int | 订单创建的调整为新加坡时间的时间戳,单位毫秒 | -| type | string | 订单类型 | -| filled-amount | string | 订单中已成交部分的数量 | -| filled-cash-amount | string | 订单中已成交部分的总价格 | -| filled-fees | string | 已交交易手续费总额(准确数值请参考matchresults接口) | -| source | string | 订单来源 | -| state | string | 订单状态,包括created, submitted, partial-filled | -| stop-price | string | 止盈止损订单触发价格 | -| operator | string | 止盈止损订单触发价运算符 | - -## 批量撤销所有订单 - -API Key 权限:交易
-限频值(NEW):50次/2s - -此接口发送批量撤销所有(单次最大100个)订单的请求。 - - -### HTTP 请求 - -- POST ` /v1/order/orders/batchCancelOpenOrders` - - -### 请求参数 - -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| ---------- | -------- | ------ | ------------------------------------------------------------ | ------ | ------------------------------------------------- | -| account-id | false | string | 账户ID,取值参考 `GET /v1/account/accounts` | | | -| symbol | false | string | 交易代码列表(最多10 个symbols,多个交易代码间以逗号分隔),btcusdt, ethbtc...(取值参考`/v1/common/symbols`) | all | | -| types | false | string | 订单类型组合,使用逗号分割 | | 所有可能的订单类型(见本章节简介) | -| side | false | string | 主动交易方向 | | “buy”或“sell”,缺省将返回所有符合条件尚未成交订单 | -| size | false | int | 撤销订单的数量 | 100 | [0,100] | - - -> Response: - -```json -{ - "status": "ok", - "data": { - "success-count": 2, - "failed-count": 0, - "next-id": 5454600 - } -} -``` - - -### 响应数据 - - -| 参数名称 | 是否必须 | 数据类型 | 描述 | -| ------------- | -------- | -------- | ---------------------- | -| success-count | true | int | 成功取消的订单数 | -| failed-count | true | int | 取消失败的订单数 | -| next-id | true | long | 下一个可以撤销的订单号,返回-1表示没有可以撤销的订单 | - -## 批量撤销指定订单 - -API Key 权限:交易
-限频值(NEW):50次/2s - -此接口同时为多个订单(基于id)发送取消请求,建议通过order-ids来撤单,比client-order-ids更快更稳定。 - -### HTTP 请求 - -- POST ` /v1/order/orders/batchcancel` - -> Request: - -```json -{ - "client-order-ids": [ - "5983466", "5722939", "5721027", "5719487" - ] -} -``` - -### 请求参数 - -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| ---------------- | -------- | -------- | ------------------------------------------------------------ | ------ | ------------------ | -| order-ids | false | string[] | 订单编号列表(order-ids和client-order-ids必须且只能选一个填写,不超过50张订单),建议通过order-ids来撤单,比client-order-ids更快更稳定 | | 单次不超过50个订单 | -| client-order-ids | false | string[] | 用户自编订单号列表(order-ids和client-order-ids必须且只能选一个填写,不超过50张订单),必须已有该订单存在,否则下次下单时不允许用此值 | | 单次不超过50个订单 | - -> Response: - -```json -{ - "status": "ok", - "data": { - "success": [ - "5983466" - ], - "failed": [ - { - "err-msg": "Incorrect order state", - "order-state": 7, - "order-id": "", - "err-code": "order-orderstate-error", - "client-order-id": "first" - }, - { - "err-msg": "Incorrect order state", - "order-state": 7, - "order-id": "", - "err-code": "order-orderstate-error", - "client-order-id": "second" - }, - { - "err-msg": "The record is not found.", - "order-id": "", - "err-code": "base-not-found", - "client-order-id": "third" - } - ] - } -} -``` - -### 响应数据 - -| 字段名称 | 数据类型 | 描述 | -| --------- | -------- | ------------------------------------------------------------ | -| { success | string[] | 撤单成功订单列表(可为order-id列表或client-order-id列表,以用户请求为准) | -| failed } | string[] | 撤单失败订单列表(可为order-id列表或client-order-id列表,以用户请求为准) | - -撤单失败订单列表 - - -| 字段名称 | 数据类型 | 描述 | -| --------------- | -------- | ------------------------------------------------------------ | -| [{ order-id | string | 订单编号(如用户创建订单时包含order-id,返回中也须包含此字段) | -| client-order-id | string | 用户自编订单号(如用户创建订单时包含client-order-id,返回中也须包含此字段) | -| err-code | string | 订单被拒错误码(仅对被拒订单有效) | -| err-msg | string | 订单被拒错误信息(仅对被拒订单有效) | -| order-state }] | string | 当前订单状态(若有) | - -返回字段列表中,order-state的可能取值包括 - - -| order-state | Description | -| ----------- | ------------------------------------------------------------ | -| -1 | order was already closed in the long past (order state = canceled, partial-canceled, filled, partial-filled) | -| 1 | created | -| 3 | submitted | -| 4 | partial-filled | -| 5 | partial-canceled | -| 6 | filled | -| 7 | canceled | -| 10 | cancelling | - -## 查询订单详情 - -API Key 权限:读取
-限频值(NEW):50次/2s - -此接口返回指定订单的最新状态和详情。通过API创建的订单,撤销超过2小时后无法查询。通过API创建的订单返回order-id,按此order-id查询订单还是返回base-record-invalid是因为系统内部处理有延迟,但是不影响成交。建议您后续重试查询或者通过订阅订单推送WebSocket消息查询。 - -### HTTP 请求 - -- GET `/v1/order/orders/{order-id}` - - -### 请求参数 - -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| -------- | -------- | ------ | ------------------ | ------ | -------- | -| order-id | true | string | 订单ID,填在path中 | | | - - -> Response: - -```json -{ - "data": - { - "id": 59378, - "symbol": "ethusdt", - "account-id": 100009, - "amount": "10.1000000000", - "price": "100.1000000000", - "created-at": 1494901162595, - "type": "buy-limit", - "field-amount": "10.1000000000", - "field-cash-amount": "1011.0100000000", - "field-fees": "0.0202000000", - "finished-at": 1494901400468, - "user-id": 1000, - "source": "api", - "state": "filled", - "canceled-at": 0 - } -} -``` - -### 响应数据 - -| 字段名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ----------------- | -------- | -------- | ------------------------------------------------------------ | ---------------------------------- | -| account-id | true | long | 账户 ID | | -| amount | true | string | 订单数量 | | -| canceled-at | false | long | 订单撤销时间 | | -| created-at | true | long | 订单创建时间 | | -| field-amount | true | string | 已成交数量 | | -| field-cash-amount | true | string | 已成交总金额 | | -| field-fees | true | string | 已成交手续费(准确数值请参考matchresults接口) | | -| finished-at | false | long | 订单变为终结态的时间,不是成交时间,包含“已撤单”状态 | | -| id | true | long | 订单ID | | -| client-order-id | false | string | 用户自编订单号(所有open订单可返回client-order-id(如有);仅7天内(基于订单创建时间)的closed订单(state <> canceled)可返回client-order-id(如有);仅8小时内(基于订单创建时间)的closed订单(state = canceled)可返回client-order-id(如有)) | | -| price | true | string | 订单价格 | | -| source | true | string | 订单来源 | api | -| state | true | string | 订单状态 | 所有可能的订单状态(见本章节简介) | -| symbol | true | string | 交易对 | btcusdt, ethbtc, rcneth ... | -| type | true | string | 订单类型 | 所有可能的订单类型(见本章节简介) | -| stop-price | false | string | 止盈止损订单触发价格 | | -| operator | false | string | 止盈止损订单触发价运算符 | gte,lte | - - -## 查询订单详情(基于client order ID) - -API Key 权限:读取
-限频值(NEW):50次/2s - -此接口返回指定用户自编订单号(8小时内)的订单最新状态和详情。通过API创建的订单,撤销超过2小时后无法查询。建议通过GET `/v1/order/orders/{order-id}`来撤单,比使用clientOrderId更快更稳定 - -### HTTP 请求 - -- GET `/v1/order/orders/getClientOrder` - -### 请求参数 - -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| ------------- | -------- | ------ | -------------- | ------ | -------- | -| clientOrderId | true | string | 用户自编订单号 | | | - -> Response: - -```json -{ - "data": - { - "id": 59378, - "symbol": "ethusdt", - "account-id": 100009, - "amount": "10.1000000000", - "price": "100.1000000000", - "created-at": 1494901162595, - "type": "buy-limit", - "field-amount": "10.1000000000", - "field-cash-amount": "1011.0100000000", - "field-fees": "0.0202000000", - "finished-at": 1494901400468, - "user-id": 1000, - "source": "api", - "state": "filled", - "canceled-at": 0 - } -} -``` - -### 响应数据 - -| 字段名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ----------------- | -------- | -------- | ------------------------------------------------------------ | ---------------------------------- | -| account-id | true | long | 账户 ID | | -| amount | true | string | 订单数量 | | -| canceled-at | false | long | 订单撤销时间 | | -| created-at | true | long | 订单创建时间 | | -| field-amount | true | string | 已成交数量 | | -| field-cash-amount | true | string | 已成交总金额 | | -| field-fees | true | string | 已成交手续费(准确数值请参考matchresults接口) | | -| finished-at | false | long | 订单变为终结态的时间,不是成交时间,包含“已撤单”状态 | | -| id | true | long | 订单ID | | -| client-order-id | false | string | 用户自编订单号(仅8小时内(基于订单创建时间)的订单可被查询,订单状态是终态的2小时内可查询) | | -| price | true | string | 订单价格 | | -| source | true | string | 订单来源 | api | -| state | true | string | 订单状态 | 所有可能的订单状态(见本章节简介) | -| symbol | true | string | 交易对 | btcusdt, ethbtc, rcneth ... | -| type | true | string | 订单类型 | 所有可能的订单类型(见本章节简介) | -| stop-price | false | string | 止盈止损订单触发价格 | | -| operator | false | string | 止盈止损订单触发价运算符 | gte,lte | - -如client order ID不存在,返回如下错误信息 -{ - "status": "error", - "err-code": "base-record-invalid", - "err-msg": "record invalid", - "data": null -} - -## 成交明细 - -API Key 权限:读取
-限频值(NEW):50次/2s - -此接口返回指定订单的成交明细。 - -### HTTP 请求 - -- GET `/v1/order/orders/{order-id}/matchresults` - -### 请求参数 - -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| -------- | -------- | ------ | ------------------ | ------ | -------- | -| order-id | true | string | 订单ID,填在path中 | | | - - -> Response: - -```json -{ - "data": [ - { - "id": 29553, - "order-id": 59378, - "match-id": 59335, - "trade-id": 100282808529, - "symbol": "ethusdt", - "type": "buy-limit", - "source": "api", - "price": "100.1000000000", - "filled-amount": "9.1155000000", - "filled-fees": "0.0182310000", - "created-at": 1494901400435, - "role": "maker", - "filled-points": "0.0", - “fee-deduct-state”:"done", - "fee-deduct-currency": "" - } - ... - ] -} -``` - -### 响应数据 - - -| 字段名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ------------------- | -------- | -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| created-at | true | long | 该成交记录创建的时间戳(略晚于成交时间) | | -| filled-amount | true | string | 成交数量 | | -| filled-fees | true | string | 交易手续费(正值)或交易返佣金(负值) | | -| fee-currency | true | string | 交易手续费或交易返佣币种(买单的交易手续费币种为基础币种,卖单的交易手续费币种为计价币种;买单的交易返佣币种为计价币种,卖单的交易返佣币种为基础币种) | | -| id | true | long | 订单成交记录ID | | -| match-id | true | long | 撮合ID,订单在撮合中执行的顺序ID | | -| order-id | true | long | 订单ID,成交所属订单的ID | | -| trade-id | false | integer | Unique trade ID (NEW)唯一成交编号,成交时产生的唯一编号ID | | -| price | true | string | 成交价格 | | -| source | true | string | 订单来源 | api | -| symbol | true | string | 交易对 | btcusdt, ethbtc, rcneth ... | -| type | true | string | 订单类型 | 所有可能的订单类型(见本章节简介) | -| role | true | string | 成交角色 | maker,taker | -| filled-points | true | string | 抵扣数量(可为ht或hbpoint) | | -| fee-deduct-currency | true | string | 抵扣类型 | 如果为空,代表扣除的手续费是原币;如果为"ht",代表抵扣手续费的是HT;如果为"hbpoint",代表抵扣手续费的是点卡 | -| fee-deduct-state | true | string | 抵扣状态 | 抵扣中:ongoing,抵扣完成:done | - -注:
-- filled-fees中的交易返佣金额可能不会实时到账。
- -## 搜索历史订单 - -API Key 权限:读取
-限频值(NEW):50次/2s - -此接口基于搜索条件查询历史订单。通过API创建的订单,撤销超过2小时后无法查询。 - -用户可选择以“时间范围”查询历史订单,以替代原先的以“日期范围“查询方式。 - -- 如用户填写start-time AND/OR end-time查询历史订单,服务器将按照用户指定的“时间范围“查询并返回,并忽略start-date/end-date参数。此方式的查询窗口大小限定为最大48小时,窗口平移范围为最近180天。 - -- 如用户不填写start-time/end-time参数,而填写start-date AND/OR end-date查询历史订单,服务器将按照用户指定的“日期范围“查询并返回。此方式的查询窗口大小限定为最大2天,窗口平移范围为最近180天。 - -- 如用户既不填写start-time/end-time参数,也不填写start-date/end-date参数,服务器将缺省以当前时间为end-time,返回最近48小时内的历史订单。 - -火币Global建议用户以“时间范围“查询历史订单。未来,火币Global将下线以”日期范围“查询历史订单的方式,并另行通知。 - - -### HTTP 请求 - -- GET `/v1/order/orders` - -> Request: - -```json -{ - "account-id": "100009", - "amount": "10.1", - "price": "100.1", - "source": "api", - "symbol": "ethusdt", - "type": "buy-limit" -} -``` - - -### 请求参数 - -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| ---------- | -------- | ------ | ------------------------------------------------------------ | --------------------------- | ------------------------------------------------------------ | -| symbol | true | string | 交易对 | | btcusdt, ethbtc...(取值参考`GET /v1/common/symbols`) | -| types | false | string | 查询的订单类型组合,使用逗号分割 | | 所有可能的订单类型(见本章节简介) | -| start-time | false | long | 查询开始时间, 时间格式UTC time in millisecond。 以订单生成时间进行查询 | -48h 查询结束时间的前48小时 | 取值范围 [((end-time) – 48h), (end-time)] ,查询窗口最大为48小时,窗口平移范围为最近180天,已完全撤销的历史订单的查询窗口平移范围只有最近2小时(state="canceled") | -| end-time | false | long | 查询结束时间, 时间格式UTC time in millisecond。 以订单生成时间进行查询 | present | 取值范围 [(present-179d), present] ,查询窗口最大为48小时,窗口平移范围为最近180天,已完全撤销的历史订单的查询窗口平移范围只有最近2小时(state="canceled") | -| states | true | string | 查询的订单状态组合,使用','分割 | | 所有可能的订单状态(见本章节简介) | -| from | false | string | 查询起始 ID | | 如果是向后查询,则赋值为上一次查询结果中得到的最后一条id ;如果是向前查询,则赋值为上一次查询结果中得到的第一条id | -| direct | false | string | 查询方向 | | prev 向前;next 向后 | -| size | false | string | 查询记录大小 | 100 | [1, 100] | - - -> Response: - -```json -{ - "data": [ - { - "id": 59378, - "symbol": "ethusdt", - "account-id": 100009, - "amount": "10.1000000000", - "price": "100.1000000000", - "created-at": 1494901162595, - "type": "buy-limit", - "field-amount": "10.1000000000", - "field-cash-amount": "1011.0100000000", - "field-fees": "0.0202000000", - "finished-at": 1494901400468, - "user-id": 1000, - "source": "api", - "state": "filled", - "canceled-at": 0 - } - ... - ] -} -``` - -### 响应数据 - -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ----------------- | -------- | -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| account-id | true | long | 账户 ID | | -| amount | true | string | 订单数量 | | -| canceled-at | false | long | 接到撤单申请的时间 | | -| created-at | true | long | 订单创建时间 | | -| field-amount | true | string | 已成交数量 | | -| field-cash-amount | true | string | 已成交总金额 | | -| field-fees | true | string | 已成交手续费(准确数值请参考matchresults接口) | | -| finished-at | false | long | 最后成交时间 | | -| id | true | long | 订单ID,无大小顺序,可作为下一次翻页查询请求的from字段 | | -| client-order-id | false | string | 用户自编订单号(所有open订单可返回client-order-id(如有);仅7天内(基于订单创建时间)的closed订单(state <> canceled)可返回client-order-id(如有);仅8小时内(基于订单创建时间)的closed订单(state = canceled)可被查询) | | -| price | true | string | 订单价格 | | -| source | true | string | 订单来源 | 所有可能的订单来源(见本章节简介) | -| state | true | string | 订单状态 | 所有可能的订单状态(见本章节简介) | -| symbol | true | string | 交易对 | btcusdt, ethbtc, rcneth ... | -| type | true | string | 订单类型 | 所有可能的订单类型(见本章节简介) | -| stop-price | false | string | 止盈止损订单触发价格 | | -| operator | false | string | 止盈止损订单触发价运算符 | gte,lte | - -### start-date, end-date相关错误码 - -| 错误码 | 对应错误场景 | -| ------------------ | ------------------------------------------------------------ | -| invalid_interval | start date小于end date; 或者 start date 与end date之间的时间间隔大于2天 | -| invalid_start_date | start date是一个180天之前的日期;或者start date是一个未来的日期 | -| invalid_end_date | end date 是一个180天之前的日期;或者end date是一个未来的日期 | - -## 搜索最近48小时内历史订单 - -API Key 权限:读取
-限频值(NEW):20次/2s - -此接口基于搜索条件查询最近48小时内历史订单。通过API创建的订单,撤销超过2小时后无法查询。 - -### HTTP 请求 - -- GET `/v1/order/history` - -> Request: - -```json -{ - "symbol": "btcusdt", - "start-time": "1556417645419", - "end-time": "1556533539282", - "direct": "prev", - "size": "10" -} -``` - -### 请求参数 - -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| ---------- | -------- | ------ | ------------------------------------------------------------ | -------------- | ------------------------------------------------------ | -| symbol | false | string | 交易对 | all | btcusdt, ethbtc...(取值参考`GET /v1/common/symbols`) | -| start-time | false | long | 查询起始时间(含) | 48小时前的时刻 | UTC time in millisecond | -| end-time | false | long | 查询结束时间(含) | 查询时刻 | UTC time in millisecond | -| direct | false | string | 订单查询方向(注:仅在检索出的总条目数量超出size字段限定时起作用;如果检索出的总条目数量在size 字段限定内,direct 字段不起作用。) | next | prev 向前, next 向后 | -| size | false | int | 每次返回条目数量 | 100 | [10,1000] | - -> Response: - -```json -{ - "status": "ok", - "data": [ - { - "id": 31215214553, - "symbol": "btcusdt", - "account-id": 4717043, - "amount": "1.000000000000000000", - "price": "1.000000000000000000", - "created-at": 1556533539282, - "type": "buy-limit", - "field-amount": "0.0", - "field-cash-amount": "0.0", - "field-fees": "0.0", - "finished-at": 1556533568953, - "source": "web", - "state": "canceled", - "canceled-at": 1556533568911 - } - ] -} -``` - -### 响应数据 - -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ----------------- | -------- | -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| {account-id | true | long | 账户 ID | | -| amount | true | string | 订单数量 | | -| canceled-at | false | long | 接到撤单申请的时间 | | -| created-at | true | long | 订单创建时间 | | -| field-amount | true | string | 已成交数量 | | -| field-cash-amount | true | string | 已成交总金额 | | -| field-fees | true | string | 已成交手续费(准确数值请参考matchresults接口) | | -| finished-at | false | long | 最后成交时间 | | -| id | true | long | 订单ID,无大小顺序 | | -| client-order-id | false | string | 用户自编订单号(仅48小时内(基于订单创建时间)的closed订单(state <> canceled)可返回client-order-id(如有);仅8小时内(基于订单创建时间)的closed订单(state = canceled)可被查询) | | -| price | true | string | 订单价格 | | -| source | true | string | 订单来源 | 所有可能的订单来源(见本章节简介) | -| state | true | string | 订单状态 | partial-canceled 部分成交撤销, filled 完全成交, canceled 已撤销 | -| symbol | true | string | 交易对 | btcusdt, ethbtc, rcneth ... | -| stop-price | false | string | 止盈止损订单触发价格 | | -| operator | false | string | 止盈止损订单触发价运算符 | gte,lte | -| type} | true | string | 订单类型 | 所有可能的订单类型(见本章节简介) | -| next-time | false | long | 下一查询起始时间(当请求字段”direct”为”prev”时有效), 下一查询结束时间(当请求字段”direct”为”next”时有效)。注:仅在检索出的总条目数量超出size字段限定时,此返回字段存在。 | UTC time in millisecond | - - -## 当前和历史成交 - -API Key 权限:读取
-限频值(NEW):20次/2s - -此接口基于搜索条件查询当前和历史成交记录。 - -### HTTP 请求 - -- GET `/v1/order/matchresults` - - -### 请求参数 - -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| ---------- | -------- | ------ | ------------------------------------------------------------ | --------------------------- | ------------------------------------------------------------ | -| symbol | true | string | 交易对 | N/A | btcusdt, ethbtc...(取值参考`GET /v1/common/symbols`) | -| types | false | string | 查询的订单类型组合,使用','分割 | all | 所有可能的订单类型(见本章节简介) | -| start-time | false | long | 查询开始时间, 时间格式UTC time in millisecond。 以订单生成时间进行查询 | -48h 查询结束时间的前48小时 | 取值范围 [((end-time) – 48h), (end-time)] ,查询窗口最大为48小时,窗口平移范围为最近120天。 | -| end-time | false | long | 查询结束时间, 时间格式UTC time in millisecond。 以订单生成时间进行查询 | present | 取值范围 [(present-120d), present] ,查询窗口最大为48小时,窗口平移范围为最近120天。 | -| from | false | string | 查询起始 ID | N/A | 如果是向后查询,则赋值为上一次查询结果中得到的最后一条id(不是trade-id) ;如果是向前查询,则赋值为上一次查询结果中得到的第一条id(不是trade-id) | -| direct | false | string | 查询方向 | next | prev 向前;next 向后 | -| size | false | string | 查询记录大小 | 100 | [1,500] | - -> Response: - -```json -{ - "data": [ - { - "id": 29553, - "order-id": 59378, - "match-id": 59335, - "symbol": "ethusdt", - "type": "buy-limit", - "source": "api", - "price": "100.1000000000", - "filled-amount": "9.1155000000", - "filled-fees": "0.0182310000", - "created-at": 1494901400435, - "trade-id": 100282808529, - "role": taker, - "filled-points": "0.0", - “fee-deduct-state”:"done", - "fee-deduct-currency": "" - } - ... - ] -} -``` - -### 响应数据 - - -| 参数名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ------------------- | -------- | -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| created-at | true | long | 该成交记录创建的时间戳(略晚于成交时间) | | -| filled-amount | true | string | 成交数量 | | -| filled-fees | true | string | 交易手续费(正值)或交易返佣(负值) | | -| fee-currency | true | string | 交易手续费或交易返佣币种(买单的交易手续费币种为基础币种,卖单的交易手续费币种为计价币种;买单的交易返佣币种为计价币种,卖单的交易返佣币种为基础币种) | | -| id | true | long | 订单成交记录 ID,无大小顺序,可作为下一次翻页查询请求的from字段 | | -| match-id | true | long | 撮合 ID | | -| order-id | true | long | 订单 ID | | -| trade-id | false | integer | 唯一成交编号 | | -| price | true | string | 成交价格 | | -| source | true | string | 订单来源 | api | -| symbol | true | string | 交易对 | btcusdt, ethbtc, rcneth ... | -| type | true | string | 订单类型 | 所有可能的订单类型(见本章节简介) | -| role | true | string | 成交角色 | maker,taker | -| filled-points | true | string | 抵扣数量(可为ht或hbpoint) | | -| fee-deduct-currency | true | string | 抵扣类型 | ht,hbpoint | -| fee-deduct-state | true | string | 抵扣状态 | 抵扣中:ongoing,抵扣完成:done | - -注:
-- filled-fees中的交易返佣金额可能不会实时到账;
- -### start-date, end-date相关错误码 - -| 错误码 | 对应错误场景 | -| ------------------ | ------------------------------------------------------------ | -| invalid_interval | start date小于end date; 或者 start date 与end date之间的时间间隔大于2天 | -| invalid_start_date | start date是一个61天之前的日期;或者start date是一个未来的日期 | -| invalid_end_date | end date 是一个61天之前的日期;或者end date是一个未来的日期 | - - -## 获取用户当前手续费率 - -Api用户查询交易对费率,一次限制最多查10个交易对,子用户的费率和母用户保持一致 - -API Key 权限:读取 - -```shell -curl "https://api.huobi.pro/v2/reference/transact-fee-rate?symbols=btcusdt,ethusdt,ltcusdt" -``` - -### HTTP 请求 - -- GET `/v2/reference/transact-fee-rate` - -### 请求参数 - -| 参数 | 数据类型 | 是否必须 | 默认值 | 描述 | 取值范围 | -| ------- | -------- | -------- | ------ | ------------------------ | ------------------------------------------------------- | -| symbols | string | true | NA | 交易对,可多填,逗号分隔 | btcusdt, ethbtc...(取值参考`GET /v1/common/symbols`)> | - -> Response: - -```json -{ - "code": "200", - "data": [ - { - "symbol": "btcusdt", - "makerFeeRate":"0.002", - "takerFeeRate":"0.002", - "actualMakerRate": "0.002", - "actualTakerRate":"0.002 - }, - { - "symbol": "ethusdt", - "makerFeeRate":"0.002", - "takerFeeRate":"0.002", - "actualMakerRate": "0.002", - "actualTakerRate":"0.002 - }, - { - "symbol": "ltcusdt", - "makerFeeRate":"0.002", - "takerFeeRate":"0.002", - "actualMakerRate": "0.002", - "actualTakerRate":"0.002 - } - ] -} -``` -### 响应数据 - -| | 字段名称 | 数据类型 | 描述 | | -| ---- | ----------------- | -------- | ------------------------------------------------------------ | ---- | -| | code | integer | 状态码 | | -| | message | string | 错误描述(如有) | | -| | data | object | | | -| | { symbol | string | 交易代码 | | -| | makerFeeRate | string | 基础费率 - 被动方,如适用交易手续费返佣,返回返佣费率(负值) | | -| | takerFeeRate | string | 基础费率 - 主动方 | | -| | actualMakerRate | string | 抵扣后费率 - 被动方,如不适用抵扣或未启用抵扣,返回基础费率;如适用交易手续费返佣,返回返佣费率(负值) | | -| | actualTakerRate } | string | 抵扣后费率 – 主动方,如不适用抵扣或未启用抵扣,返回基础费率 | | - -注:
-- 如makerFeeRate/actualMakerRate为正值,该字段意为交易手续费率;
-- 如makerFeeRate/actualMakerRate为负值,该字段意为交易返佣费率。
- -## 常见错误码 - -以下是交易相关接口返回的返回码以及说明。 - -| 返回码 | 说明 | -| ------------------------------------------------------------ | ------------------------------------------------------------ | -| base-argument-unsupported | 某参数不支持,请检查参数 | -| base-system-error | 系统错误,如果是撤单:缓存中查不到订单状态,该订单无法撤单;如果是下单:订单入缓存失败,请再次尝试 | -| login-required | url中没有Signature参数或找不到此用户(key与账户id不对应等情况) | -| parameter-required | 止盈止损订单缺少参数 stop-price或operator | -| base-record-invalid | 暂时未找到数据,请稍后重试 | -| order-amount-over-limit | 订单数量超出限额 | -| base-symbol-trade-disabled | 该交易对被禁止交易 | -| base-operation-forbidden | 用户不在白名单内或该币种不允许OTC交易等禁止行为 | -| account-get-accounts-inexistent-error | 该账户在该用户下不存在 | -| account-account-id-inexistent | 该账户不存在 | -| operation-forbidden-for-fl-account-state | 账户爆仓状态下禁止订单操作 | -| sub-user-auth-required | 子用户未开通逐仓杠杆权限 | -| order-disabled | 交易对暂停,无法下单 | -| cancel-disabled | 交易对暂停,无法撤单 | -| order-invalid-price | 下单价格非法(如市价单不能有价格,或限价单价格超过市场价10%) | -| order-accountbalance-error | 账户余额不足 | -| order-limitorder-price-min-error | 卖出价格不能低于指定价格 | -| order-limitorder-price-max-error | 买入价格不能高于指定价格 | -| order-limitorder-amount-min-error | 下单数量不能低于指定数量 | -| order-limitorder-amount-max-error | 下单数量不能高于指定数量 | -| order-etp-nav-price-min-error | 下单价格不能低于净值的指定比率 | -| order-etp-nav-price-max-error | 下单价格不能高于净值等指定比率 | -| order-orderprice-precision-error | 交易价格精度错误 | -| order-orderamount-precision-error | 交易数额精度错误 | -| order-value-min-error | 订单交易额不能低于指定额度 | -| order-marketorder-amount-min-error | 卖出数量不能低于指定数量 | -| order-marketorder-amount-buy-max-error | 市价单买入额度不能高于指定额度 | -| order-marketorder-amount-sell-max-error | 市价单卖出数量不能高于指定数量 | -| order-holding-limit-failed | 下单超出该币种的持仓限额 | -| order-type-invalid | 订单类型非法 | -| order-orderstate-error | 订单状态错误 | -| order-date-limit-error | 查询时间不能超过系统限制 | -| order-source-invalid | 订单来源非法 | -| order-update-error | 更新数据错误 | -| order-fl-cancellation-is-disallowed | 禁止撤销爆仓单 | -| operation-forbidden-for-fl-account-state | 账户爆仓状态下禁止订单操作 | -| operation-forbidden-for-lock-account-state | 账户lock状态下禁止订单操作或c2c借款账户被禁止下撤单 | -| fl-order-already-existed | 爆仓单已经存在 而且未成交 | -| order-user-cancel-forbidden | 订单类型为IOC或FOK 不允许撤单 | -| account-state-invalid | 不支持的爆仓账户状态 | -| order-price-greater-than-limit | 下单价格高于开盘前下单限制价格,请重新下单 | -| order-price-less-than-limit | 下单价格低于开盘前下单限制价格,请重新下单 | -| order-stop-order-hit-trigger | 止盈止损单下单被当前价触发 | -| market-orders-not-support-during-limit-price-trading | 限时下单不支持市价单 | -| price-exceeds-the-protective-price-during-limit-price-trading | 限价时间内价格超出保护价 | -| invalid-client-order-id | client order id 在最近的下单或撤单参数中已被使用 | -| invalid-interval | 查询起止窗口设置错误 | -| invalid-start-date | 查询起始日期含非法取值 | -| invalid-end-date | 查询起始日期含非法取值 | -| invalid-start-time | 查询起始时间含非法取值 | -| invalid-end-time | 查询起始时间含非法取值 | -| validation-constraints-required | 指定的必填参数缺失 | -| symbol-not-support | 交易对不支持,全仓杠杆或c2c | -| not-found | 撤单时订单不存在 | -| base-not-found | 未找到记录 | -| base_record_invalid | 订单不存在 (传错订单ID) | -| dw_cancel_withdraw_failed | 取消失败,订单状态错误 | -| base_update_error | 内部系统错误 | - -## 常见问题 - -### Q1:client-order-id是什么? -A: client-order-id作为下单请求标识的一个参数,类型为字符串,长度为64。 此id为用户自己生成,8小时内有效。如果是终态订单仅2小时有效。 - -### Q2:如何获取下单数量、金额、小数限制、精度的信息? -A: 可使用 Rest API `GET /v1/common/symbols` 获取相关币对信息, 下单时注意最小下单数量和最小下单金额的区别。 - -常见返回错误如下: - -- order-value-min-error: 下单金额小于最小交易额 -- order-orderprice-precision-error : 限价单价格精度错误 -- order-orderamount-precision-error : 下单数量精度错误 -- order-limitorder-price-max-error : 限价单价格高于限价阈值 -- order-limitorder-price-min-error : 限价单价格低于限价阈值 -- order-limitorder-amount-max-error : 限价单数量高于限价阈值 -- order-limitorder-amount-min-error : 限价单数量低于限价阈值 - -### Q3: 为什么收到订单成功成交的消息后再次进行下单,返回余额不足? -A:为保证订单的及时送达以及低延时, 订单推送的结果是在撮合后直接推送,此时订单可能并未完成资产的清算。 - -建议使用以下方式保证资金可以正确下单: - -1. 结合资产推送主题`accounts`同步接收资产变更的消息,确保资金已经完成清算。 - -2. 收到订单推送消息时,使用Rest接口调用账户余额,验证账户资金是否足够。 - -3. 账户中保留相对充足的资金余额。 - -### Q4: 成交明细里的filled-fees和filled-points有什么区别? -A: 成交中的成交手续费分为普通手续费以及抵扣手续费两种类型,两种类型不会同时存在。 - -1. 普通手续费表示,在成交时,未开启HT抵扣、点卡抵扣,使用原币进行手续费扣除。例如:在BTCUSDT币种对下购买BTC,filled-fees字段不为空,表示扣除了普通手续费,单位是BTC。 - -2. 抵扣手续费表示,在成交时,开启了HT抵扣或点卡抵扣,使用HT或点卡进行手续费的抵扣。例如BTCUSDT币种对下购买BTC,HT\点卡充足时,filled-fees为空,filled-points不为空,表示扣除了HT或点卡作为手续费,扣除单位需参考fee-deduct-currency字段 - -### Q5: 成交明细中match-id和trade-id有什么区别? -A: match-id表示订单在撮合中的顺序号,trade-id表示成交时的序号, 一个match-id可能有多个trade-id(成交时),也可能没有trade-id(创建订单、撤销订单) - -### Q6: 为什么基于当前盘口买一或者卖一价格进行下单触发了下单限价错误? -A: 当前火币有基于最新成交价上下一定幅度的限价保护,对流动性不好的币,基于盘口数据下单可能会触发限价保护。建议基于ws推送的成交价+盘口数据信息进行下单 - -### Q7: 如何获取杠杆类交易的币种对? -A: 您可以根据` GET /v1/common/symbols`接口返回数据中的字段区分。leverage-ratio代表逐仓杠杆倍数。super-magin-leverage-ratio代表支持全仓杠杆倍数。如果值为0,表明不支持杠杆交易。 - -# 策略委托 - -## 简介 - -策略委托,目前仅包括计划委托及追踪委托。与现有止盈止损订单相比,计划委托/追踪委托有以下显著不同 –
特别说明,如遇行情或其他极端情况,策略委托单可能会延迟触发。 - -1) 计划委托/追踪委托被创建后,未触发前,交易所将不会冻结委托保证金。仅当计划委托成功触发后,交易所才会冻结该委托的保证金。
-2) 计划委托支持限价单和市价单类型,追踪委托仅支持市价单。
-3) 追踪委托是一种更高级的计划委托。通常的计划委托仅可设置触发价一个条件,当市场最新价格达到触发价时,该订单即被送入撮合。追踪委托在计划委托的基础上增加了一个设定条件,即回调幅度。当市场最新价达到设定的触发价时,该追踪委托并不会被送入撮合,而是继续等待市场价格回转出现。当市场价格回转幅度达到设定的回调幅度时,该追踪委托才会被送入撮合。火币Global支持用户设定的回调幅度范围为0.1%~5%。
- - - - -## 策略委托下单 - -POST /v2/algo-orders
-API Key 权限:交易
-限频值(NEW):20次/2秒
-仅可通过此节点下单策略委托,不可通过现货/杠杆交易相关接口下单策略委托
- -### 请求参数 -| 名称 | 类型 | 是否必需 | 默认值| 描述 | 取值范围 | -| ----- | ----- | ------ | ---- | ------ | ---- | -| accountId | integer | TRUE | | 账户编号 |当前仅支持spot账户ID、margin账户ID、super-margin账户ID,暂不支持c2c-margin账户ID | -| symbol | string | TRUE | | 交易代码 | | -| orderPrice | string | FALSE | | 订单价格(对市价单无效) | | -| orderSide | string | TRUE | | 订单方向 | buy,sell | -| orderSize | string | FALSE | | 订单数量(对市价买单无效) | | -| orderValue | string | FALSE | | 订单金额(仅对市价买单有效) | | -| timeInForce | string | FALSE | gtc for orderType=limit; ioc for orderType=market | 订单有效期 | gtc(对orderType=market无效),boc(对orderType=market无效),ioc,fok(对orderType=market无效) | -| orderType | string | TRUE | | 订单类型 | limit,market | -| clientOrderId | string | TRUE | | 用户自编订单号(最长64位) | | -| stopPrice | string | TRUE | | 触发价 | | -| trailingRate | string | FALSE | | 回调幅度(仅对追踪委托有效) | [0.001,0.050] | - -注:
-• orderPrice与stopPrice的偏离率不能超出交易所对该币对的价格限制(百分比),例如,当交易所限定,限价买单的订单价格不能高于市价的110%时,该限制比率也同样适用于orderPrice与stopPrice之比。
-• 用户须保证策略委托在触发时,其clientOrderId不与该用户的其它(8小时内)订单重复,否则,会导致触发失败。
-• 用户须保证相关账户(accountId)中存有足够资金作为委托保证金,否则将导致策略委托触发时校验失败。
-• timeInForce字段中各枚举值含义:gtc - good till cancel (除非用户主动撤销否则一直有效),boc - book or cancel(即post only,或称book only,除非成功挂单否则自动撤销),ioc - immediate or cancel(立即成交剩余部分自动撤销),fok - fill or kill(立即全部成交否则全部自动撤销)
- -> Response - -```json -{ - "code": 200, - "data": { - "clientOrderId": "a001" - } -} -``` - -### 响应数据 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| code | integer | TRUE |状态码 | -| message | string | FALSE |错误描述(如有) | -| data | object | TRUE | | -| { clientOrderId } | string | TRUE |用户自编订单号 | - -## 策略委托(触发前)撤单 - -POST /v2/algo-orders/cancellation
-API Key 权限:交易
-限频值(NEW):20次/2秒
-单次请求最多批量撤销50张订单
-如需撤销已成功触发的订单,须通过现货/杠杆交易相关接口完成
-如需撤销未触发的订单,仅可通过此节点撤销,不可通过现货/杠杆交易相关接口撤销
- -### 请求参数 -| 名称 | 类型 | 是否必需 | 默认值| 描述 | 取值范围 | -| ----- | ----- | ------ | ---- | ------ | ---- | -| clientOrderIds | string[] | TRUE | | 用户自编订单号(可多填,以逗号分隔) | | - -> Response - -```json -{ - "code": 200, - "data": { - "accepted": [ - "a001" - ], - "rejected": [] - } -} -``` - -### 响应数据 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| code | integer | TRUE |状态码 | -| message | string | FALSE |错误描述(如有) | -| data | object | TRUE |按用户请求顺序排列 | -| { accepted | string[] | FALSE |已接受订单clientOrderId列表 | -| rejected } | string[] | TRUE |已拒绝订单clientOrderId列表 | - -## 查询未触发OPEN策略委托 - -GET /v2/algo-orders/opening
-API Key 权限:读取
-限频值(NEW):20次/2秒
-以orderOrigTime检索
-未触发OPEN订单,指的是已成功下单,但尚未触发,订单状态orderStatus为created的订单
-未触发OPEN订单,可通过此节点查询,但不可通过现货/杠杆交易相关接口查询
- -### 请求参数 -| 名称 | 类型 | 是否必需 | 默认值| 描述 | 取值范围 | -| ----- | ----- | ------ | ---- | ------ | ---- | -| accountId | integer | FALSE | all | 账户编号 | | -| symbol | string | FALSE | all | 交易代码 | | -| orderSide | string | FALSE | all | 订单方向 | buy,sell | -| orderType | string | FALSE | all | 订单类型 | limit,market | -| sort | string | FALSE | desc | 检索方向 |asc - 由远及近, desc - 由近及远 | -| limit | integer | FALSE | 100 | 单页最大返回条目数量 |[1,500] | -| fromId | long | FALSE | | 起始编号(仅在下页查询时有效) | | - -> Response - -```json -{ - "code": 200, - "data": [ - { - "lastActTime": 1593235832976, - "orderOrigTime": 1593235832937, - "symbol": "btcusdt", - "orderSize": "0.001", - "stopPrice": "5001", - "accountId": 5260185, - "source": "api", - "clientOrderId": "a001", - "orderSide": "buy", - "orderType": "limit", - "timeInForce": "gtc", - "orderPrice": "5000", - "orderStatus": "created" - } - ] -} -``` - -### 响应数据 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| code | integer | TRUE |状态码 | -| message | string | FALSE |错误描述(如有) | -| data | object | TRUE |按用户请求参数sort指定顺序排列 | -| { accountId | integer | TRUE |账户编号 | -| source | string | TRUE |订单来源(api,web,ios,android,mac,windows,sys) | -| clientOrderId | string | TRUE |用户自编订单号 | -| symbol | string | TRUE |交易代码 | -| orderPrice | string | TRUE |订单价格(对市价单无效) | -| orderSize | string | FALSE |订单数量(对市价买单无效) | -| orderValue | string | FALSE |订单金额(仅对市价买单有效) | -| orderSide | string | TRUE |订单方向 | -| timeInForce | string | TRUE |订单有效期| -| orderType | string | TRUE |订单类型 | -| stopPrice | string | TRUE |触发价 | -| trailingRate | string | FALSE | 回调幅度(仅对追踪委托有效) | -| orderOrigTime | long | TRUE |订单创建时间 | -| lastActTime | long | TRUE |订单最近更新时间 | -| orderStatus } | string | TRUE |订单状态(created) | -| nextId | long | FALSE |下页起始编号(仅在查询结果需要分页返回时传此字段) | - -## 查询策略委托历史 - -GET /v2/algo-orders/history
-API Key 权限:读取
-限频值(NEW):20次/2秒
-以orderOrigTime检索
-历史终态订单包括,触发前被主动撤销的策略委托(orderStatus=canceled),触发失败的策略委托(orderStatus=rejected),触发成功的策略委托(orderStatus=triggered)。
-如需查询已成功触发订单的后续状态,须通过现货/杠杆交易相关接口完成
-触发前被主动撤销的策略委托及触发失败的策略委托,可通过此节点查询,但不可通过现货/杠杆交易相关接口查询
- -### 请求参数 -| 名称 | 类型 | 是否必需 | 默认值| 描述 | 取值范围 | -| ----- | ----- | ------ | ---- | ------ | ---- | -| accountId | integer | FALSE | all | 账户编号 | | -| symbol | string | TRUE | | 交易代码 | | -| orderSide | string | FALSE | all | 订单方向 | buy,sell | -| orderType | string | FALSE | all | 订单类型 | limit,market | -| orderStatus | string | TRUE | | 订单状态 | canceled,rejected,triggered | -| startTime | long | FALSE | | 远点时间 || -| endTime | long | FALSE |当前时间 | 近点时间 | | -| sort | string | FALSE | desc | 检索方向 |asc - 由远及近, desc - 由近及远 | -| limit | integer | FALSE | 100 | 单页最大返回条目数量 |[1,500] | -| fromId | long | FALSE | | 起始编号(仅在下页查询时有效) | | - -> Response - -```json -{ - "code": 200, - "data": [ - { - "orderOrigTime": 1593235832937, - "lastActTime": 1593236344401, - "symbol": "btcusdt", - "source": "api", - "orderSide": "buy", - "orderType": "limit", - "timeInForce": "gtc", - "clientOrderId": "a001", - "accountId": 5260185, - "orderPrice": "5000", - "orderSize": "0.001", - "stopPrice": "5001", - "orderStatus": "canceled" - } - ] -} -``` - -### 响应数据 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| code | integer | TRUE |状态码 | -| message | string | FALSE |错误描述(如有) | -| data | object | TRUE |按用户请求参数sort指定顺序排列 | -| { accountId | integer | TRUE |账户编号 | -| source | string | TRUE |订单来源 | -| clientOrderId | string | TRUE |用户自编订单号 | -| orderId | string | FALSE |订单编号(仅对orderStatus=triggered有效) | -| symbol | string | TRUE |交易代码 | -| orderPrice | string | TRUE |订单价格(对市价单无效) | -| orderSize | string | FALSE |订单数量(对市价买单无效) | -| orderValue | string | FALSE |订单金额(仅对市价买单有效) | -| orderSide | string | TRUE |订单方向 | -| timeInForce | string | TRUE |订单有效期| -| orderType | string | TRUE |订单类型 | -| stopPrice | string | TRUE |触发价 | -| trailingRate | string | FALSE | 回调幅度(仅对追踪委托有效) | -| orderOrigTime | long | TRUE |订单创建时间 | -| lastActTime | long | TRUE |订单最近更新时间 | -| orderCreateTime | long | FALSE |订单触发时间(仅对orderStatus=triggered有效) | -| orderStatus | string | TRUE |订单状态(triggered,canceled,rejected) | -| errCode | integer | FALSE |订单被拒状态码(仅对orderStatus=rejected有效) | -| errMessage } | string | FALSE |订单被拒错误消息(仅对orderStatus=rejected有效) | -| nextId | long | FALSE |下页起始编号(仅在查询结果需要分页返回时传此字段) | - -## 查询特定策略委托 - -GET /v2/algo-orders/specific
-API Key 权限:读取
-限频值(NEW):20次/2秒
-以orderOrigTime检索
-如需查询已成功触发订单的后续状态,须通过现货/杠杆交易相关接口完成
-未触发的策略委托及触发失败的策略委托,可通过此节点查询,但不可通过现货/杠杆交易相关接口查询
- -### 请求参数 -| 名称 | 类型 | 是否必需 | 默认值| 描述 | 取值范围 | -| ----- | ----- | ------ | ---- | ------ | ---- | -| clientOrderId | string | TRUE | | 用户自编订单号| | - -> Response - -```json -{ - "code": 200, - "data": { - "lastActTime": 1593236344401, - "orderOrigTime": 1593235832937, - "symbol": "btcusdt", - "orderSize": "0.001", - "stopPrice": "5001", - "accountId": 5260185, - "source": "api", - "clientOrderId": "a001", - "orderSide": "buy", - "orderType": "limit", - "timeInForce": "gtc", - "orderPrice": "5000", - "orderStatus": "canceled" - } -} -``` - -### 响应数据 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| code | integer | TRUE |状态码 | -| message | string | FALSE |错误描述(如有) | -| data | object | TRUE | | -| { accountId | integer | TRUE |账户编号 | -| source | string | TRUE |订单来源 | -| clientOrderId | string | TRUE |用户自编订单号 | -| orderId | string | FALSE |订单编号(仅对orderStatus=triggered有效) | -| symbol | string | TRUE |交易代码 | -| orderPrice | string | TRUE |订单价格(对市价单无效) | -| orderSize | string | FALSE |订单数量(对市价买单无效) | -| orderValue | string | FALSE |订单金额(仅对市价买单有效) | -| orderSide | string | TRUE |订单方向 | -| timeInForce | string | TRUE |订单有效期| -| orderType | string | TRUE |订单类型 | -| stopPrice | string | TRUE |触发价 | -| trailingRate | string | FALSE | 回调幅度(仅对追踪委托有效) | -| orderOrigTime | long | TRUE |订单创建时间 | -| lastActTime | long | TRUE |订单最近更新时间 | -| orderCreateTime | long | FALSE |订单触发时间(仅对orderStatus=triggered有效) | -| orderStatus | string | TRUE |订单状态(created,triggered,canceled,rejected) | -| errCode | integer | FALSE |订单被拒状态码(仅对orderStatus=rejected有效) | -| errMessage } | string | FALSE |订单被拒错误消息(仅对orderStatus=rejected有效) | - -## 常见错误码 - -以下是策略委托接口返回的错误码和说明。 - -| 错误码 | 说明 | -| ------ | -------------------------- | -| 2002 | 参数无效 | -| 1001 | 无效的url | -| 1002 | 请重新登录后重试 | -| 1003 | API签名无效 | -| 1005 | 访问权重不足 | -| 1006 | 超出访问限制 | -| 1007 | 未查询到记录 | -| 2003 | 交易功能暂停 | -| 3002 | 订单数量精度错误 | -| 3003 | 触发价格精度错误 | -| 3004 | 低于限价单最小订单数量限制 | -| 3005 | 超出限价单最大订单数量限制 | -| 3006 | 超出限价单最高订单价格限制 | -| 3007 | 低于限价单最低订单价格限制 | -| 3008 | 低于最小订单金额限制 | -| 3009 | 低于市价单最小订单数量限制 | -| 3010 | 超出市价单最大订单数量限制 | -| 3100 | 限价交易期间不接受市价申报 | - -# 借币(逐仓/全仓杠杆) - -## 简介 - -逐仓杠杆/全仓杠杆接口提供了账户借币、还币、查询、划转等功能 - - - - -## 归还借币(全仓逐仓通用) - -API Key 权限:交易 - -限频值:2次/秒 - -子用户可以调用 - -还币顺序为,(如不指定transactId)先借先还,利息先还;如指定transactId时,currency参数不做校验。 - -### HTTP 请求 - -- POST /v2/account/repayment - -> Request: - -```json -{ - "accountid": "1266826", - "currency": "btc", - "amount": "0.00800334", - "transactId": "437" -} -``` - -### 请求参数 - -| **名称** | **类型** | **是否必需** | **描述** | -| ---------- | -------- | ------------ | -------------- | -| accountId | string | TRUE | 还币账户ID | -| currency | string | TRUE | 还币币种 | -| amount | string | TRUE | 还币金额 | -| transactId | string | FALSE | 原始借币交易ID | - -> Response: - -```json -{ - "code":200, - "Data": [ - { - "repayId":1174424, - "repayTime":1600747722018 - } - ] -} -``` - -### 响应数据 - -| **名称** | **类型** | **是否必需** | **描述** | -| ------------ | -------- | ------------ | ---------------------------------------- | -| code | integer | TRUE | 状态码 | -| message | string | FALSE | 错误描述(如有) | -| data | array | TRUE | | -| [{ repayId | string | TRUE | 还币交易ID | -| repayTime }] | long | TRUE | 还币交易时间(unix time in millisecond) | - -注: -返回relayId不意味着该还币100%成功,用户须在还币后通过查询还币交易记录确认该还币状态。 - -## - -## 资产划转(逐仓) - -API Key 权限:交易
-限频值(NEW):2次/2s - -此接口用于现货账户与逐仓杠杆账户的资产互转。 - -从现货账户划转至逐仓杠杆账户 `transfer-in`,从逐仓杠杆账户划转至现货账户 `transfer-out` - -### HTTP 请求 - -- POST ` /v1/dw/transfer-in/margin` - -- POST ` /v1/dw/transfer-out/margin` - -> Request: - -```json -{ - "symbol": "ethusdt", - "currency": "eth", - "amount": "1.0" -} -``` - - -### 请求参数 - -| 参数名称 | 数据类型 | 是否必需 | 默认值 | 描述 | -| -------- | -------- | -------- | ------ | ---------------------------- | -| symbol | string | true | NA | 交易对, e.g. btcusdt, ethbtc | -| currency | string | true | NA | 币种 | -| amount | string | true | NA | 划转数量 | - - -> Response: - -```json -{ - "data": 1000 -} -``` - -### 响应数据 - - -| 参数名称 | 数据类型 | 描述 | -| -------- | -------- | ----------- | -| data | integer | Transfer id | - -## 查询借币币息率及额度(逐仓) - -API Key 权限:读取
-限频值(NEW):20次/2s - -此接口返回用户级别的借币币息率及借币额度。 - -```shell -curl "https://api.huobi.pro/v1/margin/loan-info?symbols=btcusdt" -``` - -### HTTP 请求 - -- GET ` /v1/margin/loan-info` - -### 请求参数 - -| 参数名称 | 数据类型 | 是否必需 | 默认值 | 描述 | -| -------- | -------- | -------- | ------ | ----------------------------- | -| symbols | string | false | all | 交易代码 (可多选,以逗号分隔) | - -> Response: - -```json -{ - "status": "ok", - "data": [ - { - "symbol": "btcusdt", - "currencies": [ - { - "currency": "btc", - "interest-rate": "0.00098", - "min-loan-amt": "0.020000000000000000", - "max-loan-amt": "550.000000000000000000", - "loanable-amt": "0.045696000000000000", - "actual-rate": "0.00098" - }, - { - "currency": "usdt", - "interest-rate": "0.00098", - "min-loan-amt": "100.000000000000000000", - "max-loan-amt": "4000000.000000000000000000", - "loanable-amt": "400.000000000000000000" - "actual-rate": "0.00098" - } - ] - } - ] -} -``` - -### 响应数据 - -| 参数名称 | 数据类型 | 描述 | -| -------------- | -------- | ------------------------------------------------------------ | -| { symbol | string | 交易代码 | -| currencies | object | | -| { currency | string | 币种 | -| interest-rate | string | 基础日币息率 | -| min-loan-amt | string | 最小允许借币金额 | -| max-loan-amt | string | 最大允许借币金额 | -| loanable-amt | string | 最大可借金额 | -| actual-rate }} | string | 抵扣后的实际借币币息率,如不适用抵扣或未启用抵扣,返回基础日币息率 | - -## 申请借币(逐仓) - -API Key 权限:交易
-限频值(NEW):2次/2s - -此接口用于申请借币. - -### HTTP 请求 - -- POST ` /v1/margin/orders` - -> Request: - -```json -{ - "symbol": "ethusdt", - "currency": "eth", - "amount": "1.0" -} -``` - -### 请求参数 - -| 参数名称 | 数据类型 | 是否必需 | 默认值 | 描述 | -| -------- | -------- | -------- | ------ | ------------------------- | -| symbol | string | true | NA | 交易对 | -| currency | string | true | NA | 币种 | -| amount | string | true | NA | 借币数量(精度:3位小数) | - -> Response: - -```json -{ - "status": "ok", - "data": 1000 -} -``` - -### 响应数据 - -| 字段名称 | 数据类型 | 描述 | -| -------- | -------- | ------ | -| status | string | 状态 | -| data | integer | 订单id | - -## 归还借币(逐仓) - -API Key 权限:交易
-限频值(NEW):2次/2s - -此接口用于归还借币. - -### HTTP 请求 - -- POST ` /v1/margin/orders/{order-id}/repay` - -> Request: - -```json -{ - "amount": "1.0" -} -``` - -### 请求参数 - -| 参数名称 | 数据类型 | 是否必需 | 描述 | -| -------- | -------- | -------- | ----------------------------- | -| order-id | string | true | 借币订单 ID,写在 url path 中 | -| amount | string | true | 归还币种数量 | - -> Response: - -```json -{ - "data": 1000 -} -``` - -### 响应数据 - - -| 参数名称 | 数据类型 | 描述 | -| -------- | -------- | --------------- | -| data | integer | Margin order id | - - -## 查询借币订单(逐仓) - -API Key 权限:读取
-限频值(NEW):100次/2s - -此接口基于指定搜索条件返回借币订单。 - -### HTTP 请求 - -- GET ` /v1/margin/loan-orders` - -### 请求参数 - -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| ---------- | -------- | ------ | ---------------------------------------------------- | -------------------------------- | ------------------------------------------------------------ | -| symbol | true | string | 交易对 | | btcusdt, ethbtc...(取值参考`GET /v1/common/symbols`) | -| start-date | false | string | 查询开始日期, 日期格式yyyy-mm-dd | | | -| end-date | false | string | 查询结束日期, 日期格式yyyy-mm-dd | | | -| states | false | string | 状态列表,可以支持多个状态,用逗号分隔 | | created 未放款,accrual 已放款,cleared 已还清,invalid 异常 | -| from | false | string | 查询起始 ID | | | -| direct | false | string | 查询方向 | | prev 向前,时间(或 ID)正序;next 向后,时间(或 ID)倒序) | -| size | false | string | 查询记录大小 | 100 | [1, 100] | -| sub-uid | false | int | 子用户编号(母用户查询子用户借币订单时,此字段必填) | 如不填,缺省查询当前用户借币订单 | | - -> Response: - -```json -{ - "status": "ok", - "data": [ - { - "deduct-rate": "1", - "created-at": 1595831651478, - "updated-at": 1595832010845, - "accrued-at": 1595831651478, - "interest-amount": "0.004083000000000000", - "loan-amount": "100.000000000000000000", - "hour-interest-rate": "0.000040830000000000", - "loan-balance": "0.000000000000000000", - "interest-balance": "0.000000000000000000", - "paid-coin": "0.004083000000000000", - "day-interest-rate": "0.000980000000000000", - "interest-rate": "0.000040830000000000", - "user-id": 5574974, - "account-id": 5463409, - "currency": "usdt", - "symbol": "btcusdt", - "paid-point": "0.000000000000000000", - "deduct-currency": "", - "deduct-amount": "0", - "id": 7839857, - "state": "cleared" - } - ] -} -``` - -### 响应数据 - - -| 字段名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ------------------ | -------- | -------- | -------------------------- | ------------------------------------------------------------ | -| id | true | long | 订单号 | | -| user-id | true | long | 用户ID | | -| account-id | true | long | 账户ID | | -| symbol | true | string | 交易对 | | -| currency | true | string | 币种 | | -| loan-amount | true | string | 借币本金总额 | | -| loan-balance | true | string | 未还本金 | | -| interest-rate | true | string | 币息率 | | -| interest-amount | true | string | 币息总额 | | -| interest-balance | true | string | 未还币息 | | -| created-at | true | long | 借币发起时间 | | -| accrued-at | true | long | 最近一次计息时间 | | -| state | true | string | 订单状态 | created 未放款,accrual 已放款,cleared 已还清,invalid 异常 | -| paid-point | true | string | 已支付点卡金额(用于还息) | | -| paid-coin | true | string | 已支付原币金额(用于还息) | | -| deduct-rate | true | string | 抵扣率(用于还息) | | -| deduct-currency | true | string | 抵扣币种(用于还息) | | -| deduct-amount | true | string | 抵扣金额(用于还息) | | -| updated-at | true | long | 更新时间 | | -| hour-interest-rate | true | string | 时息率 | | -| day-interest-rate | true | string | 日息率 | | - -## 借币账户详情(逐仓) - -API Key 权限:读取
-限频值(NEW):100次/2s - -此接口返回借币账户详情。 - -```shell -curl "https://api.huobi.pro/v1/margin/accounts/balance?symbol=btcusdt" -``` - -### HTTP 请求 - -- GET `/v1/margin/accounts/balance` - -### 请求参数 - -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| -------- | -------- | ------ | ------------------------------------------------------------ | -------------------------------- | -------- | -| symbol | false | string | 交易对,作为get参数
如果不传则不返回可转余额(transfer-out-available)和可借余额(loan-available) | | | -| sub-uid | false | int | 子用户编号(母用户查询子用户借币详情时,此字段必填) | 如不填,缺省查询当前用户借币详情 | | - -> Response: - -```json -{ - "data": [ - { - "id": 18264, - "type": "margin", - "state": "working", - "symbol": "btcusdt", - "fl-price": "0", - "fl-type": "safe", - "risk-rate": "475.952571086994250554", - "list": [ - { - "currency": "btc", - "type": "trade", - "balance": "1168.533000000000000000" - }, - { - "currency": "btc", - "type": "frozen", - "balance": "0.000000000000000000" - }, - { - "currency": "btc", - "type": "loan", - "balance": "-2.433000000000000000" - }, - { - "currency": "btc", - "type": "interest", - "balance": "-0.000533000000000000" - }, - { - "currency": "btc", - "type": "transfer-out-available",//可转btc,只有传入symbol才会返回 - "balance": "1163.872174670000000000" - }, - { - "currency": "btc", - "type": "loan-available",//可借btc,只有传入symbol才会返回 - "balance": "8161.876538350676000000" - } - ] - } - ] -} -``` - -### 响应数据 - -| 字段名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ---------- | -------- | -------- | ------------------------------------------------------------ | -------- | -| symbol | true | string | 交易对 | | -| state | true | string | 账户状态,working 正常,fl-sys 系统自动爆仓,fl-mgt 手动爆仓,fl-end 爆仓结束 | | -| risk-rate | true | string | 风险率 | | -| fl-price | true | string | 爆仓价 | | -| list | true | array | 借币账户详情列表 | | -| { currency | true | string | 币种 | | -| type | true | string | 类型,trade: 交易余额, frozen: 冻结余额, loan: 待还借贷本金, interest: 待还借贷利息, ,transfer-out-available 可划转额, loan-available 可借额 | | -| balance } | true | string | 余额,负数表示应还金额。transfer-out-available的余额如果为-1,代表该币种可全部转出。 | | - -## 资产划转(全仓) - -API Key 权限:交易 - -限频值(NEW):10次/s - -此接口用于现货账户与全仓杠杆账户的资产互转。 - -从现货账户划转至全仓杠杆账户 `transfer-in`,从全仓杠杆账户划转至现货账户 `transfer-out` - -### HTTP 请求 - -- POST ` /v1/cross-margin/transfer-in` -- POST ` /v1/cross-margin/transfer-out` - -> Request: - -```json -{ - "currency": "eth", - "amount": "1.0" -} -``` - -### 请求参数 - -| 参数名称 | 数据类型 | 是否必需 | 默认值 | 描述 | -| -------- | -------- | -------- | ------ | -------- | -| currency | string | true | NA | 币种 | -| amount | string | true | NA | 划转数量 | - - -> Response: - -```json -{ - "status": "ok", - "data": 1000 -} -``` - -### 响应数据 - - -| 参数名称 | 数据类型 | 描述 | -| -------- | -------- | ----------- | -| data | integer | Transfer id | - -## 查询借币币息率及额度(全仓) - -API Key 权限:读取
- -限频值(NEW):2次/2s - -此接口返回用户级别的借币币息率及借币额度。 - -### HTTP 请求 - -- GET ` /v1/cross-margin/loan-info` - -### 请求参数 - -无 - -> Response: - -```json -{ - "status": "ok", - "data": [ - { - "currency": "bch", - "interest-rate": "0.00098", - "min-loan-amt": "0.35", - "max-loan-amt": "3500", - "loanable-amt": "0.70405181", - "actual-rate": "0.000343" - }, - { - "currency": "btc", - "interest-rate": "0.00098", - "min-loan-amt": "0.01", - "max-loan-amt": "100", - "loanable-amt": "0.02281914", - "actual-rate": "0.000343" - }, - { - "currency": "eos", - "interest-rate": "0.00098", - "min-loan-amt": "30", - "max-loan-amt": "300000", - "loanable-amt": "57.69175296", - "actual-rate": "0.000343" - }, - { - "currency": "eth", - "interest-rate": "0.00098", - "min-loan-amt": "0.5", - "max-loan-amt": "6000", - "loanable-amt": "1.06712197", - "actual-rate": "0.000343" - }, - { - "currency": "ltc", - "interest-rate": "0.00098", - "min-loan-amt": "1.5", - "max-loan-amt": "15000", - "loanable-amt": "3.28947368", - "actual-rate": "0.000343" - }, - { - "currency": "usdt", - "interest-rate": "0.00098", - "min-loan-amt": "100", - "max-loan-amt": "1500000", - "loanable-amt": "200.00000000", - "actual-rate": "0.000343" - }, - { - "currency": "xrp", - "interest-rate": "0.00098", - "min-loan-amt": "380", - "max-loan-amt": "4000000", - "loanable-amt": "734.21439060", - "actual-rate": "0.000343" - } - ] -} -``` - -### 响应数据 - -| 参数名称 | 数据类型 | 描述 | -| ------------- | -------- | ------------------------------------------------------------ | -| { currency | string | 币种 | -| interest-rate | string | 基础日币息率 | -| min-loan-amt | string | 最小允许借币金额 | -| max-loan-amt | string | 最大允许借币金额 | -| loanable-amt | string | 最大可借金额 | -| actual-rate } | string | 抵扣后的实际币息率,如不适用抵扣或未启用抵扣则返回基础日币息率 | - -## 获取杠杆持仓限额(全仓) - -API Key 权限:读取
- -限频值(NEW):2次/2s - -此接口返回用户级别的持仓限额。 - -### HTTP 请求 - -- `GET /v2/margin/limit?currency=btc` - -> Request: - -```json -GET /v2/margin/limit?currency=btc -``` - -### 请求参数 - -| 参数名称 | 数据类型 | 是否必需 | 默认值 | 描述 | -| -------- | -------- | -------- | ------ | ------------------------------------------------------------ | -| currency | string | true | NA | 币种,支持批量查询(币种之间用英文逗号分隔),单次最多可查10个币种 | - - -> - -> Response: - -```json -{ -"data": [ - { - "currency": "btc", - "maxHoldings": "2" - }, - { - "currency": "btc3s", - "maxHoldings": "12000" - }, -"code": 200 -} -``` - -### 响应数据 - -### - -| 名称 | 类型 | 描述 | -| ------------ | ------- | ---------------- | -| code | integer | 状态码 | -| message | string | 错误描述(如有) | -| { currency | string | 币种 | -| maxHoldings} | string | 持仓限额 | - - - -## - -## 申请借币(全仓) - -API Key 权限:交易
- -限频值(NEW):2次/2s - -此接口用于申请借币. - -### HTTP 请求 - -- POST ` /v1/cross-margin/orders` - -> Request: - -```json -{ - "currency": "eth", - "amount": "1.0" -} -``` - -### 请求参数 - -| 参数名称 | 数据类型 | 是否必需 | 默认值 | 描述 | -| -------- | -------- | -------- | ------ | ------------------------- | -| currency | string | true | NA | 币种 | -| amount | string | true | NA | 借币数量(精度:3位小数) | - -> Response: - -```json -{ - "status": "ok", - "data": 1000 -} -``` - -### 响应数据 - -| 字段名称 | 数据类型 | 描述 | -| -------- | -------- | --------------- | -| data | integer | Margin order id | - -## 归还借币(全仓) - -API Key 权限:交易
- -限频值(NEW):2次/2s - -此接口用于归还借币. - -### HTTP 请求 - -- POST ` /v1/cross-margin/orders/{order-id}/repay` - -> Request: - -```json -{ - "amount": "1.0" -} -``` - -### 请求参数 - -| 参数名称 | 数据类型 | 是否必需 | 描述 | -| -------- | -------- | -------- | ----------------------------- | -| order-id | string | true | 借币订单 ID,写在 url path 中 | -| amount | string | true | 归还币种数量 | - -> Response: - -```json -{ - "status": "ok", - "data": null -} -``` - -### 响应数据 - -| 参数名称 | 数据类型 | 描述 | -| -------- | -------- | ---- | -| data | null | - | - -## 查询借币订单(全仓) - -API Key 权限:读取
- -限频值(NEW):2次/2s - -此接口基于指定搜索条件返回借币订单。 - -### HTTP 请求 - -- GET ` /v1/cross-margin/loan-orders` - -### 请求参数 - -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| ---------- | -------- | ------ | -------------------------------- | ------ | -------- | -| start-date | false | string | 查询开始日期, 日期格式yyyy-mm-dd | | | -| end-date | false | string | 查询结束日期, 日期格式yyyy-mm-dd | | | -| currency | false | string | 币种 | | | -| state | false | string | 状态 |all |created 未放款,accrual 已放款,cleared 已还清,invalid 异常 -| from | false | string | 查询起始 ID | 0 | | -| direct | false | string | 查询方向 | | prev 向前,时间(或 ID)正序;next 向后,时间(或 ID)倒序) | -| size | false | string | 查询记录大小 | 10 |[10,100] | -|sub-uid|false|long|子用户UID|如不填,缺省查询当前用户借贷订单|| - -> Response: - -```json -{ - "status": "ok", - "data": [ - { - "loan-balance": "0.100000000000000000", - "interest-balance": "0.000200000000000000", - "loan-amount": "0.100000000000000000", - "accrued-at": 1511169724531, - "interest-amount": "0.000200000000000000", - "filled-points" : "0.2", - "filled-ht" : "0.2", - "currency": "btc", - "id": 394, - "state": "accrual", - "account-id": 17747, - "user-id": 119913, - "created-at": 1511169724531 - } - ] -} -``` - -### 响应数据 - -| 字段名称 | 是否必须 | 数据类型 | 描述 | 取值范围 | -| ---------------- | -------- | -------- | ---------------- | ------------------------------------------------------------ | -| id | true | long | 订单号 | | -| user-id | true | long | 用户ID | | -| account-id | true | long | 账户ID | | -| currency | true | string | 币种 | | -| loan-amount | true | string | 借币本金总额 | | -| loan-balance | true | string | 未还本金 | | -| interest-amount | true | string | 币息总额 | | -| interest-balance | true | string | 未还币息 | | -| filled-points | true | string | 点卡抵扣数量 | | -| filled-ht | true | string | HT抵扣数量 | | -| created-at | true | long | 借币发起时间 | | -| accrued-at | true | long | 最近一次计息时间 | | -| state | true | string | 订单状态 | created 未放款,accrual 已放款,cleared 已还清,invalid 异常 | - -## 借币账户详情(全仓) - -API Key 权限:读取
- -限频值(NEW):2次/2s - -此接口返回借币账户详情。 - -### HTTP 请求 - -- GET `/v1/cross-margin/accounts/balance` - -### 请求参数 - -| 参数名称 | 是否必须 | 类型 | 描述 | 默认值 | 取值范围 | -| -------- | -------- | ---- | --------- | -------------------------------- | -------- | -| sub-uid | false | long | 子用户UID | 如不填,缺省查询当前用户借贷订单 | | - -> Response: - -```json -{ - "status": "ok", - "data": - { - "id": 18264, - "type": "cross-margin", - "state": "working", - "risk-rate": "1000", - "acct-balance-sum": "12312.123123", - "debt-balance-sum": "1231.2123123", - "list": [ - { - "currency": "btc", - "type": "trade", - "balance": "1168.533000000000000000" - }, - { - "currency": "btc", - "type": "frozen", - "balance": "0.000000000000000000" - }, - { - "currency": "btc", - "type": "loan", - "balance": "-2.433000000000000000" - }, - { - "currency": "btc", - "type": "interest", - "balance": "-0.000533000000000000" - }, - { - "currency": "btc", - "type": "transfer-out-available",//可转btc - "balance": "1163.872174670000000000" - }, - { - "currency": "btc", - "type": "loan-available",//可借btc - "balance": "8161.876538350676000000" - } - ] - } -} -``` - -### 响应数据 - -| 字段名称 | 是否必须 | 数据类型 | 描述 | -| ---------------- | -------- | -------- | ------------------------------------------------------------ | -| id | true | integer | Account ID 账户编号 | -| type | true | integer | 账户类型:cross-margin | -| state | true | string | 账户状态:working 正常,fl-sys 系统自动爆仓,fl-end 爆仓结束,fl-negative 穿仓 | -| risk-rate | true | string | 风险率 | -| acct-balance-sum | true | string | 总持有usdt折合 | -| debt-balance-sum | true | string | 总负债usdt折合 | -| list | true | array | 借币账户详情列表 | -| { currency | true | string | 币种 | -| type | true | string | 账户类型,trade: 交易余额, frozen: 冻结余额, loan: 待还借贷本金, interest: 待还借贷利息, ,transfer-out-available 可划转额, loan-available 可借额 | -| balance } | true | string | 余额,负数表示应还金额。transfer-out-available的账户余额如果为-1,代表该币种可全部转出。 | - -## 还币交易记录查询 - -API Key 权限:读取 - -限频值:2次/秒 - -子用户可以调用 - -按repayTime检索 - -### HTTP 请求 - -- GET /v2/account/repayment - -### 请求参数 - -| **名称** | **类型** | **是否必需** | **描述** | -| --------- | -------- | ------------ | ------------------------------------------------------------ | -| repayId | string | FALSE | 还币交易ID | -| accountId | string | FALSE | 账户ID(缺省值:所有账户) | -| currency | string | FALSE | 借入/借出币种(缺省值:所有币种) | -| startTime | long | FALSE | 远点时间(unix time in millisecond;取值范围:[(endTime - x天), endTime];缺省值:(endTime - x天)) | -| endTime | long | FALSE | 近点时间(unix time in millisecond;取值范围:[(当前时间 - y天), 当前时间];缺省值:当前时间) | -| sort | string | FALSE | 检索方向(有效值:asc 由远及近, desc 由近及远;缺省值:desc) | -| limit | integer | FALSE | 单页最大返回条目数量(取值范围:[1,100];缺省值:50) | -| fromId | long | FALSE | 查询起始编号(仅对翻页查询有效) | - -> Response: - -```json -{ - "code":200, - "data":[ - { - "repayId": 1174413, - "repayTime":1600747389111, - "accountId": 1266826, - "currency":"btc", - "repaidAmount": "0.00200083", - "transactIds": - { - "transactId":502, - "repaidprincipal": "0.00199666", - "repaidInterest": "0.00000417", - "paidHt": "0", - "paidPoint": "0" - } - } - ] -} -``` -### 响应数据 -| **名称** | **类型** | **是否必需** | **描述** | -| --------------- | -------- | ------------ | -------------------------------------------------------- | -| code | integer | TRUE | 状态码 | -| message | string | FALSE | 错误描述(如有) | -| data | array | TRUE | 按sort指定顺序排列 | -| [{ repayId | string | TRUE | 还币交易ID | -| repayTime | long | TRUE | 还币交易时间(unix time in millisecond) | -| accountId | string | TRUE | 还币账户ID | -| currency | string | TRUE | 还币币种 | -| repaidAmount | string | TRUE | 已还币金额 | -| transactIds | object | TRUE | 该笔还币所涉及的原始借币交易ID列表(按还币优先顺序排列) | -| { transactId | long | TRUE | 原始借币交易ID | -| repaidPrincipal | string | TRUE | 该笔还币交易已还本金 | -| repaidInterest | string | TRUE | 该笔还币交易已还利息 | -| paidHt | string | TRUE | 该笔还币交易已支付HT金额 | -| paidPoint }}] | string | TRUE | 该笔还币交易已支付点卡金额 | -| nextId | long | FALSE | 下页查询起始编号(仅在存在下页数据时返回) | - -## 常见错误码 - -**以下是逐仓杠杆接口的返回码和说明。** - -| 返回码 | 说明 | -| ------------------------------------------- | ------------------------------------------------------------ | -| account-transfer-balance-insufficient-error | 账户余额不足 | -| account-transfer-balance-overflow-error | 负账户余额溢出 | -| account-transfer-balance-insufficient_error | 账户余额不足(不区分动作类型) | -| base-msg | 自定义错误消息 | -| base-system-error | 系统异常 | -| base-currency-error | currency不存在 | -| base-symbol-error | symbol不存在 | -| base-margin-symbol-invalid | 非法借贷交易对(非法交易对或者被禁止借贷的交易对) | -| base-record-invalid | 记录无效 | -| base-request-timeout | 请求超时,请稍后再试 | -| base_request_exceed_number_limit | 请求人数过多,请稍后再试 | -| base-date-limit-error | 日期错误 | -| base-update-error | 更新数据错误 | -| base-operation-forbidden 禁止操作 | 非计息状态 禁止还款 | -| dw-insufficient-balance | 余额不足 | -| dw-account-transfer-error | 转账错误 | -| frequent-invoke | 操作过于频繁,请稍后重试 | -| loan-order-not-found | 订单未找到 | -| loan-amount-scale-limit | 借贷&还款 金额精度限制 | -| loan-repay-max-limit | 偿还大于借贷 | -| loan-insufficient-balance | 余额不足 | -| login-required | 需要登录 | -| margin-country-not-allow | 国家未开放借贷 | -| margin-country-auth-required | 国家未开放借贷,需要认证 | -| margin-trading-is-not-available | 暂不支持逐仓杠杆交易--禁止土耳其籍或通过土耳其KYC的用户进行逐仓杠杆借币 | -| margin-account-state-error | 账户状态异常(爆仓中) | -| risk-verification-failed | 风控拦截通用错误码 | -| sub-user-auth-required | 需要母用户授权子用户 | - -**以下是全仓杆接口的返回码和说明。** - -| 返回码 | 说明 | -| ---------------------------------------- | ------------------------------------- | -| abnormal-users-cannot-transfer | 非正常用户不能转出 | -| account-explosion-in-prohibited-transfer | 账户爆仓中禁止划转操作 | -| account-is-abnormal-retry-after-refresh | 账户异常请刷新重试 | -| account-balance-insufficient-error | 账户余额不足 | -| account-cannot-be-inquired | 无法查询到全仓杠杆账户 | -| base-not-in-white-list | 不是白名单用户 | -| base-currency-error | currency不存在 | -| base-operation-forbidden | 禁止操作 | -| base-user-request-exceed-limit | 操作太频繁,请稍后再试 | -| base-currency-not-open | currency还没有开放 该保证金币种未开启 | -| beyond-maximum-number-of-rollover | 超出最大转出数量 | -| exceed-maximum-amount | 超出最大数量 | -| start-date-cannot-greater-than-end-date | 开始时间不能大于结束时间 | -| frequent-invoke | 操作过于频繁,请稍后重试 | -| insufficient-exchange-fund | 交易所资金不足 | -| loan-order-not-found | 订单未找到 | -| loan-amount-scale-limit | 借贷&还款 金额精度限制 | -| loan-repay-max-limit | 偿还大于借贷 | -| loan-insufficient-balance | 余额不足 | -| loan-fee-rate-compute-fail | 系统借款利率计算异常 | -| login-required | 需要登录 | -| margin-subuser-no-permission | 全仓杠杆子账号未开通权限 | -| normal-and-warehouse-can-transfer | 正常用户与穿仓用户可以转入 | -| order-orderamount-precision-error | 交易数额精度错误 | -| require-exchange-id | 需要交易所id | -| subacount-currency-not-exit | 该币种的子账户不存在 | -| system-busy | 系统繁忙 | -| unsupport-kyc-info | 不支持的kyc认证信息 | -| uc-network-error | 网络错误 | -| uncreated-currency-cannot-be-drawn | 未创建币种子账户无法划出 | - -## 常见问题 - -### Q1: 逐仓和全仓借币时我查询到可借余额有值,而且我申请借币的额度小于可借余额,为什么借币时却提示可借币不足错误,无法借币成功? - -A: 用户可借额度不仅取决于用户账户的可借额度,也取决于系统可借总额度。按照风险控制要求系统每天有一个借币的总额度,为所有用户共享。如果超过了这个额度,即使账户自己的额度够也无法借币。系统当天总额度用尽时,只有当天有用户还币之后,才可以继续借币。我们目前正在实现对用户更友好的解决方案,尝试将更准确的信息通过API提供给用户。 - -# 借币(C2C) - -## 简介 - -C2C借币相关接口提供了用户对用户之间的借入、借出、还币、查询、划转等功能。 - - - -以下C2C借币相关接口统一限频值为2次/秒。
-子用户不可调用以下C2C借币相关接口。
-借入账户ID(accountId)须在web页面完成第一次划转后方可生成。
- -## 借入借出下单 - -POST /v2/c2c/offer
-API Key 权限:交易
- -### 请求参数 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| accountId | string | FALSE | 借入账户ID(仅对借入订单有效) | -| currency | string | TRUE | 借入/借出币种 | -| side | string | TRUE | 订单方向(lend, borrow) | -| timeInForce | string | FALSE | 订单有效期(gtc, ioc) | -| amount | string | TRUE | 订单金额 | -| interestRate | string | TRUE | 日息率 | -| loanTerm | integer | TRUE | 借币期限(单位:天;有效值:10, 20, 30) | - -注:
-• 当前借出订单缺省有效期为gtc,借入订单缺省有效期为ioc。如用户设定timeInForce为非缺省值,返回错误信息。
- -> Response - -```json -{ - "data": { - "offerId": 14743 - "createTime": 1593172709875 - }, - "code": 200, - "success": true -} -``` - -### 响应数据 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| code | integer | TRUE | 状态码 | -| message | string | FALSE | 错误描述(如有) | -| data | object | TRUE | | -| { offerId | string | TRUE | 订单ID | -| createTime } | long | TRUE | 订单创建时间(unix time in millisecond) | - -## 借入借出撤单 - -POST /v2/c2c/cancellation
-API Key 权限:交易
- -### 请求参数 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| offerId | string | TRUE | 订单ID | - -> Response - -```json -{ - "data": { - "rejected": [ - { - "offerId": 14411, - "errCode": 40310, - "errMessage": "order-non-existent(NT)" - } - ] - }, - "code": 200, - "success": true -} -``` - -### 响应数据 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| code | integer | TRUE | 状态码 | -| message | string | FALSE | 错误描述(如有) | -| data | object | TRUE | | -| { accepted | object | TRUE | 已接受订单ID列表 | -| [ offerId ] | string | FALSE | 订单ID | -| rejected | object | TRUE | 已拒绝订单ID列表 | -| [ offerId | string | FALSE | 订单ID | -| errCode | integer | FALSE | 撤单被拒错误码 | -| errMessage ]} | string | FALSE | 撤单被拒错误消息 | - -注:
-• 撤单请求被接受(accepted)不意味着撤单成功。用户须在撤单后主动查询该订单以确认撤单状态。
- -## 撤销所有借入借出订单 - -POST /v2/c2c/cancel-all
-API Key 权限:交易
-每次最多撤销500张订单(以offerId降序逐一撤销)
- -### 请求参数 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| accountId | string | FALSE | 账户ID(缺省值:所有账户) | -| currency | string | FALSE | 借入/借出币种(缺省值:所有适用C2C的币种) | -| side | string | FALSE | 订单方向(有效值:lend, borrow;缺省值:所有方向) | - -> Response - -```json -{ - "data": { - "accepted": [ - { - "offerId": "14742" - } - ] - }, - "code": 200, - "success": true -} -``` - -### 响应数据 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| code | integer | TRUE | 状态码 | -| message | string | FALSE | 错误描述(如有) | -| data | object | TRUE | | -| { accepted | object | TRUE | 已接受订单ID列表 | -| [ offerId ] | string | FALSE | 订单ID | -| rejected | object | TRUE | 已拒绝订单ID列表 | -| [ offerId | string | FALSE | 订单ID | -| errCode | integer | FALSE | 撤单被拒错误码 | -| errMessage ]} | string | FALSE | 撤单被拒错误消息 | - -注:
-• 撤单请求被接受(accepted)不意味着撤单成功。用户须在撤单后主动查询该订单以确认撤单状态。
- -## 查询借入借出订单 - -GET /v2/c2c/offers
-API Key 权限:读取
-按createTime检索
- -### 请求参数 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| accountId | string | FALSE | 账户ID(缺省值:所有账户) | -| currency | string | FALSE | 借入/借出币种(缺省值:所有适用C2C的币种) | -| side | string | FALSE | 订单方向(有效值:lend, borrow;缺省值:所有方向) | -| offerStatus | string | TRUE | 订单状态(有效值:submitted, filled, partial-filled, canceled, partial-canceled;可多填,以逗号分隔) | -| startTime | long | FALSE | 远点时间(unix time in millisecond) | -| endTime | long | FALSE | 近点时间(unix time in millisecond) | -| limit | integer | FALSE | 单页最大返回条目数量(取值范围:[1,100];缺省值:50) | -| fromId | long | FALSE | 查询起始编号(仅对翻页查询有效) | - -> Response - -```json -{ - "code": 200, - "data": [ - { - "offerId": "14736", - "createTime": 1593175645809, - "lastActTime": 1593176383232, - "offerStatus": "filled", - "accountId": "13699363", - "currency": "usdt", - "side": "borrow", - "timeInForce": "ioc", - "origAmount": "10", - "amount": "0", - "interestRate": "0.0002", - "loanTerm": 20 - }, - { - "offerId": "14732", - "createTime": 1593173423885, - "lastActTime": 1593174884411, - "offerStatus": "filled", - "accountId": "13699363", - "currency": "usdt", - "side": "borrow", - "timeInForce": "ioc", - "origAmount": "10", - "amount": "0", - "interestRate": "0.000192", - "loanTerm": 10 - } - ] -} -``` - -### 响应数据 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| code | integer | TRUE | 状态码 | -| message | string | FALSE | 错误描述(如有) | -| data | object | TRUE | 按createTime倒序排列 | -| { offerId | string | TRUE | 订单ID | -| createTime | long | TRUE | 订单创建时间(unix time in millisecond) | -| lastActTime | long | TRUE | 订单更新时间(unix time in millisecond) | -| offerStatus | string | TRUE | 订单状态(有效值:submitted, filled, partial-filled, canceled, partial-canceled) | -| accountId | string | TRUE | 账户ID | -| currency | string | TRUE | 借入/借出币种 | -| side | string | TRUE | 订单方向(有效值:lend, borrow) | -| timeInForce | string | TRUE | 订单有效期(gtc, ioc) | -| origAmount | string | TRUE | 订单原始金额 | -| amount | string | TRUE | 订单剩余金额 | -| interestRate | string | TRUE | 日息率 | -| loanTerm } | integer | TRUE | 借币期限 | -| nextId | long | FALSE | 下页查询起始编号(仅在存在下页数据时返回) | - -## 查询特定借入借出订单及其交易记录 - -GET /v2/c2c/offer
-API Key 权限:读取
- -### 请求参数 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| offerId | string | TRUE | 订单ID | - -> Response - -```json -{ - "code": 200, - "data": { - "lastActTime": 1593176383232, - "offerStatus": "filled", - "origAmount": "10", - "currency": "usdt", - "amount": "0", - "timeInForce": "ioc", - "side": "borrow", - "offerId": "14736", - "accountId": "13699363", - "interestRate": "0.0002", - "loanTerm": 20, - "transactions": [ - { - "transactRate": "0.00019", - "transactAmount": "10", - "transactTime": 1593175646232, - "transactId": 28152, - "aggressor": true, - "unpaidPrincipal": "0", - "unpaidInterest": "0", - "paidInterest": "0.00007917", - "transactStatus": "closed" - } - ], - "createTime": 1593175645809 - } -} -``` - -### 响应数据 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| code | integer | TRUE | 状态码 | -| message | string | FALSE | 错误描述(如有) | -| data | object | TRUE | 按市场板块正序排列 | -| { offerId | string | TRUE | 订单ID | -| createTime | long | TRUE | 订单创建时间(unix time in millisecond) | -| lastActTime | long | TRUE | 订单更新时间(unix time in millisecond) | -| offerStatus | string | TRUE | 订单状态(有效值:submitted, filled, partial-filled, canceled, partial-canceled) | -| accountId | string | TRUE | 账户ID | -| currency | string | TRUE | 借入/借出币种 | -| side | string | TRUE | 订单方向(有效值:lend, borrow) | -| timeInForce | string | TRUE | 订单有效期(gtc, ioc) | -| origAmount | string | TRUE | 订单原始金额 | -| amount | string | TRUE | 订单剩余金额 | -| interestRate | string | TRUE | 日息率 | -| loanTerm | integer | TRUE | 借币期限 | -| transactions | object | TRUE | 按transactTime倒序排列 | -| { transactRate | string | TRUE | 交易价格(即达成交易的日息率) | -| transactAmount | string | TRUE | 交易金额 | -| transactTime | long | TRUE | 交易时间(unix time in millisecond) | -| transactId | long | TRUE | 交易ID | -| aggressor | boolean | TRUE | 是否交易主动方(有效值:true, false) | -| unpaidPrincipal | string | TRUE | 未还本金 | -| unpaidInterest | string | TRUE | 未还币息(截至查询时间) | -| paidInterest | string | TRUE | 已还币息 | -| transactStatus }} | string | TRUE | 还币状态(有效值:pending, closed) | - -## 查询借入借出交易记录 - -GET /v2/c2c/transactions
-API Key 权限:读取
-按transactTime检索
- -### 请求参数 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| accountId | string | FALSE | 账户ID(缺省值:所有账户) | -| currency | string | FALSE | 借入/借出币种(缺省值:所有币种) | -| side | string | FALSE | 订单方向(有效值:lend, borrow;缺省值:所有方向) | -| transactStatus | string | TRUE | 还币状态(有效值:pending, closed) | -| startTime | long | FALSE | 远点时间(unix time in millisecond) | -| endTime | long | FALSE | 近点时间(unix time in millisecond) | -| limit | integer | FALSE | 单页最大返回条目数量(取值范围:[1,100];缺省值:50) | -| fromId | long | FALSE | 查询起始编号(仅对翻页查询有效) | - -> Response - -```json -{ - "data": [ - { - "transactId": 5585, - "transactTime": "1593178102345", - "transactRate": "0.0019", - "transactAmount": "10", - "aggressor": "true", - "unpaidPrincipal": "0", - "unpaidInterest": "0", - "piadInterest": "0.00007917", - "transactStatus": "closed", - "offerId": "14736", - "accountId" "13699363", - "currency": "usdt", - "side": "borrow" - } - ], - "code": 200, - "success": true -} -``` - -### 响应数据 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| code | integer | TRUE | 状态码 | -| message | string | FALSE | 错误描述(如有) | -| data | object | TRUE | 按sort指定顺序排列 | -| { transactRate | string | TRUE | 交易价格(即达成交易的日息率) | -| transactAmount | string | TRUE | 交易金额 | -| transactTime | long | TRUE | 交易时间(unix time in millisecond) | -| transactId | long | TRUE | 交易ID | -| aggressor | boolean | TRUE | 是否交易主动方(有效值:true, false) | -| unpaidPrincipal | string | TRUE | 未还本金 | -| unpaidInterest | string | TRUE | 未还币息(截至查询时间) | -| paidInterest | string | TRUE | 已还币息 | -| transactStatus | string | TRUE | 还币状态(有效值:pending, closed) | -| offerId | string | TRUE | 订单ID | -| accountId | string | TRUE | 账户ID | -| currency | string | TRUE | 借入/借出币种 | -| side } | string | TRUE | 订单方向(有效值:lend, borrow) | -| nextId | long | FALSE | 下页查询起始编号(仅在存在下页数据时返回) | - -## 还币 -POST /v2/c2c/repayment
-API Key 权限:交易
- -### 请求参数 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| accountId | string | TRUE | 还币账户ID | -| currency | string | TRUE | 还币币种 | -| amount | string | TRUE | 还币金额 | -| offerId | string | TRUE | 原始借入订单ID | - -> Response +| 返回码 | 说明 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| base-argument-unsupported | 某参数不支持,请检查参数 | +| base-system-error | 系统错误,如果是撤单:缓存中查不到订单状态,该订单无法撤单;如果是下单:订单入缓存失败,请再次尝试 | +| login-required | url中没有Signature参数或找不到此用户(key与账户id不对应等情况) | +| base-record-invalid | 暂时未找到数据,请稍后重试 | +| order-amount-over-limit | 订单数量超出限额 | +| base-symbol-trade-disabled | 该交易对被禁止交易 | +| base-operation-forbidden | 用户不在白名单内或该币种不允许OTC交易等禁止行为 | +| account-get-accounts-inexistent-error | 该账户在该用户下不存在 | +| account-account-id-inexistent | 该账户不存在 | +| order-disabled | 交易对暂停,无法下单 | +| cancel-disabled | 交易对暂停,无法撤单 | +| order-invalid-price | 下单价格非法(如市价单不能有价格,或限价单价格超过市场价10%) | +| order-accountbalance-error | 账户余额不足 | +| order-limitorder-price-min-error | 卖出价格不能低于指定价格 | +| order-limitorder-price-max-error | 买入价格不能高于指定价格 | +| order-limitorder-amount-min-error | 下单数量不能低于指定数量 | +| order-limitorder-amount-max-error | 下单数量不能高于指定数量 | +| order-etp-nav-price-min-error | 下单价格不能低于净值的指定比率 | +| order-etp-nav-price-max-error | 下单价格不能高于净值等指定比率 | +| order-orderprice-precision-error | 交易价格精度错误 | +| order-orderamount-precision-error | 交易数额精度错误 | +| order-value-min-error | 订单交易额不能低于指定额度 | +| order-marketorder-amount-min-error | 卖出数量不能低于指定数量 | +| order-marketorder-amount-buy-max-error | 市价单买入额度不能高于指定额度 | +| order-marketorder-amount-sell-max-error | 市价单卖出数量不能高于指定数量 | +| order-holding-limit-failed | 下单超出该币种的持仓限额 | +| order-type-invalid | 订单类型非法 | +| order-orderstate-error | 订单状态错误 | +| order-date-limit-error | 查询时间不能超过系统限制 | +| order-source-invalid | 订单来源非法 | +| order-update-error | 更新数据错误 | +| order-price-greater-than-limit | 下单价格高于开盘前下单限制价格,请重新下单 | +| order-price-less-than-limit | 下单价格低于开盘前下单限制价格,请重新下单 | +| market-orders-not-support-during-limit-price-trading | 限时下单不支持市价单 | +| price-exceeds-the-protective-price-during-limit-price-trading | 限价时间内价格超出保护价 | +| invalid-client-order-id | client order id 在最近的下单或撤单参数中已被使用 | +| invalid-interval | 查询起止窗口设置错误 | +| invalid-start-date | 查询起始日期含非法取值 | +| invalid-end-date | 查询起始日期含非法取值 | +| invalid-start-time | 查询起始时间含非法取值 | +| invalid-end-time | 查询起始时间含非法取值 | +| validation-constraints-required | 指定的必填参数缺失 | +| not-found | 撤单时订单不存在 | +| base-not-found | 未找到记录 | +| base_record_invalid | 订单不存在 (传错订单ID) | +| dw_cancel_withdraw_failed | 取消失败,订单状态错误 | +| base_update_error | 内部系统错误 | -```json -{ - "data": { - "repayId": 5585, - "repayTime": "1593178102345" - }, - "code": 200, - "success": true -} -``` +## 常见问题 -### 响应数据 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| code | integer | TRUE | 状态码 | -| message | string | FALSE | 错误描述(如有) | -| data | object | TRUE | | -| { repayId | string | TRUE | 还币交易ID | -| repayTime } | long | TRUE | 还币交易时间(unix time in millisecond) | +### Q1:client-order-id是什么? -注:
-• 返回relayId不意味着该还币100%成功,用户须在还币后通过查询还币交易记录确认该还币状态。
+A: client-order-id作为下单请求标识的一个参数,类型为字符串,长度为64。 此id为用户自己生成,8小时内有效。如果是终态订单仅2小时有效。 -## 查询还币交易记录 -GET /v2/c2c/repayment
-API Key 权限:读取
-按repayTime检索
+### Q2:如何获取下单数量、金额、小数限制、精度的信息? -### 请求参数 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| repayId | string | FALSE | 还币交易ID | -| accountId | string | FALSE | 账户ID(缺省值:所有账户) | -| currency | string | FALSE | 借入/借出币种(缺省值:所有币种) | -| startTime | long | FALSE | 远点时间(unix time in millisecond) | -| endTime | long | FALSE | 近点时间(unix time in millisecond) | -| limit | integer | FALSE | 单页最大返回条目数量(取值范围:[1,100];缺省值:50) | -| fromId | long | FALSE | 查询起始编号(仅对翻页查询有效) | +A: 可使用 Rest API `GET /v1/common/symbols` 获取相关币对信息, 下单时注意最小下单数量和最小下单金额的区别。 -> Response +常见返回错误如下: -```json -{ - "code": 200, - "data": [ - { - "repayId": 2173, - "repayTime": 1593176382960, - "accountId": 13699363, - "currency": "usdt", - "paidAmount": "10.00007917", - "transactIds": [ - { - "transactId": 28152, - "paidPrincipal": "10", - "paidInterest": "0.00007917" - } - ] - }, - { - "repayId": 2171, - "repayTime": 1593174883839, - "accountId": 13699363, - "currency": "usdt", - "paidAmount": "10.00007", - "transactIds": [ - { - "transactId": 28145, - "paidPrincipal": "10", - "paidInterest": "0.00007" - } - ] - } - ] -} -``` +- order-value-min-error: 下单金额小于最小交易额 +- order-orderprice-precision-error : 限价单价格精度错误 +- order-orderamount-precision-error : 下单数量精度错误 +- order-limitorder-price-max-error : 限价单价格高于限价阈值 +- order-limitorder-price-min-error : 限价单价格低于限价阈值 +- order-limitorder-amount-max-error : 限价单数量高于限价阈值 +- order-limitorder-amount-min-error : 限价单数量低于限价阈值 -### 响应数据 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| code | integer | TRUE | 状态码 | -| message | string | FALSE | 错误描述(如有) | -| data | object | TRUE | 按repayTime倒序排列 | -| { repayId | string | TRUE | 还币交易ID | -| repayTime | long | TRUE | 还币交易时间(unix time in millisecond) | -| accountId | string | TRUE | 还币账户ID | -| currency | string | TRUE | 还币币种 | -| paidAmount | string | TRUE | 已还币金额 | -| transactIds | object | TRUE | 还币交易ID列表(按还币优先顺序排列) | -| { transactId | long | TRUE | 交易ID | -| paidPrincipal | string | TRUE | 单笔还币交易已还本金 | -| paidInterest }} | string | TRUE | 单笔还币交易已还币息 | -| nextId | long | FALSE | 下页查询起始编号(仅在存在下页数据时返回) | +### Q3: 为什么收到订单成功成交的消息后再次进行下单,返回余额不足? -## 资产划转 -POST /v2/c2c/transfer
-API Key 权限:交易
+A:为保证订单的及时送达以及低延时, 订单推送的结果是在撮合后直接推送,此时订单可能并未完成资产的清算。 -### 请求参数 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| from | string | TRUE | 转出账户ID | -| to | string | TRUE | 转入账户ID | -| currency | string | TRUE | 划转币种 | -| amount | string | TRUE | 划转金额 | +建议使用以下方式保证资金可以正确下单: -注:
-• 仅允许现货账户与借入账户间划转。
+1. 结合资产推送主题`accounts`同步接收资产变更的消息,确保资金已经完成清算。 -> Response +2. 收到订单推送消息时,使用Rest接口调用账户余额,验证账户资金是否足够。 -```json -{ - "data": { - "transactId": 5585, - "transactTime": "1593178102345" - }, - "code": 200, - "success": true -} -``` +3. 账户中保留相对充足的资金余额。 -### 响应数据 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| code | integer | TRUE | 状态码 | -| message | string | FALSE | 错误描述(如有) | -| data | object | TRUE | | -| { transactId | string | TRUE | 划转交易ID | -| transactTime } | long | TRUE | 划转交易时间(unix time in millisecond) | +### Q4: 成交明细里的filled-fees和filled-points有什么区别? -## 查询账户余额 +A: 成交中的成交手续费分为普通手续费以及抵扣手续费两种类型,两种类型不会同时存在。 -GET /v2/c2c/account
-API Key 权限:读取
+1. 普通手续费表示,在成交时,使用原币进行手续费扣除。例如:在BTCUSDT币种对下购买BTC,filled-fees字段不为空,表示扣除了普通手续费,单位是BTC。 -### 请求参数 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| accountId | string | TRUE | 账户ID | -| currency | string | FALSE | 币种 | -> Response +### Q5: 成交明细中match-id和trade-id有什么区别? -```json -{ - "data": { - "accountId": 13699363, - "accountStatus": "working", - "symbol": "btcusdt", - "riskRate": "10",//风险率为10,意味着最低风险 - "subAccountTypes": [ - { - "currency": "btc", - "subAccountType": "trade", - "acctBalance": "0.00000029", - "availBalance": "0.00000029", - "transferable": "0.00000029", - "borrowable": "0.01969453" - }, - { - "currency": "usdt", - "subAccountType": "trade", - "acctBalance": "90.27945823", - "availBalance": "90.27945823", - "transferable": "90.27945823", - "borrowable": "180.56423403" - }, - { - "currency": "usdt", - "subAccountType": "loan", - "acctBalance": "0", - "availBalance": "0", - "transferable": "0", - "borrowable": "0" - }, - { - "currency": "usdt", - "subAccountType": "interest", - "acctBalance": "0", - "availBalance": "0", - "transferable": "0", - "borrowable": "0" - } - ] - }, - "code": 200, - "success": true -} -``` +A: match-id表示订单在撮合中的顺序号,trade-id表示成交时的序号, 一个match-id可能有多个trade-id(成交时),也可能没有trade-id(创建订单、撤销订单) -### 响应数据 -| 名称 | 类型 | 是否必需 | 描述 | -| ----- | ----- | ------ | ---- | -| code | integer | TRUE | 状态码 | -| message | string | FALSE | 错误描述(如有) | -| data | object | TRUE | | -| { accountId | string | TRUE | 账户ID | -| accountStatus | string | TRUE | 账户状态(working 正常, lock 锁定, fl-sys 系统自动爆仓, fl-mgt 手动爆仓, fl-end 爆仓结束, fl-negative 穿仓) | -| symbol | string | FALSE | 交易对(仅对借入账户类型有效) | -| riskRate | string | FALSE | 风险率(仅对借入账户类型有效) | -| subAccountTypes | object | TRUE | 账户子类型列表 | -| { subAccountType | string | TRUE | 账户子类型(trade, lending, earnings, loan, interest, advance) | -| currency | string | TRUE | 币种 | -| acctBalance | string | TRUE | 账户余额 | -| availBalance | string | FALSE | 可用余额 (仅对借入账户下trade子类型有效) | -| transferable | string | FALSE | 可转出金额 (仅对借入账户下trade子类型有效) | -| borrowable }} | string | FALSE | 可借入金额 (仅对借入账户下trade子类型有效) | +### Q6: 为什么基于当前盘口买一或者卖一价格进行下单触发了下单限价错误? -注:
-• 账户子类型trade, loan, interest, advance仅对借入账户有效;
-• 账户子类型trade, lending, earnings仅对借出账户有效。
+A: 当前火币有基于最新成交价上下一定幅度的限价保护,对流动性不好的币,基于盘口数据下单可能会触发限价保护。建议基于ws推送的成交价+盘口数据信息进行下单 -## 常见错误码 -以下是C2C借币相关接口的错误码、错误消息和说明。 - -| 错误码 | 错误消息 | 说明 | -| ------ | ------------------------------------------------------------ | -------------------------------------------------- | -| 40301 | Insufficient available balance | 可用余额不足 | -| 40302 | Failed to get the account | 获取账户信息失败 | -| 40307 | Existence of an ongoing loan order | 存在正在进行中的借贷单 | -| 40309 | Wrong order status | 订单状态错误 | -| 40310 | Order does not exist | 借贷单不存在 | -| 40311 | User has OTC loans | 用户存在场外借贷 | -| 40312 | Only normal and bankrupt users can be included | 爆仓中账户不能转入资产 | -| 40315 | There is no liquidation or forced liquidation setting | 缺少强平或爆仓设置 | -| 40317 | Failed to get sub-loan order | 获取子借贷单失败 | -| 40319 | No less than the minimum borrowing amount | 不能低于最小借出量 | -| 40320 | borrowing configuration does not exist | 借贷配置不存在 | -| 40322 | The user has not passed advanced verification | 用户未通过高级认证 | -| 40324 | The amount of repayment exceeds the amount borrowed | 还款数量超过借贷量 | -| 40326 | White list users only | 非白名单用户 | -| 40327 | Exceeding the maximum accuracy | 超过最大精度 | -| 40328 | Cannot exceed the maximum amount of borrowing | 不能超过最大借贷量 | -| 40329 | Interest rate out of the set range | 利率超出设定范围 | -| 40330 | Cannot be less than the minimum loan amount | 不能低于最小借入量 | -| 40331 | cannot exceed the maximum loan amount | 不能超过最大借入量 | -| 40332 | Cannot be less than the minimum repayment amount | 不能低于最小还款量 | -| 40333 | the ending time must be greater than the starting time | 结束时间必须大于开始时间 | -| 40335 | in repayment | 还款中 | -| 40336 | This feature is not open to users in China, the United States, Turkey, Japan, Singapore | 该功能不对中国、美国、土耳其、日本、新加坡用户开放 | -| 40337 | C2C lending transaction is not currently available | 暂不支持C2C借贷交易 | -| 40339 | Debit and credit function is closed | 借贷功能已关闭 | -| 40340 | The current account ID does not belong to the current user | 当前账户ID不属于当前用户所持有 | -| 40345 | This account is not a C2C account | 该账户非C2C账户 | -| 40346 | This order is not allowed to change renew state | 当前订单不能修改续借状态 | # Websocket行情数据 @@ -7582,10 +2959,7 @@ WebSocket 行情接口返回的所有数据都进行了 GZIP 压缩,需要 cli > Sub request: ```json -{ - "sub": "market.btcusdt.kline.1min", - "id": "id1" -} +{ "sub": "market.btcusdt.kline.1min", "id": "id1"} ``` 成功建立与Websocket服务器的连接后,Websocket客户端发送请求以订阅特定主题: @@ -7598,12 +2972,7 @@ WebSocket 行情接口返回的所有数据都进行了 GZIP 压缩,需要 cli > Sub response: ```json -{ - "id": "id1", - "status": "ok", - "subbed": "market.btcusdt.kline.1min", - "ts": 1489474081631 -} +{ "id": "id1", "status": "ok", "subbed": "market.btcusdt.kline.1min", "ts": 1489474081631} ``` 成功订阅后,Websocket客户端将收到确认。 @@ -7615,10 +2984,7 @@ WebSocket 行情接口返回的所有数据都进行了 GZIP 压缩,需要 cli > UnSub request: ```json -{ - "unsub": "market.btcusdt.trade.detail", - "id": "id4" -} +{ "unsub": "market.btcusdt.trade.detail", "id": "id4"} ``` 取消订阅的格式如下: @@ -7631,12 +2997,7 @@ WebSocket 行情接口返回的所有数据都进行了 GZIP 压缩,需要 cli > UnSub response: ```json -{ - "id": "id4", - "status": "ok", - "unsubbed": "market.btcusdt.trade.detail", - "ts": 1494326028889 -} +{ "id": "id4", "status": "ok", "unsubbed": "market.btcusdt.trade.detail", "ts": 1494326028889} ``` 取消订阅成功确认。 @@ -7671,10 +3032,7 @@ Websocket服务器同时支持一次性请求数据(pull)。 > 订阅请求 ```json -{ - "sub": "market.ethbtc.kline.1min", - "id": "id1" -} +{ "sub": "market.ethbtc.kline.1min", "id": "id1"} ``` ### 参数 @@ -7687,31 +3045,13 @@ Websocket服务器同时支持一次性请求数据(pull)。 > Response ```json -{ - "id": "id1", - "status": "ok", - "subbed": "market.ethbtc.kline.1min", - "ts": 1489474081631 //system response time -} +{ "id": "id1", "status": "ok", "subbed": "market.ethbtc.kline.1min", "ts": 1489474081631 //system response time} ``` > Update example ```json -{ - "ch": "market.ethbtc.kline.1min", - "ts": 1489474082831, //system update time - "tick": { - "id": 1489464480, - "amount": 0.0, - "count": 0, - "open": 7962.62, - "close": 7962.62, - "low": 7962.62, - "high": 7962.62, - "vol": 0.0 - } -} +{ "ch": "market.ethbtc.kline.1min", "ts": 1489474082831, //system update time "tick": { "id": 1489464480, "amount": 0.0, "count": 0, "open": 7962.62, "close": 7962.62, "low": 7962.62, "high": 7962.62, "vol": 0.0 }} ``` ### 数据更新字段列表 @@ -7728,18 +3068,14 @@ Websocket服务器同时支持一次性请求数据(pull)。 | vol | float | 成交额, 即 sum(每一笔成交价 * 该笔的成交量) | + ### 数据请求 用请求方式一次性获取K线数据需要额外提供以下参数: (每次最多返回300条) ```json -{ - "req": "market.$symbol.kline.$period", - "id": "id generated by client", - "from": "from time in epoch seconds", - "to": "to time in epoch seconds" -} +{ "req": "market.$symbol.kline.$period", "id": "id generated by client", "from": "from time in epoch seconds", "to": "to time in epoch seconds"} ``` | 参数 | 数据类型 | 是否必需 | 缺省值 | 描述 | 取值范围 | @@ -7760,9 +3096,7 @@ Websocket服务器同时支持一次性请求数据(pull)。 > 订阅请求 ```json -{ - "sub": "market.btcusdt.ticker" -} +{ "sub": "market.btcusdt.ticker"} ``` ### 请求参数 @@ -7774,26 +3108,7 @@ Websocket服务器同时支持一次性请求数据(pull)。 > Response: ```json -{ -"ch": "market.btcusdt.ticker", -"ts": 1628587397308, -"tick": { -"open": 44718.5, -"high": 46711, -"low": 44480.81, -"close": 45868.99, -"amount": 22527.427922989766, -"vol": 1030630905.0136755, -"count": 676424, -"bid": 45868.98, -"bidSize": 0.016782, -"ask": 45868.99, -"askSize": 3.1279664455029423, -"lastPrice": 45868.99, -"lastSize": 0.007444 -} -} - +{"ch": "market.btcusdt.ticker", "ts": 1628587397308, "tick": {"open": 44718.5, "high": 46711, "low": 44480.81, "close": 45868.99, "amount": 22527.427922989766, "vol": 1030630905.0136755, "count": 676424, "bid": 45868.98, "bidSize": 0.016782, "ask": 45868.99, "askSize": 3.1279664455029423, "lastPrice": 45868.99, "lastSize": 0.007444}} ``` ### 响应数据 @@ -7828,10 +3143,7 @@ Websocket服务器同时支持一次性请求数据(pull)。 > Subscribe request ```json -{ - "sub": "market.btcusdt.depth.step0", - "id": "id1" -} +{ "sub": "market.btcusdt.depth.step0", "id": "id1"} ``` ### 参数 @@ -7858,38 +3170,19 @@ Websocket服务器同时支持一次性请求数据(pull)。 > Response ```json -{ - "id": "id1", - "status": "ok", - "subbed": "market.btcusdt.depth.step0", - "ts": 1489474081631 //system response time -} +{ "id": "id1", "status": "ok", "subbed": "market.btcusdt.depth.step0", "ts": 1489474081631 //system response time} ``` > Update example ```json -{ - "ch": "market.htusdt.depth.step0", - "ts": 1572362902027, //system update time - "tick": { - "bids": [ - [3.7721, 344.86],// [price, size] - [3.7709, 46.66] - ], - "asks": [ - [3.7745, 15.44], - [3.7746, 70.52] - ], - "version": 100434317651, - "ts": 1572362902012 //quote time - } -} +{ "ch": "market.htusdt.depth.step0", "ts": 1572362902027, //system update time "tick": { "bids": [ [3.7721, 344.86],// [price, size] [3.7709, 46.66] ], "asks": [ [3.7745, 15.44], [3.7746, 70.52] ], "version": 100434317651, "ts": 1572362902012 //quote time }} ``` ### 数据更新字段列表 + | 字段 | 数据类型 | 描述 | | ------- | -------- | ---------------------------- | | bids | object | 当前的所有买单 [price, size] | @@ -7898,15 +3191,13 @@ Websocket服务器同时支持一次性请求数据(pull)。 | ts | integer | 新加坡时间的时间戳,单位毫秒 | + ### 数据请求 支持数据请求方式一次性获取市场深度数据: ```json -{ - "req": "market.btcusdt.depth.step0", - "id": "id10" -} +{ "req": "market.btcusdt.depth.step0", "id": "id10"} ``` ## 市场深度MBP行情数据(增量推送) @@ -7935,49 +3226,22 @@ Websocket服务器同时支持一次性请求数据(pull)。 3) 当5档/20档订单簿仅发生单边行情变化时,增量推送仅包含单边行情更新,比如,推送消息中包含数组asks,但不含数组bids;
```json -{ - "ch": "market.btcusdt.mbp.5", - "ts": 1573199608679, - "tick": { - "seqNum": 100020146795, - "prevSeqNum": 100020146794, - "asks": [ - [645.140000000000000000, 26.755973959140651643] - ] - } -} +{ "ch": "market.btcusdt.mbp.5", "ts": 1573199608679, "tick": { "seqNum": 100020146795, "prevSeqNum": 100020146794, "asks": [ [645.140000000000000000, 26.755973959140651643] ] }} ``` + 当150档订单簿仅发生单边行情变化时,增量推送包含双边行情更新,但其中一边行情为空,比如,推送消息中包含数组asks更新的同时,也包含bids空数组;
```json -{ - "ch":"market.btcusdt.mbp.150", - "ts":1573199608679, - "tick":{ - "seqNum":100020146795, - "prevSeqNum":100020146794, - "bids":[ ], - "asks":[ - [645.14,26.75597395914065] - ] - } -} +{ "ch":"market.btcusdt.mbp.150", "ts":1573199608679, "tick":{ "seqNum":100020146795, "prevSeqNum":100020146794, "bids":[ ], "asks":[ [645.14,26.75597395914065] ] }} ``` + 未来,150档增量推送的数据行为将与5档/20档增量保持一致,即,单边深度行情变更时,推送消息中将不包含另一边行情深度行情;
4) 当150档订单簿在100毫秒时间间隔内未发生变化时,增量推送包含bids和asks空数组;
```json -{ - "ch":"market.zecusdt.mbp.150", - "ts":1585074391470, - "tick":{ - "seqNum":100772868478, - "prevSeqNum":100772868476, - "bids":[ ], - "asks":[ ] - } -} +{ "ch":"market.zecusdt.mbp.150", "ts":1585074391470, "tick":{ "seqNum":100772868478, "prevSeqNum":100772868476, "bids":[ ], "asks":[ ] }} ``` + 而5档/20档MBP逐笔增量,在订单簿未发生变化时,不推送数据;
未来,150档增量推送的数据行为将与5档增量保持一致,即,在订单簿未发生变化时,不再推送空消息;
5)5档/20档逐笔增量行情仅支持部分交易对(btcusdt,ethusdt,xrpusdt,eosusdt,ltcusdt,etcusdt,adausdt,dashusdt,bsvusdt),150档快照增量支持全部交易对。
@@ -7991,10 +3255,7 @@ REQ频道支持5档/20档/150档全量数据的获取。
> Sub request ```json -{ - "sub": "market.btcusdt.mbp.5", - "id": "id1" -} +{ "sub": "market.btcusdt.mbp.5", "id": "id1"} ``` ### 请求全量数据 @@ -8004,71 +3265,32 @@ REQ频道支持5档/20档/150档全量数据的获取。
> Req request ```json -{ - "req": "market.btcusdt.mbp.5", - "id": "id2" -} +{ "req": "market.btcusdt.mbp.5", "id": "id2"} ``` ### 参数 -| 参数 | 数据类型 | 是否必需 | 缺省值 | 描述 | 取值范围 | -| ------ | -------- | -------- | ------ | ---------------------------- | -------------------------------- | -| symbol | string | true | NA | 交易代码(不支持通配符) | | +| 参数 | 数据类型 | 是否必需 | 缺省值 | 描述 | 取值范围 | +| ------ | -------- | -------- | ------ | ----------------------------------- | ----------------------------------- | +| symbol | string | true | NA | 交易代码(不支持通配符) | | | levels | integer | true | NA | 深度档位(取值:5, 20, 150,400) | 当前仅支持5档,20档,150或400档深度 | > Response (增量订阅) ```json -{ - "id": "id1", - "status": "ok", - "subbed": "market.btcusdt.mbp.5", - "ts": 1489474081631 //system response time -} +{ "id": "id1", "status": "ok", "subbed": "market.btcusdt.mbp.5", "ts": 1489474081631 //system response time} ``` > Incremental Update (增量订阅) ```json -{ - "ch": "market.btcusdt.mbp.5", - "ts": 1573199608679, //system update time - "tick": { - "seqNum": 100020146795, - "prevSeqNum": 100020146794, - "asks": [ - [645.140000000000000000, 26.755973959140651643] // [price, size] - ] - } -} +{ "ch": "market.btcusdt.mbp.5", "ts": 1573199608679, //system update time "tick": { "seqNum": 100020146795, "prevSeqNum": 100020146794, "asks": [ [645.140000000000000000, 26.755973959140651643] // [price, size] ] }} ``` > Response (全量请求) ```json -{ - "id": "id2", - "rep": "market.btcusdt.mbp.150", - "status": "ok", - "data": { - "seqNum": 100020142010, - "bids": [ - [618.37, 71.594], // [price, size] - [423.33, 77.726], - [223.18, 47.997], - [219.34, 24.82], - [210.34, 94.463] - ], - "asks": [ - [650.59, 14.909733438479636], - [650.63, 97.996], - [650.77, 97.465], - [651.23, 83.973], - [651.42, 34.465] - ] - } -} +{ "id": "id2", "rep": "market.btcusdt.mbp.150", "status": "ok", "data": { "seqNum": 100020142010, "bids": [ [618.37, 71.594], // [price, size] [423.33, 77.726], [223.18, 47.997], [219.34, 24.82], [210.34, 94.463] ], "asks": [ [650.59, 14.909733438479636], [650.63, 97.996], [650.77, 97.465], [651.23, 83.973], [651.42, 34.465] ] }} ``` ### 数据更新字段列表 @@ -8091,10 +3313,7 @@ REQ频道支持5档/20档/150档全量数据的获取。
> Sub request ```json -{ -"sub": "market.btcusdt.mbp.refresh.20", -"id": "id1" -} +{"sub": "market.btcusdt.mbp.refresh.20","id": "id1"} ``` ### 参数 @@ -8107,39 +3326,13 @@ REQ频道支持5档/20档/150档全量数据的获取。
> Response ```json -{ -"id": "id1", -"status": "ok", -"subbed": "market.btcusdt.mbp.refresh.20", -"ts": 1489474081631 //system response time -} +{"id": "id1","status": "ok","subbed": "market.btcusdt.mbp.refresh.20","ts": 1489474081631 //system response time} ``` > Refresh Update ```json -{ -"ch": "market.btcusdt.mbp.refresh.20", -"ts": 1573199608679, //system update time -"tick": { - - "seqNum": 100020142010, - "bids": [ - [618.37, 71.594], // [price, size] - [423.33, 77.726], - [223.18, 47.997], - [219.34, 24.82], - [210.34, 94.463], ... // 省略余下15档 - ], - "asks": [ - [650.59, 14.909733438479636], - [650.63, 97.996], - [650.77, 97.465], - [651.23, 83.973], - [651.42, 34.465], ... // 省略余下15档 - ] -} -} +{"ch": "market.btcusdt.mbp.refresh.20","ts": 1573199608679, //system update time"tick": { "seqNum": 100020142010, "bids": [ [618.37, 71.594], // [price, size] [423.33, 77.726], [223.18, 47.997], [219.34, 24.82], [210.34, 94.463], ... // 省略余下15档 ], "asks": [ [650.59, 14.909733438479636], [650.63, 97.996], [650.77, 97.465], [651.23, 83.973], [651.42, 34.465], ... // 省略余下15档 ]}} ``` ### 数据更新字段列表 @@ -8162,10 +3355,7 @@ REQ频道支持5档/20档/150档全量数据的获取。
> Subscribe request ```json -{ - "sub": "market.btcusdt.bbo", - "id": "id1" -} +{ "sub": "market.btcusdt.bbo", "id": "id1"} ``` ### 参数 @@ -8177,30 +3367,13 @@ REQ频道支持5档/20档/150档全量数据的获取。
> Response ```json -{ - "id": "id1", - "status": "ok", - "subbed": "market.btcusdt.bbo", - "ts": 1489474081631 //system response time -} +{ "id": "id1", "status": "ok", "subbed": "market.btcusdt.bbo", "ts": 1489474081631 //system response time} ``` > Update example ```json -{ - "ch": "market.btcusdt.bbo", - "ts": 1489474082831, //system update time - "tick": { - "symbol": "btcusdt", - "quoteTime": "1489474082811", - "bid": "10008.31", - "bidSize": "0.01", - "ask": "10009.54", - "askSize": "0.3", - "seqId":"10242474683" - } -} +{ "ch": "market.btcusdt.bbo", "ts": 1489474082831, //system update time "tick": { "symbol": "btcusdt", "quoteTime": "1489474082811", "bid": "10008.31", "bidSize": "0.01", "ask": "10009.54", "askSize": "0.3", "seqId":"10242474683" }} ``` ### 数据更新字段列表 @@ -8227,10 +3400,7 @@ REQ频道支持5档/20档/150档全量数据的获取。
> Subscribe request ```json -{ - "sub": "market.btcusdt.trade.detail", - "id": "id1" -} +{ "sub": "market.btcusdt.trade.detail", "id": "id1"} ``` ### 参数 @@ -8242,36 +3412,13 @@ REQ频道支持5档/20档/150档全量数据的获取。
> Response ```json -{ - "id": "id1", - "status": "ok", - "subbed": "market.btcusdt.trade.detail", - "ts": 1489474081631 //system response time -} +{ "id": "id1", "status": "ok", "subbed": "market.btcusdt.trade.detail", "ts": 1489474081631 //system response time} ``` > Update example ```json -{ - "ch": "market.btcusdt.trade.detail", - "ts": 1489474082831, //system update time - "tick": { - "id": 14650745135, - "ts": 1533265950234, //trade time - "data": [ - { - "amount": 0.0099, - "ts": 1533265950234, //trade time - "id": 146507451359183894799, - "tradeId": 102043494568, - "price": 401.74, - "direction": "buy" - } - // more Trade Detail data here - ] - } -} +{ "ch": "market.btcusdt.trade.detail", "ts": 1489474082831, //system update time "tick": { "id": 14650745135, "ts": 1533265950234, //trade time "data": [ { "amount": 0.0099, "ts": 1533265950234, //trade time "id": 146507451359183894799, "tradeId": 102043494568, "price": 401.74, "direction": "buy" } // more Trade Detail data here ] }} ``` ### 数据更新字段列表 @@ -8290,10 +3437,7 @@ REQ频道支持5档/20档/150档全量数据的获取。
支持数据请求方式一次性获取成交明细数据(仅能获取最多最近300个成交记录): ```json -{ - "req": "market.btcusdt.trade.detail", - "id": "id11" -} +{ "req": "market.btcusdt.trade.detail", "id": "id11"} ``` ## 市场概要 @@ -8307,10 +3451,7 @@ REQ频道支持5档/20档/150档全量数据的获取。
> Subscribe request ```json -{ - "sub": "market.btcusdt.detail", - "id": "id1" -} +{ "sub": "market.btcusdt.detail", "id": "id1"} ``` ### 参数 @@ -8322,31 +3463,13 @@ REQ频道支持5档/20档/150档全量数据的获取。
> Response ```json -{ - "id": "id1", - "status": "ok", - "subbed": "market.btcusdt.detail", - "ts": 1489474081631 //system response time -} +{ "id": "id1", "status": "ok", "subbed": "market.btcusdt.detail", "ts": 1489474081631 //system response time} ``` > Update example ```json -{ - "ch": "market.btcusdt.detail", - "ts": 1494496390001, //system update time - "tick": { - "amount": 12224.2922, - "open": 9790.52, - "close": 10195.00, - "high": 10300.00, - "id": 1494496390, - "count": 15195, - "low": 9657.00, - "vol": 121906001.754751 - } -} +{ "ch": "market.btcusdt.detail", "ts": 1494496390001, //system update time "tick": { "amount": 12224.2922, "open": 9790.52, "close": 10195.00, "high": 10300.00, "id": 1494496390, "count": 15195, "low": 9657.00, "vol": 121906001.754751 }} ``` ### 数据更新字段列表 @@ -8367,54 +3490,9 @@ REQ频道支持5档/20档/150档全量数据的获取。
支持数据请求方式一次性获取市场概要数据: ```json -{ - "req": "market.btcusdt.detail", - "id": "id11" -} +{ "req": "market.btcusdt.detail", "id": "id11"} ``` -## 杠杆ETP实时净值推送 - -### 主题订阅 - -此主题提供杠杆ETP实时净值的推送。 - -`market.$symbol.etp` - -### 参数 - -| 参数 | 数据类型 | 是否必需 | 缺省值 | 描述 | 取值范围 | -| ------ | -------- | -------- | ------ | -------- | ------------- | -| symbol | string | true | NA | 交易代码 | 杠杆ETP交易对 | - -### 数据更新字段列表 - -| 字段名称 | 数据类型 | 描述 | -| -------------- | -------- | ------------------------------------------- | -| symbol | string | 杠杆ETP交易代码 | -| nav | float | 最新净值 | -| navTime | long | 最新净值更新时间 (unix time in millisecond) | -| outstanding | float | ETP总份额 | -| basket | object | 篮子 | -| { currency | float | 币种 | -| amount } | float | 金额 | -| actualLeverage | float | 实际杠杆率 | - -## 常见错误码 - -以下是WebSocket行情接口的错误码、错误消息和说明。 - -| 错误码 | 错误消息 | 说明 | -| ----------- | -------------------------------------- | ------------------------ | -| bad-request | invalid topic | topic错误 | -| bad-request | invalid symbol | symbol错误 | -| bad-request | symbol trade not open now | 该交易对未到开始交易时间 | -| bad-request | 429 too many request | req 请求太频繁 | -| bad-request | unsub with not subbed topic | 未订阅该主题 | -| bad-request | not json string | 发送的请求不是JSON格式 | -| 1008 | header required correct cloud-exchange | exchangeCode 参数错误 | -| bad-request | request timeout | 请求超时 | - # Websocket资产及订单 ## 简介 @@ -8440,23 +3518,13 @@ REQ频道支持5档/20档/150档全量数据的获取。
当用户的Websocket客户端连接到火币WebSocket服务器后,服务器会定期(当前设为20秒)向其发送`Ping`消息并包含一整数值如下: ```json -{ - "action": "ping", - "data": { - "ts": 1575537778295 - } -} +{ "action": "ping", "data": { "ts": 1575537778295 }} ``` 当用户的Websocket客户端接收到此心跳信息后,应返回`Pong`消息并包含同一整数值: ```json -{ - "action": "pong", - "data": { - "ts": 1575537778295 // 使用Ping消息中的ts值 - } -} +{ "action": "pong", "data": { "ts": 1575537778295 // 使用Ping消息中的ts值 }} ``` ### `action`的有效取值 @@ -8481,30 +3549,13 @@ REQ频道支持5档/20档/150档全量数据的获取。
鉴权请求格式如下: ```json -{ - "action": "req", - "ch": "auth", - "params": { - "authType":"api", - "accessKey": "e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx", - "signatureMethod": "HmacSHA256", - "signatureVersion": "2.1", - "timestamp": "2019-09-01T18:16:16", - "signature": "4F65x5A2bLyMWVQj3Aqp+B4w+ivaA7n5Oi2SuYtCJ9o=" - } -} - +{ "action": "req", "ch": "auth", "params": { "authType":"api", "accessKey": "e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx", "signatureMethod": "HmacSHA256", "signatureVersion": "2.1", "timestamp": "2019-09-01T18:16:16", "signature": "4F65x5A2bLyMWVQj3Aqp+B4w+ivaA7n5Oi2SuYtCJ9o=" }} ``` 鉴权成功后返回数据格式如下: ```json -{ - "action": "req", - "code": 200, - "ch": "auth", - "data": {} -} +{ "action": "req", "code": 200, "ch": "auth", "data": {}} ``` 参数说明 @@ -8535,10 +3586,7 @@ Rest接口签名步骤,您可以点击 Date: Mon, 6 Sep 2021 21:07:05 +0800 Subject: [PATCH 08/32] Update index.html.md --- source/index.html.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/index.html.md b/source/index.html.md index eeb39717f78..08d41afdcbb 100644 --- a/source/index.html.md +++ b/source/index.html.md @@ -98,7 +98,7 @@ table th { **其它代码示例** -[https://github.com/huobiapi?tab=repositories](https://github.com/huobiapi?tab=repositories) +[https://github.com/huobi-sg?tab=repositories](https://github.com/huobi-sg?tab=repositories) ## 测试环境(已停止) From 3e16dddfcb0178e1f479dbfdcbecb03450612208 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=AB=E5=B8=81=E6=96=B0=E5=8A=A0=E5=9D=A1API?= <89068425+huobi-sg@users.noreply.github.com> Date: Mon, 6 Sep 2021 21:07:38 +0800 Subject: [PATCH 09/32] Update index.html.md --- source/index.html.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/index.html.md b/source/index.html.md index 08d41afdcbb..2875d8dc3f9 100644 --- a/source/index.html.md +++ b/source/index.html.md @@ -5,7 +5,7 @@ language_tabs: # must be one of https://git.io/vQNgJ - json toc_footers: - - 创建 API Key + - 创建 API Key includes: search: true From 29c010b818d07de81f07d270c624439d5a0471f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=AB=E5=B8=81=E6=96=B0=E5=8A=A0=E5=9D=A1API?= <89068425+huobi-sg@users.noreply.github.com> Date: Mon, 6 Sep 2021 21:11:51 +0800 Subject: [PATCH 10/32] Update index.html.md --- source/index.html.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/index.html.md b/source/index.html.md index 2875d8dc3f9..53be889da1c 100644 --- a/source/index.html.md +++ b/source/index.html.md @@ -5,7 +5,8 @@ language_tabs: # must be one of https://git.io/vQNgJ - json toc_footers: - - 创建 API Key + - 创建 API Key + - 创建 API Key (上线后删除) includes: search: true From c403d30b7d701e9d181b10955cf62659152fe254 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=AB=E5=B8=81=E6=96=B0=E5=8A=A0=E5=9D=A1API?= <89068425+huobi-sg@users.noreply.github.com> Date: Mon, 6 Sep 2021 21:12:21 +0800 Subject: [PATCH 11/32] Update index.html.md --- source/index.html.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/index.html.md b/source/index.html.md index 53be889da1c..fe759fb72f3 100644 --- a/source/index.html.md +++ b/source/index.html.md @@ -6,7 +6,8 @@ language_tabs: # must be one of https://git.io/vQNgJ toc_footers: - 创建 API Key - - 创建 API Key (上线后删除) +
+ 创建 API Key (上线后删除) includes: search: true From d2bd19f28f0d18e32beace786aefa94479c47272 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=AB=E5=B8=81=E6=96=B0=E5=8A=A0=E5=9D=A1API?= <89068425+huobi-sg@users.noreply.github.com> Date: Mon, 6 Sep 2021 21:15:29 +0800 Subject: [PATCH 12/32] Update index.html.md --- source/index.html.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/index.html.md b/source/index.html.md index fe759fb72f3..34dec482fc9 100644 --- a/source/index.html.md +++ b/source/index.html.md @@ -96,7 +96,7 @@ table th { **SDK(推荐)** -[Java](https://github.com/huobiapi/huobi_Java) | [Python3](https://github.com/huobiapi/huobi_Python) | [C++](https://github.com/huobiapi/huobi_Cpp) | [C#](https://github.com/HuobiRDCenter/huobi_CSharp) | [Go](https://github.com/huobirdcenter/huobi_golang) +[Java](https://github.com/huobi-sg/huobi_Java) | [Python3](https://github.com/huobi-sg/huobi_Python) | [C++](https://github.com/huobi-sg/huobi_Cpp) | [C#](https://github.com/HuobiRDCenter/huobi_CSharp) | [Go](https://github.com/huobirdcenter/huobi_golang) **其它代码示例** From 9b24806a42e6b6565353c3c6127ac25346b0100a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=AB=E5=B8=81=E6=96=B0=E5=8A=A0=E5=9D=A1API?= <89068425+huobi-sg@users.noreply.github.com> Date: Mon, 6 Sep 2021 21:16:04 +0800 Subject: [PATCH 13/32] Update index.html.md --- source/index.html.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/index.html.md b/source/index.html.md index 34dec482fc9..eba7f700e2a 100644 --- a/source/index.html.md +++ b/source/index.html.md @@ -140,9 +140,7 @@ WebSocket是HTML5一种新的协议(Protocol)。它实现了客户端与服 **`https://api.huobi.sg`** -**REST Feed(行情,不包含MBP增量行情)** - -**`https://api.huobi.sg/market`** + **Websocket Feed(行情,不包含MBP增量行情)** From 8493d67b49603fa9a27a9abeaf27c4120e957dfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=AB=E5=B8=81=E6=96=B0=E5=8A=A0=E5=9D=A1API?= <89068425+huobi-sg@users.noreply.github.com> Date: Mon, 6 Sep 2021 21:27:43 +0800 Subject: [PATCH 14/32] Update index.html.md --- source/index.html.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/index.html.md b/source/index.html.md index eba7f700e2a..a536c12940c 100644 --- a/source/index.html.md +++ b/source/index.html.md @@ -96,7 +96,7 @@ table th { **SDK(推荐)** -[Java](https://github.com/huobi-sg/huobi_Java) | [Python3](https://github.com/huobi-sg/huobi_Python) | [C++](https://github.com/huobi-sg/huobi_Cpp) | [C#](https://github.com/HuobiRDCenter/huobi_CSharp) | [Go](https://github.com/huobirdcenter/huobi_golang) +[Java](https://github.com/HuobiRDCenter/huobi_Java) | [Python3](https://github.com/HuobiRDCenter/huobi_Python) | [C++](https://github.com/HuobiRDCenter/huobi_Cpp) | [C#](https://github.com/HuobiRDCenter/huobi_CSharp) | [Go](https://github.com/huobirdcenter/huobi_golang) **其它代码示例** From 71dde1398db627b5888952723fa22109eeb6daeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=AB=E5=B8=81=E6=96=B0=E5=8A=A0=E5=9D=A1API?= <89068425+huobi-sg@users.noreply.github.com> Date: Tue, 7 Sep 2021 18:24:30 +0800 Subject: [PATCH 15/32] Add files via upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新Logo --- .../10738FD0-C6D6-40B2-B005-ECB5B5EB3EDC.png | Bin 0 -> 5708 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/10738FD0-C6D6-40B2-B005-ECB5B5EB3EDC.png diff --git a/source/images/10738FD0-C6D6-40B2-B005-ECB5B5EB3EDC.png b/source/images/10738FD0-C6D6-40B2-B005-ECB5B5EB3EDC.png new file mode 100644 index 0000000000000000000000000000000000000000..3be078ee7943607baa2a3e6fe077355cfdb9d3a7 GIT binary patch literal 5708 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 yA Date: Tue, 7 Sep 2021 18:25:42 +0800 Subject: [PATCH 16/32] Rename logo.svg to history_logo.svg --- source/images/{logo.svg => history_logo.svg} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename source/images/{logo.svg => history_logo.svg} (99%) diff --git a/source/images/logo.svg b/source/images/history_logo.svg similarity index 99% rename from source/images/logo.svg rename to source/images/history_logo.svg index a08a3bd05b6..b0b1add558d 100644 --- a/source/images/logo.svg +++ b/source/images/history_logo.svg @@ -25,4 +25,4 @@ - \ No newline at end of file + From f64da9b0b242fbdb05129e81cfea7d0e23c15c06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=AB=E5=B8=81=E6=96=B0=E5=8A=A0=E5=9D=A1API?= <89068425+huobi-sg@users.noreply.github.com> Date: Tue, 7 Sep 2021 18:34:34 +0800 Subject: [PATCH 17/32] Add files via upload --- source/images/logo.png | Bin 14099 -> 5708 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source/images/logo.png b/source/images/logo.png index 413fbaf3d28bd73f46be8b5c0d3b2af5d83193f6..3be078ee7943607baa2a3e6fe077355cfdb9d3a7 100644 GIT binary patch literal 5708 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 yAbqZtw-M7kN>(rmya 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 Date: Tue, 7 Sep 2021 18:41:57 +0800 Subject: [PATCH 18/32] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=A6=96=E9=A1=B5logo?= =?UTF-8?q?=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../10738FD0-C6D6-40B2-B005-ECB5B5EB3EDC.png | Bin 5708 -> 0 bytes source/images/history_logo.png | Bin 0 -> 14099 bytes source/images/logo.png | Bin 14099 -> 5708 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 source/images/10738FD0-C6D6-40B2-B005-ECB5B5EB3EDC.png create mode 100644 source/images/history_logo.png diff --git a/source/images/10738FD0-C6D6-40B2-B005-ECB5B5EB3EDC.png b/source/images/10738FD0-C6D6-40B2-B005-ECB5B5EB3EDC.png deleted file mode 100644 index 3be078ee7943607baa2a3e6fe077355cfdb9d3a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5708 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 yAbqZtw-M7kN>(rmya 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 yAbqZtw-M7kN>(rmya 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 Date: Tue, 7 Sep 2021 19:24:34 +0800 Subject: [PATCH 19/32] Delete 10738FD0-C6D6-40B2-B005-ECB5B5EB3EDC.png --- .../10738FD0-C6D6-40B2-B005-ECB5B5EB3EDC.png | Bin 5708 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 source/images/10738FD0-C6D6-40B2-B005-ECB5B5EB3EDC.png diff --git a/source/images/10738FD0-C6D6-40B2-B005-ECB5B5EB3EDC.png b/source/images/10738FD0-C6D6-40B2-B005-ECB5B5EB3EDC.png deleted file mode 100644 index 3be078ee7943607baa2a3e6fe077355cfdb9d3a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5708 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 yA Date: Wed, 8 Sep 2021 10:09:57 +0800 Subject: [PATCH 20/32] =?UTF-8?q?svg=E7=BB=93=E5=B0=BE=E7=9A=84=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/images/logo.svg | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 source/images/logo.svg diff --git a/source/images/logo.svg b/source/images/logo.svg new file mode 100644 index 00000000000..5adfcb36b05 --- /dev/null +++ b/source/images/logo.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + From 8533824a3867c4fa1ed7a48213f471db4bc26e74 Mon Sep 17 00:00:00 2001 From: kuangyongqing Date: Wed, 8 Sep 2021 10:21:52 +0800 Subject: [PATCH 21/32] =?UTF-8?q?=E9=80=82=E7=94=A8=E4=BA=8E=E9=BB=91?= =?UTF-8?q?=E8=89=B2=E8=83=8C=E6=99=AF=E7=9A=84logo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/images/logo.svg | 43 ++++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/source/images/logo.svg b/source/images/logo.svg index 5adfcb36b05..e45655e4bd5 100644 --- a/source/images/logo.svg +++ b/source/images/logo.svg @@ -1,20 +1,27 @@ - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + From 1f9a34a3873267b0291d5d15b9bca2588ac4896c Mon Sep 17 00:00:00 2001 From: kuangyongqing Date: Fri, 17 Sep 2021 16:53:08 +0800 Subject: [PATCH 22/32] =?UTF-8?q?=E9=9A=90=E8=97=8F=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/layouts/layout.erb | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/source/layouts/layout.erb b/source/layouts/layout.erb index bfdd9d31db2..a3f7030c541 100644 --- a/source/layouts/layout.erb +++ b/source/layouts/layout.erb @@ -64,15 +64,17 @@ under the License. 现货 - - 交割合约 - - - 币本位永续合约 - - - USDT本位永续合约 - + +# +# 交割合约 +# +# +# 币本位永续合约 +# +# +# USDT本位永续合约 +# + - 简体中文 + English
<% if language_tabs.any? %> From 8e7c4cf842ab3aeed08bcf5514b27b2b75ce2fb4 Mon Sep 17 00:00:00 2001 From: kuangyongqing Date: Tue, 28 Sep 2021 20:41:47 +0800 Subject: [PATCH 27/32] =?UTF-8?q?=E4=B8=AD=E8=8B=B1=E6=96=87=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E5=BC=80=E5=85=B3=E6=98=BE=E7=A4=BA=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/layouts/layout.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/layouts/layout.erb b/source/layouts/layout.erb index 420987b83b5..f7fdf47b7d1 100644 --- a/source/layouts/layout.erb +++ b/source/layouts/layout.erb @@ -62,7 +62,7 @@ under the License. - 现货 + 现货