Newscatcher Search API
Operations to search for local news articles. Includes both standard location filtering and advanced GeoNames filtering.
Operations to search for local news articles. Includes both standard location filtering and advanced GeoNames filtering.
openapi: 3.0.3
info:
title: Local News AggregationCount Search 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: Search
description: Operations to search for local news articles. Includes both standard location filtering and advanced GeoNames filtering.
paths:
/api/search:
post:
tags:
- Search
summary: Search articles
description: Searches for local news based on specified criteria such as keywords, geographic locations, language, country, source, and more.
operationId: Search_post
requestBody:
$ref: '#/components/requestBodies/SearchRequestBody'
responses:
'200':
$ref: '#/components/responses/SearchResponse'
'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: search
x-fern-sdk-method-name: get
tags:
- Search
summary: Search articles
description: Searches for articles based on specified criteria such as keywords, language, country, source, and more.
operationId: searchGet
parameters:
- $ref: '#/components/parameters/Q'
- $ref: '#/components/parameters/SearchIn'
- $ref: '#/components/parameters/IncludeTranslationFields'
- $ref: '#/components/parameters/PredefinedSources'
- $ref: '#/components/parameters/SourceName'
- $ref: '#/components/parameters/Sources'
- $ref: '#/components/parameters/NotSources'
- $ref: '#/components/parameters/Lang'
- $ref: '#/components/parameters/NotLang'
- $ref: '#/components/parameters/Countries'
- $ref: '#/components/parameters/NotCountries'
- $ref: '#/components/parameters/NotAuthorName'
- $ref: '#/components/parameters/From'
- $ref: '#/components/parameters/To'
- $ref: '#/components/parameters/PublishedDatePrecision'
- $ref: '#/components/parameters/ByParseDate'
- $ref: '#/components/parameters/SortBy'
- $ref: '#/components/parameters/RankedOnly'
- $ref: '#/components/parameters/FromRank'
- $ref: '#/components/parameters/ToRank'
- $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/AdditionalDomainInfo'
- $ref: '#/components/parameters/IsNewsDomain'
- $ref: '#/components/parameters/NewsDomainType'
- $ref: '#/components/parameters/NewsType'
- $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/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/ExcludeDuplicates'
- $ref: '#/components/parameters/RobotsCompliant'
responses:
'200':
$ref: '#/components/responses/SearchResponse_2'
'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/search/advanced:
post:
tags:
- Search
summary: Search articles with GeoNames filtering
description: 'Searches for local news using structured GeoNames filtering with administrative hierarchy, coordinates, localization and confidence scores.
'
operationId: SearchAdvanced_post
requestBody:
$ref: '#/components/requestBodies/SearchAdvancedRequestBody'
responses:
'200':
$ref: '#/components/responses/SearchAdvancedResponse'
'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
SearchIn:
type: string
default: title_content
description: "The article fields to search in. Use a comma-separated string for multiple options, with a maximum of 2 in a single request.\n\nAvailable options: \n- Standard fields: `title`, `content`, `summary`, `title_content`\n- Translation fields: `title_translated`, `content_translated`, `summary_translated`, `title_content_translated`\n\n**Note**: Search in summaries and translations is only available for NLP subscription plans.\n"
example: title_content, title_content_translated
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
SearchRequestDto:
allOf:
- type: object
properties:
q:
$ref: '#/components/schemas/Q'
from_:
$ref: '#/components/schemas/From'
to_:
$ref: '#/components/schemas/To'
search_in:
$ref: '#/components/schemas/SearchIn'
sort_by:
$ref: '#/components/schemas/SortBy'
- $ref: '#/components/schemas/BaseRequestDto'
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).
'
SearchAdvancedRequestDto:
allOf:
- type: object
properties:
q:
$ref: '#/components/schemas/Q'
from_:
$ref: '#/components/schemas/From'
to_:
$ref: '#/components/schemas/To'
search_in:
$ref: '#/components/schemas/SearchIn'
sort_by:
$ref: '#/components/schemas/SortBy'
- $ref: '#/components/schemas/BaseAdvancedRequestDto'
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'
NewsDomainType:
type: string
enum:
- Original Content
- Aggregator
- Press Releases
- Republisher
- Other
description: 'Filters results based on the news domain type. Possible values are:
- `Original Content`: Sources that produce their own content.
- `Aggregator`: Sources that collect content from various other sources.
- `Press Releases`: Sources primarily publishing press releases.
- `Republisher`: Sources that republish content from other sources.
- `Other`: Sources that don''t fit into main categories.
'
example: Original Content
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 mention
# --- truncated at 32 KB (104 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/newscatcher/refs/heads/main/openapi/newscatcher-search-api-openapi.yml