Root cause: X-Kite-Version header on web login endpoints caused Zerodha to return plain profile response instead of OAuth redirect_url. Changes: - Remove X-Kite-Version from session headers (only valid for Kite Connect API) - Use allow_redirects=False on connect/login GET to preserve OAuth cookie - Add Referer header to login/twofa POSTs - Check data.redirect_url in twofa JSON body (modern Zerodha SPA behavior) - Keep Location header fallback for legacy behavior Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Control plane API skeleton.