
Product
Introducing Socket Fix for Safe, Automated Dependency Upgrades
Automatically fix and test dependency updates with socket fix—a new CLI tool that turns CVE alerts into safe, automated upgrades.
ig-node-api
Advanced tools
A Node.js library for IG Trading API.
npm i ig-node-api
You need to login first before accessing the REST APIs and the STREAM APIs.
import IG, { API_BASE_URL } from 'ig-node-api'
async function main() {
const myIg = new IG(process.env.IG_DEMO_USERNAME, process.env.IG_DEMO_PASSWORD, process.env.IG_DEMO_API_KEY, API_BASE_URL.DEMO)
const session = await myIg.login()
console.log(session)
}
main()
After login()
, OAuth Tokens (Access Token & Refresh Token) will be auto refreshed before expiry.
Besides, you can manually refresh the OAuth Tokens:
import IG, { API_BASE_URL } from 'ig-node-api'
async function main() {
const myIg = new IG(process.env.IG_DEMO_USERNAME, process.env.IG_DEMO_PASSWORD, process.env.IG_DEMO_API_KEY, API_BASE_URL.DEMO)
const session = await myIg.login()
console.log(session)
// ...
const oauthTokens = await myIg.refreshOauthTokens()
console.log('oauthTokens:', oauthTokens)
}
main()
After logout, you can no longer access the REST APIs and the STREAM APIs.
import IG, { API_BASE_URL, parseAxiosError } from 'ig-node-api'
async function main() {
try {
const myIg = new IG(process.env.IG_DEMO_USERNAME, process.env.IG_DEMO_PASSWORD, process.env.IG_DEMO_API_KEY, API_BASE_URL.DEMO)
const session = await myIg.login()
console.log(session)
// ...
await myIg.logout()
const marketCategories = await myIg.getMarketCategories()
console.log(marketCategories)
} catch (err) {
console.error(parseAxiosError(err))
}
}
main()
Above sample code will lead to below error as it tries to getMarketCategories()
after logout()
:
{
"failed": true,
"request": {
"method": "get",
"url": "https://demo-api.ig.com/gateway/deal/marketnavigation",
"headers": {
"Accept": "application/json, text/plain, */*",
"X-IG-API-KEY": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"IG-ACCOUNT-ID": "",
"Authorization": "Bearer ",
"User-Agent": "axios/0.25.0"
},
"data": null
},
"situation": "Request made and server responded.",
"status": 401,
"statusText": "Unauthorized",
"data": { "errorCode": "error.security.client-token-missing" }
}
import IG, { API_BASE_URL } from 'ig-node-api'
async function main() {
const myIg = new IG(process.env.IG_DEMO_USERNAME, process.env.IG_DEMO_PASSWORD, process.env.IG_DEMO_API_KEY, API_BASE_URL.DEMO)
const session = await myIg.login()
console.log(session)
const markets = await myIg.searchEpics('us30')
console.log(markets[0])
const marketCategories = await myIg.getMarketCategories()
console.log(marketCategories)
const marketSubCategories = await myIg.getMarketSubCategories('97606')
console.log(marketSubCategories)
const marketDetails = await myIg.getMarketsDetails(['IX.D.DOW.IFD.IP', 'IX.D.SPTRD.IFA.IP'])
console.log(marketDetails)
const marketDetail = await myIg.getMarketDetails('IX.D.DOW.IFD.IP')
console.log(marketDetail)
}
main()
import IG, { API_BASE_URL } from 'ig-node-api'
async function main() {
const myIg = new IG(process.env.IG_DEMO_USERNAME, process.env.IG_DEMO_PASSWORD, process.env.IG_DEMO_API_KEY, API_BASE_URL.DEMO)
const session = await myIg.login()
console.log(session)
const prices = await myIg.getPrices({
epic: 'IX.D.DOW.IFD.IP',
resolution: 'DAY',
max: 6,
pageSize: 0,
pageNumber: 1,
from: '2022-01-01T00:00:00',
to: '2022-01-06T00:00:00'
})
console.log(prices)
}
main()
import IG, { API_BASE_URL } from 'ig-node-api'
async function main() {
const myIg = new IG(process.env.IG_DEMO_USERNAME, process.env.IG_DEMO_PASSWORD, process.env.IG_DEMO_API_KEY, API_BASE_URL.DEMO)
const session = await myIg.login()
console.log(session)
const watchlistCreateResult = await myIg.createWatchlist({
name: `My Watchlist`,
epics: ['IX.D.DOW.IFD.IP', 'IX.D.SPTRD.IFA.IP', 'CS.D.BITCOIN.CFD.IP']
})
console.log(watchlistCreateResult)
const watchlists = await myIg.getWatchlists()
console.log(watchlists)
const watchlistDeatil = await myIg.getWatchlistDetail('16906012')
console.log(watchlistDeatil)
const watchlistDeleteResult = await myIg.deleteWatchlist('16906012')
console.log(watchlistDeleteResult)
}
main()
import IG, { API_BASE_URL } from 'ig-node-api'
async function main() {
const myIg = new IG(process.env.IG_DEMO_USERNAME, process.env.IG_DEMO_PASSWORD, process.env.IG_DEMO_API_KEY, API_BASE_URL.DEMO)
const session = await myIg.login()
console.log(session)
const createPositionResponse = await myIg.createOtcPosition({
epic: 'CS.D.BITCOIN.CFD.IP',
direction: 'BUY',
orderType: 'MARKET',
size: 3,
forceOpen: true,
guaranteedStop: false,
currencyCode: 'USD',
expiry: '-'
})
console.log(createPositionResponse)
const dealStatus = await myIg.checkDealStatus(createPositionResponse.dealReference)
console.log(dealStatus)
const closePositionResponse = await myIg.closeOtcPosition({
dealId: 'DIAAAAHT7EGREC6',
direction: 'SELL',
size: 0.1,
orderType: 'MARKET'
})
console.log('closePositionResponse:', closePositionResponse)
const openPositions = await myIg.getOpenPositions()
console.log(JSON.stringify(openPositions, null, 4))
const anOpenPosition = await myIg.getOpenPosition('DIAAAAHT7EGREC6')
console.log(JSON.stringify(anOpenPosition, null, 4))
}
main()
import IG, { API_BASE_URL } from 'ig-node-api'
async function main() {
const myIg = new IG(process.env.IG_DEMO_USERNAME, process.env.IG_DEMO_PASSWORD, process.env.IG_DEMO_API_KEY, API_BASE_URL.DEMO)
const accountDetails = await myIg.getAccountDetails()
console.log(JSON.stringify(accountDetails, null, 4))
}
main()
import IG, { API_BASE_URL } from 'ig-node-api'
async function main() {
const myIg = new IG(process.env.IG_DEMO_USERNAME, process.env.IG_DEMO_PASSWORD, process.env.IG_DEMO_API_KEY, API_BASE_URL.DEMO)
const session = await myIg.login()
console.log(session)
const activityHistory = await myIg.getActivityHistory({ from: '2022-01-01T00:00:00', detailed: true })
console.log(activityHistory)
}
main()
import IG, { API_BASE_URL } from 'ig-node-api'
async function main() {
const myIg = new IG(process.env.IG_DEMO_USERNAME, process.env.IG_DEMO_PASSWORD, process.env.IG_DEMO_API_KEY, API_BASE_URL.DEMO)
const session = await myIg.login()
console.log(session)
const transactionHistory = await myIg.getTransactionHistory({ maxSpanSeconds: 600000 })
console.log(transactionHistory)
}
main()
import IG, { API_BASE_URL } from 'ig-node-api'
async function main() {
const myIg = new IG(process.env.IG_DEMO_USERNAME, process.env.IG_DEMO_PASSWORD, process.env.IG_DEMO_API_KEY, API_BASE_URL.DEMO)
const session = await myIg.login()
console.log(session)
const lsClient = myIg.connectLightstreamer()
}
main()
import IG, { API_BASE_URL, constructCandleSubscription, Scale, CandleField, Candle } from 'ig-node-api'
async function main() {
const myIg = new IG(process.env.IG_DEMO_USERNAME, process.env.IG_DEMO_PASSWORD, process.env.IG_DEMO_API_KEY, API_BASE_URL.DEMO)
const session = await myIg.login()
console.log(session)
const lsClient = myIg.connectLightstreamer()
const candleSubscription = constructCandleSubscription(
['CS.D.BITCOIN.CFD.IP'],
Scale['1MINUTE'],
Object.values(CandleField),
(epic: string, data: Candle) => {
data.UTM = new Date(Number(data.UTM)).toLocaleString()
console.log(epic, data)
}
)
lsClient.subscribe(candleSubscription)
}
main()
import IG, { API_BASE_URL, constructTradeSubscription, TradeConfirmation, OpenPositionUpdate } from 'ig-node-api'
async function main() {
const myIg = new IG(process.env.IG_DEMO_USERNAME, process.env.IG_DEMO_PASSWORD, process.env.IG_DEMO_API_KEY, API_BASE_URL.DEMO)
const session = await myIg.login()
console.log(session)
const lsClient = myIg.connectLightstreamer()
const tradeSubscription = constructTradeSubscription(
session.accountId,
['CONFIRMS', 'OPU', 'WOU'],
(tradeUpdates: { CONFIRMS: TradeConfirmation, OPU: OpenPositionUpdate, WOU: any }) => {
console.log(tradeUpdates)
}
)
lsClient.subscribe(tradeSubscription)
}
main()
MIT
FAQs
A Node.js library for IG Trading API.
The npm package ig-node-api receives a total of 4 weekly downloads. As such, ig-node-api popularity was classified as not popular.
We found that ig-node-api demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Automatically fix and test dependency updates with socket fix—a new CLI tool that turns CVE alerts into safe, automated upgrades.
Security News
CISA denies CVE funding issues amid backlash over a new CVE foundation formed by board members, raising concerns about transparency and program governance.
Product
We’re excited to announce a powerful new capability in Socket: historical data and enhanced analytics.