---
title: "Bulk and block deals, market-wide"
method: GET
path: "/v1/market/deals"
tags: ["market"]
---

# Bulk and block deals, market-wide

`GET /v1/market/deals`

## Request

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

Bulk and block deals reported by the exchanges, newest day first, largest value first within a day. Defaults to the last 7 calendar days; `from`/`to` widen it (max 366 days). Duplicate reports of one trade are collapsed. `meta` carries totals over the whole filtered window, the same on every page: `total_deals`, `deals_per_day`, `latest_date` and `exchanges_covered`. Coverage from March 2026.

## Query parameters

- `from` string
- `to` string
- `type` 'bulk' | 'block'
- `side` 'buy' | 'sell'
- `exchange` 'NSE' | 'BSE'
- `symbol` string
- `limit` integer
- `cursor` string

## Response `200`

OK. Costs one request unit.

- object
  - `data` MarketDealsItem[], required
    - `date` string, required: Trading day of the deal (IST) (YYYY-MM-DD).
    - `deal_type` 'bulk' | 'block', required: bulk = reported bulk deal; block = block-window trade.
    - `exchange` string, nullable, required: NSE or BSE.
    - `symbol` string, required: Stock symbol.
    - `name` string, nullable, required: Company name.
    - `isin` string, nullable, required: ISIN.
    - `client_name` string, required: Counterparty as published by the exchange.
    - `side` 'buy' | 'sell', nullable, required: buy or sell from the client's view.
    - `quantity` number, required: Shares traded.
    - `price` number, nullable, required: Average trade price, INR per share.
    - `value_cr` number, nullable, required: Trade value (quantity x price), INR crore.
  - `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.
    - `from` string, required: First day of the window served (YYYY-MM-DD).
    - `to` string, required: Last day of the window served (YYYY-MM-DD).
    - `total_deals` integer, required: Deals matching every filter over the whole window (all pages), after duplicate reports are collapsed.
    - `deals_per_day` object, required: Matching deals per trading day (YYYY-MM-DD -> count), newest first; days with none are absent.
    - `latest_date` string, nullable, required: Newest day in the window with any reported deal (any type, side or exchange); null when the window has none.
    - `exchanges_covered` string[], required: Exchanges with at least one reported deal in the window (any type or side).
  - `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)
