一、API简介
欢迎使用API,此API文档将描述資管合作账户资金调拨关联API接口详情以及接入、验签说明。
二、接入说明
2.1 接入URLs
REST API
2.2 限频规则
限频规则针对接口进行限频,目前每个接口访问限制为1s内10次
用户可根据Http Header中的信息调整访问策略
- rateLimit-times: 单轮请求数上限,单位:次数
- rateLimit-interval:请求数重置的时间间隔,单位:毫秒
- rateLimit-remaining:本轮剩余可用请求数,单位:次数
- rateLimit-reset:请求数上限重置时间,单位:毫秒
三、签名认证
3.1 签名说明
API 请求在通过 internet 传输的过程中极有可能被篡改,为了确保请求未被更改,除公共接口(基础信息,行情数据)外的私有接口均必须使用您的 API Key 做签名认证,以校验参数或参数值在传输途中是否发生了更改。(编码集统一 "UTF-8")
一个合法的请求由以下几部分组成:
- 方法请求地址:即访问服务器地址 https://api.satsresearch.com ,比如https://api.satsresearch.com/api/v1/broker/transferFunds
- API 访问密钥(AccessKeyId):您申请的 API Key 中的 Access Key。
- 签名方法(SignatureMethod):用户计算签名的基于哈希的协议,此处使用 HmacSHA256。
- 签名版本(SignatureVersion):签名协议的版本,此处使用1。
- 时间戳(Timestamp):系统当前毫秒数。
- 必选和可选参数:每个方法都有一组用于定义 API 调用的必需参数和可选参数。可以在每个方法的说明中查看这些参数及其含义。 请一定注意:对于 GET 请求,每个方法自带的参数都需要进行签名运算; 对于 POST 请求,每个方法自带的参数不进行签名认证,即 POST 请求中需要进行签名运算的只有 AccessKeyId、SignatureMethod、SignatureVersion、Timestamp 四个参数,其它参数放在 body 中。
- 签名:签名计算得出的值,用于确保签名有效和未被篡改。
3.2 签名步骤
规范要计算签名的请求因为使用 HmacSHA256进行签名计算时,使用不同内容计算得到的结果会完全不同。所以在进行签名计算前,请先对请求进行规范化处理。下面以发起资金调拨请求为例进行说明:
请求的API key与密钥对参考如下:
AccessKeyId: e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx
AccessSecret: 1KFjiTRVlGSyzoNIEXIx8boXe7njFmjeHwiK4kKkEOY=
资金调拨发起请求的URL如下:
- https://api.satsresearch.com/api/v1/broker/transferFunds?AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx&SignatureMethod=HmacSHA256&SignatureVersion=1&Timestamp=1662022581951
1. 请求方法(GET 或 POST),后面添加换行符 “\n”
POST\n
2. 添加小写的访问地址,后面添加换行符 “\n”
api.satsresearch.com\n
3. 访问方法的路径,后面添加换行符 “\n”
/api/v1/broker/transferFunds\n
4. 按照ASCII码的顺序对参数名进行排序。例如,下面是请求参数的原始顺序,进行过编码后
AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxxSignatureMethod=HmacSHA256SignatureVersion=1Timestamp=1662022581951
使用 UTF-8 编码,且进行了 URI 编码,十六进制字符必须大写,如 “:” 会被编码为 “%3A” ,空格被编码为 “%20”。
经过排序之后
AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx
SignatureMethod=HmacSHA256
SignatureVersion=1
Timestamp=1662022581951
5. 按照以上顺序,将各参数使用字符 “&” 连接
AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx&SignatureMethod=HmacSHA256&SignatureVersion=1&Timestamp=16620225819511
6. 组成最终的要进行签名计算的字符串如下
POST\n
api.satsresearch.com\n
/api/v1/broker/transferFunds\n
AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx&SignatureMethod=HmacSHA256&SignatureVersion=1&Timestamp=1662022581951
7. 用上一步里生成的 “请求字符串” 和你的密钥 (Secret Key) 生成一个数字签名
1KFjiTRVlGSyzoNIEXIx8boXe7njFmjeHwiK4kKkEOY=
- 将上一步得到的请求字符串和密钥作为两个参数,调用HmacSHA256验签函数获得验签信息。
- 将此验签信息用base-64编码,得到的值作为此次接口调用的数字签名。
8. 将生成的数字签名加入到请求的路径参数里
最终,发送到服务器的 API 请求应该为
https://api.satsresearch.com/api/v1/broker/transferFunds?AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx&SignatureMethod=HmacSHA256&SignatureVersion=1&Timestamp=1662022581951&Signature=NFbf79FpjrKxJzXkswTW5NG/mKtTTlXZU2/BBHHnqzI=
- 把所有必须的认证参数添加到接口调用的路径参数里
- 把数字签名在URL编码后加入到路径参数里,参数名为“Signature”。
四、业务枚举
交易所枚举(ExchangeEnum)
枚举值 | 说明 | 备注 |
---|---|---|
binance | 币安交易所 | |
bybit | bybit交易所 | |
okx | okx交易所 | |
gate | gate交易所 |
账户类型枚举(AccountTypeEnum)
交易所 | 枚举值 | 备注 |
---|---|---|
binance | 经典账户: Spot, Margin, USDT-M, Coin-M 统一账户: Spot, Margin | 默认为Spot,托管子账户暂不支持 |
bybit | 经典账户: Spot, Funding, USDT-M, Coin-M 统一账户: Funding, Trading, Coin-M | 默认为Funding |
okx | Funding, Trading | 默认为Funding |
gate | Spot,USDT-M,USDT-M-Futures | 默认为Spot |
五、接口明细
5.1 资金调拨
HTTP 请求
- POST /api/v1/broker/transferFunds
请求参数
Name | Type | Required | Description |
---|---|---|---|
clientTransferId | String | Y | 客户自定义划转id |
asset | String | Y | 划转资产名称 |
fromExchange | String | Y | 源交易所,参考交易所枚举 |
fromSubAccount | String | Y | 源子账户,参考交易所枚举 |
fromAccountType | String | N | 出金账户类型,参考账户类型枚举 |
toExchange | String | Y | 目的交易所,参考交易所枚举 |
toSubAccount | String | Y | 目的子账户,参考交易所枚举 |
toAccountType | String | N | 入金账户类型,参考账户类型枚举 |
applyAmount | Number | Y | 发起金额,大于10U |
备注
- 資管合作暂不支持同账户不同业务账户资金划转
Response:
{
"msg"
:
"success",
"code"
:
200,
"data"
:
[
{
"clientTransferId": "4e8c51b7-97ac-4ef1-864f-7869f13c0c6f",
"transferId": "4e8c51b797ac4ef1864f7869f13c0c6f"
}
],
"ts"
:
1679903538458
}
响应数据
Name | Type | Required | Description |
---|---|---|---|
clientTransferId | String | Y | 客户自定义划转id |
transferId | String | Y | 划转记录id |
5.2 查询资金调拨记录
HTTP 请求
- GET /api/v1/broker/transfer/record
请求参数
Name | Type | Required | Description |
---|---|---|---|
clientTransferId | String | N | 客户自定义划转id,与transferId二选一 |
transferId | String | N |
Response:
{
"msg"
:
"success",
"code"
:
200,
"data"
:
[
{
"clientTransferId": "4e8c51b7-97ac-4ef1-864f-7869f13c0c7f",
"asset": "USDT",
"fromExchange": "bybit",
"fromSubAccount": "4665179554",
"toExchange": "binance",
"toSubAccount": "someacccount@binance.com",
"applyAmount": "20",
"realAmount": "19",
"feeAmount": "1",
"externalStatus": "done",
"applyTime": 1715305243482,
"arriveTime": null,
"failReason": "exchange internal error."
}
],
"ts"
:
1715306224948
}
响应数据
Name | Type | Required | Description |
---|---|---|---|
clientTransferId | String | Y | 客户自定义划转id |
transferId | String | Y | 划转记录id |
asset | String | Y | 划转资产名称 |
fromExchange | String | Y | 源交易所 |
fromSubAccount | String | Y | 源账户 |
fromAccountType | String | N | 出金账户类型 |
toExchange | String | Y | 目的交易所 |
toSubAccount | String | Y | 目的账户 |
toAccountType | String | N | 入金账户类型 |
applyAmount | String | Y | 发起金额 |
realAmount | String | N | 实际到账金额 |
feeAmount | String | N | 提币手续费金额 |
externalStatus | String | Y | 状态,pending:已提交,done:已完成,fail:失败 |
applyTime | Long | Y | 提交时间 |
arriveTime | Long | N | 到账时间 |
failReason | String | N | 失败原因 |
5.3 查询资金调拨记录列表
HTTP 请求
- POST /api/v1/broker/transfer/recordList
请求参数
Name | Type | Required | Description |
---|---|---|---|
clientTransferId | String | N | 客户自定义划转id,与transferId二选一 |
transferId | String | N | |
asset | String | N | 划转资产名称 |
fromExchange | String | N | 源交易所,参考交易所枚举 |
fromSubAccount | String | N | 源子账户,参考交易所枚举 |
fromAccountType | String | N | 出金账户类型,参考账户类型枚举 |
toExchange | String | N | 目的交易所,参考交易所枚举 |
toSubAccount | String | N | 目的子账户,参考交易所枚举 |
toAccountType | String | N | 入金账户类型,参考账户类型枚举 |
pageSize | Number | N | 起始页,默认:1 |
pageNum | Number | N | 分页数据长度,默认:10,最大:1000 |
Response:
{
"msg"
:
"success",
"code"
:
200,
"data"
:
[
{
"clientTransferId": "4e8c51b7-97ac-4ef1-864f-7869f13c0c7f",
"asset": "USDT",
"fromExchange": "bybit",
"fromSubAccount": "4665179554",
"toExchange": "binance",
"toSubAccount": "someacccount@binance.com",
"applyAmount": "20",
"realAmount": "19",
"feeAmount": "1",
"externalStatus": "done",
"applyTime": 1715305243482,
"arriveTime": null,
"failReason": "exchange internal error."
}
],
"ts"
:
1715306224948
}
响应数据
Name | Type | Required | Description |
---|---|---|---|
clientTransferId | String | Y | 客户自定义划转id |
transferId | String | Y | 划转记录id |
asset | String | Y | 划转资产名称 |
fromExchange | String | Y | 源交易所 |
fromSubAccount | String | Y | 源账户 |
fromAccountType | String | N | 出金账户类型 |
toExchange | String | Y | 目的交易所 |
toSubAccount | String | Y | 目的账户 |
toAccountType | String | N | 入金账户类型 |
applyAmount | String | Y | 发起金额 |
realAmount | String | N | 实际到账金额 |
feeAmount | String | N | 提币手续费金额 |
externalStatus | String | Y | 状态,pending:已提交,done:已完成,fail:失败 |
applyTime | Long | Y | 提交时间 |
arriveTime | Long | N | 到账时间 |
failReason | String | N | 失败原因 |
六、错误码
错误码 | 状态码 | 描述 |
---|---|---|
200 | 200 | 成功 |
40000 | 400 | 通用请求错误 |
40002 | 400 | {0}参数非法,请检查后重试 |
45164 | 400 | 资金调拨记录已存在 |
45165 | 400 | 资金调拨accessKeyId参数非法 |
45166 | 400 | 不支持的资金调拨币种 |
45169 | 400 | 跨所资金调拨记录正在处理中 |
50000 | 500 | 服务端错误 |
七、更新说明
20240716
- 初始化文档;