# MoSPI

> Read India's official statistics straight from the Ministry of Statistics and Programme Implementation, the department that compiles them. Two series are published through the platform: the Consumer Price Index, monthly since 2013 and broken down by state, spending group and rural or urban sector, which is where the headline inflation figure comes from; and the Index of Industrial Production, covering mining, manufacturing and electricity and the use-based split into capital, intermediate and consumer goods. Rank the states on inflation, follow a series month by month, or pull the raw rows. Filters take plain names and are translated into the codes the platform needs. No account or key required.

App · Research & Academia · 8 actions. Web page: https://docs.lodol.com/docs/integrations/mospi

## Actions

### Call an endpoint directly

Call any MoSPI endpoint with parameters of your own. The platform also exposes the Annual Survey of Industries, the Periodic Labour Force Survey and National Accounts Statistics, but those answer 'Please check the input parameters passed' to every combination tried here and their parameters are published nowhere, so they have no actions of their own. This is how to reach them if you learn what they want, and how to reach anything the ministry adds later.

**Inputs**

- Path (`path`, text, required): The endpoint to call. They all begin with /api/, for example /api/cpi/getCPIIndex or /api/asi/getasiData.
- Query parameters (`parameters`, object): The query parameters as a JSON object, passed through exactly as given. Names are matched case sensitively and an unrecognised one is ignored rather than refused, so check 'total_records' against an unfiltered call to see whether a filter actually took effect.

**Outputs**

- `count` (number): How many rows came back
- `has_more` (true/false): Whether another page follows
- `page` (number): Which page this is
- `page_size` (number): How many rows per page
- `parameters_sent` (object): Exactly what was sent
- `path` (text): The endpoint that was called
- `records` (list): The rows, untouched
- `source` (text): The ministry that publishes the figures
- `total_pages` (number): How many pages there are
- `total_records` (number): How many match the filters in all, across every page

**Example output**

```json
{
  "count": 2,
  "has_more": true,
  "page": 1,
  "page_size": 2,
  "parameters_sent": {
    "limit": 2,
    "year": 2023
  },
  "path": "/api/cpi/getCPIIndex",
  "records": [
    {
      "baseyear": "2012",
      "group": "Consumer Food Price",
      "index": "188.4",
      "inflation": "9.03",
      "month": "December",
      "sector": "Rural",
      "state": "All India",
      "status": "F",
      "subgroup": "Consumer Food Price-Overall",
      "year": 2023
    },
    {
      "baseyear": "2012",
      "group": "Miscellaneous",
      "index": "182.5",
      "inflation": "3.46",
      "month": "December",
      "sector": "Rural",
      "state": "All India",
      "status": "F",
      "subgroup": "Household Goods and Services",
      "year": 2023
    }
  ],
  "source": "Ministry of Statistics and Programme Implementation (MoSPI)",
  "total_pages": 12942,
  "total_records": 25884
}
```

### Check the platform status

Check the platform is answering and report how current each series is. Official statistics are published with a lag and revised afterwards, so the most recent month is worth knowing before a workflow reports a figure as the latest, and a provisional figure is worth marking as one. Also states plainly that no account is needed, which the published manual still says otherwise.

**Inputs**: None.

**Outputs**

- `authentication` (text): What credentials are needed, which is none
- `base_url` (text): The platform that answered
- `reachable` (true/false): True when the platform answered
- `series` (object): Each series with how many records it holds, its most recent period, and whether that figure is still provisional
- `source` (text): The ministry that publishes the figures

**Example output**

```json
{
  "authentication": "None. The published CPI manual describes a sign-up and a fifteen minute token, but that platform has been replaced and the current endpoints are open.",
  "base_url": "https://api.mospi.gov.in",
  "reachable": true,
  "series": {
    "cpi": {
      "latest_is_provisional": false,
      "latest_period": "December 2025",
      "name": "Consumer Price Index",
      "total_records": 413436
    },
    "iip": {
      "latest_period": "July 2026",
      "name": "Index of Industrial Production",
      "total_records": 17110
    }
  },
  "source": "Ministry of Statistics and Programme Implementation (MoSPI)"
}
```

### Compare states on inflation

