Broker Auth: Dhan¶
Authenticate and place a demo order via DhanHQ v2 over your static IP.
Part 03 of 37 in the ServLoci algo/options trading notebook series — full index in notebooks/README.md.
Setup¶
# Get your dedicated static IPv6 + SOCKS5 credentials free:
# https://comm.servloci.in/register (or /auth/google?free=1 for an instant trial)
# Your api_key / api_secret pair shows up in the portal after signup:
# https://comm.servloci.in/user
!pip install -q "requests[socks]"
!curl -sL https://comm.servloci.in/sdk/servloci.py -o servloci.py
import os
from servloci import ServLoci
SERVLOCI_API_KEY = os.environ.get("SERVLOCI_API_KEY", "dhan:1000000001") # broker:client_id
SERVLOCI_API_SECRET = os.environ.get("SERVLOCI_API_SECRET", "") # from the portal — leave blank to run this notebook in demo mode
sl = None
if SERVLOCI_API_SECRET:
sl = ServLoci(api_key=SERVLOCI_API_KEY, api_secret=SERVLOCI_API_SECRET)
print("ServLoci configured:", sl.host, sl.port)
else:
print("SERVLOCI_API_SECRET not set — running in demo mode (no live proxy calls).")
Support level: Assisted review — DhanHQ v2 API access is granted via a support ticket; mention your ServLoci IPv6 in the request.
Indian broker APIs authenticate trading sessions with an OAuth-style
two-step handshake, not a single long-lived key. You redirect the user (in
practice, yourself) to a broker login page, the broker redirects back with a
short-lived request_token, and you exchange that token — together with your
app's api_secret — for an access_token that's valid for actual order
calls. The api_key/api_secret pair identifies your app; the
access_token identifies an authenticated session and, at every broker
covered here, expires at end of trading day regardless of activity. That
forced daily re-login is a deliberate session-security control, common across
SEBI-regulated broker APIs, so a stolen access token has a shelf life measured
in hours, not indefinitely.
DhanHQ trades the Kite-style instant approval for a support-reviewed onboarding: API access and IP allowlisting are both requested through a ticket rather than granted automatically. In exchange, DhanHQ bundles API access with the trading account at no separate subscription fee, which is why it's the broker used for the full restart-safe Colab walkthrough later in this series.
if sl:
sl.attach() # BEFORE importing dhanhq — it creates a requests.Session at import time
from dhanhq import dhanhq
dhan = dhanhq(client_id=os.environ.get("DHAN_CLIENT_ID", ""), access_token=os.environ.get("DHAN_ACCESS_TOKEN", ""))
print("Dhan client ready:", dhan.client_id)
# order = dhan.place_order(security_id="1333", exchange_segment=dhan.NSE, transaction_type=dhan.BUY,
# quantity=1, order_type=dhan.MARKET, product_type=dhan.INTRA, price=0)
else:
print("Demo mode — set SERVLOCI_API_SECRET above to run this against your Dhan account.")
Install the broker SDK separately: !pip install -q dhanhq. Full whitelist steps: https://comm.servloci.in/docs/brokers.
« Previous: Broker Auth: Zerodha (Kite Connect)
Next: Broker Auth: Groww »
Try the concepts above interactively: Options Strategy Builder · Docs · Get your static IP