connect to fyers API
The official Javascript node client for communicating with the Fyers API
- Javascript client documentation
- NodeJS v12.0.0+
Install via npm
npm install fyers-api-v3@latest
v3 is a breaking major release with multiple internal modification to improve user experience.
Below are the breaking changes:
- websocket output format have changed completely
``javascript
var fyersModel= require("fyers-api-v3").fyersModel
var fyers= new fyersModel({"path":"path where you want to save logs","enableLogging":true})
fyers.setAppId("xxxxx-xxx")
fyers.setRedirectUrl("Redirect URL here")
var URL=fyers.generateAuthCode()
//use url to generate auth code
console.log(URL)
var authcode="authcode generated above"
fyers.generate_access_token({"client_id":"APPID","secret_key":"secret","auth_code":authcode}).then((response)=>{
if(response.s=='ok'){
fyers.setAccessToken(response.access_token)
}else{
console.log("error generating access token",response)
}
})
fyers.get_profile().then((response)=>{
console.log(response)
}).catch((err)=>{
console.log(err)
})
fyers.getQuotes(["NSE:SBIN-EQ","NSE:TCS-EQ"]).then((response)=>{
console.log(response)
}).catch((err)=>{
console.log(err)
})
fyers.getMarketDepth({"symbol":["NSE:SBIN-EQ","NSE:TCS-EQ"],"ohlcv_flag":1}).then((response)=>{
console.log(response)
}).catch((err)=>{
console.log(err)
})
`
All API calls returns a promise which you can use to call methods like .then(...) and .catch(...).
`javascript`
FyersApiCall
.then(function (v) {
// On success
})
.catch(function (e) {
// On rejected
});
`javascript
var fyersOrderSocket= require("fyers-api-v3").fyersOrderSocket
var skt=new fyersOrderSocket("Acesstoken in format APPID:Accesstoken",
"path to where you want to save logs",
true/flag to enable disable logging/)
skt.on("error",function (errmsg) {
console.log(errmsg)
})
skt.on('others',function (msg) {
console.log(msg)
})
skt.on('connect',function () {
skt.subscribe([skt.orderUpdates,skt.tradeUpdates,skt.positionUpdates,
skt.edis,skt.pricealerts])
console.log(skt.isConnected())
})
skt.on('close',function () {
console.log('closed')
})
skt.on('orders',function (msg) {
console.log("orders",msg)
skt.close()
})
skt.on('trades',function (msg) {
console.log('trades',msg)
})
skt.on('positions',function (msg) {
console.log('positions',msg)
})
skt.connect()
`
`javascript
let DataSocket = require("fyers-api-v3").fyersDataSocket;
var skt= DataSocket.getInstance("Accesstoken in format APPID:AccessToken",
"path where to save logs",true/flag to enable disable logging/)
skt.on("connect",function(){
skt.subscribe(['NSE:IDEA-EQ',"NSE:SBIN-EQ"])
//subscribing for market depth data if need of market depth comes as a diffrent tick
skt.subscribe(['NSE:IDEA-EQ',"NSE:SBIN-EQ"],true)
//to start lite mode to get fewer data like ltp change
skt.mode(skt.LiteMode)
//to revert back to full mode
// skt.mode(skt.FullMode)
})
skt.on("message",function(message){
console.log({"TEST":message})
})
skt.on("error",function(message){
console.log("erroris",message)
})
skt.on("close",function(){
console.log("socket closed")
})
skt.connect()
`
Optionally you can enable client side auto re-connection to automatically reconnect if the connection is dropped.
All you need to do is enable auto re-connection. For example
`javascript`
// Enable auto reconnect mechanism with retry count as passed with max allowed upto 50.
skt.autoReconnect(6);
This includes following APIs: createPriceAlert, getPriceAlert, modifyPriceAlert, deletePriceAlert, togglePriceAlert
`javascript
var data = {
"agent": "fyers-api",
"alert-type": 1,
"name": "gold alert",
"symbol": "NSE:GOLDBEES-EQ",
"comparisonType": "LTP",
"condition": "GT",
"value": "9888",
"notes": " iji"
}
fyers.createPriceAlert(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`
`javascript
// Get all active alerts
fyers.getPriceAlert().then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
// Get archived alerts
var data = {"archive": "1"}
fyers.getPriceAlert(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`
`javascript
var data = {
"alertId": "6249977",
"agent": "fyers-api",
"alert-type": 1,
"name": "goldy bees",
"symbol": "NSE:GOLDBEES-EQ",
"comparisonType": "OPEN",
"condition": "GT",
"value": "10000.00676766767676676667"
}
fyers.modifyPriceAlert(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`
`javascript
var data = {"alertId": "6131416", "agent": "fyers-api"}
fyers.deletePriceAlert(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`
`javascript
var data = {"alertId": "3870991"}
fyers.togglePriceAlert(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`
This includes following APIs: createSmartOrderStep, createSmartOrderLimit, createSmartOrderTrail, createSmartOrderSIP, modifySmartOrder, cancelSmartOrder, pauseSmartOrder, resumeSmartOrder, getSmartOrderBookWithFilter
Smart orders support different flow types: step, limit, trail, sip
`javascript
var data = {
"symbol": "NSE:SBIN-EQ",
"qty": 10,
"type": 1,
"side": 1,
"productType": "INTRADAY",
"limitPrice": 600.00,
"stopPrice": 0,
"validity": "DAY",
"disclosedQty": 0,
"offlineOrder": false
}
fyers.createSmartOrderStep(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`
`javascript
var data = {
"symbol": "NSE:SBIN-EQ",
"qty": 10,
"type": 1,
"side": 1,
"productType": "INTRADAY",
"limitPrice": 600.00,
"stopPrice": 0,
"validity": "DAY",
"disclosedQty": 0,
"offlineOrder": false
}
fyers.createSmartOrderLimit(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`
`javascript
var data = {
"symbol": "NSE:SBIN-EQ",
"qty": 10,
"type": 1,
"side": 1,
"productType": "INTRADAY",
"limitPrice": 600.00,
"stopPrice": 0,
"validity": "DAY",
"disclosedQty": 0,
"offlineOrder": false
}
fyers.createSmartOrderTrail(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`
`javascript
var data = {
"symbol": "NSE:SBIN-EQ",
"qty": 10,
"type": 1,
"side": 1,
"productType": "CNC",
"limitPrice": 600.00,
"stopPrice": 0,
"validity": "DAY",
"disclosedQty": 0,
"offlineOrder": false
}
fyers.createSmartOrderSIP(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`
`javascript
var data = {
"flowId": "123456789",
"limitPrice": 610.00,
"qty": 15
}
fyers.modifySmartOrder(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`
`javascript
var data = {"flowId": "123456789"}
fyers.cancelSmartOrder(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`
`javascript
var data = {"flowId": "123456789"}
fyers.pauseSmartOrder(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`
`javascript
var data = {"flowId": "123456789"}
fyers.resumeSmartOrder(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`
`javascript
// Get all smart orders
fyers.getSmartOrderBookWithFilter().then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
// Get filtered smart orders
// Filter by side (1 for Buy, -1 for Sell)
var data = {"side": [1]}
fyers.getSmartOrderBookWithFilter(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
// Filter by multiple parameters
var data = {
"exchange": ["NSE"],
"side": [1, -1],
"flowtype": [1, 2],
"product": ["CNC", "INTRADAY"],
"messageType": [1, 2],
"search": "SBIN",
"sort_by": "CreatedTime",
"ord_by": 1,
"page_no": 1,
"page_size": 15
}
fyers.getSmartOrderBookWithFilter(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`
This includes following APIs: createSmartExitTrigger, getSmartExitTrigger, updateSmartExitTrigger, activateDeactivateSmartExitTrigger
`javascript
// Type 1: Only Alert (notification only, no auto-exit)
var data = {
"name": "Alert Only Strategy",
"type": 1,
"profitRate": 5000,
"lossRate": -2000
}
fyers.createSmartExitTrigger(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
// Type 2: Exit with Alert (notification + immediate exit)
var data = {
"name": "Auto Exit Strategy",
"type": 2,
"profitRate": 5000,
"lossRate": -2000
}
fyers.createSmartExitTrigger(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
// Type 3: Exit with Alert + Wait for Recovery (notification + delayed exit)
var data = {
"name": "Recovery Exit Strategy",
"type": 3,
"profitRate": 10000,
"lossRate": -3000,
"waitTime": 5
}
fyers.createSmartExitTrigger(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`
`javascript`
// Get all smart exit triggers
fyers.getSmartExitTrigger().then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`javascript
var data = {
"flowId": "123456789",
"triggerPrice": 610.00,
"stopLoss": 600.00,
"takeProfit": 630.00
}
fyers.updateSmartExitTrigger(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
`
`javascript
var data = {"flowId": "123456789"}
fyers.activateDeactivateSmartExitTrigger(data).then((response) => {
console.log(response)
}).catch((error) => {
console.log(error)
})
``