NAV
shell

简介

欢迎使用LBANK API! 你可以使用此 API 获得合约市场行情数据,进行交易,并且管理你的账户。此文档是v1版本的,会持续更新。

接口是提供服务的基础,API分为账户、交易和行情三类。开发者在网站创建账号后,可以根据自身需求建立不同权限的API,并利用API进行自动交易或者提现。

账户和交易API需要身份验证,提供下单、撤单,查询订单和帐户信息等功能。行情API提供市场的行情数据,所有行情接口都是公开的。

流程

开发者如需使用API ,请先申请API key,并勾选合约权限等信息 点击申请API Key,然后根据此文档详情进行开发,使用过程中如有问题或者建议请及时反馈。

API Key包括以下两个部分

LBank支持RSA和HmacSHA256两种签名方式

用户可根据自己的实际使用需求,选择不同的签名认证方式。

接入说明

接入URL

rest

​ https://lbkperp.lbank.com/

Websocket

​ wss://lbkperpws.lbank.com/ws

接口分类

​ 公共接口:/cfd/openApi/v1/pub

​ 私有接口:/cfd/openApi/v1/prv (需要认证访问)

签名认证

​ API 请求在通过 internet 传输的过程中极有可能被篡改,为了确保请求未被更改,除公共接口(基础信息,行情数据)外的私有接口均必须使用您的 API Key 做签名认证,以校验参数或参数值在传输途中是否发生了更改。每一个API Key需要有适当的权限才能访问相应的接口。每个新创建的API Key都需要分配权限。权限类型分为:交易,只读,和提现。在使用接口前,请查看每个接口的权限类型,并确认你的API Key有相应的权限。

请求头设置

post请求,请求头信息中 contentType 需要统一设置为: 'application/json'。

contentType:'application/json'

请求头增加timestamp参数,您发出请求的时间戳(毫秒),如:1567833674095。在查询请求中包含此值有助于防止第三方截取您的请求。建议通过 /cfd/openApi/v1/pub/getTime API接口获取。

请求头增加signature_method参数,RSA/HmacSHA256,目前两种都支持。

请求头增加echostr参数,该参数为字母和数字字符串,长度30到40间。

