Skip to Main Content
POST/NorenWClientAPI/EODChartData

Historical Data

Fetch end-of-day OHLCV candles over a date range, for multi-day/multi-week backtesting and charting.

Overview

Daily Price Series (EODChartData) returns one candle per trading day for a single instrument across a date range. It's the endpoint to reach for when you need history spanning weeks, months, or years — Time Price Series covers intraday granularity but only a shallow lookback window.

Purpose

Use this to backtest swing/positional strategies, compute daily indicators (SMA/EMA over N days, ATR, etc.), or render a daily candlestick chart. Do not use it for intraday signals — the exchange doesn't publish partial-day EOD candles, so the current day's bar won't be finalized until after close.

Parameters

FieldTypeRequiredDescription
uidstringrequiredYour logged-in client/user ID.
symstringrequiredCombined exchange:tradingsymbol, e.g. NSE:ACC-EQ.
fromstring (epoch seconds)requiredRange start.
tostring (epoch seconds)requiredRange end.

Request example

import requests

params = {"uid":"ABC123",sym": "NSE:ACC-EQ","from": "1667297289","to": "1670231374"}
headers = {"Authorization": f"Bearer {Acesstoken}"}

resp = requests.post(
    "https://api.shoonya.com/NorenWClientAPI/EODChartData",
    json=params, headers=headers,
)
print(resp.json())
const res = await fetch("https://api.shoonya.com/NorenWClientAPI/EODChartData", {
  method: "POST",
  headers: { "Content-Type": "application/json", Authorization: `Bearer ${Acesstoken}` },
  body: JSON.stringify({ sym: "NSE:ACC-EQ", from: "1667297289", to: "1670231374" }),
});
console.log(await res.json());
curl -X POST https://api.shoonya.com/NorenWClientAPI/EODChartData \
  -H "Authorization: Bearer $Acesstoken" \
  -H "Content-Type: application/json" \
  -d '{"sym":"NSE:ACC-EQ","from":"1667297289","to":"1670231374"}'

Response example

json
[
  {
    "time": "05-DEC-2022",
    "into": "2145.00",
    "inth": "2168.90",
    "intl": "2130.25",
    "intc": "2160.10",
    "v": "412300",
    "oi": "0"
  },
  {
    "time": "06-DEC-2022",
    "into": "2160.10",
    "inth": "2175.55",
    "intl": "2148.00",
    "intc": "2152.75",
    "v": "389750",
    "oi": "0"
  }
]
Unverified against a live captureSame caveat as Time Price Series — schema is inferred from the standard Noren candle convention, not diffed against a fresh EODChartData debug log. Confirm field names before publishing.

Error handling

CodeMeaning
HTTP non-200The SDK returns None on any non-200 status — check network/auth before assuming an empty result.
Empty bodyA zero-length response body is treated as no data, not an error — typically means no trading days exist in the given range (e.g. range entirely on holidays/weekends).
(non-list response)Non-list JSON is treated as an error payload — inspect stat/emsg directly if bypassing the SDK.

Best practices

  • Request the full date range you need in one call rather than paging day-by-day — this endpoint isn't rate-sensitive the way tick-level polling is, but unnecessary calls still count against your quota.
  • Store from/to as epoch seconds, not milliseconds — a common source of empty results is passing millisecond timestamps by mistake.

Python example

python
from api_helper import NorenApiPy

api = NorenApiPy()
api.injectOAuthHeader(cred["Access_token"], cred["UID"], cred["Account_ID"])

ret = api.get_daily_price_series(
    exchange="NSE",
    tradingsymbol="ACC-EQ",
    startdate="1667297289",
    enddate="1670231374",
)
print(ret)

Notes

Unlike most other endpoints in this API, get_daily_price_series combines exchange and symbol into a single sym field server-side (exchange:tradingsymbol) rather than sending them as separate parameters — the Python SDK does this concatenation for you, but replicate it manually if calling the REST endpoint directly.