growwapi
v1.1.3
Published
NodeJS SDK for Groww trading APIs
Readme
growwapi
NodeJS SDK for Groww trading APIs
📝 Overview
growwapi is a NodeJS SDK for Groww trading APIs. The library provides functionality for trading on Groww including holdings management, margin calculations, order management, and position tracking.
🚀 Features
- Live Feed: Real-time data streaming for market prices
- Historic Data: Access to historical market data
- Holdings: Fetch user portfolio holdings
- Instructions: CSV-based instrument details
- Live Data: Current market data access
- Margins: Retrieve margin details and calculate margins required for orders
- Orders: Create, modify, cancel, and fetch order details
- Positions: Fetch user positions and trading symbol details
- Authentication: Secure API access with API key and TOTPrat
⚙️ Installation
npm install growwapi⚡ Quick Start
1. Environment Setup
Create a .env file in your project root:
GROWW_API_KEY=your_api_key
GROWW_API_SECRET=your_api_secretOptional:
GROWW_API_BASE_URL=
GROWW_API_VERSION=
GROWW_FILECACHE_TTL=
GROWW_LIVE_FEED_MAX_RETRY_COUNT=
GROWW_LIVE_FEED_MAX_RETRY_DURATION=2. Sample Implementation
Here's an example of how to initialize the SDK, fetch your holdings, and place an order:
import { GrowwAPI, Exchange, Segment, Product, OrderType, TransactionType, Validity } from 'growwapi';
const groww = new GrowwAPI();
const holdings = await groww.holdings.list();
console.log('Holdings:', holdings);
const orderDetails = {
tradingSymbol: 'RELIANCE',
quantity: 1,
price: 2800,
triggerPrice: 0,
validity: Validity.Day,
exchange: Exchange.NSE,
segment: Segment.CASH,
product: Product.CNC,
orderType: OrderType.Limit,
transactionType: TransactionType.Buy,
};
const order = await groww.orders.create(orderDetails);
console.log('Order placed successfully:', order);📚 Examples
Once your environment is set up and the SDK is initialized, you can explore detailed usage for each feature in the examples directory
Each example demonstrates real-world usage and best practices for the respective module.
📚 API Reference
Live Feed (LiveFeed)
LiveFeed.connect(callback: (data) => void): void
Establishes a WebSocket connection for real-time data.LiveFeed.subscribe(instrumentId: string): void
Subscribes to real-time data for a specific instrument.LiveFeed.consume(subscription: string): void
Starts consuming data from a subscription.LiveFeed.disconnect(): void
Disconnects from the WebSocket.
Live Data (LiveData)
LiveData.getQuote(params: GetQuoteParams): Promise<GetQuoteResponse>
Fetches current quote for a trading symbol.LiveData.getLTP(params: GetLTPParams): Promise<GetLTPResponse>
Fetches last traded price for one or more symbols.LiveData.getOHLC(params: GetOHLCParams): Promise<GetOHLCResponse>
Fetches OHLC data for one or more symbols.
Historic Data (HistoricData)
HistoricData.get(params: HistoricDataParams): Promise<HistoricDataResponse>
Fetches historical candle data for a trading symbol.
Instructions (Instructions)
Instructions.getInstructions(): Promise<InstructionsResponse>
Fetches the full instructions CSV file.Instructions.getFilteredInstructions(params: InstructionsTypeParams): Promise<InstructionsResponse>
Fetches filtered instructions based on provided parameters.
Portfolio & Trading
Holdings (Holdings)
Holdings.list(): Promise<HoldingsResponse>
Fetches user holdings.
Margins (Margins)
Margins.details(): Promise<MarginsResponse>
Fetches margin details for the user.Margins.requiredForOrder(params: MarginsRequiredParams): Promise<MarginsRequiredResponse>
Calculates margins required for an order.
Orders (Orders)
Orders.create(params: CreateOrderParams): Promise<CreateOrderResponse>
Creates a new order.Orders.modify(params: ModifyOrderParams): Promise<ModifyOrderResponse>
Modifies an existing order.Orders.cancel(params: CancelOrderParams): Promise<CancelOrderResponse>
Cancels an order.Orders.getTrades(params: GetTradesParams): Promise<GetTradesResponse>
Fetches trade details for an order.Orders.status(params: OrderStatusParams): Promise<OrderStatusResponse>
Fetches the status of an order.Orders.statusByReference(params: OrderStatusByReferenceParams): Promise<OrderStatusResponse>
Fetches the status of an order by reference ID.Orders.getOrders(params: ListOrderParams): Promise<OrderResponse[]>
Lists all orders.Orders.details(params: OrderDetailsParams): Promise<OrderResponse>
Fetches details of an order.
Positions (Positions)
Positions.user(params: BaseParams): Promise<PositionsResponse>
Fetches user positions.Positions.tradingSymbol(params: TradingSymbolParams): Promise<TradingSymbolResponse>
Fetches details of a trading symbol.
Advanced Usage
Authentication (Auth)
Auth.generateToken(): Promise<AuthTokenResponse>
Generates a new authentication token.Auth.refreshToken(): Promise<AuthTokenResponse>
Refreshes the current authentication token.
Types
All request and response types are available in the types directory and are strongly typed for TypeScript.
See the types folder for details.
🛠️ Development
Scripts
npm run build: Builds the project.npm run test: Runs tests.npm run lint: Lints the code.npm generate-exports: Generates exports for all types.
Testing
npm run testLinting
npm run lint🏗️ Architecture
- GrowwAPI: Main class that initializes and provides access to all service modules
- Resources: Independent modules for different API functionalities:
- Auth, LiveFeed, HistoricData, Holdings, Instructions, LiveData, Margins, Orders, Positions
🤔 Troubleshooting
- Authentication Errors: Ensure your
GROWW_API_KEYandGROWW_API_SECRETare correct. - Invalid Parameters: Double-check the parameters you are passing to the methods. Refer to the
typesdirectory for detailed information on the required and optional parameters. - Network Issues: Ensure you have a stable internet connection. The SDK will attempt to retry failed requests, but a persistent network issue may cause problems.
🤝 Contributing
- Maintain strong typing for all methods and parameters
- Follow resource-based module organization
- Use camelCase for variables and methods
- Document all public methods and parameters
- Handle API errors consistently with descriptive messages
- Validate environmental dependencies before API calls
- Follow the established pattern for new resource modules
📄 License
This project is licensed under the Apache License 2.0. See the LICENSE file for details.
