---
title: "FPI daily investment flows"
method: GET
path: "/v1/market/fpi-flows"
tags: ["market"]
---

# FPI daily investment flows

`GET /v1/market/fpi-flows`

## Request

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

Daily foreign portfolio investor (FPI) gross purchases, gross sales and net investment by asset class and channel, INR crore and USD million. Equity and debt from January 1999 (single total line until November 2009, split by channel after); hybrid from 2017, VRR debt from 2020, AIF and mutual-fund detail from September 2024. A 0 is a reported zero. Defaults to the last 30 days. Pages by (date, asset_class, channel).

## Query parameters

- `asset_class` 'equity' | 'debt' | 'debt_general_limit' | 'debt_vrr' | 'debt_far' | 'hybrid' | 'aifs' | 'mutual_funds'
- `channel` string
- `from` string
- `to` string
- `order` 'asc' | 'desc'
- `limit` integer
- `cursor` string

## Response `200`

OK. Costs one request unit.

- object
  - `data` FpiFlowsItem[], required
    - `date` string, required: Reporting date (YYYY-MM-DD).
    - `asset_class` string, required: Instrument class: equity, debt (until Aug 2024), debt_general_limit, debt_vrr (voluntary retention route), debt_far (fully accessible route), hybrid, aifs (alternative investment funds), mutual_funds.
    - `channel` string, required: How the investment was made: stock_exchange, primary_market (primary issues and others), or total. For mutual_funds the channel is the scheme type: equity_schemes, debt_schemes, hybrid_schemes, solution_oriented_schemes, other_schemes, or total.
    - `gross_purchases_cr` number, nullable, required: Gross purchases, INR crore.
    - `gross_sales_cr` number, nullable, required: Gross sales, INR crore.
    - `net_investment_cr` number, nullable, required: Net investment (purchases minus sales), INR crore. Negative = net outflow.
    - `net_investment_usd_mn` number, nullable, required: Net investment in USD million.
    - `usd_inr_rate` number, nullable, required: USD/INR rate used to convert the net investment.
  - `meta` ListMeta, 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.
  - `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)
