---
title: "Tapetide Score ranking"
method: GET
path: "/v1/scores"
tags: ["scores"]
---

# Tapetide Score ranking

`GET /v1/scores`

## Request

- Base URL: `https://api.tapetide.com`
- URL: `https://api.tapetide.com/v1/scores`
- Auth: HTTP bearer

Every stock scored in the latest complete daily run of the Tapetide Score, a deterministic 0-100 composite of six pillars (quality, valuation, growth, momentum, financial health, ownership) with a governance overlay. Filter by `band`, `size`, `sector` (each accepts several values), `min_score`/`max_score`, `min_confidence` and `q` (symbol or name). Sort by `band` (default; best band first, the same walk as `score`), `score`, `confidence`, `market_cap` or `name`. Default `min_confidence` is 75 and the default view includes all sizes: small and micro caps can be illiquid. `meta.counts` reports what the filters left out and `meta.applied_filters` echoes them. Paging is pinned to one run: `meta.next_cursor` carries the run date, so a walk that started before a newer run was published keeps reading its own run (`meta.snapshot.pinned_to_cursor_run` is then true) instead of mixing two runs. The band matters more than the exact number: the distribution is narrow (no stock has ever scored above 77) and a 1-3 point gap is within noise. A pillar of null means the data to score it is unavailable; it is not a zero. Decision-support only. The Tapetide Score is data analysis, not investment advice. Tapetide is not a SEBI-registered research analyst or investment adviser.

## Query parameters

- `band` string[]
- `size` string[]
- `sector` string[]
- `min_score` integer
- `max_score` integer
- `min_confidence` integer
- `q` string
- `sort` 'band' | 'score' | 'confidence' | 'market_cap' | 'name'
- `order` 'asc' | 'desc'
- `limit` integer
- `cursor` string

## Response `200`

OK. Costs one request unit.

- object
  - `data` ScoresItem[], required
    - `symbol` string, required: Stock symbol.
    - `name` string, nullable, required: Company name.
    - `sector` string, nullable, required: Sector.
    - `industry` string, nullable, required: Industry.
    - `size` 'large' | 'mid' | 'small' | 'micro', nullable, required: Market-cap size bucket on the score date.
    - `market_cap_cr` number, nullable, required: Market capitalisation in INR crore.
    - `pe` number, nullable, required: Price to earnings, trailing twelve months; null when not meaningful (e.g. losses).
    - `industry_pe` number, nullable, required: Median P/E of the stock's industry; null when the industry is too thin.
    - `score_date` string, required: Scoring run date (YYYY-MM-DD).
    - `score` integer, required: Tapetide Score, 0-100.
    - `band` 'strong' | 'good' | 'average' | 'weak' | 'poor', required: Coarse band: strong (66+), good (55-65), average (45-54), weak (37-44), poor (below 37).
    - `confidence` integer, required: Data confidence, 0-100: how much of the inputs behind the score were available and recent.
    - `pillars` object, required: The six pillar sub-scores.
      - `quality` number, nullable, required: quality pillar, 0-100; null when unavailable.
      - `valuation` number, nullable, required: valuation pillar, 0-100; null when unavailable.
      - `growth` number, nullable, required: growth pillar, 0-100; null when unavailable.
      - `momentum` number, nullable, required: momentum pillar, 0-100; null when unavailable.
      - `financial_health` number, nullable, required: financial health pillar, 0-100; null when unavailable.
      - `ownership` number, nullable, required: ownership pillar, 0-100; null when unavailable.
    - `caps` object[], required: Score caps applied by the governance overlay.
      - `rule` string, required: Governance rule that capped the score, e.g. surveillance:GSM, pledge>75%.
      - `cap` number, required: Maximum score allowed under the rule.
    - `red_flags` string[], required: Governance flags observed: `surveillance:{measure}`, `pledge:{pct}%`, `insider_selling`, `credit_downgrade`.
  - `meta` object, required
    - `as_of` string, date-time, required: When this response was assembled (UTC).
    - `route` string, required: operationId that served the request.
    - `count` integer, required: Items in this page.
    - `limit` integer, required: Page size applied.
    - `has_more` boolean, required: Whether another page exists.
    - `next_cursor` string, nullable, required: Pass as `cursor` to fetch the next page; null on the last page.
    - `snapshot` object, required: Which scoring run this list reads.
      - `score_date` string, required: Scoring run every row on this page comes from (YYYY-MM-DD).
      - `latest_complete_score_date` string, required: Newest complete scoring run. Differs from `score_date` only while a cursor keeps a walk on an older run (YYYY-MM-DD).
      - `pinned_to_cursor_run` boolean, required: True when a cursor kept this page on an older run after a newer one was published. Drop the cursor to read the newest run.
    - `counts` object, required: How the run narrows down to this result, so a ranking can say what its filters excluded.
      - `matched` integer, required: Rows matching every filter, across all pages.
      - `scored` integer, required: Stocks the run scored, before eligibility and confidence.
      - `eligible` integer, required: Scored stocks with enough data to publish a score.
      - `below_confidence_threshold` integer, required: Eligible stocks left out by `min_confidence`.
    - `applied_filters` object, required: The filters and ordering this response applied, defaults included.
      - `bands` string[], required: Bands filtered on; empty means every band.
      - `sizes` string[], required: Size buckets filtered on; empty means every size.
      - `sectors` string[], required: Sectors filtered on; empty means every sector.
      - `min_score` integer, nullable, required: Minimum score applied, or null.
      - `max_score` integer, nullable, required: Maximum score applied, or null.
      - `min_confidence` integer, required: Minimum data confidence applied.
      - `q` string, nullable, required: Symbol/name search applied, or null.
      - `sort` 'band' | 'score' | 'confidence' | 'market_cap' | 'name', required: Sort key applied.
      - `order` 'asc' | 'desc', required: Sort direction applied.
  - `links` Links, required
    - `next` string, nullable: Relative URL of the next page, or null.

## Other responses

- `400`: Malformed or out-of-range parameter. Not charged.
- `401`: Missing or invalid bearer token.
- `404`: The requested resource does not exist. Not charged.
- `429`: Per-minute burst cap (`rate_limited`) or plan quota (`quota_exhausted`) reached.
- `500`: Unexpected server error. Not charged.
- `502`: A data dependency was unavailable. Not charged.
- `503`: Authentication or quota service temporarily unavailable (`service_unavailable`). Not charged; retry after `Retry-After` seconds.

---

[API](https://skmtc.dev/tapetide/apis/tapetide-api.md) · [All operations](https://skmtc.dev/tapetide/apis/tapetide-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tapetide/apis/tapetide-api/revisions/261ec086bde5?raw)
