---
title: "Technical stock screen"
method: GET
path: "/v1/screens/technical"
tags: ["screens"]
---

# Technical stock screen

`GET /v1/screens/technical`

## Request

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

Screen NSE stocks on live technical indicators. Pass one or more `filter` values of the form `field:op:value` (repeat the parameter or comma-separate): `op` is gt, lt, gte, lte, eq, between (value `min..max`), crosses_above or crosses_below; `value` is a number or another field name (`close:gt:sma_200`). Fields are listed at `/v1/screens/technical/fields`. Example: `filter=rsi_14:lt:30&filter=market_cap_cr:gt:5000`. Every row carries a fixed set of fields; name more with `fields` (any field from the catalogue, e.g. `fields=rating_overall,ema_20,high_52w`) and they are returned under `extra`. `rating_overall`, `rating_moving_averages` and `rating_oscillators` are indicator-consensus scores from -1 to 1, usable in filters, `sort` and `fields`; they summarise indicator readings and are not investment advice. Ranked by `sort` (default market cap). Covers NSE-listed stocks only (each company appears once, under its NSE symbol); BSE-only listings are not screened. Not paginated beyond the first `limit` rows: `meta.total_matches` says how many matched, narrow the filter to see the rest.

## Query parameters

- `filter` string[], required
- `sort` 'close' | 'open' | 'high' | 'low' | 'volume' | 'change_pct' | 'change' | 'market_cap_cr' | 'sma_5' | 'sma_10' | 'sma_20' | 'sma_50' | 'sma_100' | 'sma_200' | 'ema_5' | 'ema_10' | 'ema_20' | 'ema_50' | 'ema_100' | 'ema_200' | 'rsi_14' | 'rsi_14_prev' | 'macd' | 'macd_signal' | 'stoch_k' | 'stoch_d' | 'cci_20' | 'adx' | 'awesome_oscillator' | 'momentum_10' | 'atr_14' | 'bb_upper' | 'bb_lower' | 'pivot_r1' | 'pivot_r2' | 'pivot_s1' | 'pivot_s2' | 'perf_1w_pct' | 'perf_1m_pct' | 'perf_3m_pct' | 'perf_6m_pct' | 'perf_1y_pct' | 'perf_ytd_pct' | 'avg_volume_10d' | 'avg_volume_30d' | 'relative_volume_10d' | 'pe_ttm' | 'pb' | 'dividend_yield_pct' | 'high_52w' | 'low_52w' | 'rating_overall' | 'rating_moving_averages' | 'rating_oscillators'
- `order` 'asc' | 'desc'
- `fields` string[]
- `limit` integer
- `cursor` string

## Response `200`

OK. Costs one request unit.

- object
  - `data` ScreenTechnicalItem[], required
    - `rank` integer, required: Position in the ranked result set.
    - `symbol` string, required: NSE symbol.
    - `name` string, nullable, required: Company name.
    - `close` number, nullable, required: Last price, INR.
    - `change_pct` number, nullable, required: Change today, percent.
    - `volume` number, nullable, required: Shares traded today.
    - `market_cap_cr` number, nullable, required: Market capitalisation, INR crore.
    - `rsi_14` number, nullable, required: 14-day RSI.
    - `macd` number, nullable, required: MACD line.
    - `macd_signal` number, nullable, required: MACD signal line.
    - `sma_50` number, nullable, required: 50-day simple moving average, INR.
    - `sma_200` number, nullable, required: 200-day simple moving average, INR.
    - `relative_volume_10d` number, nullable, required: Today's volume as a multiple of the 10-day average.
    - `perf_1m_pct` number, nullable, required: 1-month return, percent.
    - `pe_ttm` number, nullable, required: Price to trailing twelve-month earnings.
    - `pb` number, nullable, required: Price to book value.
    - `dividend_yield_pct` number, nullable, required: Trailing dividend yield, percent.
    - `extra` object, required: Values of the fields requested with `fields` (beyond the fixed ones above), keyed by field name. Empty when `fields` was not given. Null when the value is not published for this stock.
  - `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.
    - `total_matches` integer, nullable, required: Stocks matching every filter, or null when the count is not available. Only the first `limit` are returned.
  - `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)