Rank the states by inflation for one month: where prices are rising fastest and where they are not. Every page is read, because one month of one spending group runs past the platform's page limit and a single page would quietly rank about half the states. Only the group's own figure is ranked, not its sub-groups, and any state that published no figure that month is named rather than dropped.

**Inputs**

- Year (`year`, number, required): Which year, as four digits. From 2013 to 2100.
- Month (`month`, text, required): Which month, by name or number. One of: `January`, `February`, `March`, `April`, `May`, `June`, `July`, `August`, `September`, `October`, `November`, `December`.
- Spending group (`group`, text): Which part of household spending to rank on. Defaults to General, the all items index the headline inflation rate comes from. Consumer Food Price cannot be used: it is compiled nationally and has no states. One of: `General`, `Food and Beverages`, `Pan, Tobacco and Intoxicants`, `Clothing and Footwear`, `Housing`, `Fuel and Light`, `Miscellaneous`. Default: `General`.
- Sector (`sector`, text): Rural, urban or combined. Defaults to combined. One of: `Rural`, `Urban`, `Combined`. Default: `Combined`.
- Order (`order`, text): Whether to put the highest inflation first or the lowest. Defaults to highest. One of: `highest` (Highest first), `lowest` (Lowest first). Default: `highest`.
- How many states (`size`, number): How many to return, from 1 to 50. Leave blank for all of them. From 1 to 50.

**Outputs**

- `all_india` (object): The national figure, reported beside the ranking rather than in it
- `average_inflation` (number): Mean across every state that had a figure
- `count` (number): How many states came back
- `group` (text): The spending group ranked on
- `highest` (object): The state with the highest inflation, whichever way the list was sorted
- `lowest` (object): The state with the lowest, whichever way the list was sorted
- `month` (text): The month ranked
- `order` (text): Which way the list was sorted
- `sector` (text): Rural, Urban or Combined
- `series` (text): Which series this is
- `source` (text): The ministry that publishes the figures
- `states` (list)
- `states_ranked` (number): How many had a figure to rank
- `states_without_a_figure` (list): States that published nothing that month, named rather than dropped
- `year` (number): The year ranked

**Example output**

```json
{
  "all_india": {
    "base_year": "2012",
    "group": "Food and Beverages",
    "index": 190.3,
    "inflation": 7.76,
    "is_provisional": false,
    "month": "February",
    "sector": "Combined",
    "state": "All India",
    "status": "F",
    "subgroup": "Food and Beverages-Overall",
    "year": 2024
  },
  "average_inflation": 7.3569,
  "count": 3,
  "group": "Food and Beverages",
  "highest": {
    "base_year": "2012",
    "group": "Food and Beverages",
    "index": 218.9,
    "inflation": 16.56,
    "is_provisional": false,
    "month": "February",
    "rank": 1,
    "sector": "Combined",
    "state": "Manipur",
    "status": "F",
    "subgroup": "Food and Beverages-Overall",
    "year": 2024
  },
  "lowest": {
    "base_year": "2012",
    "group": "Food and Beverages",
    "index": 190.9,
    "inflation": 0.16,
    "is_provisional": false,
    "month": "February",
    "rank": 35,
    "sector": "Combined",
    "state": "Lakshadweep",
    "status": "F",
    "subgroup": "Food and Beverages-Overall",
    "year": 2024
  },
  "month": "February",
  "order": "highest",
  "sector": "Combined",
  "series": "Consumer Price Index",
  "source": "Ministry of Statistics and Programme Implementation (MoSPI)",
  "states": [
    {
      "base_year": "2012",
      "group": "Food and Beverages",
      "index": 218.9,
      "inflation": 16.56,
      "is_provisional": false,
      "month": "February",
      "rank": 1,
      "sector": "Combined",
      "state": "Manipur",
      "status": "F",
      "subgroup": "Food and Beverages-Overall",
      "year": 2024
    },
    {
      "base_year": "2012",
      "group": "Food and Beverages",
      "index": 207.5,
      "inflation": 11.62,
      "is_provisional": false,
      "month": "February",
      "rank": 2,
      "sector": "Combined",
      "state": "Telangana",
      "status": "F",
      "subgroup": "Food and Beverages-Overall",
      "year": 2024
    },
    {
      "base_year": "2012",
      "group": "Food and Beverages",
      "index": 188.9,
      "inflation": 11.18,
      "is_provisional": false,
      "month": "February",
      "rank": 3,
      "sector": "Combined",
      "state": "Odisha",
      "status": "F",
      "subgroup": "Food and Beverages-Overall",
      "year": 2024
    }
  ],
  "states_ranked": 35,
  "states_without_a_figure": [
    "Arunachal Pradesh"
  ],
  "year": 2024
}
```

