简介
API 简介
欢迎使用Hoo API! 你可以使用此 API 获得市场行情数据,进行交易,并且管理你的账户。
在文档的右侧是代码,目前我们仅提供针对 shell
的代码示例。
交易市场分为币币交易和创新区交易。
可以使用以下域名访问:api.hoolgd.com
欢迎有优秀 maker 策略且交易量大的机构参与长期做市商项目。
钱包账户接口
可以访问的接口如下:
接口 | 说明 |
---|---|
GET /api/pub/v1/coins | 获取币种信息接口 |
GET /api/pub/v1/addresses | 新增获取充值地址 |
GET /api/pub/v1/deposit/bills | 获取充值记录 |
POST /api/pub/v1/withdraw | 用户提币接口 |
GET /api/pub/v1/withdraw/bills | 获取用户提币记录 |
GET /api/pub/v1/account | 获取账户状态 |
公共接口
不需要鉴权可访问接口如下:
接口 | 说明 | 市场 |
---|---|---|
GET /open/v1/tickers/market | 所有交易对 | 币币 |
GET /open/v1/depth/market | 深度 | 币币 |
GET /open/v1/trade/market | 逐笔成交 | 币币 |
GET /open/v1/kline/market | k线数据 | 币币 |
GET /open/innovate/v1/tickers/market | 所有交易对 | 创新区 |
GET /open/innovate/v1/depth/market | 深度 | 创新区 |
GET /open/innovate/v1/trade/market | 逐笔成交 | 创新区 |
GET /open/innovate/v1/kline/market | k线数据 | 创新区 |
鉴权接口
可以访问的接口如下:
接入说明
Restful host:
https://api.hoolgd.com
Websocket host:
币币交易 wss://api.hoolgd.com/ws
创新区交易 wss://api.hoolgd.com/wsi
鉴权说明
所有接口都需要进行鉴权,参数为client_id, ts, nonce, sign。client_id是api key, client_key为密钥,请妥善保管。
client_id为api key,ts为当前时间戳,与服务器时间差正负5秒会被拒绝,nonce为随机字符串,不能与上次请求所使用相同。
签名方法, 将client_id, ts, nonce进行排序连接,使用hmac-sha256方法进行签名,例如待签名字符串为: client_id=abc&nonce=xyz&ts=1571293029
签名: sign = hmac.New(client_key, sign_str, sha256)
Content-Type: application/x-www-form-urlencoded
币币/创新区接口,post接口请求请将参数放在请求体里面,get接口请求携带在url链接中。
钱包账户接口,请将鉴权信息放在header头部信息,HOO-KEY = api key,Hoo-Sign = sign,Hoo-Timestamp = ts。
每个api key都与ip进行绑定,最多可设置5个ip。
钱包账户接口
获取币种信息接口
此接口获取HOO平台币种
"https://api.hoolgd.com/api/pub/v1/coins"
HTTP请求
- GET
/api/pub/v1/coins
请求参数
无
Responds:
{
"code": "10000",
"data": {
"coins": [
{
"coin_name": "BSV",
"coin_id": 225,
"chain_list": [
{
"fee_unit": "BSV",
"min_amount": "0",
"fee": "396.54557133",
"max_amount": "10000",
"is_withdraw": 0,
"is_accept": 0,
"chain_name": "BSV"
}
],
"coin_icon": "https:\/\/api.hoolgd.com\/media\/news_thumb\/ab02d7f9-0732-4623-8f8d-b7a2dff96cf7.jpg"
}
],
"count": 1
},
"message": "success"
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
count | int | 币种数量 |
coins | array | 币种详情[{ |
coin_name | string | 币种名称 |
coin_id | string | 币种ID |
chain_list | array | 币种支持的链[{ |
fee_unit | string | 手续费币种名称 |
min_amount | integer | 最小提币额 |
fee | integer | 手续费数量 |
max_amount | string | 最大提币额 |
is_withdraw | string | 是否允许提币 |
is_accept | string | 是否允许充值 |
chain_name | string | 链名称}] |
coin_icon | string | 币种图标}] |
新增获取充值地址
此接口获取用户币种充值地址
"https://api.hoolgd.com/api/pub/v1/addresses"
HTTP请求
- GET
/api/pub/v1/addresses
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
coin_name | string | 是 | 币种名称,如: BTC |
chain_name | string | 否 | 链名称,如: BTC |
Responds:
{
"code": "10000",
"data": {
"addresses": [
{
"address": "",
"coin_name": "USDT",
"chain_name": "OMNI"
}
],
"count": 1
},
"message": "success"
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
addresses | array | 币种不同链的地址[{ |
address | string | 地址, 可能为空字符串,表示目前还未分配有地址 |
coin_name | string | 币种名称 |
chain_name | string | 链名称}] |
count | int | 数量 |
获取充值记录
此接口获取用户充值记录
"https://api.hoolgd.com/api/pub/v1/deposit/bills"
HTTP请求
- GET
/api/pub/v1/deposit/bills
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
coin_name | string | 是 | 币种名称,如: BTC |
status | int | 否 | 状态 1成功 2进行中 3失败 不传或传其他查全部 |
bill_uuid | string | 否 | 账单流水号 |
start_at | string | 否 | 开始时间戳 秒级 |
end_at | string | 否 | 截止时间戳 秒级 |
page | string | 否 | 页码 默认1 |
pagesize | string | 否 | 每页条数 默认20 |
Responds:
{
"code": "10000",
"data": {
"count": 1,
"pagesize": 20,
"bills": [
{
"transaction_id": "",
"amount": "80",
"side": 1,
"address": "",
"coin_name": "USDT",
"bill_uuid": "20220322114814949011120867",
"burn_amount": "",
"process_time": 1647920894,
"chain_name": "ERC20",
"status": 1
}
],
"page": 1
},
"message": "success"
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
count | int | 账单数量 |
bills | array | 账单[{ |
bill_uuid | string | 账单流水号 |
status | string | 状态 1成功 2进行中 3失败 |
process_time | string | 处理完成时间戳 秒级 |
chain_name | string | 链名称 |
amount | string | 数量 |
address | string | 接收地址 |
transaction_id | string | 交易哈希 |
side | string | 站内站内 1站内 2站外 |
burn_amount | string | 燃烧数量 |
coin_name | string | 币种名称}] |
page | int | 页码 |
pagesize | int | 每条条数 |
用户提币接口
此接口用于用户提币
"https://api.hoolgd.com/api/pub/v1/withdraw"
HTTP请求
- POST
/api/pub/v1/withdraw
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
coin_name | string | 是 | 币种名称,如: BTC |
chain_name | string | 是 | 链名称,如: BTC |
amount | string | 是 | 数量 |
to_address | string | 是 | 接收地址 |
memo | string | 是 | 接收地址memo |
Responds:
{
"code": "10000",
"data": {
"order_no": "20220426152343066472638058",
"coin_name": "USDT",
"chain_name": "BSC"
},
"message": "success"
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
order_no | string | 账单流水号 |
coin_name | string | 币种名称 |
chain_name | string | 链名称 |
获取用户提币记录
此接口获取用户提币记录
"https://api.hoolgd.com/api/pub/v1/withdraw/bills"
HTTP请求
- GET
/api/pub/v1/withdraw/bills
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
coin_name | string | 是 | 币种名称,如: BTC |
status | int | 否 | 状态 1成功2进行中3失败 |
bill_uuid | string | 否 | 账单流水号 |
start_at | string | 否 | 开始时间戳 秒级 |
end_at | string | 否 | 截止时间戳 秒级 |
page | string | 否 | 页码 默认1 |
pagesize | string | 否 | 每页条数 默认20 |
Responds:
{
"code": "10000",
"data": {
"count": 1,
"pagesize": 20,
"bills": [
{
"amount": "22",
"side": 1,
"fee_unit": "USDT",
"fee": "0",
"to_address": "",
"transaction_list": [
],
"process_time": 1650957823,
"coin_name": "USDT",
"bill_uuid": "20220426152343066472638058",
"create_at": 1650957823,
"from_address": "",
"chain_name": "BSC",
"status": 2
},
],
"page": 1
},
"message": "success"
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
count | int | 账单数量 |
bills | array | 账单[{ |
bill_uuid | string | 账单流水号 |
status | string | 状态 1成功 2进行中 3失败 |
process_time | string | 处理完成时间戳 秒级 |
create_at | string | 生成时间戳 秒级 |
chain_name | string | 链名称 |
amount | string | 数量 |
to_address | string | 接收地址 |
side | string | 站内站内 1站内 2站外 |
coin_name | string | 币种名称 |
from_address | string | 发送地址 |
transaction_list | array | 交易上链列表[{ |
index_no | int | 交易序号 |
amount | string | 数量 |
transaction_id | string | 交易哈希 |
confirmations | int | 确认数 |
total_confirmations | int | 总的确认数 |
block_url | string | 路由 |
block_id | int | 交易区块}] |
fee | string | 手续费 |
fee_unit | string | 手续费币种}] |
page | int | 页码 |
pagesize | int | 每条条数 |
获取账户状态
此接口获取账户状态
"https://api.hoolgd.com/api/pub/v1/account"
HTTP请求
- POST
/api/pub/v1/account
请求参数
无
Responds:
{
"code": "10000",
"data": {
"coin_name": "BTC",
"is_withdraw": 1,
"withdraw_left": "0.99948384",
"withdraw_total": 1
},
"message": "success"
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
withdraw_total | string | 24h总的提币额 |
withdraw_left | string | 24h剩余提币额 |
coin_name | string | 币种名称 |
is_withdraw | string | 是否允许提币 |
WebSocket说明
需要先进行鉴权,才可进行订阅。
鉴权格式: {"op":"apilogin","sign":"","client_id":"","nonce":"","ts": int type},如:{"op":"apilogin","sign":"abc123","client_id":"abc123","nonce":"1","ts": 1576207749}
心跳处理,客户端需定时上发心跳信息,任意字符串,服务端每30秒会检查心跳,超时没有收到自动关闭连接。{"op":"sub", "topic":"hb"}
订阅主题
{"op":"sub", "topic": ""}
K线数据
请求参数
{"op":"sub", "topic": "kline:1Min:EOS-USDT"}
参数 | 说明 |
---|---|
kline:1Min:EOS-USDT | EOS-USDT的1分钟k线 |
Responds:
{
"symbol":"EOS-USDT",
"ticks":[
{
"close":"2.62",
"high":"3.11",
"low":"2.62",
"open":"3.01",
"timestamp":1572851100,
"volume":"17.55"
}
],
"timestamp":1572851160917,
"topic":"kline:1Min:EOS-USDT",
"type":"60000"
}
数据更新字段列表
参数名 | 参数类型 | 描述 |
---|---|---|
symbol | string | 交易对 |
ticks | object | k线信息 |
close | string | 本阶段收盘价 |
high | string | 本阶段最高价 |
low | string | 本阶段最低价 |
open | string | 本阶段开盘价 |
timestamp | integer | 时间戳 毫秒 |
volume | string | 成交量 |
逐笔成交
请求参数
{"op":"sub", "topic": "trade:LTC-USDT"}
参数 | 说明 |
---|---|
trade:LTC-USDT | LTC-USDT逐笔成交记录 |
Responds:
{
"amount":"7.473",
"price":"2.82",
"side":1,
"symbol":"EOS-USDT",
"timestamp":1572851197910,
"topic":"trade:EOS-USDT",
"volume":"2.65"
}
数据更新字段列表
参数名 | 参数类型 | 描述 |
---|---|---|
amount | string | 成交额 |
price | string | 成交价 |
side | integer | 成交方向,1买,-1卖 |
symbol | string | 交易对 |
timestamp | integer | 时间戳 毫秒 |
volume | string | 成交量 |
深度
请求参数
{"op":"sub", "topic": "depth:0:LTC-USDT"}
参数 | 说明 |
---|---|
depth:0:LTC-USDT | 深度 |
Responds:
{
"bids":[
{'price': '2.923', 'quantity': '12'},
{'price': '2.823', 'quantity': '12'},
{'price': '2.723', 'quantity': '16'}
],
"asks":[
{'price': '3.05', 'quantity': '3.48'},
{'price': '3.31', 'quantity': '5'},
{'price': '3.55', 'quantity': '10'}
],
"symbol":"EOS-USDT",
"timestamp":1572851208935,
"topic":"depth:0:EOS-USDT"
}
数据更新字段列表
参数名 | 参数类型 | 描述 |
---|---|---|
bids | object | 当前所有买单[{price 价格, quantity 数量}] |
asks | object | 当前所有卖单[{price 价格, quantity 数量}] |
行情
请求参数
{"op":"sub", "topic": "quotes"}
参数 | 说明 |
---|---|
quotes | 行情 |
Responds:
{
"amount":"52080.1255",
"change":"0.00949367",
"price":"3.19",
"symbol":"EOS-USDT",
"timestamp":1572851216950,
"topic":"quotes",
"volume":"17965.65"
}
数据更新字段列表
参数名 | 参数类型 | 描述 |
---|---|---|
amount | string | 成交额 |
change | string | 涨跌幅 |
price | string | 当前价 |
symbol | string | 交易对 |
timestamp | integer | 时间戳 毫秒 |
volume | string | 24小时成交量 |
账户余额变化
请求参数
{"op":"sub", "topic": "accounts"}
参数 | 说明 |
---|---|
accounts | 账户余额变化 |
Responds:
{
"available":"4194.3466678",
"freeze":"71.609185",
"symbol":"USDT",
"topic":"accounts",
"total":"4265.9558528"
}
数据更新字段列表
参数名 | 参数类型 | 描述 |
---|---|---|
available | string | 可用余额 |
freeze | string | 冻结余额 |
symbol | string | 币种 |
total | string | 总余额 |
委托变化
请求参数
{"op":"sub", "topic": "orders:BTC-USDT"}
参数 | 说明 |
---|---|
orders:BTC-USDT | 委托变化 |
Responds:
// 下单
{
"left":"1",
"order_id":"11574948935833473",
"order_type":1,
"price":"80000",
"quantity":"1",
"side":-1,
"status":2,
"symbol":"BTC-USDT",
"timestamp":1574949805841,
"topic":"orders:BTC-USDT",
"trade_no":"499081745280826070655",
"match_qty":"0"
}
// 撤单
{
"left":"0",
"order_id":"11574948935833473",
"order_type":1,
"price":"80000",
"quantity":"1",
"side":-1,
"status":6,
"symbol":"BTC-USDT",
"timestamp":1574949805841,
"topic":"orders:BTC-USDT",
"trade_no":"499081745280826070655",
"match_qty":"0",
"match_price":"0"
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
left | string | 剩余数量 |
order_id | string | 订单id |
order_type | int | 订单类型,1限价,3市价 |
price | string | 委托价 |
quantity | string | 委托数量 |
side | int | 方向,1买,-1卖 |
status | int | 状态 2 委托中,3部分成交,4全部成交,5部分成交后撤消,6全部撤消 |
symbol | string | 交易对 |
timestamp | int | 创建时间 毫秒 |
trade_no | string | 订单流水号 |
match_qty | string | 已成交数量 |
match_price | string | 成交均价 |
基础信息
所有交易对
此接口返回全部或指定hoo支持的交易对。
币币市场
"https://api.hoolgd.com/open/v1/tickers"
创新区市场
"https://api.hoolgd.com/open/innovate/v1/tickers"
HTTP请求
币币市场
- GET /open/v1/tickers
创新区市场
- GET /open/innovate/v1/tickers
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
symbol | string | 否 | 交易对,如: BTC-USDT |
Responds:
{
'code': 0,
'data': [
{'amount': '1.586',
'change': '-0.235462',
'high': '3.05',
'low': '3.05',
'price': '0',
'symbol': 'EOS-USDT',
'amt_num': 4,
'qty_num': 2,
'volume': '0.52'
},
]
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
amount | string | 24小时成交额 |
change | string | 24小时涨跌幅 |
high | string | 24小时最高 |
low | string | 24小时最低 |
price | string | 当前价 |
symbol | string | 交易对 |
amt_num | integer | 价格精度 |
qty_num | integer | 数量精度 |
volume | string | 24小时成交量 |
账户余额
币币市场
"https://api.hoolgd.com/open/v1/balance"
创新区市场
"https://api.hoolgd.com/open/innovate/v1/balance"
HTTP请求
币币交易
- GET /open/v1/balance
创新区交易
- GET /open/innovate/v1/balance
请求参数
无
Responds:
{
'code': 0,
'data': [
{
'amount': '4317.6696678',
'symbol': "USDT",
'freeze': '71.609185'
},
]
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
amount | string | 可用余额 |
symbol | string | 币种 |
freeze | string | 冻结余额 |
服务器时间戳
币币交易
"https://api.hoolgd.com/open/v1/timestamp"
创新区交易
"https://api.hoolgd.com/open/innovate/v1/timestamp"
HTTP请求
币币交易
- GET /open/v1/timestamp
创新区交易
- GET /open/innovate/v1/timestamp
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|
无
Responds:
{
"code": 0,
"msg": "ok",
"data": "12354534",
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
data | string | 时间戳 |
行情数据
市场k线数据
币币交易
"https://api.hoolgd.com/open/v1/kline"
创新区交易
"https://api.hoolgd.com/open/innovate/v1/kline"
HTTP请求
币币交易
- GET /open/v1/kline
创新区交易
- GET /open/innovate/v1/kline
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
symbol | string | 是 | 交易对,如: BTC-USDT |
type | string | 是 | 类型1Min, 5Min, 15Min, 30Min等 |
Responds:
{
'code': 0,
'data': [
{
'amount': '0',
'close': '3.05',
'high': '3.05',
'low': '3.05',
'open': '3.05',
'time': 1571812440,
'volume': '0'
}
]
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
amount | string | 成交额 |
close | string | 本阶段收盘价 |
high | string | 本阶段最高价 |
low | string | 本阶段最低价 |
open | string | 本阶段开盘价 |
time | integer | 时间 |
volume | string | 成交量 |
市场深度数据
币币交易
"https://api.hoolgd.com/open/v1/depth"
创新区交易
"https://api.hoolgd.com/open/innovate/v1/depth"
HTTP请求
币币交易
- GET /open/v1/depth
创新区交易
- GET /open/innovate/v1/depth
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
symbol | string | 是 | 交易对 |
Responds:
{
'code': 0,
'data': {
'bids': [
{'price': '2.923', 'quantity': '12'},
{'price': '2.823', 'quantity': '12'},
{'price': '2.813', 'quantity': '14'}
],
'asks': [
{'price': '3.05', 'quantity': '3.48'},
{'price': '3.31', 'quantity': '15'},
{'price': '3.923', 'quantity': '15'}
]
},
'msg': 'ok'
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
bids | object | 当前所有买单[{price 价格, quantity 数量}] |
asks | object | 当前所有卖单[{price 价格, quantity 数量}] |
获取最近5条成交
币币交易
"https://api.hoolgd.com/open/v1/tickers/trade"
创新区交易
"https://api.hoolgd.com/open/innovate/v1/tickers/trade"
HTTP请求
币币交易
- GET /open/v1/tickers/trade
创新区交易
- GET /open/innovate/v1/tickers/trade
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
symbol | string | 是 | 交易对 |
Responds:
{
'code': 0,
'data': [{
'amount': '0.918',
'price': '2.04',
'side': -1,
'time': 1574942822160,
'volume': '0.45'
}]
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
amount | string | 成交额 |
price | string | 成交价 |
side | integer | 成交方向,1买,-1卖 |
time | integer | 时间 |
volume | string | 成交量 |
现货
下单
币币交易
"https://api.hoolgd.com/open/v1/orders/place"
创新区交易
"https://api.hoolgd.com/innovate/open/v1/orders/place"
HTTP请求
币币交易
- POST /open/v1/orders/place
创新区交易
- POST /open/innovate/v1/orders/place
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
symbol | string | 是 | 交易对 |
price | string | 否 | 价格,如果是限价单,必填 |
quantity | string | 是 | 数量 |
side | int | 是 | 方向,1买,-1卖 |
order_type | string | 否 | 买卖单类型,LIMIT限价单(默认),MARKET市价单 |
Responds:
{
"code": 0,
"msg": "ok",
"data": {
"order_id": "xxx",
"trade_no": "xxx",
},
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
order_id | string | 委托号 |
trade_no | string | 流水号 |
撤销单个订单
币币交易
"https://api.hoolgd.com/open/v1/orders/cancel"
创新区交易
"https://api.hoolgd.com/open/innovate/v1/orders/cancel"
HTTP请求
币币交易
- POST /open/v1/orders/cancel
创新区交易
- POST /open/innovate/v1/orders/cancel
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
symbol | string | 是 | 交易对 |
order_id | string | 是 | 委托号 |
trade_no | string | 是 | 流水号 |
Responds:
{
"code": 0,
"msg": "ok",
}
返回字段
参数名 | 参数类型 | 描述 |
---|
无
撤销部分或所有委托中订单
币币交易
"https://api.hoolgd.com/open/v1/orders/batcancel"
创新区交易
"https://api.hoolgd.com/open/innovate/v1/orders/batcancel"
HTTP请求
币币交易
- POST /open/v1/orders/batcancel
创新区交易
- POST /open/innovate/v1/orders/batcancel
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
symbol | string | 是 | 交易对 |
order_ids | string | 否 | 交易对id,1000,2000,3000, 英文逗号分隔订单id,为空全部撤单 |
Responds:
{
"code": 0,
"msg": "ok",
}
返回字段
参数名 | 参数类型 | 描述 |
---|
无
委托中列表
币币交易
"https://api.hoolgd.com/open/v1/orders/last"
创新区交易
"https://api.hoolgd.com/open/innovate/v1/orders/last"
HTTP请求
币币交易
- GET /open/v1/orders/last
创新区交易
- GET /open/innovate/v1/orders/last
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
symbol | string | 是 | 交易对 |
Responds:
{
'code': 0,
'data': [
{
'symbol': 'BTC-USDT',
'order_id': '11574744030837944',
'trade_no': '499016576021202015341',
'price': '7900',
'quantity': '1',
'match_amt': '0',
'match_qty': '0',
'match_price': '',
'side': -1,
'order_type': 1,
'create_at': 1574744151836
},
],
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
symbol | string | 交易对 |
order_id | string | 订单ID |
trade_no | string | 订单流水号 |
price | string | 委托价 |
quantity | string | 委托数量 |
match_amt | string | 已成交金额 |
match_qty | string | 已成交数量 |
match_price | string | 成交均价 |
side | int | 方向,1买,-1卖 |
order_type | int | 订单类型,1限价,3市价 |
create_at | int | 创建时间 |
订单列表
币币交易
"https://api.hoolgd.com/open/v1/orders"
创新区交易
"https://api.hoolgd.com/open/innovate/v1/orders"
HTTP请求
币币交易
- GET /open/v1/orders
创新区交易
- GET /open/innovate/v1/orders
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
symbol | string | 是 | 交易对,如EOS-USDT |
pagenum | int | 否 | 页码 |
pagesize | int | 否 | 页大小,最小10, 最大50,默认20 |
side | int | 否 | 方向,1买,-1卖,0所有 |
start | int | 否 | 时间,时间戳 |
end | int | 否 | 结束时间,时间戳 |
Responds:
{
'code': 0,
'msg': 'ok',
'data': {
'count': 4,
'orders': [
{
'order_id': '11574744030837944',
'trade_no': '499016576021202015341',
'symbol': 'BTC-USDT',
'price': '7900',
'quantity': '1',
'match_amt': '0',
'match_qty': '0',
'match_price': '',
'side': -1,
'order_type': 1,
'status': 6,
'create_at': 1574744151836
},
]
},
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
order_id | string | 订单id |
trade_no | string | 订单流水号 |
symbol | string | 交易对 |
price | string | 委托价 |
quantity | string | 委托数量 |
match_amt | string | 已成交金额 |
match_qty | string | 已成交数量 |
match_price | string | 成交均价 |
side | int | 方向,1买,-1卖 |
order_type | int | 订单类型,1限价,3市价 |
status | int | 状态 2 委托中,3部分成交,4全部成交,5部分成交后撤消,6全部撤消 |
create_at | int | 创建时间 |
单个订单成交明细
币币交易
"https://api.hoolgd.com/open/v1/orders/detail"
创新区交易
"https://api.hoolgd.com/open/innovate/v1/orders/detail"
HTTP请求
币币交易
- GET /open/v1/orders/detail
创新区交易
- GET /open/innovate/v1/orders/detail
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
symbol | string | 是 | 交易对,如EOS-USDT |
order_id | string | 是 | 委托订单id |
Responds:
{
'code': 0,
'data': {
'order_id': '11574751725833010',
'trade_no': '499073202290421221116',
'symbol': 'BTC-USDT',
'price': '70000',
'quantity': '0.0001',
'match_amt': '7',
'match_qty': '0.0001',
'match_price': '70000',
'fee': '0.0112',
'side': -1,
'order_type': 1,
'status': 4,
'create_at': 1574922846832,
'trades': [{
'trade_id': "1",
'amount': '7',
'price': '70000',
'quantity': '0.0001',
'fee': '0.0112',
'time': 1574922846833
}]
}
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
order_id | string | 订单id |
trade_no | string | 订单流水号 |
symbol | string | 交易对 |
price | string | 委托价 |
quantity | string | 委托数量 |
match_amt | string | 已成交金额 |
match_qty | string | 已成交数量 |
match_price | string | 成交均价 |
fee | string | 手续费 |
side | int | 方向,1买,-1卖 |
order_type | int | 订单类型,1限价,3市价 |
status | int | 状态 2 委托中,3部分成交,4全部成交,5部分成交后撤消,6全部撤消 |
create_at | int | 委托单创建时间 |
trades | object | 已成交数据[{ |
trade_id | string | 成交记录id |
amount | string | 每条成交记录的成交额 |
price | string | 每条成交记录的成交价 |
quantity | string | 每条成交记录的成交量 |
fee | string | 每条成交记录的手续费 |
time | int | 每条成交记录的成交时间}] |
分页获取订单成交明细
币币交易
"https://api.hoolgd.com/open/v1/orders/detailmore"
创新区交易
"https://api.hoolgd.com/open/innovate/v1/orders/detailmore"
HTTP请求
币币交易
- GET /open/v1/orders/detailmore
创新区交易
- GET /open/innovate/v1/orders/detailmore
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
symbol | string | 是 | 交易对,如EOS-USDT |
pagesize | int | 否 | 页大小,最小10, 最大50,默认10 |
pagenum | int | 否 | 页码,默认为1 |
Responds:
{
'code': 0,
'data': {
'count': 10,
'trades': [
{
'amount': '11574751725833010',
'fee': '499073202290421221116',
'symbol': 'BTC-USDT',
'price': '70000',
'quantity': '0.0001',
'side': '7',
'time': 1574922846833,
'trade_id': 1,
}
]
}
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
count | int | 成交订单数量 |
trades | object | 已成交数据[{ |
symbol | string | 交易对 |
side | int | 方向,1买,-1卖 |
trade_id | int | 成交记录id |
amount | string | 每条成交记录的成交额 |
price | string | 每条成交记录的成交价 |
quantity | string | 每条成交记录的成交量 |
fee | string | 每条成交记录的手续费 |
time | int | 每条成交记录的成交时间}] |
获取用户某个交易对手续费
币币市场
"https://api.hoolgd.com/open/v1/fee-rate"
创新区市场
"https://api.hoolgd.com/open/innovate/v1/fee-rate"
HTTP请求
币币交易
- GET /open/v1/fee-rate
创新区交易
- GET /open/innovate/v1/fee-rate
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
symbol | string | 是 | 交易对 |
Responds:
{
'code': 0,
'data': {
'maker_fee': '0.0001',
'taker_fee': "0.0002"
}
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
maker_fee | string | 挂单手续费 |
taker_fee | string | 吃单手续费 |
公共接口
所有交易对
币币交易
"https://api.hoolgd.com/open/v1/tickers/market"
创新区交易
"https://api.hoolgd.com/open/innovate/v1/tickers/market"
HTTP请求
币币交易
- GET /open/v1/tickers/market
创新区交易
- GET /open/innovate/v1/tickers/market
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|
Responds:
{
'code': 0,
'data': [
{'amount': '1.586',
'change': '-0.235462',
'high': '3.05',
'low': '3.05',
'price': '0',
'symbol': 'EOS-USDT',
'amt_num': 4,
'qty_num': 2,
'volume': '0.52'
},
]
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
amount | string | 24小时成交额 |
change | string | 24小时涨跌幅 |
high | string | 24小时最高 |
low | string | 24小时最低 |
price | string | 当前价 |
symbol | string | 交易对 |
amt_num | integer | 价格精度 |
qty_num | integer | 数量精度 |
volume | string | 24小时成交量 |
深度
币币交易
"https://api.hoolgd.com/open/v1/depth/market"
创新区交易
"https://api.hoolgd.com/open/innovate/v1/depth/market"
HTTP请求
币币交易
- GET /open/v1/depth/market
创新区交易
- GET /open/innovate/v1/depth/market
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
symbol | string | 是 | 交易对名称,如BTC-USDT |
Responds:
{
'code': 0,
'data': {
'bids': [
{'price': '2.923', 'quantity': '12'},
{'price': '2.823', 'quantity': '12'},
{'price': '2.813', 'quantity': '14'}
],
'asks': [
{'price': '3.05', 'quantity': '3.48'},
{'price': '3.31', 'quantity': '15'},
{'price': '3.923', 'quantity': '15'}
]
},
'msg': 'ok'
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
bids | object | 当前所有买单[{price 价格, quantity 数量}] |
asks | object | 当前所有卖单[{price 价格, quantity 数量}] |
逐笔成交
币币交易
"https://api.hoolgd.com/open/v1/trade/market"
创新区交易
"https://api.hoolgd.com/open/innovate/v1/trade/market"
HTTP请求
币币交易
- GET /open/v1/trade/market
创新区交易
- GET /open/innovate/v1/trade/market
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
symbol | string | 是 | 交易对名称,如BTC-USDT |
Responds:
{
'code': 0,
'data': [{
'amount': '0.918',
'price': '2.04',
'side': -1,
'time': 1574942822160,
'volume': '0.45'
}]
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
amount | string | 成交额 |
price | string | 成交价 |
side | integer | 成交方向,1买,-1卖 |
time | integer | 时间 |
volume | string | 成交量 |
k线数据
币币交易
"https://api.hoolgd.com/open/v1/kline/market"
创新区交易
"https://api.hoolgd.com/open/innovate/v1/kline/market"
HTTP请求
币币交易
- GET /open/v1/kline/market
创新区交易
- GET /open/innovate/v1/kline/market
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
symbol | string | 是 | 交易对,如: BTC-USDT |
type | string | 是 | 类型1Min, 5Min, 15Min, 30Min等 |
Responds:
{
'code': 0,
'data': [
{
'amount': '0',
'close': '3.05',
'high': '3.05',
'low': '3.05',
'open': '3.05',
'time': 1571812440,
'volume': '0'
}
]
}
返回字段
参数名 | 参数类型 | 描述 |
---|---|---|
amount | string | 成交额 |
close | string | 本阶段收盘价 |
high | string | 本阶段最高价 |
low | string | 本阶段最低价 |
open | string | 本阶段开盘价 |
time | integer | 时间 |
volume | string | 成交量 |
钱包账户API调用示例
Python:
# -*- coding:utf-8 -*-
import hmac
import json
from urllib.parse import urlencode
import requests
import time
import typing as t
class Hoo:
endpoint = "https://api.hoolgd.com"
session = requests.session()
HEADER_SIGNATURE = 'HOO-SIGN'
HEADER_TIMESTAMP = 'HOO-TIMESTAMP'
HEADER_APIKEY = 'HOO-KEY'
POST = 'POST'
GET = 'GET'
def __init__(self, apikey: str, secret: str, endpoint=None):
self.apikey = apikey
self.secret = secret
if endpoint:
self.endpoint = endpoint
def sign(self, timestamp: int, method, path, data=None):
payload = f'{timestamp}{self.apikey}{method}{path}'
if data is not None:
if method == self.GET:
payload += urlencode(data, doseq=True)
elif method == self.POST:
payload += json.dumps(data)
return hmac.new(self.secret.encode('utf8'), payload.encode('utf8'), digestmod='sha256').hexdigest()
def request(self, method: str, path: str, data=None):
return self.dispatch(method)(self.endpoint + path, **{'params' if method == self.GET else 'json': data}).json()
def request_signed(self, method: str, path: str, data=None):
timestamp = int(time.time() * 1e3)
signature = self.sign(timestamp, method.upper(), path, data=data)
return self.dispatch(method)(self.endpoint + path, **{
'headers': {
self.HEADER_APIKEY: self.apikey,
self.HEADER_TIMESTAMP: str(timestamp),
self.HEADER_SIGNATURE: signature,
},
'params' if method == self.GET else 'json': data
}).json()
def dispatch(self, method: str):
return {
'POST': self.session.post,
'GET': self.session.get
}[method.upper()]
def coins(self):
return self.request_signed(self.GET, '/api/pub/v1/coins')
def addresses(self, coin_name: str = "", chain_name: str = ""):
return self.request_signed(self.GET, '/api/pub/v1/addresses', data={
"coin_name": coin_name,
"chain_name": chain_name,
})
def deposit_bills(self, coin_name: str, status: int = None, bill_uuid: str = None, start_at: int = None,
end_at: int = None, page: int = None, pagesize: int = None):
return self.request_signed(self.GET, '/api/pub/v1/deposit/bills', data={
'coin_name': coin_name,
'status': status if status else 0,
'bill_uuid': bill_uuid if bill_uuid else "",
'start_at': start_at if start_at else 0,
'end_at': end_at if end_at else 0,
'page': page if page else 1,
'pagesize': pagesize if pagesize else 20
})
def withdraw(self, coin_name: str, chain_name: str, amount: str, to_address: str, memo: str):
return self.request_signed(self.POST, '/api/pub/v1/withdraw', data={
'coin_name': coin_name,
'chain_name': chain_name,
'amount': amount,
'to_address': to_address,
'memo': memo
})
def withdraw_bills(self, coin_name: str, status: int = None, bill_uuid: str = None, start_at: int = None,
end_at: int = None, page: int = None, pagesize: int = None):
return self.request_signed(self.GET, '/api/pub/v1/withdraw/bills', data={
'coin_name': coin_name,
'status': status if status else '',
'bill_uuid': bill_uuid if bill_uuid else 0,
'start_at': start_at if start_at else 0,
'end_at': end_at if end_at else 0,
'page': page if page else 1,
'pagesize': pagesize if pagesize else 20
})
def account(self):
return self.request_signed(self.GET, '/api/pub/v1/account')
def print_json(v):
print(json.dumps(v, indent=2))
def main():
apikey = 'xxxxx'
secret = 'xxxxx'
hoo = Hoo(apikey=apikey, secret=secret)
print_json(hoo.coins())
if __name__ == '__main__':
main()
现货API调用示例
Python:
# -*- coding:utf-8 -*-
import requests
import time
import hmac
import hashlib
import ujson
import random
host = "https://api.hoolgd.com"
client_id = ""
client_key = ""
def gen_sign(client_id, client_key):
ts = int(time.time())
nonce = "abcdefg"
obj = {"ts": ts, "nonce": nonce, "sign": "", "client_id": client_id}
s = "client_id=%s&nonce=%s&ts=%s" % (client_id, nonce, ts)
v = hmac.new(client_key.encode(), s.encode(), digestmod=hashlib.sha256)
obj["sign"] = v.hexdigest()
return obj
print("> 获取open委托中")
# 币币交易
path = "/open/v1/orders/last"
# 创新区交易
# path = "/open/innovate/v1/orders/last"
obj = gen_sign(client_id, client_key)
obj.update({"symbol": "ETH-USDT"})
res = requests.get(host + path, params=obj)
print(ujson.loads(res.content))
print("> 获取单个订单成交明细")
# 币币交易
path = "/open/v1/orders/detail"
# 创新区交易
# path = "/open/innovate/v1/orders/detail"
obj = gen_sign(client_id, client_key)
obj.update({"order_id": "11574751725833010", "symbol": "BTC-USDT"})
res = requests.get(host + path, params=obj)
print(ujson.loads(res.content))
print("> 分页获取成交明细")
# 币币交易
path = "/open/v1/orders/detailmore"
# 创新区交易
# path = "/open/innovate/v1/orders/detailmore"
obj = gen_sign(client_id, client_key)
obj.update({"symbol": "BTC-USDT", "pagesize": 10, "pagenum": 1"})
res = requests.get(host + path, params=obj)
print(ujson.loads(res.content))
print("> 获取用户某个交易对手续费")
# 币币交易
path = "/open/v1/orders/fee-rate"
# 创新区交易
# path = "/open/innovate/v1/orders/fee-rate"
obj = gen_sign(client_id, client_key)
obj.update({"symbol": "BTC-USDT"})
res = requests.get(host + path, params=obj)
print(ujson.loads(res.content))
print("> 获取kline")
# 币币交易
path = "/open/v1/kline"
# 创新区交易
# path = "/open/innovate/v1/kline"
obj = gen_sign(client_id, client_key)
obj.update({"symbol": "EOS-USDT", "type": "1Min"})
res = requests.get(host + path, params=obj)
print(ujson.loads(res.content))
print("> 获取余额")
# 币币交易
path = "/open/v1/balance"
# 创新区交易
# path = "/open/innovate/v1/balance"
obj = gen_sign(client_id, client_key)
res = requests.get(host + path, params=obj)
print(ujson.loads(res.content))
print("> 获取最近成交记录")
# 币币交易
path = "/open/v1/tickers/trade"
# 创新区交易
# path = "/open/innovate/v1/tickers/trade"
obj = gen_sign(client_id, client_key)
obj.update({"symbol": "EOS-USDT"})
res = requests.get(host + path, params=obj)
print(ujson.loads(res.content))
print("> 下单")
# 币币交易
path = "/open/v1/orders/place"
# 创新区交易
# path = "/open/innovate/v1/orders/place"
obj = gen_sign(client_id, client_key)
obj.update({"symbol": "BTC-USDT", "price": "8850.21", "quantity": "0.1", "side": "1", "order_type": "LIMIT"})
res = requests.post(host + path, data=obj)
print(ujson.loads(res.content))
Websocket示例
# -*- coding:utf-8 -*-
import time
import hmac
import hashlib
import websockets
import json
import asyncio
import uvloop
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
# 币币交易
host = "wss://api.hoolgd.com/ws"
# 创新区交易
# host = "wss://api.hoolgd.com/wsi"
client_id = ""
client_key = ""
def login():
ts = int(time.time())
nonce = "abcdefg"
obj = {"ts": ts, "nonce": nonce, "sign": "", "client_id": client_id, "op": "apilogin"}
s = "client_id=%s&nonce=%s&ts=%s" % (client_id, nonce, ts)
v = hmac.new(client_key.encode(), s.encode(), digestmod=hashlib.sha256)
obj["sign"] = v.hexdigest()
return obj
async def sub_topic(ws):
sub = "depth:0:EOS-USDT"
await ws.send(json.dumps({"op": "sub", "topic": sub}))
async def startup():
print("start to connect %s..." % host)
ws = await websockets.connect(host)
obj = login()
await ws.send(json.dumps(obj))
await sub_topic(ws)
while 1:
try:
data = await ws.recv()
print(data)
except websockets.exceptions.ConnectionClosed as e:
print("connect closed...", e)
return
except:
pass
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(startup())