> ## Documentation Index
> Fetch the complete documentation index at: /docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Content types

> Filter local news by the kind of page an article is, such as news reports, opinion pieces, or press releases.

Every article gets exactly one content type label from NLP analysis: the kind
of page it is, independent of what it is about. Labels work in all languages.
The label is returned in `nlp.content_type`, and the `content_type` parameter
filters on it.

Use it to keep straight reporting and leave out press releases, shopping pages,
or automatically generated content that local sources also publish.

## Content type values

| Value | What it is | Example headline |
| - | - | - |
| `news_report` | Reports a specific, recent event: breaking news, wire stories, match reports, earnings coverage | "Tesla recalls 120,000 cars over seat-belt fault" |
| `analysis` | A journalist's explainer or feature about current events | "Why Tesla's price cuts are worrying investors" |
| `interview` | A Q\&A or interview with a newsworthy person | "'We'll be profitable next year': interview with the CEO" |
| `opinion` | Columns, editorials, op-eds, personal blogs, investing commentary | "Why I'm selling my Tesla shares" |
| `press_release` | A company or government announcement published as is | "Acme Corp announces Q3 results" |
| `listicle` | Lists, rankings, roundups, galleries | "10 best electric cars of 2026" |
| `service` | How-tos, recipes, TV listings, weather boilerplate, horoscopes, puzzles | "What's on TV tonight" |
| `commerce` | Shopping deals, coupons, sponsored or affiliate content | "Save 30% on Tesla accessories today" |
| `review` | A review of a product, film, book, game, or restaurant | "Model Y 2026 review: still the one to beat?" |
| `autogen` | Template pages filled with data automatically: stock tickers, rating changes, sports stats | "TSLA shares bought by XYZ Capital" |
| `seo_spam` | Content farms and fake "market report" pages | "EV Market Size, Share & Forecast 2026-2034" |
| `obituary` | Death notices and funeral announcements | "John Smith, 1950-2026" |
| `ugc` | User-generated content: forum posts, community Q\&A, social media pages | "Anyone else having issues with their Model 3?" |
| `non_article` | Homepages, tag pages, video-only pages, paywall stubs, error pages | "Tesla: latest news and updates" (a tag page) |

The first three, `news_report`, `analysis`, and `interview`, are news. The
rest are other kinds of pages that news sites also publish.

> [!NOTE]
>
> Some pages sit between two labels, such as an analysis piece and an opinion
> column, or a story about a press release and the press release itself. In
> these cases the label can differ from what a person would pick. Telling news
> from the other kinds of pages is more reliable than the exact label.

The `content_type` parameter also accepts two shortcuts:

* `news`: `news_report`, `analysis`, and `interview`.
* `all`: no content type filter. This is the same as not setting
  `content_type`.

## Filter by content type

The `content_type` parameter works on all search and latest headlines
endpoints:

* [`/api/search`](/docs/local-news-api/api-reference/search/search-articles-post)
* [`/api/search/advanced`](/docs/local-news-api/api-reference/search/search-advanced-post)
* [`/api/latest_headlines`](/docs/local-news-api/api-reference/latest-headlines/retrieve-latest-headlines-post)
* [`/api/latest_headlines/advanced`](/docs/local-news-api/api-reference/latest-headlines/latest-headlines-advanced-post)

Pass one or more values as a comma-separated string or an array. Values are
case-insensitive, and an article is returned if it matches any of them:

```json theme={null}
{
  "q": "city council",
  "locations": ["Austin, Texas"],
  "content_type": "news",
  "from_": "7 days ago"
}
```

```json theme={null}
{
  "q": "school board",
  "locations": ["Denver, Colorado"],
  "content_type": ["news_report", "opinion"],
  "from_": "7 days ago"
}
```

An unknown value returns a `422` error that lists the accepted values.

## Availability

Content type labels are available for articles from October 17, 2026. Later in
Q4 2026, articles back to January 1, 2026, will be labelled too.

> [!NOTE]
>
> Articles without a label are left out whenever `content_type` is set, so a
> filtered request over an older date range can return fewer articles. Without
> `content_type`, all articles are returned as before.

## Content type in the response

Each article includes its label in the `nlp` object:

```json theme={null}
{
  "title": "City council approves new budget for parks",
  "nlp": {
    "theme": ["Politics"],
    "summary": "The council voted 7-2 to approve the budget...",
    "content_type": "news_report"
  }
}
```

`nlp.content_type` is `null` for articles that have no label yet. See
[Availability](#availability).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.