Newscatcher Local News API

The Local News API specializes in hyper-local geographic news coverage with location-based detection and NLP capabilities, enabling developers to retrieve location-specific news signals with enriched metadata. The API is suited for real estate, government, insurance, and compliance applications that require precise geographic news filtering at a city, region, or country level.

OpenAPI Specification

newscatcher-local-news-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Local News 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: [email protected]
    url: https://www.newscatcherapi.com/book-a-demo
  version: 1.2.0

externalDocs:
  description: Find out more about Local News API
  url: https://www.newscatcherapi.com/docs/local-news-api/get-started/introduction

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.
  - name: LatestHeadlines
    description:
      Operations to retrieve local news latest headlines. Includes both standard
      location filtering and advanced GeoNames filtering.
  - name: SearchBy
    description: Operations to search local news by link, ID or RSS GUID.
  - name: Sources
    description: Operations to retrieve local news sources.

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"

  /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"

  /api/sources:
    post:
      tags:
        - Sources
      summary: Retrieve sources
      description:
        Retrieves the list of local news sources available in the database.
        Filterable by language, country, and theme.
      operationId: Sources_post
      requestBody:
        $ref: "#/components/requestBodies/SourceRequestBody"
      responses:
        "200":
          $ref: "#/components/responses/SourcesResponse"
        "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"

  /api/search_by:
    post:
      tags:
        - SearchBy
      summary: Search articles by identifiers
      description: Search for local news using article links, IDs, or RSS GUIDs.
      operationId: SearchBy_post
      requestBody:
        $ref: "#/components/requestBodies/SearchByRequestBody"
      responses:
        "200":
          $ref: "#/components/responses/SearchByResponse"
        "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"

  # Advanced endpoints (new in v1.2.0)
  /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"

  /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:
  requestBodies:
    SearchRequestBody:
      required: true
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/SearchRequestDto"

    LatestHeadlinesRequestBody:
      required: true
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/LatestHeadlinesRequestDto"

    SearchByRequestBody:
      required: true
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/SearchByRequestDto"

    SourceRequestBody:
      required: true
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/SourcesRequestDto"

    SearchAdvancedRequestBody:
      required: true
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/SearchAdvancedRequestDto"

    LatestHeadlinesAdvancedRequestBody:
      required: true
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/LatestHeadlinesAdvancedRequestDto"

  responses:
    SearchResponse:
      description:
        A successful response containing articles that match the specified
        search criteria. The response may include clustering information if
        enabled.
      content:
        application/json:
          schema:
            oneOf:
              - $ref: "#/components/schemas/ArticleSearchResponseDto"
              - $ref: "#/components/schemas/ClusteringSearchResponseDto"

    LatestHeadlinesResponse:
      description:
        A successful response containing the latest headlines since the
        specified time. The response may include clustering information if
        enabled.
      content:
        application/json:
          schema:
            oneOf:
              - allOf:
                  - $ref: "#/components/schemas/ArticleSearchResponseDto"
                title: Latest Headlines Response
                description: |
                  The response model for the `Latest headlines` request.
              - allOf:
                  - $ref: "#/components/schemas/ClusteringSearchResponseDto"
                title: Clustered Latest Headlines Response

    SourcesResponse:
      description: Successful response containing the list of sources
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/SourcesResponseDto"

    SearchByResponse:
      description: |
        A successful response containing articles that match the
        specified search criteria.
      content:
        application/json:
          schema:
            allOf:
              - $ref: "#/components/schemas/ArticleSearchAdvancedResponseDto"
            title: Search By Response

    SearchAdvancedResponse:
      description: |
        A successful response containing articles that match the specified search criteria with GeoNames location data. The response may include clustering information if enabled.
      content:
        application/json:
          schema:
            oneOf:
              - $ref: "#/components/schemas/ArticleSearchAdvancedResponseDto"
              - $ref: "#/components/schemas/ClusteringSearchAdvancedResponseDto"

    LatestHeadlinesAdvancedResponse:
      description: |
        A successful response containing the latest headlines since the specified time with GeoNames location data. The response may include clustering information if enabled.
      content:
        application/json:
          schema:
            oneOf:
              - allOf:
                  - $ref: "#/components/schemas/ArticleSearchAdvancedResponseDto"
                title: Advanced Latest Headlines Response
              - allOf:
                  - $ref: "#/components/schemas/ClusteringSearchAdvancedResponseDto"
                title: Clustered Advanced Latest Headlines Response

    # Errors
    BadRequestError:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
          example:
            message: "Invalid JSON in request body"
            status_code: 400
            status: "Bad request"

    UnauthorizedError:
      description: Unauthorized - Authentication failed
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
          example:
            message: "Invalid api key: INVALID_API_KEY"
            status_code: 401
            status: "Unauthorized"

    ForbiddenError:
      description: Forbidden - Server refuses action
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
          example:
            message:
              "Your plan request date range cannot be greater than 400 days"
            status_code: 403
            status: "Forbidden"

    RequestTimeoutError:
      description: Request timeout
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
          example:
            message: "Request timed out after 30 seconds"
            status_code: 408
            status: "Request timeout"

    ValidationError:
      description: Validation error
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
          example:
            message: "Invalid date format"
            status_code: 422
            status: "Validation error"

    RateLimitError:
      description: Too many requests - Rate limit exceeded
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
          example:
            message: "Max API requests concurrency reached"
            status_code: 429
            status: "Too many requests"

    InternalServerError:
      description: Internal server error
      content:
        text/plain:
          schema:
            type: string
          example: "Internal Server Error"

  schemas:
    # Base schemas for composition
    BaseRequestDto:
      type: object
      description: Common parameters shared across standard endpoints.
      properties:
        locations:
          type: array
          items:
            type: string
          description: |
            The location(s) to search for in articles. Format should be "City, State".
            Example: `["San Francisco, California"]`
          example: ["New York City, New York", "Los Angeles, California"]
        detection_methods:
          $ref: "#/components/schemas/DetectionMethods"
        lang:
          $ref: "#/components/schemas/Lang"
        countries: # New in v1.2.0
          $ref: "#/components/schemas/Countries"
        sources:
          $ref: "#/components/schemas/Sources"
        not_sources:
          $ref: "#/components/schemas/NotSources"
        parent_url:
          $ref: "#/components/schemas/ParentUrl"
        is_paid_content:
          $ref: "#/components/schemas/IsPaidContent"
        page:
          $ref: "#/components/schemas/Page"
        page_size:
          $ref: "#/components/schemas/PageSize"
        word_count_min:
          $ref: "#/components/schemas/WordCountMin"
        word_count_max:
          $ref: "#/components/schemas/WordCountMax"
        clustering:
          $ref: "#/components/schemas/ClusteringEnabled"
        theme:
          $ref: "#/components/schemas/Theme"
        PER_entity_name:
          $ref: "#/components/schemas/PerEntityName"
        LOC_entity_name:
          $ref: "#/components/schemas/LocEntityName"
        MISC_entity_name:
          $ref: "#/components/schemas/MiscEntityName"
        ORG_entity_name:
          $ref: "#/components/schemas/OrgEntityName"
        title_sentiment_min:
          $ref: "#/components/schemas/TitleSentimentMin"
        title_sentiment_max:
          $ref: "#/components/schemas/TitleSentimentMax"
        content_sentiment_min:
          $ref: "#/components/schemas/ContentSentimentMin"
        content_sentiment_max:
          $ref: "#/components/schemas/ContentSentimentMax"
        include_translation_fields: # New in v1.2.0
          $ref: "#/components/schemas/IncludeTranslationFields"

    # v1.2.0 Updated BaseRequestDto
    BaseAdvancedRequestDto:
      type: object
      properties:
        geonames:
          $ref: "#/components/schemas/GeoNamesFilter"
        geonames_operator:
          $ref: "#/components/schemas/GeoNamesOperator"
        lang:
          $ref: "#/components/schemas/Lang"
        countries:
          $ref: "#/components/schemas/Countries"
        sources:
          $ref: "#/components/schemas/Sources"
        not_sources:
          $ref: "#/components/schemas/NotSources"
        parent_url:
          $ref: "#/components/schemas/ParentUrl"
        is_paid_content:
          $ref: "#/components/schemas/IsPaidContent"
        page:
          $ref: "#/components/schemas/Page"
        page_size:
          $ref: "#/components/schemas/PageSize"
        word_count_min:
          $ref: "#/components/schemas/WordCountMin"
        word_count_max:
          $ref: "#/components/schemas/WordCountMax"
        clustering:
          $ref: "#/components/schemas/ClusteringEnabled"
        theme:
          $ref: "#/components/schemas/Theme"
        PER_entity_name:
          $ref: "#/components/schemas/PerEntityName"
        LOC_entity_name:
          $ref: "#/components/schemas/LocEntityName"
        MISC_entity_name:
          $ref: "#/components/schemas/MiscEntityName"
        ORG_entity_name:
          $ref: "#/components/schemas/OrgEntityName"
        title_sentiment_min:
          $ref: "#/components/schemas/TitleSentimentMin"
        title_sentiment_max:
          $ref: "#/components/schemas/TitleSentimentMax"
        content_sentiment_min:
          $ref: "#/components/schemas/ContentSentimentMin"
        content_sentiment_max:
          $ref: "#/components/schemas/ContentSentimentMax"
        include_translation_fields:
          $ref: "#/components/schemas/IncludeTranslationFields"

    # Standard request DTOs (enhanced in v1.2.0)
    SearchRequestDto:
      allOf:
        - type: object
          properties:
            q:
              $ref: "#/components/schemas/Q"
            from_:
              $ref: "#/components/schemas/From"
            to_:
              $ref: "#/components/schemas/To"
            search_in: # Enhanced in v1.2.0
              $ref: "#/components/schemas/SearchIn"
            sort_by:
              $ref: "#/components/schemas/SortBy"
        - $ref: "#/components/schemas/BaseRequestDto"

    LatestHeadlinesRequestDto:
      allOf:
        - type: object
          properties:
            when:
              $ref: "#/components/schemas/When"
        - $ref: "#/components/schemas/BaseRequestDto"

    SourcesRequestDto:
      type: object
      properties:
        lang:
          $ref: "#/components/schemas/Lang"
        countries:
          $ref: "#/components/schemas/Countries"
        theme:
          $ref: "#/components/schemas/Theme"

    SearchByRequestDto:
      type: object
      properties:
        links:
          $ref: "#/components/schemas/Links"
        ids:
          $ref: "#/components/schemas/Ids"
        rss_guids:
          $ref: "#/components/schemas/RssGuids"
        from_:
          $ref: "#/components/schemas/From"
        to_:
          $ref: "#/components/schemas/To"
        page:
          $ref: "#/components/schemas/Page"
        page_size:
          $ref: "#/components/schemas/PageSize"

    # Advanced request DTOs (new in v1.2.0)
    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"

    LatestHeadlinesAdvancedRequestDto:
      allOf:
        - type: object
          properties:
            when:
              $ref: "#/components/schemas/When"
        - $ref: "#/components/schemas/BaseAdvancedRequestDto"

    # Parameter schemas
    ## BaseRequestDto (mixin model) parameters
    ## v1.2.0 GeoNames schemas
    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

    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

    GeoNamesEntity:
      type: object
      description: |
        A single geographic location filter using GeoNames structured data. All provided fields within this object are combined with `AND` logic.
      properties:
        geonames_id:
          type: string
          nullable: true
          description: |
            The unique GeoNames identifier for exact location matching.
          example: "5128581"
        name:
          type: string
          nullable: true
          description: |
            The location name to search in articles. Use leading minus `-` to exclude names (e.g., `-Boston`). Supports wildcard `*` for partial matching when `enable_wildcard` is `true`.

            When the `search_with_alt_names` parameter is `true`, search in both canonical and alternative names from GeoNames database.
          example: New York City
        country:
          type: string
          nullable: true
          description: |
            Two-letter [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code.

            To learn more, see [Enumerated parameters > Country](https://www.newscatcherapi.com/docs/news-api/api-reference/enumerated-parameters#country-country-and-not-country).
          example: "US"
        admin1:
          allOf:
            - $ref: "#/components/schemas/GeoNamesLocationAdminEntity"
          description: |
            First-order administrative division filter (e.g., states in US, provinces in Canada, regions in Italy).
          example:
            name: "California"
            code: "CA"
            geonames_id: "5332921"
        admin2:
          allOf:
            - $ref: "#/components/schemas/GeoNamesLocationAdminEntity"
          description: |
            Second-order administrative division filter (e.g., counties in the US, departments in France).
          example:
            name: "Los Angeles County"
            geonames_id: "5368361"
        admin3:
          allOf:
            - $ref: "#/components/schemas/GeoNamesLocationAdminEntity"
          description: |
            Third-order administrative division filter (e.g., townships, boroughs, smaller regional divisions).
          example:
            name: "Manhattan"
            geonames_id: "5125771"
        admin4:
          allOf:
            - $ref: "#/components/schemas/GeoNamesLocationAdminEntity"
          description: |
            Fourth-order administrative division filter (smallest administrative units).
          example:
            name: "Downtown"
        lat:
          type: object
          nullable: true
          description: The latitude range to filter by. Can be `null`.
          properties:
            min:
              type: number
              format: float
              minimum: -90
              maximum: 90
              description: Minimum latitude (inclusive).
            max:
              type: number
              format: float
              minimum: -90
              maximum: 90
              description: Maximum latitude (inclusive).
          example:
            min: 37.0
            max: 38.5
        lon:
          type: object
          nullable: true
          description: The longitude range to filter by. Can be `null`.
          properties:
            min:
              type: number
              format: float
              minimum: -180
              maximum: 180
              description: Minimum longitude (inclusive).
            max:
              type: number
              format: float
              minimum: -180
              maximum: 180
              description: Maximum longitude (inclusive).
          example:
            min: -123.0
            max: -121.5
        feature_class:
          type: string
          nullable: true
          description: |
            GeoNames feature class. Main classes: 
            - `A`: Administrative
            - `H`: Hydrographic
            - `L`: Area
            - `P`: Populated places
            - `R`: Roads/rail
            - `S`: Spots/buildings
            - `T`: Topography
            - `U`: Undersea
            - `V`: Vegetation
          example: "A"
        feature_code:
          type: string
          nullable: true
          description: |
            Specific GeoNames feature code (e.g., `PPL` for populated place, `PPLA` for administrative seat). Supports wildcards.
          example: "PPL"
        detection_methods:
          $ref: "#/components/schemas/DetectionMethods"
        localization_score:
          allOf:
            - $ref: "#/components/schemas/RangeModel"
          description: |
            Filter by geographic focus score (0-10):
            - 10: Hyper-local — specific town or neighborhood named with clear local impact
            - 7–9: Regional — nearby city, metro, or administrative region mentioned with some local detail
            - 4–6: Subnational — province/state-level reference; town may be named but with limited context
            - 1–3: National or broader — only national relevance; town appears only in passing
            - 0: None — no mention or not relevant to the location
        confidence_score:
          allOf:
            - $ref: "#/components/schemas/RangeModel"
          description: |
            Filter by model's confidence in location relevance (0-10):
            - 10: Certain — Clear, unambiguous match; location is definitely relevant
            - 7–9: High — Strong indications of relevance, but not absolute certainty
            - 4–6: Medium — Some evidence or indirect relevance, but inconclusive
            - 1–3: Low — Weak signal or unlikely relevance
            - 0: Certain Not — Confident the location is not mentioned or relevant
        search_with_alt_names:
          type: boolean
          default: false
          description: |
            If true, expands location search to alternative names, such as abbreviations, local language names, historical names, and other variants stored in the GeoNames database. For example, `"NYC"` finds articles about `"New York City"`. If false, searches only in canonical location names.

            **Note**: This setting affects all location names within the `geonames` object, including the `name` field and all administrative-level names (`admin1.name`, `admin2.name`, etc.).
          example: true
        enable_wildcard:
          type: boolean
          default: false
          description: |
            If true, enables wildcard matching using `*` for partial matching location names. If false, requires exact matching.

            **Note**: This setting affects all location names within the `geonames` object, including the `name` field and all administrative-level names (`admin1.name`, `admin2.name`, etc.).
          example: false

    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.

    RangeModel:
      type: object
      description:
        Numeric range filter with minimum and/or maximum values (inclusive).
      properties:
        min:
          type: number
          minimum: 0
          maximum: 10
          description: Minimum value (inclusive).
        max:
          type: number
          minimum: 0
          maximum: 10
          description: Maximum value (inclusive).
      example:
        min: 7
        max: 10

    Coordinates:
      type: object
      description: Geographic coordinates for a location.
      properties:
        lat:
          type: number
          format: float
          nullable: true
          minimum: -90
          maximum: 90
          description: The latitude coordinate.
        lon:
          type: number
          format: float
          nullable: true
          minimum: -180
          maximum: 180
          description: The longitude coordinate.
      example:
        lat: 40.71427
        lon: -74.00597

    IncludeTranslationFields:
      type: boolean
      default: false
      description: |
        If true, includes English translation fields in the response (`title_translated_en`, `content_translated_en`, and NLP translation fields). If false, excludes translation fields.
      example: true

    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"]

    Lang:
      oneOf:
        - type: string
        - type: array
          items:
            type: string
      description: |
        The language(s) of the search. The only accepted format is the two-letter [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) code. To select multiple languages, use a comma-separated string or an array of strings.

        To learn more, see [Enumerated parameters > Language](https://www.newscatcherapi.com/docs/news-api/api-reference/enumerated-parameters#language-lang-and-not-lang).
      example: ["en", "es"]

    Sources:
      oneOf:
        - type: string
        - type: array
          items:
            type: string
      description: |
        One or more news sources to narrow down the search. The format must be a domain URL. Subdomains, such as `finance.yahoo.com`, are also acceptable. To specify multiple sources, use a comma-separated string or an array of strings.
      example: ["nytimes.com", "theguardian.com"]

    NotSources:
      oneOf:
        - type: string
        - type: array
          items:
            type: string
      description: |
        The news sources to exclude from the search. To exclude multiple sources, use a comma-separated string or an array of strings.
      example: ["cnn.com", "wsj.com"]

    ParentUrl:
      oneOf:
        - type: string
        - type: array
          items:
            type: string
      description: |
        The categorical URL(s) to filter your search. To filter your search by multiple categorical URLs, use a comma-separated string or an array of strings.
      example: ["

# --- truncated at 32 KB (70 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/newscatcher/refs/heads/main/openapi/newscatcher-local-news-api-openapi.yml