1. What is Kite Connect API?
Kite Connect is a platform to build complete stock market investment and trading applications. It provides REST-like HTTP APIs to execute orders in real time across equities and commodities, manage portfolios, and stream live market data over WebSockets.
Kite Connect is designed for tech-savvy traders building custom trading solutions and startups building retail-facing platforms. Kite Connect and Kite Publisher form part of Rainmatter's initiative to incubate Indian fintech startups. To learn more, see What is Kite Connect API?
2. How to sign up for Kite Connect?
- Visit developers.kite.trade/signup and complete the registration form.
- Choose your plan: Personal (Free) or paid Connect (₹500/month per API key).
- Go to My Apps, click on Create New App, and fill in your app name, Zerodha client ID, redirect URL, and optional postback URL.
Once you create your app, you receive an API key and an API secret. Keep your API secret secure and do not share it. To learn more, see How to sign up for Kite Connect and get an API key?
3. Does Zerodha offer a sandbox environment?
No. Zerodha does not offer a sandbox environment for Kite Connect.
4. Will Zerodha help me code my trading strategies?
No. Zerodha does not provide Kite Connect API support via phone or the support ticketing system. Post coding and technical queries on the community forum at kite.trade/forum/discussions.
5. What plans are available and what do they cost?
Kite Connect Personal (free)
- Full order, GTT (Good Till Triggered), and alerts management.
- Margin computation and portfolio management.
- No live market data or historical data.
Kite Connect paid at ₹500/month per API key
- Everything in the Personal plan.
- Live market data via WebSockets.
- Historical candle data.
For startups building mass retail products
-
Kite Connect APIs are available free of charge. Write to [email protected] to learn more.
To learn more, see What are the charges for Kite APIs, and what types of subscription plans are available?
6. Do I need to pay separately for historical data and live market data?
No. Both are included at no additional cost with the paid Kite Connect plan.
7. Can I subscribe to the historical API without subscribing to Kite Connect?
No. You must subscribe to Kite Connect first before you can access the historical API.
8. How to download an invoice for Kite Connect API charges?
- If you paid via Razorpay: Download your invoice from the payment history on the billing page of your developer account.
- If charges were debited from your Zerodha account, download your invoice from Console.
9. How to cancel or delete your Kite Connect app?
To cancel your subscription (your app configuration is preserved):
- Go to My Apps and click on the app.
- Click on Cancel.
You can reactivate a cancelled app from the app section at any time.
To permanently delete your app:
- Go to My Apps and select the app.
- Click on Delete, type I UNDERSTAND, and click on OK.
Deleting your app immediately invalidates your API key, secret, and all access tokens. To unlink your Kite trading account from the API, open the billing page and click on Unlink. To learn more, see How to deactivate or unsubscribe from Kite Connect API and unlink the Kite account?
10. Why can I not subscribe or unsubscribe on a mobile browser?
You may face issues subscribing to or unsubscribing from the Kite Connect API on mobile browsers due to mobile site limitations. You can resolve this by enabling desktop mode in your browser.
11. Can I use Kite Connect data on other platforms?
No. Displaying or redistributing Kite Connect API data on external platforms violates exchange data vending policies. Kite Connect is an order execution platform, not a data distribution service. For data distribution, contact an exchange-authorised data vendor.
Static IP and whitelisting
You must configure a static IP address to place orders via the Kite API from 1 April 2025. All other API endpoints (WebSocket data, order book, positions, etc.) remain accessible from any IP. Order requests from unregistered IPs will be rejected.
1. How to obtain and add a static IP?
You can acquire a static IP from an ISP (internet service provider), a cloud provider (such as AWS or GCP), or a VPN/VPC service. Once you have one, add it from the Profile section of your Developer Console. You can add up to two static IPs: one primary (mandatory) and one secondary (optional).
2. Can I share a static IP across multiple accounts?
You can share a static IP only with immediate family members (spouse, dependent children, and dependent parents) as per the regulation. Sharing IPs outside of the immediate family may lead to suspension of your Kite Connect account and all associated API keys.
3. Is the static IP configuration per app or per developer account?
The configuration applies at the Kite Connect developer account level and covers all apps under that account. You cannot configure static IPs separately for individual apps.
4. Can I change my static IP?
Yes. You can update it from the Profile section of the Developer Console. You can make only one change per calendar week, and updates take effect instantly.
5. Are IPv6 addresses supported?
Yes. Both IPv4 and IPv6 addresses are supported.
6. Can I use the same static IP for two different brokers?
Yes. Each broker independently whitelists IPs for its own account. Confirm the process with each broker separately.
7. I have multiple apps under one developer account for family members. Does whitelisting still work?
Yes. All apps under the same profile share the same IP set. As long as you follow the permitted family-account sharing rules, there are no issues.
8. Why is my order getting rejected even after configuring a static IP?
Your order may be rejected if the whitelisted IP does not exactly match the public IP from which your requests reach Zerodha. To fix this:
- Check your system's current public (egress) IP address.
- Confirm that the same IP is whitelisted in your developer account.
For example, if your infrastructure routes requests over IPv6 but only your IPv4 address is whitelisted, your order requests will be rejected.
Orders per second (OPS) and rate limits
1. What is the maximum order rate allowed?
The maximum allowed limit is 10 orders per second (OPS) per client (trading) account. Requests beyond this are rejected with a 429 HTTP response code. The limit applies per client account, not per app.
2. Do I still need a static IP if I place fewer than 10 orders per second?
Yes. A static IP is required regardless of your order rate.
3. How are iceberg orders counted towards the OPS limit?
Iceberg orders count as a single order, regardless of the number of legs.
4. Why do I see a "maximum allowed order request exceeded" error even though I have not placed 5,000 orders?
The limit counts both successful orders and blocked invalid requests. Invalid orders do not appear in your order book but still count towards your API request limit. Recheck your code for invalid parameters that may be generating a high volume of rejected requests.
To learn more, see Why do I get "maximum allowed order request exceeded" error on Kite Connect API?
API usage and order placement
1. Does using Kite Publisher fall under algo trading regulations?
No. If you use Kite Publisher for order placement, your setup does not fall under SEBI's (Securities and Exchange Board of India) algo trading framework as the end user places the orders manually.
2. Are market orders blocked via API?
Yes. You must place market orders with market protection. Orders with a market protection value of 0 are treated as unprotected market orders and will be rejected.
MCX (Multi Commodity Exchange) does not support IOC (Immediate-or-Cancel) orders in the algo segment. Use Day as the validity for MCX orders instead.
3. What is the difference between "net" and "day" in the positions API?
- Net positions show your actual current holdings after accounting for all carried-forward positions and today's trades.
- Day positions capture only the buying and selling activity from the current trading session.
To learn more, see What is the difference between "net" and "day" in the positions API?