### Follow an industry trend

Follow industrial output month by month for one category, with the average growth and how far the index moved. Use it to see whether manufacturing is picking up, or to chart capital goods as a read on investment. Defaults to the General index, which is the headline.

**Inputs**

- Industry category (`category`, text): Which slice of industry. Defaults to General, the headline index. One of: `Mining`, `Manufacturing`, `Electricity`, `General`, `Primary Goods`, `Capital Goods`, `Intermediate Goods`, `Infrastructure/ Construction Goods`, `Consumer Durables`, `Consumer Non-durables`, and 4 more. Default: `General`.
- From year (`since_year`, number): Start the series at this year. Leave blank for as far back as the page allows. From 2012 to 2100.
- How many months (`size`, number): How many points to return, up to 200, which is the platform's page limit. From 1 to 200. Default: `200`.

**Outputs**

- `average_growth` (number): Mean growth across the months returned
- `category` (text): The category the series is for
- `category_type` (text): Sectoral, Use-based or General
- `count` (number): How many rows came back
- `first` (object): The earliest month returned
- `has_more` (true/false): Whether another page follows
- `index_change` (number): How far the index moved from first to latest
- `latest` (object): The most recent month returned
- `page` (number): Which page this is
- `page_size` (number): How many rows per page
- `points` (list)
- `series` (text): Which series this is
- `source` (text): The ministry that publishes the figures
- `total_pages` (number): How many pages there are
- `total_records` (number): How many match the filters in all, across every page

**Example output**

```json
{
  "average_growth": 5.4167,
  "category": "General",
  "category_type": "General",
  "count": 6,
  "first": {
    "base_year": "2011-12",
    "category": "General",
    "growth_rate": 4.1,
    "index": 173.2,
    "month": "March",
    "sub_category": null,
    "type": "General",
    "year": 2026
  },
  "has_more": true,
  "index_change": -48.4,
  "latest": {
    "base_year": "2022-23",
    "category": "General",
    "growth_rate": 6.7,
    "index": 124.8,
    "month": "July",
    "sub_category": null,
    "type": "General",
    "year": 2026
  },
  "page": 1,
  "page_size": 6,
  "points": [
    {
      "base_year": "2011-12",
      "category": "General",
      "growth_rate": 4.1,
      "index": 173.2,
      "month": "March",
      "sub_category": null,
      "type": "General",
      "year": 2026
    },
    {
      "base_year": "2022-23",
      "category": "General",
      "growth_rate": 3.0,
      "index": 129.7,
      "month": "March",
      "sub_category": null,
      "type": "General",
      "year": 2026
    },
    {
      "base_year": "2022-23",
      "category": "General",
      "growth_rate": 4.9,
      "index": 118.2,
      "month": "April",
      "sub_category": null,
      "type": "General",
      "year": 2026
    }
  ],
  "series": "Index of Industrial Production",
  "source": "Ministry of Statistics and Programme Implementation (MoSPI)",
  "total_pages": 6,
  "total_records": 34
}
```

### Follow an inflation trend

Follow one price series month by month, with the peak, the trough, the average and the change in the index across the period. Pinning the state, group and sector is what makes it a series: without that the platform interleaves every combination and the result is not a trend. Defaults to the national all items series, which is the one the headline inflation rate is quoted from.

**Inputs**

