Newscatcher LatestHeadlines API
Operations to retrieve local news latest headlines. Includes both standard location filtering and advanced GeoNames filtering.
Operations to retrieve local news latest headlines. Includes both standard location filtering and advanced GeoNames filtering.
openapi: 3.0.3
info:
title: Local News AggregationCount LatestHeadlines API
description: 'The Local News API provides access to local news articles with location-specific filtering capabilities.
## Standard endpoints
- `/search`: Search articles by keywords with simple location filtering ("City, State" format).
- `/latest_headlines`: Retrieve recent articles for specified locations and time periods.
- `/search_by`: Retrieve articles by URL, ID, or RSS GUID.
- `/sources`: List available news sources.
## Advanced endpoints
- `/search/advanced`: Search with structured GeoNames filtering.
- `/latest_headlines/advanced`: Latest headlines with structured GeoNames filtering.
## Features
- Multiple location detection methods including dedicated sources, proximity analysis, and AI extraction
- Natural language processing for sentiment analysis and entity recognition on original content and English translations
- Article clustering for topic analysis
- English translations for non-English content
'
termsOfService: https://newscatcherapi.com/terms-of-service
contact:
name: Maksym Sugonyaka
email: maksym@newscatcherapi.com
url: https://www.newscatcherapi.com/book-a-demo
version: 1.2.0
servers:
- url: https://local-news.newscatcherapi.com
description: Local News API production server
security:
- ApiKeyAuth: []
tags:
- name: LatestHeadlines
description: Operations to retrieve local news latest headlines. Includes both standard location filtering and advanced GeoNames filtering.
paths:
/api/latest_headlines:
post:
tags:
- LatestHeadlines
summary: Retrieve latest headlines
description: Retrieves the most recent news headlines for the specific locations and times. You can filter results by language, source, theme, and more.
operationId: LatestHeadlines_post
requestBody:
$ref: '#/components/requestBodies/LatestHeadlinesRequestBody'
responses:
'200':
$ref: '#/components/responses/LatestHeadlinesResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'408':
$ref: '#/components/responses/RequestTimeoutError'
'422':
$ref: '#/components/responses/ValidationError'
'429':
$ref: '#/components/responses/RateLimitError'
'500':
$ref: '#/components/responses/InternalServerError'
get:
x-fern-sdk-group-name: latest_headlines
x-fern-sdk-method-name: get
tags:
- LatestHeadlines
summary: Retrieve latest headlines
description: Retrieves the latest headlines for the specified time period. You can filter results by language, country, source, and more.
operationId: latestHeadlinesGet
parameters:
- $ref: '#/components/parameters/When'
- $ref: '#/components/parameters/ByParseDate'
- $ref: '#/components/parameters/SortBy'
- $ref: '#/components/parameters/Lang'
- $ref: '#/components/parameters/NotLang'
- $ref: '#/components/parameters/Countries'
- $ref: '#/components/parameters/NotCountries'
- $ref: '#/components/parameters/PredefinedSources'
- $ref: '#/components/parameters/Sources'
- $ref: '#/components/parameters/NotSources'
- $ref: '#/components/parameters/NotAuthorName'
- $ref: '#/components/parameters/RankedOnly'
- $ref: '#/components/parameters/IsHeadline'
- $ref: '#/components/parameters/IsOpinion'
- $ref: '#/components/parameters/IsPaidContent'
- $ref: '#/components/parameters/ParentUrl'
- $ref: '#/components/parameters/AllLinks'
- $ref: '#/components/parameters/AllDomainLinks'
- $ref: '#/components/parameters/AllLinksText'
- $ref: '#/components/parameters/WordCountMin'
- $ref: '#/components/parameters/WordCountMax'
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/PageSize'
- $ref: '#/components/parameters/ClusteringEnabled'
- $ref: '#/components/parameters/ClusteringVariable'
- $ref: '#/components/parameters/ClusteringThreshold'
- $ref: '#/components/parameters/IncludeTranslationFields'
- $ref: '#/components/parameters/IncludeNlpData'
- $ref: '#/components/parameters/HasNlp'
- $ref: '#/components/parameters/Theme'
- $ref: '#/components/parameters/NotTheme'
- $ref: '#/components/parameters/OrgEntityName'
- $ref: '#/components/parameters/PerEntityName'
- $ref: '#/components/parameters/LocEntityName'
- $ref: '#/components/parameters/MiscEntityName'
- $ref: '#/components/parameters/TitleSentimentMin'
- $ref: '#/components/parameters/TitleSentimentMax'
- $ref: '#/components/parameters/ContentSentimentMin'
- $ref: '#/components/parameters/ContentSentimentMax'
- $ref: '#/components/parameters/IptcTags'
- $ref: '#/components/parameters/NotIptcTags'
- $ref: '#/components/parameters/IabTags'
- $ref: '#/components/parameters/NotIabTags'
- $ref: '#/components/parameters/CustomTags'
- $ref: '#/components/parameters/RobotsCompliant'
responses:
'200':
$ref: '#/components/responses/SearchResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError_2'
'403':
$ref: '#/components/responses/ForbiddenError'
'408':
$ref: '#/components/responses/RequestTimeoutError'
'422':
$ref: '#/components/responses/ValidationError'
'429':
$ref: '#/components/responses/RateLimitError'
'500':
$ref: '#/components/responses/InternalServerError'
/api/latest_headlines/advanced:
post:
tags:
- LatestHeadlines
summary: Retrieve latest headlines with GeoNames filtering
description: 'Retrieves the most recent news headlines using structured GeoNames filtering with administrative hierarchy, coordinates, localization and confidence scores.
'
operationId: LatestHeadlinesAdvanced_post
requestBody:
$ref: '#/components/requestBodies/LatestHeadlinesAdvancedRequestBody'
responses:
'200':
$ref: '#/components/responses/LatestHeadlinesAdvancedResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'408':
$ref: '#/components/responses/RequestTimeoutError'
'422':
$ref: '#/components/responses/ValidationError'
'429':
$ref: '#/components/responses/RateLimitError'
'500':
$ref: '#/components/responses/InternalServerError'
components:
schemas:
ClusteringSearchResponseDto:
title: Clustered Search Response
description: "The response model when clustering is enabled, grouping similar articles into clusters. Applies to the `Search` and `Latest headlines` requests.\n\nResponse field behavior:\n- Required fields are guaranteed to be present and non-null. \n- Optional fields may be `null`/`undefined` if the data couldn't be extracted during processing.\n- To access article properties in the `articles` response array, use array index notation. For example, `articles[n].title`, where `n` is the zero-based index of the article object (0, 1, 2, etc.).\n"
allOf:
- $ref: '#/components/schemas/SearchResponseDto'
- type: object
required:
- clusters_count
- agg_clusters
- clusters
- user_input
properties:
clusters_count:
type: integer
description: The total number of clusters in the search results.
agg_clusters:
type: array
items:
type: string
description: A list of cluster IDs that contain articles from major news aggregators, such as msn.com, yahoo.com, pr.com.
clusters:
type: object
additionalProperties:
$ref: '#/components/schemas/ClusterEntity'
description: A dictionary of cluster IDs mapped to their respective cluster entities.
user_input:
title: User Input
description: The user input parameters for the search.
type: object
RankedOnly:
type: boolean
default: true
description: 'If true, limits the search to sources ranked in the top 1 million online websites. If false, includes unranked sources which are assigned a rank of 999999.
'
example: true
GeoNamesLocationAdminEntity:
type: object
properties:
geonames_id:
type: string
description: GeoNames ID for the administrative division.
name:
type: string
description: 'Administrative division name. Use leading minus `-` to exclude the name.
'
code:
type: string
description: Administrative division code.
BaseArticleEntity:
title: Article Result
description: The data model representing the commont properties of the article object in the search results. Required fields are always non-null. Optional fields may be `null`/`undefined` if data extraction is unsuccessful.
type: object
required:
- id
- title
- link
- content
- domain_url
- published_date_precision
- published_date
- is_opinion
- rank
properties:
id:
type: string
description: The unique identifier for the article.
score:
type: number
format: float
description: The relevance score of the article.
title:
type: string
description: The title of the article.
author:
type: string
description: The primary author of the article.
link:
type: string
description: The URL link to the article.
description:
type: string
description: A brief description of the article.
media:
type: string
description: The URL of the media associated with the article, typically an image.
content:
type: string
description: A snippet or summary of the article's content.
authors:
type: array
items:
type: string
description: A list of authors of the article.
published_date:
type: string
format: date-time
description: The date and time the article was published.
published_date_precision:
type: string
description: The precision of the published date.
updated_date:
type: string
format: date-time
description: The date and time the article was last updated.
updated_date_precision:
type: string
description: The precision of the updated date.
is_opinion:
type: boolean
description: Indicates if the article is an opinion piece.
twitter_account:
type: string
nullable: true
description: The Twitter account associated with the article. Can be `null`.
domain_url:
type: string
description: The domain URL of the article's source.
parent_url:
type: string
description: The parent URL of the article, typically representing the homepage of the source.
word_count:
type: integer
description: The word count of the article.
rank:
type: integer
description: The rank of the article's source.
country:
type: string
description: The country code where the article was published.
rights:
type: string
description: The rights information for the article, typically the domain name.
language:
type: string
description: The language code in which the article is written.
nlp:
$ref: '#/components/schemas/NlpDataEntity'
paid_content:
type: boolean
description: Indicates whether the source labels the article as paywalled or requiring a subscription for full access.
title_translated_en:
type: string
description: 'English translation of the article title. Available when using the `search_in` parameter with the `title_translated` option or by setting the `include_translation_fields` parameter to `true`.
'
nullable: true
content_translated_en:
type: string
description: 'English translation of the article content. Available when using the `search_in` parameter with the `content_translated` option or by setting the `include_translation_fields` parameter to `true`.
'
nullable: true
ArticleSearchAdvancedResponseDto:
title: Advanced Search Response
description: "The response model for the `Search advanced`, `Latest headlines advanced`, and `Search by` requests.\n\nResponse field behavior:\n- Required fields are guaranteed to be present and non-null. \n- Optional fields may be `null`/`undefined` if the data couldn't be extracted during processing.\n- To access article properties in the `articles` response array, use array index notation. For example, `articles[n].title`, where `n` is the zero-based index of the article object (0, 1, 2, etc.).\n"
allOf:
- $ref: '#/components/schemas/SearchResponseDto'
- type: object
properties:
articles:
type: array
items:
$ref: '#/components/schemas/ArticleAdvancedResultEntity'
default: []
user_input:
type: object
PageSize_2:
type: integer
minimum: 1
maximum: 1000
default: 100
description: 'The number of articles to return per page.
'
example: 50
LocationEntity:
type: object
required:
- name
- detection_methods
properties:
name:
type: string
description: "The full name of the location, including the state. \nFormat is \"City, State\". For example, \"San Francisco, California\".\n"
example: San Francisco, California
detection_methods:
allOf:
- $ref: '#/components/schemas/DetectionMethods'
- description: 'Methods used to detect locations in articles.
For detailed information, see [Location detection methods](/local-news-api/guides-and-concepts/location-detection-methods).
'
NamedEntityList:
type: array
description: A list of named entities identified in the article.
items:
type: object
properties:
entity_name:
type: string
description: The name of the entity identified in the article.
count:
type: integer
description: The number of times this entity appears in the article.
ClusteredSearchResponseDto:
title: Clustered Articles Response
description: "The response model when clustering is enabled, grouping similar articles into clusters. Applies to the `Search` and `Latest headlines` requests. Response field behavior:\n- Required fields are guaranteed to be present and non-null. \n- Optional fields may be `null` or `undefined` if the data point is not presented or couldn't be extracted during processing.\n- To access article properties in the `articles` response array, \nuse array index notation. For example, `articles[n].title`, where `n` \nis the zero-based index of the article object (0, 1, 2, etc.).\n- The `nlp` property within the article object `articles[n].nlp` \nis only available with NLP-enabled subscription plans.\n"
allOf:
- $ref: '#/components/schemas/BaseSearchResponseDto'
- $ref: '#/components/schemas/ClusteredArticlesDto'
- type: object
properties:
user_input:
$ref: '#/components/schemas/UserInputDto'
NlpDataEntity_2:
type: object
default: {}
description: Natural Language Processing data for the article.
properties:
translation_summary:
type: string
description: 'A brief AI-generated summary of the article''s English translation.
'
theme:
type: string
description: The themes or categories identified in the article.
summary:
type: string
description: A brief AI-generated summary of the article content.
sentiment:
$ref: '#/components/schemas/SentimentScores_2'
new_embedding:
type: array
items:
type: number
format: float
description: 'A dense 1024-dimensional vector representation of the article content, generated using the [multilingual-e5-large](https://huggingface.co/intfloat/multilingual-e5-large) model. Available for articles indexed before January 1, 2026.
**Note**: The `new_embedding` field is only available in the `v3_nlp_embeddings` subscription plan.
'
qwen_embedding:
type: array
items:
type: number
format: float
description: 'A dense 1024-dimensional vector representation of the article content, generated using the [Qwen3-Embedding-0.6B](https://huggingface.co/Qwen/Qwen3-Embedding) model. Available for articles indexed from January 1, 2026 onward. Embeddings are computed from a combination of the article `title` and `content` fields.
**Note**: The `qwen_embedding` field is only available in the `v3_nlp_embeddings` subscription plan.
'
ner_PER:
allOf:
- $ref: '#/components/schemas/NamedEntityList'
description: Named Entity Recognition for person entities (individuals' names).
ner_ORG:
allOf:
- $ref: '#/components/schemas/NamedEntityList'
description: Named Entity Recognition for organization entities (company names, institutions).
ner_MISC:
allOf:
- $ref: '#/components/schemas/NamedEntityList'
description: Named Entity Recognition for miscellaneous entities (events, nationalities, products).
ner_LOC:
allOf:
- $ref: '#/components/schemas/NamedEntityList'
description: Named Entity Recognition for location entities (cities, countries, geographic features).
translation_ner_PER:
allOf:
- $ref: '#/components/schemas/NamedEntityList'
description: 'Named Entity Recognition for person entities (individuals'' names) extracted from the English translation of the article.
'
translation_ner_ORG:
allOf:
- $ref: '#/components/schemas/NamedEntityList'
description: 'Named Entity Recognition for organization entities (company names, institutions) extracted from the English translation of the article.
'
translation_ner_MISC:
allOf:
- $ref: '#/components/schemas/NamedEntityList'
description: 'Named Entity Recognition for miscellaneous entities (events, nationalities, products) extracted from the English translation of the article.
'
translation_ner_LOC:
allOf:
- $ref: '#/components/schemas/NamedEntityList'
description: 'Named Entity Recognition for location entities (cities, countries, geographic features) extracted from the English translation of the article.
'
iptc_tags_name:
type: array
items:
type: string
description: 'IPTC media topic taxonomy paths identified in the article content. Each path represents a hierarchical category following the IPTC standard.
**Note**: The `iptc_tags_name` field is only available in the `v3_nlp_iptc_tags` subscription plan.
'
iptc_tags_id:
type: array
items:
type: string
description: 'IPTC media topic numeric codes identified in the article content. These codes correspond to the standardized IPTC media topic taxonomy.
**Note**: The `iptc_tags_id` field is only available in the `v3_nlp_iptc_tags` subscription plan.
'
iab_tags_name:
type: array
items:
type: string
description: 'IAB content taxonomy paths identified in the article content. Each path represents a hierarchical category following the IAB content standard.
**Note**: The `iab_tags_name` field is only available in the `v3_nlp_iptc_tags` subscription plan.
'
ClusteringSearchAdvancedResponseDto:
title: Clustered Search Response (Advanced)
description: "The response model when clustering is enabled, grouping similar articles into clusters. Applies to the `Search advanced` and `Latest headlines advanced` requests.\n\nResponse field behavior:\n- Required fields are guaranteed to be present and non-null. \n- Optional fields may be `null`/`undefined` if the data couldn't be extracted during processing.\n- To access article properties in the `articles` response array, use array index notation. For example, `articles[n].title`, where `n` is the zero-based index of the article object (0, 1, 2, etc.).\n"
allOf:
- $ref: '#/components/schemas/SearchResponseDto'
- type: object
required:
- clusters_count
- agg_clusters
- clusters
- user_input
properties:
clusters_count:
type: integer
agg_clusters:
type: array
items:
type: string
clusters:
type: object
additionalProperties:
$ref: '#/components/schemas/ClusterAdvancedEntity'
user_input:
type: object
GeoNamesOperator:
type: string
enum:
- AND
- OR
default: AND
description: 'The operator to combine multiple `geonames` objects. If `AND`, all geonames objects must match. If `OR`, at least one geonames object must match.
'
example: AND
ArticleEntity:
title: Article Object
description: The data model representing a single article in the search results.
required:
- title
- link
- domain_url
- full_domain_url
- parent_url
- rank
- id
- score
type: object
properties:
title:
title: Title
description: The title of the article.
type: string
author:
title: Author
description: The primary author of the article.
type: string
authors:
title: Authors
description: A list of authors of the article.
anyOf:
- type: array
items:
type: string
- type: string
journalists:
title: Journalists
description: A list of journalists associated with the article.
anyOf:
- type: array
items:
type: string
- type: string
- type: 'null'
published_date:
title: Published Date
description: The date the article was published.
type: string
published_date_precision:
title: Published Date Precision
description: The precision of the published date.
type: string
updated_date:
title: Updated Date
description: The date the article was last updated.
type:
- string
- 'null'
updated_date_precision:
title: Updated Date Precision
description: The precision of the updated date.
type:
- string
- 'null'
parse_date:
title: Parse Date
description: The date the article was parsed.
type:
- string
- 'null'
link:
title: Link
description: The URL link to the article.
type: string
domain_url:
title: Domain URL
description: The domain URL of the article.
type: string
full_domain_url:
title: Full Domain URL
description: The full domain URL of the article.
type: string
name_source:
title: Name Source
description: The name of the source where the article was published.
type: string
is_headline:
title: Is Headline
description: Indicates if the article is a headline.
type: boolean
paid_content:
title: Paid Content
description: Indicates whether the source labels the article as paywalled or requiring a subscription for full access.
type: boolean
parent_url:
title: Parent URL
description: The categorical URL of the article.
type: string
country:
title: Country
description: The country where the article was published.
type: string
rights:
title: Rights
description: The rights information for the article.
type: string
rank:
title: Rank
description: The rank of the article's source.
type: integer
media:
title: Media
description: The media associated with the article.
type: string
language:
title: Language
description: The language in which the article is written.
type: string
description:
title: Description
description: A brief description of the article.
type: string
content:
title: Content
description: The content of the article.
type: string
title_translated_en:
type:
- string
- 'null'
description: 'English translation of the article title. Available when using the `search_in` parameter with the `title_translated` option or by setting the `include_translation_fields` parameter to `true`.
'
content_translated_en:
type:
- string
- 'null'
description: 'English translation of the article content. Available when using the `search_in` parameter with the `content_translated` option or by setting the `include_translation_fields` parameter to `true`.
'
word_count:
title: Word Count
description: The word count of the article.
type: integer
default: 0
is_opinion:
title: Is Opinion
description: Indicates if the article is an opinion piece.
type: boolean
twitter_account:
title: Twitter Account
description: The Twitter account associated with the article.
type:
- string
- 'null'
all_links:
title: All Links
description: A list of all URLs mentioned in the article.
anyOf:
- type: array
items:
type: string
- type: string
default: []
all_domain_links:
title: All Domain Links
description: A list of all domain URLs mentioned in the article.
anyOf:
- type: array
items:
type: string
- type: string
default: []
all_links_data:
title: All Links Data
description: 'Detailed information about all links mentioned in the article, including link URL, domain, and anchor text. Only present when the `all_links_text` parameter is used in the request.
'
type: array
items:
$ref: '#/components/schemas/AllLinksDataItem'
default: []
nlp:
$ref: '#/components/schemas/NlpDataEntity_2'
id:
title: ID
description: The unique identifier for the article.
type: string
score:
title: Score
description: The relevance score of the article.
type: number
robots_compliant:
title: Robots Compliant
description: 'True if the article content can be safely accessed according to the publisher''s robots.txt rules; false otherwise.
'
type: boolean
example: true
custom_tags:
title: Custom Tags
description: An object that contains custom tags associated with an article, where each key is a taxonomy name, and the value is an array of tags.
type: object
additionalProperties:
type: array
items:
type: string
default: {}
additional_domain_info:
$ref: '#/components/schemas/AdditionalDomainInfoEntity'
DetectionMethods:
type: array
items:
type: string
enum:
- dedicated_source
- local_section
- regional_source
- standard_format
- proximity_mention
- ai_extracted
description: 'The location detection methods to filter results by:
- `dedicated_source`: Identifies locations based on sources exclusively covering a specific location.
- `local_section`: Identifies locations through location-specific sections within larger publications.
- `regional_source`: Identifies locations using regional context from state-level publications.
- `standard_format`: Identifies locations written in standard formats like "City, State" or "City, County".
- `proximity_mention`: Identifies cities and states mentioned within 15 words of each other.
- `ai_extracted`: Identifies locations through AI-based content analysis. Requires AI Extraction plan.
For detailed information, see [Location detection methods](/local-news-api/guides-and-concepts/location-detection-methods).
'
example:
- dedicated_source
- proximity_mention
- ai_extracted
SearchResponseDto:
title: Base Search Response
required:
- status
- total_hits
- page
- total_pages
- page_size
type: object
properties:
status:
title: Status
description: The status of the response.
type: string
default: ok
total_hits:
title: Total Hits
description: The total number of articles matching the search criteria.
type: integer
page:
title: Page
description: The current page number of the results.
type: integer
total_pages:
title: Total Pages
description: The total number of pages available for the given search criteria.
type: integer
page_size:
title: Page Size
description: The number of articles per page.
type: integer
LatestHeadlinesAdvancedRequestDto:
allOf:
- type: object
properties:
when:
$ref: '#/components/schemas/When'
- $ref: '#/components/schemas/BaseAdvancedRequestDto'
GeoNamesFilter:
type: array
items:
$ref: '#/components/schemas/GeoNamesEntity'
description: 'Filters articles by geographic locations using structured GeoNames data. All location criteria within an object must be met (internal `AND`). Multiple objects are combined using the `geonames_operator` parameter.
For detailed information, see [GeoNames filtering](/local-news-api/guides-and-concepts/geonames-filtering).
'
example:
- name: New York City
country: US
feature_class: A
- name: San Francisco
admin1:
name: California
localization_score:
min: 7
IncludeTranslationFields_2:
type: boolean
default: false
description: 'If true, includes English translation fields in the response (`title_translated_en`, `content_translated_en`, and NLP translation fields).
'
example: true
ClusterAdvancedEntity:
title: Cluster Entity (Advanced)
type: object
required
# --- truncated at 32 KB (94 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/newscatcher/refs/heads/main/openapi/newscatcher-latestheadlines-api-openapi.yml