{"schemaVersion":"1.0","type":"TechArticle","types":["Article","TechArticle"],"slug":"is-kite-connect-really-free-what-a-2026-setup-actually-costs-h2pui","url":"https://zyvop.com/is-kite-connect-really-free-what-a-2026-setup-actually-costs-h2pui","title":"Is Kite Connect Really Free? What a 2026 Setup Actually Costs","subtitle":"Part 1 of Kite Connect for AI Agents: the two plans, the October fee waiver, the daily login, and the static IP step older tutorials skip","tldr":"Kite Connect has a free plan, a ₹500 plan, and since October 2026 a conditional fee waiver. Before an AI agent touches your account, here is what each tier includes, how the login really behaves, and why order placement now needs a static IP.","keywords":["algo-trading","zerodha","AI agents","kite-connect","ZyVOP","api","Tutorial","Kite Connect for AI Agents"],"entities":["Sanju Singh","algo-trading","zerodha","AI agents","kite-connect","ZyVOP","api","Tutorial","Kite Connect for AI Agents"],"keyTakeaways":["Ask three Kite Connect users what the API costs and you will hear three numbers: ₹2,000 a month, ₹500 a month, and free.","All three were right at some point, and the third is only half right today.","In October 2026 Zerodha also started waiving the fee for active traders, which is why \"free\" keeps appearing in posts that skip the conditions."],"headings":["What \"free\" covers in October 2026","How the October fee waiver works","Which plan an agent needs, and what it costs","The login flow in five steps","The daily login is a design constraint","Static IP: the step older tutorials skip","An error decoder for agents","No sandbox, and no phone support","Where the sources disagree","Setup checklist","What comes next"],"outboundLinks":["https://support.zerodha.com/category/trading-and-markets/general-kite/kite-api/articles/kite-connect-api-faqs","https://kite.trade/forum/discussion/15015/revising-kite-connect-fees-from-2000-to-500-per-month","https://kite.trade/forum/discussion/14806/historical-data-is-now-free-with-base-kite-connect-subscription","https://kite.trade/forum/discussion/14868/introducing-kite-connect-personal-apis-free-apis-for-personal-use","https://kite.trade/forum/discussion/16294/free-api-subscription-for-active-users","https://kite.trade/docs/connect/v3/user/","https://kite.trade/docs/connect/v3/agent-setup/","https://support.zerodha.com/category/trading-and-markets/general-kite/kite-api/articles/how-do-i-sign-up-for-kite-connect","https://kite.trade/forum/discussion/comment/52897/","https://kite.trade/forum/discussion/4108/exact-time-of-my-access-token-expiry","https://support.zerodha.com/category/trading-and-markets/general-kite/kite-api/articles/static-ip","https://www.sebi.gov.in/legal/circulars/feb-2025/safer-participation-of-retail-investors-in-algorithmic-trading_91614.html","https://taxguru.in/sebi/sebi-extends-algo-trading-rule-implementation-1st-october-2025.html","https://www.sebi.gov.in/sebi_data/attachdocs/sep-2025/1759232056254.pdf","https://developers.kite.trade/"],"contentText":"Ask three Kite Connect users what the API costs and you will hear three numbers: ₹2,000 a month, ₹500 a month, and free. All three were right at some point, and the third is only half right today. In October 2026 Zerodha also started waiving the fee for active traders, which is why \"free\" keeps appearing in posts that skip the conditions. This is Part 1 of a five-part series on building AI agents on Kite Connect, Zerodha's trading API. Before any agent code, four facts need to be straight: what each plan includes, how the October waiver works, how the daily login behaves, and why placing orders now requires a static IP. Everything below was checked against Zerodha's support pages, developer docs, and forum as of 26 October 2026. A note on scope: this series is about engineering. It does not recommend trades or strategies, and automated trading can lose real money. What \"free\" covers in October 2026 Kite Connect has two plans. The Personal plan is free and carries no market data, live or historical. The paid Connect plan adds both. Everything else is in both plans: order, GTT (Good Till Triggered) and alert management, margin computation, and portfolio data. These descriptions come from Zerodha's Kite Connect FAQ. Personal Connect Price ₹0 ₹500 per month per API key Orders, GTT, alerts Yes Yes Margins and portfolio Yes Yes Live market data over WebSocket No Yes Historical candles No Yes The ₹2,000 figure in older write-ups is the base fee from before May 2025, when Zerodha announced a cut to ₹500 a month. Before that, historical data was a separate ₹2,000 add-on, which Zerodha dropped on 8 February 2025. The Personal plan launched the next month. For individuals, Zerodha's current pages list only the two plans above. Three more rules from the same FAQ matter for agent builders: Historical data needs Connect. You cannot subscribe to the historical API on its own. Kite data cannot be redistributed. Showing it on other platforms violates exchange data-vending rules, so an agent that republishes prices is out of bounds. Startups building mass-retail products can apply for free access by writing to Zerodha. The first practical consequence shows up fast. Market-data calls on a Personal key fail with an \"Insufficient permission\" error, and users reported exactly that on the LTP and quote calls when the plan launched. A WebSocket attempt can fail with a 403. Neither means your code is broken, and the error decoder near the end lists both. How the October fee waiver works On 7 October 2026 Zerodha announced on its developer forum that it is waiving the Connect subscription fee for active traders. The rules, assembled from that announcement and the staff replies beneath it: After each calendar month ends, Zerodha checks your brokerage. ₹2,000 or more earns 500 developer credits, worth ₹500. The credits renew your Connect app for the following month. Below the threshold, normal charges apply. No application is needed, and credits appear on the billing page of your developer account. You need an active Connect app when the credits are issued. A user with no active app was told this was why no credit arrived. Eligibility is assessed per client ID, and credits land in the developer account the app is mapped to. Several apps on one client ID share a single credit. Zerodha says the waiver does not change API quality or performance. Four consequences follow. The waiver applies only to the paid Connect plan, because Personal was already free. It depends on brokerage, so a client ID that never trades generates none and will not qualify. Credits arrive after the month closes, so if you need market data now, expect to pay for the first month yourself. The fourth is about trust in the details. Several forum users reported confusion about timing and eligibility in the same thread. Check your billing page instead of assuming a credit will appear, especially near the threshold, where the wording is not consistent across Zerodha's own replies (see the table near the end). Which plan an agent needs, and what it costs Start from what the agent will do, not from the price. flowchart TD A[What does the agent need?] --&gt; B{Live prices, WebSocket ticks or historical candles?} B -- Yes --&gt; C[Connect plan: ₹500 per month per API key] B -- No --&gt; D[Personal plan: free] C --&gt; H{Will it place or change orders?} D --&gt; H H -- Yes --&gt; I[Whitelist a static IP first] H -- No --&gt; J[Run from any IP]A first agent that reads holdings, margins, and positions and explains them needs nothing beyond Personal. That is a useful place to start, because you can build and debug the whole login, tooling, and prompt layer at zero cost. Move to Connect when the agent has to reason about prices, and only then. Here is what each setup costs: Agent Plan Monthly cost Reads holdings and margins, no prices Personal ₹0 Needs prices, and the client ID generates ₹2,000 or more in brokerage each month Connect ₹500 for the first month, then covered by credits while you keep qualifying Needs prices, and the client ID trades less Connect ₹500, or ₹6,000 a year The middle row holds only while you stay above the threshold. One quiet month and the fee returns. The login flow in five steps Kite Connect uses an OAuth-style login flow, documented in the login flow reference. It is the same for a script, a web app, or an agent's tool. sequenceDiagram actor You participant Login as Kite login page participant App as Your login script participant API as api.kite.trade You-&gt;&gt;Login: Open login URL with your api_key Login-&gt;&gt;You: Password and 2FA prompt You-&gt;&gt;Login: Complete 2FA Login--&gt;&gt;App: Redirect to your URL with request_token App-&gt;&gt;API: POST /session/token with api_key, request_token, checksum API--&gt;&gt;App: access_token App-&gt;&gt;API: Every later call carries the access_tokenSend the user to https://kite.zerodha.com/connect/login?v=3&amp;api_key=YOUR_KEY. After login and 2FA, Kite redirects to the redirect URL you registered, with a request_token. It is one-time and lives only a few minutes. POST to /session/token with the header X-Kite-Version: 3 and the form fields api_key, request_token, and checksum. The checksum is the SHA-256 hash of api_key + request_token + api_secret, concatenated in that order. The response contains the access_token. Send it on every call as Authorization: token api_key:access_token. The scheme is token, not Bearer. The official Python client handles the checksum for you. The helper below, written against pykiteconnect 5.2.2 (pip install kiteconnect, or uv add kiteconnect), splits the flow into two functions on purpose: import json import os import stat from datetime import datetime from pathlib import Path from zoneinfo import ZoneInfo from kiteconnect import KiteConnect from kiteconnect.exceptions import TokenException SESSION_FILE = Path(\".kite_session.json\") IST = ZoneInfo(\"Asia/Kolkata\") def today() -&gt; str: return datetime.now(IST).date().isoformat() def new_client() -&gt; KiteConnect: return KiteConnect(api_key=os.environ[\"KITE_API_KEY\"]) def login() -&gt; KiteConnect: \"\"\"Run by a human, once per day, in a terminal the agent cannot read.\"\"\" kite = new_client() print(\"Log in here, finish 2FA, then copy request_token from the redirect URL:\") print(kite.login_url()) request_token = input(\"request_token: \").strip() data = kite.generate_session( request_token, api_secret=os.environ[\"KITE_API_SECRET\"] ) SESSION_FILE.write_text( json.dumps({\"issued_on\": today(), \"access_token\": data[\"access_token\"]}) ) SESSION_FILE.chmod(stat.S_IRUSR | stat.S_IWUSR) kite.set_access_token(data[\"access_token\"]) return kite def load() -&gt; KiteConnect: \"\"\"Called by scripts the agent writes. It never prompts and never needs the secret.\"\"\" if not SESSION_FILE.exists(): raise RuntimeError(\"No session file. Run the login step first.\") saved = json.loads(SESSION_FILE.read_text()) if saved[\"issued_on\"] != today(): raise RuntimeError(\"Session is from an earlier day. Log in again.\") kite = new_client() kite.set_access_token(saved[\"access_token\"]) try: kite.profile() except TokenException as exc: raise RuntimeError(\"Kite rejected the token. Log in again.\") from exc return kiteThe split is the point. Only login() needs the API secret, and a human runs it. Every script the agent writes calls load(), which needs the public KITE_API_KEY and the saved token, so the secret never enters the agent's environment. The token file is still a live credential, so keep it out of version control and out of prompts. This limits exposure but does not make a token safe from a tool that can read your filesystem. A first script for the agent to run needs four lines: from kite_session import load kite = load() print(\"Available cash:\", kite.margins(segment=\"equity\")[\"available\"][\"cash\"]) print(\"Holdings:\", len(kite.holdings()))Zerodha also publishes an agent setup page for coding agents. It gives you a prompt URL to hand to your agent, recommends installing pykiteconnect with uv, and notes that every docs page is available as Markdown by appending .md. Use it, with two gaps in mind. Its order example does not mention that orders from an unregistered IP are rejected, and the page says nothing about market protection. The static IP rule is covered below, and market protection in Part 4. Register http://127.0.0.1:8000 as the redirect URL while testing. Zerodha's sign-up guide says localhost is fine for that. Nothing needs to be listening there: the browser will show a connection error, but the request_token is still in the address bar. The daily login is a design constraint The access token is valid for the trading day. Zerodha's developer docs say it expires at 6 AM the next day, a regulatory requirement, and sooner if you invalidate it through the API or do a master logout from the Kite web terminal. The FAQ describes the same limit as expiring before market open. Individual apps get no refresh token, since the docs reserve that field for certain approved platforms. Once the token lapses, a human completes the browser login again. The rule is exchange-driven. A September 2026 reply on Zerodha's forum says users must log in manually at least once a day, that the token cannot be refreshed or generated automatically for individual users, and that Zerodha neither recommends nor supports automating the login. In the waiver thread, one commenter asked for TOTP-based token generation. At the time of writing there was no reply to that request. For agent design, this settles three questions before you write any prompt: The agent never logs in. On a TokenException it stops and tells you. Automating the login would work against the rule above. One process owns the session. The FAQ states that a token becomes invalid if a new session is generated with the same API key. Two agents, or an agent plus your own script, can log each other out. Morning jobs start after your login, not at a fixed time. A 2018 forum thread reported tokens dying anywhere between 6 and 7:30 AM, so a clock check is unreliable. Let load() fail loudly and treat that as the signal. Static IP: the step older tutorials skip Since 1 April 2026, any order placed through the API must come from a static IP registered in your developer console, according to Zerodha's static IP guide. The rule traces to SEBI's 4 February 2025 circular on retail algo trading. Its start date slipped from 1 August 2025 to 1 October 2025, and a 30 September 2025 circular set 1 April 2026 as the date the framework applies to all brokers. NSE issued its implementation standards on 5 May 2025 as circular NSE/INVG/67858. Reads are unaffected. The WebSocket stream, order book, positions, and similar endpoints still work from any IP, so a read-only agent needs no static IP at all. The details that trip people up: Topic What Zerodha says What is checked Order requests only. Unregistered IPs are rejected. How many IPs Up to two: one primary (required), one secondary (optional). Scope The developer account, covering all its apps. Changes One per calendar week, effective instantly. Sharing Immediate family only (spouse, dependent children, dependent parents). Sharing wider may suspend the account and all its API keys. IP versions IPv4 and IPv6 both work, but the whitelisted address must match the public IP your requests actually leave from. Order rate 10 orders per second per client account. Two misreadings are common. A strategy under 10 orders per second still needs the static IP. The exchange-registration requirement applies only above that rate. And the IPv6 mismatch is easy to hit: if your machine reaches Zerodha over IPv6 while you whitelisted an IPv4 address, orders are rejected even though everything looks configured. Where do you get a static IP? Zerodha's FAQ names three sources: an ISP, a cloud provider such as AWS or GCP, or a VPN or VPC service. A laptop on home broadband usually has an address that changes, and so do hosting platforms that rotate their outbound addresses. Neither works for placing orders. The practical rule for the series: build read-only first, and add the static IP only when you add order tools. That keeps your riskiest capability behind a deliberate setup step. An error decoder for agents An agent reads error strings and tries to fix them, so it helps to know which errors point at setup instead of code. Each row below comes from Zerodha's FAQ. What the agent sees Likely cause Right response TokenException, or \"Incorrect api_key or access_token\" Token expired, or a newer session replaced it Stop and ask the human to log in again 403 Forbidden on the API or WebSocket Invalid or expired token, or a Personal app asking for market data Check the token, then the plan \"Insufficient permission\" on market data Personal app, or a lapsed Connect subscription Check the app type and subscription status \"User not enabled for the app\" Client ID in the app does not match the account logging in Fix the client ID in the developer console Order rejected despite a whitelisted IP Public egress IP differs from the saved one, often IPv4 against IPv6 Compare the real outbound IP with the console entry 429 on orders More than 10 orders per second on one client account Slow down. Invalid requests count toward the limit too The right response is almost never \"retry harder\". Most of these need a human decision. No sandbox, and no phone support Zerodha states that it does not offer a sandbox environment for Kite Connect. It also provides no API support by phone or ticket, and sends coding questions to the community forum. Both facts shape how you test an agent. Anything that touches orders is tested against a live account. Read endpoints are the safe rehearsal space. Part 4 covers how to build guardrails so a test with real money behaves like one. Where the sources disagree Two details differ between sources. Neither is fatal, but each can cost an afternoon. Detail Source A Source B Static IP start date The API FAQ says 1 April 2025 The static IP guide says 1 April 2026 Waiver threshold The announcement says ₹2,000 or more A support reply quoted in the thread says more than ₹2,000 For the first, the dedicated guide and the forum's April deadline notice agree on 2026, so treat the FAQ's year as a typo. For the second, stay clearly above the brokerage threshold if you plan around the waiver. Setup checklist Step Where Notes Create a developer account developers.kite.trade Sign up, then choose Personal or Connect Create an app My Apps Needs your Zerodha client ID and a redirect URL Save the API key and secret Environment variables Keep the secret out of agent context and version control Run the login step A terminal you control Once per trading day, after 2FA Whitelist a static IP Developer console, Profile Only when you add order tools Confirm the plan matches the job Billing page Connect for prices, Personal for everything else Optional: give your coding agent Zerodha's setup prompt Agent setup page Official prompt URL, plus Markdown versions of the docs What comes next Part 2 builds a first real script on the free Personal plan: reading holdings and margins, then wrapping them as tools an agent can call. Part 3 looks at Kite MCP, Zerodha's own server for connecting AI assistants, and what it exposes. Part 4 builds the order guardrails. Part 5 moves to streaming data on the paid plan. If you only do one thing after this article, run the login helper once and confirm the four-line script prints your cash balance. Everything later in the series builds on that session working.","contentHash":"sha256:8c9989199c0e7ca9e0a322bd0c5532a4da1159ecdab32a32248296960dba488a","authorName":"Sanju Singh","authorUrl":"https://zyvop.com/author/sanjay687","authorSameAs":[],"category":"Tutorial","tags":["algo-trading","zerodha","AI agents","kite-connect","ZyVOP","api"],"audience":"Software engineers and developers building applications with Tutorial","tone":"Practical and evidence-based engineering guidance","readingTimeMinutes":11,"wordCount":2723,"faqs":null,"primaryTopic":"Tutorial","publishedAt":"2026-10-28T05:30:00.065Z","updatedAt":"2026-10-28T14:17:08.500Z","canonicalUrl":"https://zyvop.com/is-kite-connect-really-free-what-a-2026-setup-actually-costs-h2pui"}