签名流程(如何生成API请求参数中的sign

1. 准备待签名字符串:

每个API中所需的请求参数,去除sign,再加上signature_methodtimestampechostr三个参数(这三个参数需要和header中的保持一致),组成了需要参与签名的字符串。同时,待签名字符串要求按照参数名进行排序(首先比较所有参数名的第一个字母,按abcd顺序排列,若遇到相同首字母,则看第二个字母, 以此类推。)以下使用prv/account接口,并以Java代码作为举例,所需签名的字符串为

string parameters="api_key=fb4e39e5-6a06-4291-9f80-d10176a0badd&asset=USDT&echostr=echostr123456789012345678901234567890&productGroup=SwapU&signature_method=HmacSHA256&timestamp=1665990154559"

2. 待签名字符串转成所有字符大写的MD5摘要:

parameters转成MD5摘要,并将所有字符转换成大写

string preparedStr = DigestUtils.md5Hex(parameters).toUpperCase()

3. 签名:

使用RSA或者HmacSHA256方式,以及api_key对应的secret key,对preparedStr进行签名,得到最终的sign

RSA方式(signature_method = RSA):

使用api_key对应的secret key,通过RSA使用SHA256算法对preparedStr做一次签名(用Base64编码),并将最终的签名结果赋值于参数sign。可参考shell中的Java代码。

RSA示例:

    public static String RSA_Sign(String preparedStr, String secretKey) {
        try {
            PrivateKey priKey = getPrivateKey(secretKey);
            Signature signature = Signature.getInstance("SHA256WithRSA");
            signature.initSign(priKey);
            signature.update(content.getBytes(CharEncoding.UTF_8));
            byte[] signed = signature.sign();
            return new String(Base64.getEncoder().encode(signed));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    private static PrivateKey getPrivateKey(String key) {
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(key));
        PrivateKey privateKey = null;
        try {
            KeyFactory keyFactory = KeyFactory.getInstance(RSA);
            privateKey = keyFactory.generatePrivate(keySpec);
        } catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
            e.printStackTrace();
        }
        return privateKey;
    }

HmacSHA256方式(signature_method = HmacSHA256):

使用api_key对应的secret key,对preparedStr进行哈希运算,并将最终的签名结果赋值于参数sign。可参考shell中的Java代码。

HmacSHA256示例:

    public static String HmacSHA256_Sign(String preparedStr, String secretKey) {
        String hash = "";
        try {
            Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
            SecretKeySpec secret_key = new SecretKeySpec(secretKey.getBytes(), "HmacSHA256");
            sha256_HMAC.init(secret_key);
            byte[] bytes = sha256_HMAC.doFinal(message.getBytes());
            hash = byteArrayToHexString(bytes);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return hash;
    }

提交

将签名后的得到的sign,以及其他所需参数提交。以prv/account接口举例,需要提交的参数为:

api_key=fb4e39e5-6a06-4291-9f80-d10176a0badd&asset=USDT&echostr=echostr123456789012345678901234567890&productGroup=SwapU&signature_method=HmacSHA256&timestamp=1665990154559

sign=809133cb69a17beba0be076b99b4d90de872476e36da87978ab2889970ccd06d

请求格式

所有的API请求都以GET或者POST形式发出。

并且所有请求头都包含设置三个参数Content-Type:application/json、timestamp:1665990154559、signature_method:RSA、echostr:echostr123456789012345678901234567890。

所有get请求的参数都在路径参数里,RSA方式需要urlencode一下,避免签名后字符串中特殊字符被转义为空格。post 以json提交

返回格式

参数名称 数据类型 描述
result boolean API接口返回结果,true/false
error_code string 接口返回错误码
msg string 接口返回消息
data object 接口返回数据主体

测试账号

String privateKey = "093F44F700FC48F17DDB67390C895CE5";
  String apikey = "fb4e39e5-6a06-4291-9f80-d10176a0badd"
  String signature_method = "HmacSHA256";

错误码

错误代码 详情描述
-99 系统异常,请稍后再试
0 成功
2 未找到记录
3 记录已存在
4 无效动作
5 无效值
7 无效Session
8 合约产品不存在
9 用户不存在
11 未找到市场数据
12 字段错误
14 重复动作
18 市价订单不能排队
20 订单到期
21 订单超过容量
22 订单已存在
24 订单不存在
25 报价不存在
26 无效的合约产品状态
27 无效的合约产品状态
30 没有足够的数量修改
31 没有足够的持仓,无法平仓
32 持仓限制
33 平仓后资产小于零
34 用户持仓限制
35 余额不足
36 资金不足
37 无效数量
44 数量不合法
48 价格不合法
49 价格超出上限
50 价格超出下限
51 没有交易权限
52 只能平仓
54 用户没有登陆
56 没有交易权限
58 用户不匹配
59 用户重新登录
60 无效的用户名或密码
62 用户无法激活
65 无效的登陆IP地址
71 不能操作该订单
76 订单已经挂起
77 订单已经激活
78 订单日期丢失
79 不支持订单类型
80 用户无权限
88 用户不存在
99 无法为其他用户执行操作
100 保证金不足
118 单仪表组合
139 Otc 类型错误
172 杠杆不足
175 价格必须大于零
176 无效的API KEY
177 API密钥已过期
178 API密钥限制超出
179 Key Is Null
180 找不到保证金率
181 重复API Key
182 没有限制价格
183 超过每秒最大查询计数
184 订单限额超过
185 没有足够的开放订单
186 Session 不存在
187 价格超出卖一价
188 价格超出买一价
189 持仓已存在
190 标记价格误差
191 记录分析错误
192 记录重复
193 超出最大成交量
194 小于最小成交量
195 持仓小于最小成交量
196 禁止交易
197 费用不存在
198 持仓数量超出限制
199 杠杆过高
200 持仓不足
201 无法更改Pos类型
10001 身份认证同步失败
10002 身份验证参数失去
10003 身份认证验签失败
10004 请求超时
10005 非法参数
10006 不开放的路径
10007 认证失败
10008 秘钥不存在
10009 没有权限
10010 无效签名
10011 重复请求
10012 请求过于频繁

基础数据

获取当前时间

接口地址:/cfd/openApi/v1/pub/getTime

请求方式:GET

请求数据类型:application/x-www-form-urlencoded

响应数据类型:*/*

接口描述:

获取当前时间

请求参数:

暂无

响应参数:

参数名称 参数说明 类型 schema
data object
error_code integer(int32) integer(int32)
msg string
result string
success boolean

响应示例:

{
    "data": {},
    "error_code": 0,
    "msg": "",
    "result": "",
    "success": true
}

查询合约信息列表

接口地址:/cfd/openApi/v1/pub/instrument

请求方式:GET

请求数据类型:application/x-www-form-urlencoded

响应数据类型:*/*

接口描述:

查询合约信息列表

请求参数:

参数名称 参数说明 请求类型 是否必须 数据类型 schema
productGroup 产品组 query true string

响应参数:

参数名称 参数说明 类型 schema
baseCurrency 标的基础货币 string
clearCurrency 清算币种 string
defaultLeverage 默认杠杆倍数 number
exchangeID 交易所代码 string
maxOrderVolume 最大下单量 string
minOrderCost 最小下单额 string
minOrderVolume 最小下单量 string
priceCurrency 计价币种 string
priceLimitLowerValue 价格下限 number
priceLimitUpperValue 价格上限 number
priceTick 最小变动价位 number
symbol 交易对 string
symbolName 交易对名称 string
volumeMultiple 数量乘数 number
volumeTick 最小变动量 number

响应示例:

[
    {
        "baseCurrency": "",
        "clearCurrency": "",
        "defaultLeverage": 0,
        "exchangeID": "",
        "maxOrderVolume": "",
        "minOrderCost": "",
        "minOrderVolume": "",
        "priceCurrency": "",
        "priceLimitLowerValue": 0,
        "priceLimitUpperValue": 0,
        "priceTick": 0,
        "symbol": "",
        "symbolName": "",
        "volumeMultiple": 0,
        "volumeTick": 0
    }
]

查询合约行情列表

接口地址:/cfd/openApi/v1/pub/marketData

请求方式:GET

请求数据类型:application/x-www-form-urlencoded

响应数据类型:*/*

接口描述:

查询合约行情列表

请求参数:

参数名称 参数说明 请求类型 是否必须 数据类型 schema
productGroup 产品组 query true string

响应参数:

参数名称 参数说明 类型 schema
highestPrice 24小时最高价 string
lastPrice 最新价格 string
lowestPrice 24小时最低价 string
markedPrice 标记价格 string
openPrice 24小时开盘价 string
prePositionFeeRate 资金费用 string
symbol 标的代码 string
turnover 成交金额 string
volume 24小时数量 string

响应示例:

[
    {
        "highestPrice": "",
        "lastPrice": "",
        "lowestPrice": "",
        "markedPrice": "",
        "openPrice": "",
        "prePositionFeeRate": "",
        "symbol": "",
        "turnover": "",
        "volume": ""
    }
]

获取盘口

接口地址:/cfd/openApi/v1/pub/marketOrder

请求方式:GET

请求数据类型:application/x-www-form-urlencoded

响应数据类型:*/*

接口描述:

获取盘口

请求参数:

参数名称 参数说明 请求类型 是否必须 数据类型 schema
depth 深度 query true integer(int32)
symbol 交易对 query true string

响应参数:

参数名称 参数说明 类型 schema
asks 买盘 array MarketOrderResp
  orders 订单数量 integer(int32)
  price 价格 number
  volume 数量 number
bids 卖盘 array MarketOrderResp
  orders 订单数量 integer(int32)
  price 价格 number
  volume 数量 number
symbol 交易对 string

响应示例:

{
    "asks": [
        {
            "orders": 0,
            "price": 0,
            "volume": 0
        }
    ],
    "bids": [
        {
            "orders": 0,
            "price": 0,
            "volume": 0
        }
    ],
    "symbol": ""
}
shell