Skip to content
WealthTicker

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 are GET and return application/json.
  • Envelope. Success is { data, meta? } — data is an object or an array, meta carries counts, paging and dates. Errors are { error: { code, message } } with a matching HTTP status; code is stable and safe to branch on, message is 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.28 means 11.28%). Sharpe, Sortino, beta, R² and capture ratios are plain ratios. aum is rupees; marketValueLakh is ₹ lakh; minAum and the aum field in q are ₹ crore.
  • Dates are YYYY-MM-DD in IST. NAVs are what AMFI published for that date.
  • Freshness. NAVs are refreshed within minutes of AMFI publishing them each evening; navDate on 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=500 page 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

EndpointPlanWhat it returns
GET /fundsAllScreen and search the fund universe.
GET /funds/{code}AllOne fund with every computed metric.
GET /funds/{code}/navAllDaily NAV history.
GET /categoriesAllEvery SEBI sub-category with peer-averaged returns and cost.
GET /amcsStarter+The fund-house directory.
GET /amcs/{slug}Starter+One fund house: profile, counts, top funds.
GET /funds/{code}/overlapPro+Funds whose equity portfolio most resembles this one.
GET /funds/{code}/benchmarkPro+Fund versus its benchmark index, period by period.
GET /funds/{code}/portfolio-statsPro+The scheme's holdings, as filed in the AMC's monthly disclosure.
GET /sifPro+Every Specialized Investment Fund strategy.
GET /sif/{id}Pro+One SIF scheme and its sibling variants.
GET /sif/{id}/navPro+A SIF's full NAV history.

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

NameTypeDescription
searchstringFree-text match on scheme name and AMC. Tokens are matched independently, so "nifty 50 index" also finds "Nifty Smallcap 50 Index".
qstringA 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.
categorystringEquity, Debt, Hybrid, Index, FoF, ETF, Solution Oriented, Other.
subCategorystringA SEBI sub-category exactly as /categories lists it, e.g. Large Cap Fund, Flexi Cap Fund, Liquid Fund.
amcstringFund house name as /amcs lists it. Comma-separate for several.
planDirect | RegularPlan variant. Most screens want plan=Direct&option=Growth, or the same scheme appears up to four times.
optionGrowth | IDCWGrowth or income-distribution option.
minAumnumberMinimum AUM in ₹ crore.
maxExpenseRationumberMaximum TER, % p.a.
codesstringComma-separated scheme codes — fetch a known set (a watchlist, a portfolio) in one call. Bypasses the ETF exclusion.
sortstringschemeName, 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.
dirasc | descSort direction. Defaults to the natural one for the column (returns descending, cost ascending).
page · limitinteger1-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.

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

NameTypeDescription
codepath · integerAMFI 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.

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.

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.

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

NameTypeDescription
slugpath · stringA 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.

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

NameTypeDescription
codepath · integerAMFI 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.

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

NameTypeDescription
codepath · integerAMFI 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.

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

NameTypeDescription
codepath · integerAMFI 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.

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.

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

NameTypeDescription
idpath · stringSIF-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

GET /api/v1/sif/{id}/navPro+A SIF's full NAV history.

Same shape as /funds/{code}/nav. The whole series is always served — SIFs launched in 2025, so there is no depth to tier.

Parameters

NameTypeDescription
idpath · stringSIF-1 or 1.
from · toYYYY-MM-DDInclusive date filters.

Request

curl -H "X-Api-Key: $WT_KEY" "https://wealthticker.in/api/v1/sif/1/nav?from=2026-10-01"

Response 200

{
  "data": [
    { "date": "2026-10-01", "nav": 10.9722 },
    { "date": "2026-10-05", "nav": 10.9942 },
    { "date": "2026-10-06", "nav": 11.0554 },
    …
  ],
  "meta": { "id": "SIF-1", "points": 8, "from": "2026-10-01", "to": "2026-10-13" }
}

Errors

  • 400 invalid_id · 400 invalid_date
  • 403 tier_required — Pro only.
  • 404 not_found — no NAV history for this SIF.

Errors

Every error is { error: { code, message } } with the HTTP status that matches. Branch on code.

StatuscodeWhen
400invalid_codeA {code} path segment that isn't a positive integer.
400invalid_idA SIF {id} that isn't SIF-<n> or <n>.
400invalid_datefrom/to not in YYYY-MM-DD.
400invalid_sortAn unknown sort column; the message lists the valid ones.
400invalid_queryq didn't parse; the message names the clause.
401missing_keyNo Authorization: Bearer or X-Api-Key header.
401invalid_keyUnknown or revoked key.
403tier_requiredThe endpoint needs Starter (AMCs) or Pro (overlap, benchmark, portfolio-stats, SIF).
404not_foundNo such scheme, AMC or SIF — or a scheme not yet ingested (retry within the hour).
429rate_limitedDaily request limit reached. Retry-After says how many seconds until midnight IST.
429monthly_limitMonthly request limit reached; upgrade or wait for the 1st.
500internalSomething broke on our side. Safe to retry.
503quota_unavailableUsage 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

PlanPriceRequestsIncludes
Free₹0100/day · 2,000/monthfunds, fund detail, categories; trailing 1-year NAV history
Starter₹799/mo · ₹8,499/yr10,000/day · 200,000/monthEverything in Free with full NAV history, plus the AMC endpoints
Pro₹2,999/mo · ₹31,499/yr50,000/day · 1,000,000/monthEverything 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.