English | 中文
Official Node.js/TypeScript SDK for the Infoway real-time financial data API.
API Documentation | Get API Key
Get your free API key at infoway.io -- 7-day free trial
npm install infoway-sdk
# or
yarn add infoway-sdk
# or
pnpm add infoway-sdkRequirements: Node.js >= 18.0.0
import{InfowayClient,KlineType}from"infoway-sdk";constclient=newInfowayClient({apiKey: "YOUR_API_KEY"});// Stock trade dataconsttrades=awaitclient.stock.getTrade("AAPL.US");console.log(trades);// Multiple symbolsconstmultiTrades=awaitclient.stock.getTrade("AAPL.US,TSLA.US,GOOGL.US");// Order book depthconstdepth=awaitclient.stock.getDepth("AAPL.US");// K-line dataconstklines=awaitclient.stock.getKline("AAPL.US",KlineType.DAY,100);// Crypto dataconstbtc=awaitclient.crypto.getTrade("BTCUSDT");constethKline=awaitclient.crypto.getKline("ETHUSDT",KlineType.HOUR_1,50);// Market temperatureconsttemp=awaitclient.market.getTemperature("HK,US");// Market breadthconstbreadth=awaitclient.market.getBreadth("US");// Stock fundamentalsconstvaluation=awaitclient.stockInfo.getValuation("AAPL.US");constratings=awaitclient.stockInfo.getRatings("AAPL.US");// Plate/sector dataconstindustries=awaitclient.plate.getIndustry("HK");constconcepts=awaitclient.plate.getConcept("HK");// Basic infoconstsymbols=awaitclient.basic.getSymbols("US");consttradingDays=awaitclient.basic.getTradingDays("US");You can set INFOWAY_API_KEY instead of passing it directly:
export INFOWAY_API_KEY=your_api_keyconstclient=newInfowayClient();// reads from INFOWAY_API_KEYimport{InfowayWebSocket,Business}from"infoway-sdk";constws=newInfowayWebSocket({apiKey: "YOUR_API_KEY",business: Business.STOCK,});ws.onTrade=(msg)=>{console.log("Trade:",msg);};ws.onDepth=(msg)=>{console.log("Depth:",msg);};ws.onKline=(msg)=>{console.log("Kline:",msg);};ws.onDisconnect=()=>{console.log("Disconnected, reconnecting...");};ws.onReconnect=()=>{console.log("Reconnected!");};// Subscribe after connection is establishedawaitws.subscribeTrade("AAPL.US,TSLA.US");awaitws.subscribeDepth("AAPL.US");// Start receiving dataawaitws.connect();// To close:// await ws.close();constws=newInfowayWebSocket({apiKey: "YOUR_API_KEY",business: Business.CRYPTO,});ws.onTrade=(msg)=>console.log("Crypto trade:",msg);awaitws.subscribeTrade("BTCUSDT,ETHUSDT");awaitws.connect();| Client | Prefix | Description |
|---|---|---|
client.stock | stock | HK, US, CN stock market data |
client.crypto | crypto | Cryptocurrency data |
client.japan | japan | Japan stock market data |
client.india | india | India stock market data |
client.common | common | Common market data |
client.basic | -- | Symbols, trading days, hours |
client.market | -- | Temperature, breadth, indexes |
client.plate | -- | Industry/concept sectors |
client.stockInfo | -- | Valuation, ratings, company info |
| Method | HTTP | Endpoint |
|---|---|---|
getTrade(codes) | GET | /{prefix}/batch_trade/{codes} |
getDepth(codes) | GET | /{prefix}/batch_depth/{codes} |
getKline(codes, klineType, count) | POST | /{prefix}/v2/batch_kline |
| Value | Interval |
|---|---|
KlineType.MIN_1 (1) | 1 minute |
KlineType.MIN_5 (2) | 5 minutes |
KlineType.MIN_15 (3) | 15 minutes |
KlineType.MIN_30 (4) | 30 minutes |
KlineType.HOUR_1 (5) | 1 hour |
KlineType.HOUR_2 (6) | 2 hours |
KlineType.HOUR_4 (7) | 4 hours |
KlineType.DAY (8) | 1 day |
KlineType.WEEK (9) | 1 week |
KlineType.MONTH (10) | 1 month |
KlineType.QUARTER (11) | 1 quarter |
KlineType.YEAR (12) | 1 year |
Client → server:
| Code | Name | Description |
|---|---|---|
| 10000 | SUB_TRADE | Subscribe to trade data |
| 10003 | SUB_DEPTH | Subscribe to depth data |
| 10006 | SUB_KLINE | Subscribe to K-line data (payload data.arr=[{codes, type}]) |
| 10010 | HEARTBEAT | Heartbeat keepalive |
| 11000 | UNSUB_TRADE | Unsubscribe trade data |
| 11001 | UNSUB_DEPTH | Unsubscribe depth data |
| 11002 | UNSUB_KLINE | Unsubscribe K-line data |
Server → client:
| Code | Name | Description |
|---|---|---|
| 10001 | SUB_TRADE_ACK | Trade subscribe acknowledgement |
| 10002 | PUSH_TRADE | Real-time trade push |
| 10004 | SUB_DEPTH_ACK | Depth subscribe acknowledgement |
| 10005 | PUSH_DEPTH | Real-time depth push |
| 10007 | SUB_KLINE_ACK | K-line subscribe acknowledgement |
| 10008 | PUSH_KLINE | Real-time K-line push |
| 11010 | UNSUB_ACK | Unsubscribe acknowledgement |
import{InfowayAPIError,InfowayAuthError,InfowayTimeoutError}from"infoway-sdk";try{constdata=awaitclient.stock.getTrade("AAPL.US");}catch(err){if(errinstanceofInfowayAuthError){console.error("Authentication failed. Check your API key.");}elseif(errinstanceofInfowayTimeoutError){console.error("Request timed out.");}elseif(errinstanceofInfowayAPIError){console.error(`API error [${err.ret}]: ${err.msg}`);}}MIT