Introduction
Welcome to the Groww Trading API! Our APIs enable you to build and automate trading strategies with seamless access to real-time market data, order placement, portfolio management, and more. Whether you're an experienced algo trader or just starting with automation, Groww's API is designed to be simple, powerful, and developer-friendly.
This documentation focuses on using cURL to interact with the Groww Trading APIs. It provides step-by-step instructions, examples, and best practices for making API requests, handling responses, and integrating Groww's trading functionalities into your applications. Whether you're placing orders, fetching market data, or managing your portfolio, this guide will help you leverage cURL effectively for seamless API integration.
Getting Started
Step 1: Prerequisites
Trading on Groww using Groww APIs requires:
- A Groww account.
- Basic knowledge of REST APIs.
- Having an active Trading API Subscription. You can purchase a subscription from this page.
Step 2: Authentication
There are two ways you can interact with GrowwAPI:
1st Approach: Access Token
(Expires daily at 6:00 AM)
To generate an API access token:
- Log in to your Groww account.
- Click on the profile section at the Right-top of your screen.
- Click on the setting icon in the menu.
- In the navigation list, select ‘Trading APIs’
- Click on ‘Generate API keys’ and select ‘Access Token’
- You can create, revoke and manage all your tokens from this page.
You can create, revoke and manage all your tokens from this page.
2nd Approach: TOTP Flow
(Uses API Key and Secret — No Expiry) To learn about TOTP flow, check out this page.
API Request and Response structure
Headers
All requests must have following headers. Providing the generated access token in the Authorization header .
Header Name | Header Value |
---|---|
Authorization | Bearer {ACCESS_TOKEN} |
Accept | application/json |
X-API-VERSION | 1.0 |
Request structure
GET Requests: Send the required parameters as query parameters in the request. For example,
POST Requests: Parameters are sent in the request body as JSON. For example,
Responses from the API are always JSON.
Successful Request (HTTP 200 OK)
When a request is successfully processed, the API returns a JSON object with a status field set to SUCCESS. The payload field contains the requested data.
Failed Request (HTTP 40x or 50x)
If a request fails, the API returns a JSON object with a status field set to FAILURE. The error field contains details about the failure.
Error Codes
Code | Message |
---|---|
GA000 | Internal error occurred |
GA001 | Bad request |
GA003 | Unable to serve request currently |
GA004 | Requested entity does not exist |
GA005 | User not authorised to perform this operation |
GA006 | Cannot process this request |
GA007 | Duplicate order reference id |
Rate Limits
The rate limits are applied at the type level, not on individual APIs. This means that all APIs grouped under a type (e.g., Orders, Live Data, Non Trading) share the same limit. If the limit for one API within a type is exhausted, all other APIs in that type will also be rate-limited until the limit window resets.
Type | Requests | Limit (Per second) | Limit (Per minute) | Limit (Per Day) |
---|---|---|---|---|
Orders | Create, Modify and Cancel Order | 15 | 250 | 3000 |
Live Data | Market Quote, LTP, OHLC | 10 | 300 | 5000 |
Non Trading | Order Status, Order list, Trade list, Positions, Holdings, Margin | 10 | 250 | 3000 |