- State (`state`, text): Which state, or 'All India' for the national series. Defaults to All India. One of: `Jammu & Kashmir`, `Himachal Pradesh`, `Punjab`, `Chandigarh`, `Uttarakhand`, `Haryana`, `Delhi`, `Rajasthan`, `Uttar Pradesh`, `Bihar`, and 27 more. Default: `All India`.
- Spending group (`group`, text): Which part of household spending. Defaults to General, the all items index. Consumer Food Price is national only, so it cannot be followed for a single state. One of: `General`, `Food and Beverages`, `Pan, Tobacco and Intoxicants`, `Clothing and Footwear`, `Housing`, `Fuel and Light`, `Miscellaneous`, `Consumer Food Price`. Default: `General`.
- Sector (`sector`, text): Rural, urban or combined. Defaults to combined. One of: `Rural`, `Urban`, `Combined`. Default: `Combined`.
- From year (`since_year`, number): Start the series at this year. Leave blank for as far back as the page allows. The series itself begins in 2013. From 2013 to 2100.
- How many months (`size`, number): How many points to return, up to 200, which is the platform's page limit. The newest are returned first and then put in order. From 1 to 200. Default: `200`.

**Outputs**

- `average_inflation` (number): Mean across the months returned
- `count` (number): How many rows came back
- `first` (object): The earliest month returned
- `group` (text): The spending group
- `has_more` (true/false): Whether another page follows
- `highest_inflation` (object): The month inflation peaked
- `index_change` (number): How far the index moved from first to latest
- `latest` (object): The most recent month returned
- `lowest_inflation` (object): The month it was lowest
- `page` (number): Which page this is
- `page_size` (number): How many rows per page
- `points` (list)
- `sector` (text): Rural, Urban or Combined
- `series` (text): Which series this is
- `source` (text): The ministry that publishes the figures
- `state` (text): The state the series is for
- `total_pages` (number): How many pages there are
- `total_records` (number): How many match the filters in all, across every page

**Example output**

```json
{
  "average_inflation": 4.2583,
  "count": 6,
  "first": {
    "base_year": "2012",
    "group": "Food and Beverages",
    "index": 233.9,
    "inflation": 5.12,
    "is_provisional": false,
    "month": "December",
    "sector": "Combined",
    "state": "All India",
    "status": "F",
    "subgroup": "Meat and Fish",
    "year": 2025
  },
  "group": "Food and Beverages",
  "has_more": true,
  "highest_inflation": {
    "base_year": "2012",
    "group": "Food and Beverages",
    "index": 196.1,
    "inflation": 6.75,
    "is_provisional": false,
    "month": "December",
    "sector": "Combined",
    "state": "All India",
    "status": "F",
    "subgroup": "Oils and Fats",
    "year": 2025
  },
  "index_change": -36.5,
  "latest": {
    "base_year": "2012",
    "group": "Food and Beverages",
    "index": 197.4,
    "inflation": -0.35,
    "is_provisional": false,
    "month": "December",
    "sector": "Combined",
    "state": "All India",
    "status": "F",
    "subgroup": "Cereals and Products",
    "year": 2025
  },
  "lowest_inflation": {
    "base_year": "2012",
    "group": "Food and Beverages",
    "index": 197.4,
    "inflation": -0.35,
    "is_provisional": false,
    "month": "December",
    "sector": "Combined",
    "state": "All India",
    "status": "F",
    "subgroup": "Cereals and Products",
    "year": 2025
  },
  "page": 1,
  "page_size": 6,
  "points": [
    {
      "base_year": "2012",
      "group": "Food and Beverages",
      "index": 233.9,
      "inflation": 5.12,
      "is_provisional": false,
      "month": "December",
      "sector": "Combined",
      "state": "All India",
      "status": "F",
      "subgroup": "Meat and Fish",
      "year": 2025
    },
    {
      "base_year": "2012",
      "group": "Food and Beverages",
      "index": 222.3,
      "inflation": 4.81,
      "is_provisional": false,
      "month": "December",
      "sector": "Combined",
      "state": "All India",
      "status": "F",
      "subgroup": "Egg",
      "year": 2025
    },
    {
      "base_year": "2012",
      "group": "Food and Beverages",
      "index": 192.3,
      "inflation": 2.56,
      "is_provisional": false,
      "month": "December",
      "sector": "Combined",
      "state": "All India",
      "status": "F",
      "subgroup": "Milk and Products",
      "year": 2025
    }
  ],
  "sector": "Combined",
  "series": "Consumer Price Index",
  "source": "Ministry of Statistics and Programme Implementation (MoSPI)",
  "state": "All India",
  "total_pages": 52,
  "total_records": 312
}
```

### Get consumer price index

