@ln-markets/api is a simple way to connect your Node JS application to LN Markets !
Note: This module does not work in the browser.
You can install this package with npm or yarn:
$> npm install @ln-markets/api
$> pnpm install @ln-markets/api
$> yarn add @ln-markets/api
Then go to on your LN Markets account under the API section of the Profile to generate an API Key with the right permissions to fit your needs.
You can import either Websocket or Rest class from @ln-markets/api
const { LNMarketsWebsocket, LNMarketsRest } = require('@ln-markets/api')
const websocket = new LNMarketsWebsocket()
const rest = new LNMarketsRest()
For authentication you need your api key secret and passphrase
Without you will not bet able to authenticate
⚠️ Never share your API Key, Secret or Passphrase
- As a js variable
const key = `<LNM API KEY>`
const { LNMarketsWebsocket } = require('@ln-markets/api')
const lnm = new LNMarketsWebsocket({ key })
- Pass
LNMARKETS_API_KEY
env var to your app
// process.env.LNMARKETS_API_KEY = `<LNM API KEY>`
const { LNMarketsWebsocket } = require('@ln-markets/api')
const lnm = new LNMarketsWebsocket()
- As a js variable
const secret = `<LNM API SECRET>`
const { LNMarketsWebsocket } = require('@ln-markets/api')
const lnm = new LNMarketsWebsocket({ secret })
- Pass
LNMARKETS_API_SECRET
env var to your app
// process.env.LNMARKETS_API_SECRET = `<LNM API SECRET>`
const { LNMarketsWebsocket } = require('@ln-markets/api')
const lnm = new LNMarketsWebsocket()
- As a js variable
const passphrase = `<LNM API PASSPHRASE>`
const { LNMarketsWebsocket } = require('@ln-markets/api')
const lnm = new LNMarketsWebsocket({ passphrase })
- Pass
LNMARKETS_API_PASSPHRASE
env var to your app
// process.env.LNMARKETS_API_PASSPHRASE = `<LNM API PASSPHRASE>`
const { LNMarketsWebsocket } = require('@ln-markets/api')
const lnm = new LNMarketsWebsocket()
You can pass the network
and version
in the constructor or specify it with environement variable.
By default the package will connect to the mainnet api.
- Testnet with constructor params
const { LNMarketsWebsocket } = require('@ln-markets/api')
const lnm = new LNMarketsWebsocket({ network: 'testnet' })
- Pass
LNMARKETS_API_NETWORK
env var to your app
// process.env.LNMARKETS_API_NETWORK = 'testnet'
const { LNMarketsWebsocket } = require('@ln-markets/api')
const lnm = new LNMarketsWebsocket()
LNMARKETS_API_VERSION
There is only one version aka v1
LNMARKETS_API_HOSTNAME
is only used for debug
⚠️ Websocket API only support subscription
Websockt API is limited now for bid offer and index update, we will make a dedicated Websocket api soon !
The message format is using JSON-RPC spec.
The websocket class has an auto ping-pong mechanism and reconnect
const { LNMarketsWebsocket } = require('@ln-markets/api')
const lnm = new LNMarketsWebsocket()
lnm.on('message', console.log)
await lnm.connect()
The LNMarketsWebsocket
class emit events on connected
message
error
You can subscribe to LNM Markets public event such as futures bid offer, index and options data.
You need to call the authenticate
method
You can find examples for websocket here
All you have to do now is to instanciate a LNMarketsRest
object this way:
const { LNMarketsRest } = require('@ln-markets/api')
const lnm = new LNMarketsRest()
const info = await lnm.appNode()
After this, you'll be able to use all the documented API
methods below.
All these functions are wrappers for documented public endpoints from LN Markets API v1. See specification here.
Be careful, all methods expect an object as parameter with the correct parameters in it.
You can find examples for rest here
These methods are designed to fill the gaps if the API evolves and the future but this package isn't up to date.
futuresGetTicker
futuresNewPosition
futuresGetPositions
futuresUpdatePosition
futuresAddMarginPosition
futuresCancelAllPositions
futuresCancelPosition
futuresCashinPosition
futuresCloseAllPosisitions
futuresClosePosition
futuresIndexHistory
futuresBidOfferHistory
futuresFixingHistory
futuresCarryFeesHistory
deposit
depositHistory
futuresHistory
getAnnouncements
getLeaderboard
getUser
appConfiguration
appNode
updateUser
withdraw
withdrawHistory
Get the ticker of LN Markets
Example:
await lnm.futuresGetTicker()
GET /futures/ticker
documentation for more details.
Open a new position on the market.
type:
type: String
required: true
enum: ['l', 'm']
side:
type: String
required: true
enum: ['b', 's']
margin:
type: Integer
required: false
leverage:
type: Float
required: true
quantity:
type: Integer
required: false
takeprofit:
type: Integer
required: false
stoploss:
type: Integer
required: false
price:
type: Float
required: false
Example:
await lnm.futuresNewPosition({
type: 'm',
side: 's',
margin: 10000,
leverage: 25.5,
})
POST /futures
documentation for more details.
Retrieve all or a part of user positions.
type:
type: String
required: true
enum: ['open', 'running', 'closed']
default: 'open'
from:
type: Integer
required: false
to:
type: Integer
required: false
limit:
type: Integer
required: false
default: 100
Example:
await lnm.futuresGetPositions({
type: 'running'
})
GET /futures
documentation for more details.
Modify stoploss or takeprofit parameter of an existing position.
pid:
type: String
required: true
type:
type: String
required: true
enum: ['takeprofit', 'stoploss']
value:
type: Float
required: true
Example:
await lnm.futuresUpdatePosition({
pid: 'b87eef8a-52ab-2fea-1adc-c41fba870b0f',
type: 'stoploss',
value: 13290.5
})
PUT /futures
documentation for more details.
Add more margin to an existing position.
amount:
type: Integer
required: true
pid:
type: String
required: true
Example:
await lnm.addMargin({
amount: 20000,
pid: '249dc818-f8a5-4713-a3a3-8fe85f2e8969'
})
POST /futures/add-margin
documentation for more details.
Cancel all oponed (not running) positions for this user.
# No parameters
Example:
await lnm.futuresCancelAllPositions()
DELETE /futures/all/cancel
documentation for more details.
Cancel a particular position for this user.
pid:
type: String
required: true
Example:
await lnm.futuresCancelPosition({
pid: 'b87eef8a-52ab-2fea-1adc-c41fba870b0f'
})
POST /futures/cancel
documentation for more details.
Retrieve a part of the general PL of a running position.
amount:
type: Integer
required: true
pid:
type: String
required: true
Example:
await lnm.futuresCashinPosition({
amount: 1000,
pid: "99c470e1-2e03-4486-a37f-1255e08178b1"
})
POST /futures/cash-in
documentation for more details.
Close all running position for this user.
# No parameters
Example:
await lnm.futuresCloseAllPosisitions()
DELETE /futures/all/close
documentation for more details.
Close a particular running position for this user.
pid:
type: String
required: true
Example:
await lnm.futuresClosePosition({
pid: 'a2ca6172-1078-463d-ae3f-8733f36a9b0e'
})
DELETE /futures
documentation for more details.
Get index history data.
from:
type: Integer
required: false
to:
type: Integer
required: false
limit:
type: Integer
required: false
default: 100
Example:
await lnm.futuresIndexHistory({
limit: 20
})
GET /futures/history/index
documentation for more details.
Get bid and offer data over time.
from:
type: Integer
required: false
to:
type: Integer
required: false
limit: Integer
required: false
default: 100
Example:
await lnm.futuresBidOfferHistory({
limit: 20
})
GET /futures/history/bid-offer
documentation for more details.
Get fixing data history.
from:
type: Integer
required: false
to:
type: Integer
required: false
limit:
type: Integer
required: false
default: 100
Example:
await lnm.futuresFixingHistory({
limit: 20
})
GET /futures/history/fixing
documentation for more details.
Get carry-fees history.
from:
type: Integer
required: false
to:
type: Integer
required: false
limit:
type: Integer
required: false
default: 100
Example:
await lnm.futuresCarryFeesHistory({
limit: 20
})
GET /futures/carry-fees
documentation for more details.
Add funds to your LN Markets balance.
amount:
type: Integer
required: true
unit:
type: String
required: false
default: 'sat'
Example:
await lnm.deposit({
amount: 25000
})
POST /user/deposit
documentation for more details.
Retrieve deposit history for this user.
from:
type: Integer
required: false
to:
type: Integer
required: false
limit:
type: Integer
required: false
Example:
await lnm.depositHistory({
limit: 30
})
GET /user/deposit
documentation for more details.
Retrieve announcements made by LN Markets.
# No parameters
Example:
await lnm.getAnnouncements()
GET /app/announcemenets
documentation for more details.
Queries the 10 users with the biggest positive PL.
# No parameters
Example:
await lnm.getLeaderboard()
GET /futures/leaderboard
documentation for more details.
Retrieve user informations.
# No parameters
Example:
await lnm.getUser()
GET /user
documentation for more details.
Retrieve informations related to LN Markets.
# No parameters
Example:
await lnm.appConfiguration()
GET /app/configuration
documentation for more details.
Show informations about LN Markets lightning node.
# No parameters
Example:
await lnm.appNode()
GET /app/node
documentation for more details.
Modify user account parameters.
show_leaderboard:
type: Boolean
required: false
show_username:
type: Boolean
required: false
username:
type: String
required: false
email:
type: String
required: false
resend_email:
type: Boolean
required: false
Example:
await lnm.updateUser({
show_username: true,
show_leaderboard: true,
username: 'API-Connector',
})
PUT /user
documentation for more details.
Move funds from LN Markets to your wallet via BOLT11 invoice.
amount:
type: Integer
required: true
unit:
type: String
required: false
default: 'sat'
invoice:
type: String
required: true
Example:
await lnm.withdraw({
amount: 1000,
invoice: 'lntb100u1p0jr0ykpp5ldx3un8ym6z0uwjxd083mp2rcr04d2dv0fkx729ajs62pq9pfjqqdql23jhxapdwa5hg6rywfshwttjda6hgegcqzpgxq92fjuqsp5m6q0fzynu2qr624mzjc285duurhccmkfg94mcdctc0p9s7qkrq8q9qy9qsqp862cjznpey5r76e7amhlpmhwn2c7xvke59srhv0xf75m4ksjm4hzn8y9xy0zs5ec6gxmsr8gj4q23w8ped32llscjcneyjz2afeapqpu4gamz'
})
POST /user/withdraw
documentation for more details.
Retrieve user withdraw history.
from:
type: Integer
required: false
to:
type: Integer
required: false
limit:
type: Integer
required: false
Example:
await lnm.withdrawHistory({
limit: 25
})
GET /user/withdraw
documentation for more details.
This method is used in case where no wrapper is (yet) available for a particular endpoint.
method:
type: String
required: true
enum: ['GET', 'PUT', 'POST', 'DELETE']
path:
type: String
required: true
params:
type: Object
required: false
credentials:
type: Boolean
required: false
default: false
Example:
await lnm.requestAPI({
method: 'GET',
path: '/user',
credentials: true
})