WealthTicker API
Indian mutual fund data over plain JSON: the AMFI scheme universe, daily NAV history, and every return/risk metric WealthTicker computes — CAGR, volatility, Sharpe, drawdowns, benchmark-relative alpha/beta, portfolio holdings and overlap. Sign in and create a key at Settings → API keys.
Quick start
Three calls cover most integrations: find a fund, read its metrics, pull its NAV series. Put your key in WT_KEY and the examples below run as-is.
export WT_KEY=wt_live_… # 1. Find the fund — every row already carries its metrics curl -H "X-Api-Key: $WT_KEY" \ "https://wealthticker.in/api/v1/funds?search=uti%20nifty%2050%20index&plan=Direct&option=Growth" # 2. One fund by its AMFI scheme code curl -H "X-Api-Key: $WT_KEY" https://wealthticker.in/api/v1/funds/120716 # 3. Its NAV history (free plan: trailing year; Starter+: everything) curl -H "X-Api-Key: $WT_KEY" "https://wealthticker.in/api/v1/funds/120716/nav?from=2025-01-01"
Authentication
Every request carries your key in the X-Api-Key header; Authorization: Bearer is accepted too. Keys start with wt_live_, are shown once at creation, and are stored hashed — a lost key is revoked and replaced, not recovered. You can hold up to five active keys; they all draw on one account allowance.
curl -H "X-Api-Key: wt_live_…" https://wealthticker.in/api/v1/funds/120716
curl -H "Authorization: Bearer wt_live_…" https://wealthticker.in/api/v1/funds/120716
# No key → 401
{ "error": { "code": "missing_key",
"message": "Pass your API key as 'Authorization: Bearer wt_live_…' or 'X-Api-Key'. Create one at /settings/api." } }
# Revoked or mistyped key → 401
{ "error": { "code": "invalid_key", "message": "Unknown or revoked API key." } }Conventions
- Base URL
https://wealthticker.in/api/v1. HTTPS only; all endpoints areGETand returnapplication/json. - Envelope. Success is
{ data, meta? }—datais an object or an array,metacarries counts, paging and dates. Errors are{ error: { code, message } }with a matching HTTP status;codeis stable and safe to branch on,messageis for humans and may change. - Nulls, never omissions. A metric that can’t be computed (series too short, benchmark not applicable, document not parsed) is
null. Every documented key is always present. - Units. Returns, volatility, alpha, tracking error and expense ratios are percentages as plain numbers (
11.28means 11.28%). Sharpe, Sortino, beta, R² and capture ratios are plain ratios.aumis rupees;marketValueLakhis ₹ lakh;minAumand theaumfield inqare ₹ crore. - Dates are
YYYY-MM-DDin IST. NAVs are what AMFI published for that date. - Freshness. NAVs are refreshed within minutes of AMFI publishing them each evening;
navDateon a fund says exactly which day you have. Metrics are recomputed with each NAV; AUM, TER, holdings and filings refresh on AMFI’s and the AMCs’ monthly cadence. - Caching. Screener responses are cached for up to 15 minutes, categories and portfolios for an hour. Reads are fast and cheap; the quota counts requests, not rows, so prefer one
limit=500page over many small ones. - Stability. Only
/api/v1/*is versioned. Fields are added, never renamed or removed, within v1.
The fund object
/funds, /funds/{code} and /amcs/{slug}’s topFunds all return the same object. Identity and facts are flat; the computed figures are grouped under returns and risk.
schemeCode- AMFI scheme code — the identifier every other endpoint takes. One per plan/option variant: a scheme's Direct Growth, Direct IDCW, Regular Growth… rows are separate codes.
schemeName · amc · category · subCategory- As AMFI files them. category is the broad bucket (Equity, Debt, Hybrid, Index, FoF, ETF, Solution Oriented, Other); subCategory is the SEBI sub-category ("Large Cap Fund", "Liquid Fund", "Index Funds"…).
plan · option- Direct or Regular; Growth or IDCW. "Unknown" where AMFI's feed leaves the field blank.
isinGrowth · isinReinvest- ISINs for the growth/payout and reinvestment legs; null where not issued.
latestNav · navDate- Last published NAV (₹ per unit) and its date.
inceptionDate- The first NAV WealthTicker holds. Direct plans start at 2013-01-01 at the earliest, which is when they were introduced — not the scheme's launch date.
aum- Scheme assets in **rupees** (not crore): 292847871000 is ₹29,284.8 cr. From AMFI's monthly AUM feed; null until a scheme appears there.
expenseRatio- Total expense ratio, % per annum, for this plan — from AMFI's TER disclosure.
exitLoad · minSip · lockInYears- From the scheme's filed Scheme Summary Document: the exit-load clause as written, the minimum SIP instalment in rupees, and the lock-in (3 for ELSS, 0 otherwise). null where the document isn't parsed yet.
rating- WealthTicker's 1–5 star rating, relative to the scheme's SEBI peer cohort. null for IDCW variants, funds under 3 years old, and cohorts too small to rank.
returns.m1 · m3 · m6 · ytd- Absolute % change over the window (under a year, so not annualised).
returns.y1 · y3 · y5 · y10 · inception- Annualised CAGR, %. null when the series doesn't reach back far enough, and every trailing figure is null once the latest NAV is more than 15 days old (a fund that has stopped publishing).
risk.volatility- Annualised standard deviation of daily returns over the trailing 3 years, %.
risk.sharpe · sortino- Trailing 3-year ratios with a 6.5% risk-free rate. Plain numbers, not percentages.
risk.maxDrawdown · maxDrawdown3y- Worst peak-to-trough fall as a negative %: over the whole history held, and over the trailing 3 years.
risk.alpha · beta · benchmark- Against the named benchmark (a total-return index in ₹ where one is published): alpha annualised %, beta a ratio. benchmark is null for debt, liquid and arbitrage funds, and so are alpha/beta.
Endpoints
| Endpoint | Plan | What it returns |
|---|---|---|
GET /funds | All | Screen and search the fund universe. |
GET /funds/{code} | All | One fund with every computed metric. |
GET /funds/{code}/nav | All | Daily NAV history. |
GET /categories | All | Every SEBI sub-category with peer-averaged returns and cost. |
GET /amcs | Starter+ | The fund-house directory. |
GET /amcs/{slug} | Starter+ | One fund house: profile, counts, top funds. |
GET /funds/{code}/overlap | Pro+ | Funds whose equity portfolio most resembles this one. |
GET /funds/{code}/benchmark | Pro+ | Fund versus its benchmark index, period by period. |
GET /funds/{code}/portfolio-stats | Pro+ | The scheme's holdings, as filed in the AMC's monthly disclosure. |
GET /sif | Pro+ | Every Specialized Investment Fund strategy. |
GET /sif/{id} | Pro+ | One SIF scheme and its sibling variants. |
GET /sif/{id}/nav | Pro+ | A SIF's full NAV history. |
GET /api/v1/fundsAll plansScreen and search the fund universe.
GET /api/v1/fundsAll plansScreen and search the fund universe.The same engine as the site's screener, over a documented parameter set. Filter by text, category, AMC, plan, option, size and cost — or write a query expression in q — then sort and page. Each row is the full fund object (metrics included), so one call answers "the ten cheapest large-cap index funds by 3Y CAGR" without a second request per fund.
ETFs and segregated (side-pocketed) schemes are outside the default universe: an ETF trades at a market price, not at NAV, so its NAV-based metrics mislead. Ask for them explicitly with category=ETF or a codes list.
Parameters
| Name | Type | Description |
|---|---|---|
search | string | Free-text match on scheme name and AMC. Tokens are matched independently, so "nifty 50 index" also finds "Nifty Smallcap 50 Index". |
q | string | A query expression: comparisons joined by AND, e.g. aum > 10000 AND 3y cagr > 15 AND expense ratio < 0.5. Numbers: aum (₹ crore), 1m/3m/6m/ytd, 1y/3y/5y/10y cagr, since inception, volatility, sharpe, sortino, max drawdown, alpha, beta, r squared, treynor, info ratio, tracking error, up/down capture, expense ratio, pe ratio, pb ratio, avg market cap, rating, nav. Text (= or !=): category, sub category, amc, plan, option, name. Operators: > < >= <= = !=. No OR or brackets yet; a malformed expression is a 400 invalid_query that names the clause. |
category | string | Equity, Debt, Hybrid, Index, FoF, ETF, Solution Oriented, Other. |
subCategory | string | A SEBI sub-category exactly as /categories lists it, e.g. Large Cap Fund, Flexi Cap Fund, Liquid Fund. |
amc | string | Fund house name as /amcs lists it. Comma-separate for several. |
plan | Direct | Regular | Plan variant. Most screens want plan=Direct&option=Growth, or the same scheme appears up to four times. |
option | Growth | IDCW | Growth or income-distribution option. |
minAum | number | Minimum AUM in ₹ crore. |
maxExpenseRatio | number | Maximum TER, % p.a. |
codes | string | Comma-separated scheme codes — fetch a known set (a watchlist, a portfolio) in one call. Bypasses the ETF exclusion. |
sort | string | schemeName, latestNav, ret1m, ret3m, ret6m, retYtd, ret1y, ret3y, ret5y, ret10y, retIncep, rollAvg3y, rollAvg5y, rollAvg10y, volatility, sharpe, sortino, maxDrawdown, alpha, beta, rSquared, treynor, infoRatio, trackingError, upCapture, downCapture, expenseRatio, aum, peRatio, pbRatio, avgMarketCap, rating. Anything else is a 400 invalid_sort listing these. |
dir | asc | desc | Sort direction. Defaults to the natural one for the column (returns descending, cost ascending). |
page · limit | integer | 1-based page and page size. limit defaults to 50, maximum 500. |
Request
curl -H "X-Api-Key: $WT_KEY" \ "https://wealthticker.in/api/v1/funds?q=aum%20%3E%2010000%20AND%203y%20cagr%20%3E%2015&plan=Direct&option=Growth&sort=ret3y&dir=desc&limit=2"
Response 200
{
"data": [
{
"schemeCode": 151750,
"schemeName": "HDFC Defence Fund - Direct Plan - Growth Option",
"amc": "HDFC Mutual Fund",
"category": "Equity",
"subCategory": "Sectoral/ Thematic",
"plan": "Direct",
"option": "Growth",
"isinGrowth": "INF179KC1GI5",
"isinReinvest": null,
"latestNav": 30.588,
"navDate": "2026-10-13",
"inceptionDate": "2023-06-02",
"aum": 111282250000,
"expenseRatio": 0.89,
"exitLoad": "In respect of each purchase/switch-in of units, an Exit load of 1% is payable if units are redeemed/switched-out within 1 year …",
"minSip": 100,
"lockInYears": 0,
"rating": 4,
"returns": { "m1": -3.45, "m3": 1.1474, "m6": 19.0287, "ytd": 27.1005,
"y1": 21.328, "y3": 35.8492, "y5": null, "y10": null, "inception": 39.3754 },
"risk": { "volatility": 25.9976, "sharpe": 1.129, "sortino": 1.554,
"maxDrawdown": -34.5408, "maxDrawdown3y": -34.5408,
"alpha": 0.233, "beta": 0.841, "benchmark": "Nifty India Defence TRI" }
},
{ "schemeCode": 151749, "schemeName": "HDFC Defence Fund - Direct Plan - IDCW Option", … }
],
"meta": { "total": 63, "page": 1, "limit": 2 }
}Fields
data[]- Fund objects — every field is described under "The fund object" above.
meta.total- Rows matching the filters across all pages. meta.page and meta.limit echo what was applied (limit is clamped to 500).
Errors
- 400 invalid_sort — unknown sort column.
- 400 invalid_query — q didn't parse; the message names the clause and what was expected.
GET /api/v1/funds/{code}All plansOne fund with every computed metric.
GET /api/v1/funds/{code}All plansOne fund with every computed metric.The fund object for a scheme code. The same row a /funds search returns, so there is nothing extra to fetch here — this is the cheap way to refresh one fund you already know.
A code that exists at AMFI but was never viewed on WealthTicker returns 404 the first time and is queued for ingestion; its NAV history is pulled within the hour and the code answers from then on.
Parameters
| Name | Type | Description |
|---|---|---|
code | path · integer | AMFI scheme code, e.g. 120716 for UTI Nifty 50 Index Fund (Direct, Growth). |
Request
curl -H "X-Api-Key: $WT_KEY" https://wealthticker.in/api/v1/funds/120716
Response 200
{
"data": {
"schemeCode": 120716,
"schemeName": "UTI Nifty 50 Index Fund - Direct Plan - Growth",
"amc": "UTI Mutual Fund",
"category": "Index",
"subCategory": "Index Funds",
"plan": "Direct",
"option": "Growth",
"isinGrowth": "INF789F01XA0",
"isinReinvest": null,
"latestNav": 159.991,
"navDate": "2026-10-13",
"inceptionDate": "2013-01-02",
"aum": 292847871000,
"expenseRatio": 0.25,
"exitLoad": null,
"minSip": null,
"lockInYears": null,
"rating": 3,
"returns": { "m1": -2.9118, "m3": -5.9654, "m6": -4.0046, "ytd": -12.358,
"y1": -9.113, "y3": 5.7831, "y5": 5.5895, "y10": 11.2858, "inception": 11.1256 },
"risk": { "volatility": 13.3821, "sharpe": -0.054, "sortino": -0.074,
"maxDrawdown": -38.4179, "maxDrawdown3y": -15.5067,
"alpha": -0.33, "beta": 0.999, "benchmark": "Nifty 50 TRI" }
}
}Errors
- 400 invalid_code — the path segment isn't a positive integer.
- 404 not_found — no such scheme (or not yet ingested; retry in an hour).
GET /api/v1/categoriesAll plansEvery SEBI sub-category with peer-averaged returns and cost.
GET /api/v1/categoriesAll plansEvery SEBI sub-category with peer-averaged returns and cost.A top-down view of the market: one row per SEBI sub-category with the simple average of its funds' trailing returns and expense ratios. Averages are taken over one row per scheme (the Direct Growth variant where it exists), so a scheme with four plan/option codes counts once.
Use it to benchmark a fund against its peers (compare returns.y3 from /funds/{code} with avgRet3y here) or to discover the exact subCategory strings /funds accepts.
Request
curl -H "X-Api-Key: $WT_KEY" https://wealthticker.in/api/v1/categories
Response 200
{
"data": [
{
"category": "Debt",
"subCategory": "10-year Constant Maturity Gilt Fund",
"fundCount": 5,
"avgRet1m": -1.78, "avgRet3m": -2.35, "avgRet6m": 0.73,
"avgRet1y": 1.33, "avgRet3y": 6.61, "avgRet5y": null,
"avgExpenseRatio": 0.3,
"n1y": 5, "n3y": 5, "n5y": 4, "nTer": 5
},
{
"category": "Debt",
"subCategory": "Banking and PSU Fund",
"fundCount": 20,
"avgRet1m": -0.1, "avgRet3m": 0.52, "avgRet6m": 2.47,
"avgRet1y": 4.39, "avgRet3y": 7.01, "avgRet5y": 6.24,
"avgExpenseRatio": 0.34,
"n1y": 20, "n3y": 19, "n5y": 17, "nTer": 20
},
… 54 more sub-categories
],
"meta": { "navDate": "2026-10-14" }
}Fields
category · subCategory- Broad bucket and the SEBI sub-category name — pass subCategory straight to /funds.
fundCount- Schemes in the average (one per family).
avgRet1m … avgRet5y- Peer averages in %: absolute under a year, CAGR from 1Y. null when no fund in the cohort reaches the window.
avgExpenseRatio- Average Direct-plan TER, % p.a.
n1y · n3y · n5y · nTer- How many funds each average is over — a 5Y average over three funds deserves less trust than one over sixty.
meta.navDate- The NAV date the returns are measured to.
GET /api/v1/amcsStarter+The fund-house directory.
GET /api/v1/amcsStarter+The fund-house directory.Every AMC with schemes in the universe and the slug /amcs/{slug} takes. The amc string is also what /funds?amc= expects.
Request
curl -H "X-Api-Key: $WT_KEY" https://wealthticker.in/api/v1/amcs
Response 200
{
"data": [
{ "amc": "360 ONE Mutual Fund", "slug": "360-one" },
{ "amc": "ASK MUTUAL FUND", "slug": "ask" },
{ "amc": "Abakkus Mutual Fund", "slug": "abakkus" },
…
{ "amc": "HDFC Mutual Fund", "slug": "hdfc" },
…
],
"meta": { "total": 55 }
}Fields
data[].amc · slug- Display name as AMFI files it, and its URL-safe slug.
meta.total- Number of fund houses.
Errors
- 403 tier_required — the free plan doesn't include AMC endpoints.
GET /api/v1/amcs/{slug}Starter+One fund house: profile, counts, top funds.
GET /api/v1/amcs/{slug}Starter+One fund house: profile, counts, top funds.A short profile of the AMC, how many schemes and sub-categories it runs, and its top funds as full fund objects — ranked the way the site's AMC page ranks them.
Parameters
| Name | Type | Description |
|---|---|---|
slug | path · string | A slug from /amcs, e.g. hdfc. |
Request
curl -H "X-Api-Key: $WT_KEY" https://wealthticker.in/api/v1/amcs/hdfc
Response 200
{
"data": {
"amc": "HDFC Mutual Fund",
"slug": "hdfc",
"about": "HDFC Mutual Fund is run by HDFC Asset Management, part of the HDFC Bank group and listed on the exchanges since 2018. …",
"website": "https://www.hdfcfund.com/",
"schemes": 575,
"subCategories": 42,
"topFunds": [
{
"schemeCode": 150737,
"schemeName": "HDFC Silver ETF Fund of Fund - Direct Plan - Growth Option",
"amc": "HDFC Mutual Fund",
"category": "FoF",
"subCategory": "FoF Domestic",
"rating": 4,
"returns": { "m1": -4.1374, "m3": -0.0644, "m6": -7.8323, "ytd": -4.1079,
"y1": 19.6925, "y3": 43.6404, "y5": null, "y10": null, "inception": 38.1338 },
"risk": { … },
…
},
… 14 more fund objects
]
}
}Fields
about · website- A one-paragraph profile and the AMC's own site. Either can be null.
schemes · subCategories- Count of scheme codes (every plan/option variant, segregated portfolios excluded) and of distinct SEBI sub-categories.
topFunds[]- Fund objects, as described above.
Errors
- 403 tier_required
- 404 not_found — no such slug; list them via /amcs.
GET /api/v1/funds/{code}/overlapPro+Funds whose equity portfolio most resembles this one.
GET /api/v1/funds/{code}/overlapPro+Funds whose equity portfolio most resembles this one.Up to eight peers ranked by how much of their stock book they share with the fund — the "am I buying the same thing twice?" check. Overlap is measured on the equity sleeves of both funds, renormalised to 100, so a multi-asset fund with a Nifty-like 37% equity sleeve can show a high overlapPct; equityPct is reported alongside so you can scale it back.
Candidates are Direct Growth rows only (so each scheme appears once), the fund's own plan/option twins are excluded, and the list is empty for a fund with no disclosed equity book (debt, liquid, or a house WealthTicker doesn't read yet).
Parameters
| Name | Type | Description |
|---|---|---|
code | path · integer | AMFI scheme code. |
Request
curl -H "X-Api-Key: $WT_KEY" https://wealthticker.in/api/v1/funds/120716/overlap
Response 200
{
"data": [
{
"schemeCode": 151471,
"schemeName": "NAVI ELSS TAX SAVER NIFTY50 INDEX FUND - Direct Plan - GROWTH",
"amc": "Navi Mutual Fund",
"subCategory": "ELSS",
"overlapPct": 100,
"equityPct": 100,
"rating": 2,
"expenseRatio": null,
"ret3y": 5.5858,
"p90": null
},
{
"schemeCode": 118482,
"schemeName": "BANDHAN Nifty 50 Index Fund - Direct Plan - Growth",
"amc": "Bandhan Mutual Fund",
"subCategory": "Index Funds",
"overlapPct": 99.99,
"equityPct": 100,
"rating": 3,
"expenseRatio": 0.16,
"ret3y": 5.7996,
"p90": null
},
… up to 8 peers
]
}Fields
overlapPct- Shared weight between the two equity books, %, on renormalised sleeves.
equityPct- How much of the peer's whole portfolio is equity at all. overlapPct × equityPct / 100 is the share of your money that would truly duplicate.
p90- The 90th-percentile overlap WealthTicker has measured between funds of these two sub-categories, when it has a published distribution. null means no distribution, not "fine".
rating · expenseRatio · ret3y- Pulled from the peer's fund object for a quick swap decision.
Errors
- 403 tier_required — Pro only.
- 404 not_found
GET /api/v1/funds/{code}/benchmarkPro+Fund versus its benchmark index, period by period.
GET /api/v1/funds/{code}/benchmarkPro+Fund versus its benchmark index, period by period.Trailing returns (1M to 10Y and since inception) and calendar-year returns for the fund and its benchmark over the SAME windows — every window ends on the fund's latest NAV and the since-inception window starts the index on the fund's first NAV day, so the two spans never differ. excess is the fund minus the index in percentage points.
The benchmark is the one every figure on the site uses: a total-return index in rupees where a daily yield is published (Nifty 50 TRI, Nifty Smallcap 50 TRI, 46 NSE indices in all); the Sensex and the US pair are price indices and are labelled so. Funds with no equity-style benchmark (debt, liquid, arbitrage) answer benchmark: null, with the fund's own returns and null index columns.
Parameters
| Name | Type | Description |
|---|---|---|
code | path · integer | AMFI scheme code. |
Request
curl -H "X-Api-Key: $WT_KEY" https://wealthticker.in/api/v1/funds/120716/benchmark
Response 200
{
"data": {
"schemeCode": 120716,
"schemeName": "UTI Nifty 50 Index Fund - Direct Plan - Growth",
"asOf": "2026-10-13",
"benchmark": { "key": "nifty50", "name": "Nifty 50 TRI" },
"trailing": [
{ "period": "1m", "fund": -2.9118, "benchmark": -2.7823, "excess": -0.1295 },
{ "period": "3m", "fund": -5.9654, "benchmark": -5.8596, "excess": -0.1058 },
{ "period": "6m", "fund": -4.0046, "benchmark": -4.097, "excess": 0.0924 },
{ "period": "ytd", "fund": -12.358, "benchmark": -12.1694, "excess": -0.1886 },
{ "period": "1y", "fund": -9.113, "benchmark": -8.7729, "excess": -0.3401 },
{ "period": "3y", "fund": 5.7831, "benchmark": 6.129, "excess": -0.3459 },
{ "period": "5y", "fund": 5.5895, "benchmark": 5.9421, "excess": -0.3526 },
{ "period": "10y", "fund": 11.2858, "benchmark": 11.6392, "excess": -0.3534 },
{ "period": "incep", "fund": 11.1256, "benchmark": 11.5955, "excess": -0.4699 }
],
"calendarYears": [
{ "year": 2026, "partial": true, "fund": -12.36, "benchmark": -12.17, "excess": -0.19 },
{ "year": 2025, "partial": false, "fund": 11.68, "benchmark": 11.97, "excess": -0.29 },
… back to 2015
],
"ratios": { "alpha": -0.33, "beta": 0.999, "rSquared": 0.9994, "trackingError": 0.337,
"infoRatio": -1.036, "upCapture": 99.04, "downCapture": 100.79 }
}
}Fields
asOf- The fund's latest NAV date; every window ends here.
benchmark.key · name- Stable identifier and the display label ("TRI" marks total-return).
trailing[]- period is one of 1m, 3m, 6m, ytd, 1y, 3y, 5y, 10y, incep. fund and benchmark are % (absolute under a year, CAGR from 1Y); a side that can't cover the window is null, and so is excess.
calendarYears[]- Newest first, up to 12 years. partial is true for the current year and the inception year, where the window covers only part of the year.
ratios- The stored trailing-3Y benchmark-relative statistics: alpha (annualised %), beta, rSquared, trackingError (annualised %), infoRatio, upCapture and downCapture (%). Any can be null.
Errors
- 403 tier_required — Pro only.
- 404 not_found — no such scheme or no NAV history yet.
GET /api/v1/funds/{code}/portfolio-statsPro+The scheme's holdings, as filed in the AMC's monthly disclosure.
GET /api/v1/funds/{code}/portfolio-statsPro+The scheme's holdings, as filed in the AMC's monthly disclosure.Every line of the scheme's portfolio from the fund house's own SEBI monthly portfolio disclosure: name, ISIN, industry or credit rating, asset class, quantity, market value and % of NAV — plus sector and asset-class splits computed from those rows, the disclosure's as-on date, and the file it was read from.
Served only from that filing. A scheme whose house WealthTicker doesn't parse yet answers available: false rather than a partial or derived book — never guess a portfolio from a sibling fund.
Parameters
| Name | Type | Description |
|---|---|---|
code | path · integer | AMFI scheme code. |
Request
curl -H "X-Api-Key: $WT_KEY" https://wealthticker.in/api/v1/funds/120716/portfolio-stats
Response 200
{
"data": {
"available": true,
"asOf": "2026-09-30",
"source": {
"type": "amc-monthly-portfolio-disclosure",
"amc": "UTI Mutual Fund",
"url": "https://d3ce1o48hc5oli.cloudfront.net/utimf-job/portfolio/monthly-schemewise/NI_September_2026.xlsx"
},
"holdings": [
{ "name": "HDFC BANK LIMITED", "isin": "INE040A01034", "industry": "Banks", "assetClass": "equity",
"percentOfNav": 10.38, "marketValueLakh": 291362.88, "quantity": 41112302 },
{ "name": "ICICI BANK LTD", "isin": "INE090A01021", "industry": "Banks", "assetClass": "equity",
"percentOfNav": 9.05, "marketValueLakh": 254097.27, "quantity": 19225034 },
… 49 more rows
],
"sectors": [
{ "name": "Banks", "percent": 29.52 },
{ "name": "Petroleum Products", "percent": 7.59 },
{ "name": "IT - Software", "percent": 7.53 },
… 23 more
],
"assetAllocation": [
{ "name": "Equity", "percent": 100.05 },
{ "name": "Cash & Equivalents", "percent": -0.04 }
]
}
}
// A house WealthTicker doesn't read yet:
{ "data": { "available": false, "holdings": null, "sectors": null, "assetAllocation": null, "asOf": null, "source": null } }Fields
available- false → every other field is null. Check this first.
asOf · source- The disclosure's as-on date (month-end) and where it came from: type is always amc-monthly-portfolio-disclosure, amc the house, url the file.
holdings[]- assetClass is equity, debt, cash, derivative or other. industry carries the sector for equity rows and the rating ("CRISIL AAA", "SOV"…) for debt rows. percentOfNav is the AMC's own weight; marketValueLakh is ₹ lakh; quantity is units/shares held, null where the AMC omits it.
sectors[]- Equity rows grouped by industry, % of NAV, largest first. null when there are no equity rows.
assetAllocation[]- Equity / Debt / Cash & equivalents / Other, % of NAV, summing to the AMC's own 100 (a negative Cash figure is net payables, kept so the sum stays honest).
Errors
- 403 tier_required — Pro only.
- 404 not_found
GET /api/v1/sifPro+Every Specialized Investment Fund strategy.
GET /api/v1/sifPro+Every Specialized Investment Fund strategy.SEBI's SIF category (launched 2025: long-short equity, hybrid long-short, sectoral rotation…) lives outside AMFI's NAVAll feed and so outside /funds. This lists every strategy once, on its primary variant (Direct Growth where it exists), with NAV and returns computed from the series. variants counts how many plan/option variants the strategy has; /sif/{id} lists them.
Request
curl -H "X-Api-Key: $WT_KEY" https://wealthticker.in/api/v1/sif
Response 200
{
"data": [
{
"id": "SIF-120",
"sifId": 47,
"sif": "Altiva SIF",
"schemeName": "Altiva Equity Ex- Top 100 Long - Short Fund - Direct Plan - Growth",
"strategyName": "Altiva Equity Ex-Top 100 Long-Short Fund",
"category": "Equity",
"strategy": "Equity Ex-Top 100 Long-Short Fund",
"plan": "Direct",
"option": "Growth",
"isinGrowth": "INF754K30094",
"isinReinvest": null,
"latestNav": 10.7319,
"navDate": "2026-10-13",
"inceptionDate": "2026-06-10",
"returns": { "m1": -2.8699, "m3": -1.9273, "m6": null, "inception": 7.6506 },
"risk": { "volatility": 13.7682, "maxDrawdown": -7.3518 },
"variants": 4
},
{ "id": "SIF-155", "strategyName": "Apex Equity Ex-Top 100 Long-Short Fund", …, "variants": 2 },
… 32 more strategies
],
"meta": { "total": 34 }
}Fields
id · sifId · sif- AMFI's scheme id ("SIF-120"; paths accept the bare number too), the numeric id of the SIF house, and the house's name ("qsif", "Altiva"…).
schemeName · strategyName · category · strategy- The variant's full name, the strategy it belongs to, SEBI's category (Equity / Debt / Hybrid) and strategy type (e.g. Equity Long-Short).
returns.m1 · m3 · m6 · inception- Absolute % under a year, CAGR since inception once past it. No 1Y+ windows yet — the category is too young.
risk.volatility · maxDrawdown- Annualised % over the series held, and the worst fall as a negative %.
variants- Number of plan/option variants (a count here; the full rows on /sif/{id}).
Errors
- 403 tier_required — Pro only.
GET /api/v1/sif/{id}Pro+One SIF scheme and its sibling variants.
GET /api/v1/sif/{id}Pro+One SIF scheme and its sibling variants.The same fields as a /sif row, plus variants: the strategy's other plans and options as full identity rows (no returns — fetch /sif/{id} for the one you want).
Parameters
| Name | Type | Description |
|---|---|---|
id | path · string | SIF-1 or 1 — both resolve to the same scheme. |
Request
curl -H "X-Api-Key: $WT_KEY" https://wealthticker.in/api/v1/sif/SIF-1
Response 200
{
"data": {
"id": "SIF-1",
"sifId": 13,
"sif": "qsif SIF",
"schemeName": "qsif Equity Long Short Fund - Growth Option - Direct Plan",
"strategyName": "qsif Equity Long Short Fund",
"category": "Equity",
"strategy": "Equity Long-Short Fund",
"plan": "Direct",
"option": "Growth",
"isinGrowth": "INF966L30019",
"isinReinvest": null,
"latestNav": 11.0157,
"navDate": "2026-10-13",
"inceptionDate": "2025-10-08",
"returns": { "m1": -0.3519, "m3": -1.0145, "m6": 15.2342, "inception": 9.9617 },
"risk": { "volatility": 11.1795, "maxDrawdown": -12.3964 },
"variants": [
{ "id": "SIF-2", "sifId": 13, "sif": "qsif SIF",
"schemeName": "qsif Equity Long Short Fund - IDCW Option - Direct Plan",
"strategyName": "qsif Equity Long Short Fund", "category": "Equity", "strategy": "Equity Long-Short Fund",
"plan": "Direct", "option": "IDCW",
"isinGrowth": "INF966L30035", "isinReinvest": "INF966L30043",
"latestNav": 11.0157, "navDate": "2026-10-13" },
{ "id": "SIF-3", …, "plan": "Regular", "option": "Growth", "latestNav": 10.8542, … },
…
]
}
}Errors
- 400 invalid_id — must be SIF-<n> or <n>.
- 403 tier_required — Pro only.
- 404 not_found
Errors
Every error is { error: { code, message } } with the HTTP status that matches. Branch on code.
| Status | code | When |
|---|---|---|
| 400 | invalid_code | A {code} path segment that isn't a positive integer. |
| 400 | invalid_id | A SIF {id} that isn't SIF-<n> or <n>. |
| 400 | invalid_date | from/to not in YYYY-MM-DD. |
| 400 | invalid_sort | An unknown sort column; the message lists the valid ones. |
| 400 | invalid_query | q didn't parse; the message names the clause. |
| 401 | missing_key | No Authorization: Bearer or X-Api-Key header. |
| 401 | invalid_key | Unknown or revoked key. |
| 403 | tier_required | The endpoint needs Starter (AMCs) or Pro (overlap, benchmark, portfolio-stats, SIF). |
| 404 | not_found | No such scheme, AMC or SIF — or a scheme not yet ingested (retry within the hour). |
| 429 | rate_limited | Daily request limit reached. Retry-After says how many seconds until midnight IST. |
| 429 | monthly_limit | Monthly request limit reached; upgrade or wait for the 1st. |
| 500 | internal | Something broke on our side. Safe to retry. |
| 503 | quota_unavailable | Usage metering is briefly unavailable; nothing was counted. Retry in a few seconds. |
Rate limits
Limits are per account and per calendar day in IST, with a monthly ceiling on top; every key you hold draws on the same allowance. Every response — including errors — carries three headers, and a 429 adds Retry-After. A request that was refused for quota is still counted, so the dashboard at Settings → API keys shows real demand.
X-RateLimit-Limit: 100 # your plan's daily allowance
X-RateLimit-Remaining: 97 # left today
X-RateLimit-Reset: 1760466600 # unix seconds of the next midnight IST
# Daily allowance used → 429
Retry-After: 4123
{ "error": { "code": "rate_limited", "message": "Daily limit of 100 requests reached." } }
# Monthly allowance used → 429
{ "error": { "code": "monthly_limit", "message": "Monthly limit of 2000 requests reached. Upgrade at /settings/api." } }Plans
| Plan | Price | Requests | Includes |
|---|---|---|---|
| Free | ₹0 | 100/day · 2,000/month | funds, fund detail, categories; trailing 1-year NAV history |
| Starter | ₹799/mo · ₹8,499/yr | 10,000/day · 200,000/month | Everything in Free with full NAV history, plus the AMC endpoints |
| Pro | ₹2,999/mo · ₹31,499/yr | 50,000/day · 1,000,000/month | Everything in Starter, plus overlap, benchmark, portfolio-stats and the SIF endpoints |
Fair use & terms
- NAV and scheme master data are sourced from AMFI’s public feeds; holdings from the AMCs’ SEBI monthly disclosures; computed metrics are WealthTicker’s own work.
- Use the data in your products freely with attribution; don’t resell bulk raw dumps as a competing data feed.
- Data is provided as-is, without warranty of accuracy or timeliness, and is not investment advice.
- Keys may be revoked for abuse. Only
/api/v1/*is a stable, versioned surface — other paths on this host are internal and change without notice.