Read India's Consumer Price Index: the index level and the year-on-year inflation rate, by state, spending group and rural or urban sector, monthly back to 2013. This is the series the headline inflation number comes from. Filter by name and the names are translated into the codes the platform needs, which matters because it accepts a name, ignores it, and returns everything looking filtered.

**Inputs**

- Year (`year`, text): Which year or years, as four digits. Several can be given separated by commas. Leave blank for the whole series.
- Month (`month`, text): Which month, by name or number. Leave blank for every month. One of: `January`, `February`, `March`, `April`, `May`, `June`, `July`, `August`, `September`, `October`, `November`, `December`.
- State (`state`, text): Which state or union territory, by name. 'All India' is the national figure. Leave blank for every state at once. One of: `Jammu & Kashmir`, `Himachal Pradesh`, `Punjab`, `Chandigarh`, `Uttarakhand`, `Haryana`, `Delhi`, `Rajasthan`, `Uttar Pradesh`, `Bihar`, and 27 more.
- Sector (`sector`, text): Rural, urban, or the two combined. Prices move differently in each, so this is worth setting rather than leaving to chance. One of: `Rural`, `Urban`, `Combined`.
- Spending group (`group`, text): Which part of household spending. 'General' is the all items index the headline inflation rate comes from. Leave blank for all of them. Note that Consumer Food Price is compiled nationally only and has no state breakdown. One of: `General`, `Food and Beverages`, `Pan, Tobacco and Intoxicants`, `Clothing and Footwear`, `Housing`, `Fuel and Light`, `Miscellaneous`, `Consumer Food Price`.
- Sub-group code (`subgroup_code`, text): A finer breakdown within a group, by its code such as '1.1'. Leave blank for every sub-group. The names come back on the rows, so run it once without this to see what there is.
- Base year (`base_year`, text): Which index base to read, for example '2012'. Leave blank for all. An index is only comparable against its own base.
- How many to return (`size`, number): How many rows to return, from 1 to 200. Defaults to 100. The platform refuses a larger page. From 1 to 200. Default: `100`.
- Page (`page`, number): Which page of results, counting from 1. The response says how many pages there are. From 1 to 100000. Default: `1`.

**Outputs**

- `count` (number): How many rows came back
- `filters_applied` (object): The filters that actually reached the platform, as codes. Worth checking: a filter it did not recognise would not be here
- `has_more` (true/false): Whether another page follows
- `page` (number): Which page this is
- `page_size` (number): How many rows per page
- `records` (list)
- `series` (text): Which series this is
- `source` (text): The ministry that publishes the figures
- `total_pages` (number): How many pages there are
- `total_records` (number): How many match the filters in all, across every page

**Example output**

```json
{
  "count": 3,
  "filters_applied": {
    "group_code": "1",
    "state_code": "32",
    "year": "2024"
  },
  "has_more": true,
  "page": 1,
  "page_size": 3,
  "records": [
    {
      "base_year": "2012",
      "group": "Food and Beverages",
      "index": 182.2,
      "inflation": 2.02,
      "is_provisional": false,
      "month": "December",
      "sector": "Rural",
      "state": "Kerala",
      "status": "F",
      "subgroup": "Cereals and Products",
      "year": 2024
    },
    {
      "base_year": "2012",
      "group": "Food and Beverages",
      "index": 204.3,
      "inflation": 6.46,
      "is_provisional": false,
      "month": "December",
      "sector": "Rural",
      "state": "Kerala",
      "status": "F",
      "subgroup": "Meat and Fish",
      "year": 2024
    },
    {
      "base_year": "2012",
      "group": "Food and Beverages",
      "index": 214.2,
      "inflation": 6.57,
      "is_provisional": false,
      "month": "December",
      "sector": "Rural",
      "state": "Kerala",
      "status": "F",
      "subgroup": "Egg",
      "year": 2024
    }
  ],
  "series": "Consumer Price Index",
  "source": "Ministry of Statistics and Programme Implementation (MoSPI)",
  "total_pages": 156,
  "total_records": 468
}
```

### Get industrial production index

Read the Index of Industrial Production: output and its year-on-year growth for mining, manufacturing and electricity, and for the use-based split into capital, intermediate, infrastructure and consumer goods. Published monthly, and the earliest signal of whether industry is expanding or contracting.

**Inputs**

- Year (`year`, text): Which year or years, as four digits. Several can be given separated by commas. Leave blank for the whole series.
- Month (`month`, text): Which month, by name or number. Leave blank for every month. One of: `January`, `February`, `March`, `April`, `May`, `June`, `July`, `August`, `September`, `October`, `November`, `December`.
- Industry category (`category`, text): Which slice of industry. Mining, Manufacturing and Electricity are the sectoral split and the goods categories the use-based one. 'General' is the headline index. The last four belong to earlier base years the platform still serves. One of: `Mining`, `Manufacturing`, `Electricity`, `General`, `Primary Goods`, `Capital Goods`, `Intermediate Goods`, `Infrastructure/ Construction Goods`, `Consumer Durables`, `Consumer Non-durables`, and 4 more.
- Base year (`base_year`, text): Which index base to read, '2011-12' or '2022-23'. Leave blank for both. An index is only comparable against its own base, so a series that crosses the change needs care.
- How many to return (`size`, number): How many rows to return, from 1 to 200. Defaults to 100. The platform refuses a larger page. From 1 to 200. Default: `100`.
- Page (`page`, number): Which page of results, counting from 1. The response says how many pages there are. From 1 to 100000. Default: `1`.

**Outputs**

- `count` (number): How many rows came back
- `filters_applied` (object): The filters that reached the platform, as codes
- `has_more` (true/false): Whether another page follows
- `page` (number): Which page this is
- `page_size` (number): How many rows per page
- `records` (list)
- `series` (text): Which series this is
- `source` (text): The ministry that publishes the figures
- `total_pages` (number): How many pages there are
- `total_records` (number): How many match the filters in all, across every page

**Example output**

```json
{
  "count": 3,
  "filters_applied": {
    "category_code": "2",
    "year": "2024"
  },
  "has_more": true,
  "page": 1,
  "page_size": 3,
  "records": [
    {
      "base_year": "2022-23",
      "category": "Manufacturing",
      "growth_rate": -4.3,
      "index": 114.3,
      "month": "December",
      "sub_category": "Manufacture of Food Products",
      "type": "Sectoral",
      "year": 2024
    },
    {
      "base_year": "2011-12",
      "category": "Manufacturing",
      "growth_rate": -4.1,
      "index": 154.2,
      "month": "December",
      "sub_category": "Manufacture of Food Products",
      "type": "Sectoral",
      "year": 2024
    },
    {
      "base_year": "2011-12",
      "category": "Manufacturing",
      "growth_rate": 2.9,
      "index": 104.2,
      "month": "December",
      "sub_category": "Manufacture of Beverages",
      "type": "Sectoral",
      "year": 2024
    }
  ],
  "series": "Index of Industrial Production",
  "source": "Ministry of Statistics and Programme Implementation (MoSPI)",
  "total_pages": 192,
  "total_records": 576
}
```

### List the codes

List the states, spending groups, sectors, industry categories and months the platform knows, with the code it files each under. Worth reading first. The platform filters on codes and ignores names: ask it for Kerala and it accepts the request, ignores it, and returns all thirty-six states looking filtered. The other actions accept either and translate for you; this is where the names come from.

**Inputs**

- Which table (`table`, text): Return just one table. Leave blank for all of them. One of: `states` (States and union territories), `cpi_groups` (Consumer price spending groups), `sectors` (Rural, urban and combined), `iip_categories` (Industrial production categories), `months`.

**Outputs**

- `cpi_groups` (list): Consumer price spending groups
- `iip_categories` (list): Industrial production categories, each with its grouping
- `months` (list): Months and their numbers
- `note` (text): How the platform treats names against codes
- `sectors` (list): Rural, urban and combined
- `states` (list): States and union territories, with their codes
- `tables` (list): Which tables came back

**Example output**

```json
{
  "note": "The platform filters on these codes and ignores names. The other actions accept either and translate for you.",
  "sectors": [
    {
      "code": 1,
      "name": "Rural"
    },
    {
      "code": 2,
      "name": "Urban"
    },
    {
      "code": 3,
      "name": "Combined"
    }
  ],
  "tables": [
    "sectors"
  ]
}
```
