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

# Search

> Search across articles, stories, companies, countries, exchanges, and indices. Results are grouped by resource type and ranked by relevance. Use `type` to limit which resource types are searched.



## OpenAPI

````yaml https://nordicfinancialnews.com/openapi/v1/openapi.yaml get /api/v1/search
openapi: 3.0.1
info:
  title: Nordic Financial News API
  version: v1.0
  description: >
    REST API for Nordic financial news. Each article is summarized in English
    (headline, short summary, and key points) with the original-language article
    linked via `article_url`. The full article body stays at the source.


    ## Authentication

    All endpoints require Bearer token authentication using an API key.

    Include the API key in the Authorization header:

    ```

    Authorization: Bearer YOUR_API_KEY

    ```


    ## Rate Limiting

    The API enforces per-hour rate limits based on your plan:

    - **Free**: 100 requests/hour

    - **Pro**: 5,000 requests/hour


    Rate limit information is included in response headers:

    - `X-RateLimit-Limit`: Maximum requests per hour

    - `X-RateLimit-Remaining`: Requests remaining

    - `X-RateLimit-Reset`: Seconds until limit resets

    - `X-RateLimit-Policy`: Human-readable rate limit policy (e.g. `5000 per
    hour; token bucket`)


    The `/health` endpoint is exempt from rate limiting and does not return rate
    limit headers.


    ## Monthly Usage Limits

    Each API key has a monthly request allowance based on your plan:

    - **Free**: 50 requests/month

    - **Plus**: 10,000 requests/month

    - **Pro**: 50,000 requests/month


    Monthly usage information is included in response headers:

    - `X-Monthly-Limit`: Maximum requests per month

    - `X-Monthly-Remaining`: Requests remaining this month

    - `X-Monthly-Reset`: ISO 8601 timestamp when the limit resets (end of month)


    When the monthly limit is exceeded, the API returns `429 Too Many Requests`
    with a `Retry-After` header.


    ## Caching

    The API supports HTTP caching with ETags. Include the `If-None-Match`

    header with the ETag from a previous response to receive a 304 Not Modified

    response if the data hasn't changed.


    ## Pagination

    List endpoints support cursor-based pagination. Use the `cursor` parameter

    with the value from `pagination.next_cursor` in the response to fetch the
    next page.

    Paginated responses also include a `Link` header with `rel="next"` pointing
    to the next page URL.


    ## Error Handling

    Errors follow the RFC 9457 Problem Details format with appropriate HTTP
    status codes.
  contact:
    name: API Support
    email: hello@nordicfinancialnews.com
servers:
  - url: https://nordicfinancialnews.com
    description: Production server
security: []
paths:
  /api/v1/search:
    get:
      tags:
        - Search
      summary: Search
      description: >-
        Search across articles, stories, companies, countries, exchanges, and
        indices. Results are grouped by resource type and ranked by relevance.
        Use `type` to limit which resource types are searched.
      parameters:
        - name: q
          in: query
          required: true
          description: Full-text search query (2-200 characters).
          example: Volvo
          schema:
            type: string
        - name: type
          in: query
          required: false
          description: >-
            Comma-separated list of resource types to search. Defaults to all
            types. Valid values: `articles`, `stories`, `companies`,
            `countries`, `exchanges`, `indices`.
          example: articles,companies
          schema:
            type: string
        - name: limit
          in: query
          required: false
          description: Maximum number of results per resource type (default 5, max 25).
          example: 5
          schema:
            type: integer
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResult'
        '400':
          description: Invalid search query
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/problem_details'
        '401':
          description: Unauthorized
          content:
            application/json:
              examples:
                unauthorized:
                  value:
                    type: https://docs.nordicfinancialnews.com/problems/auth-invalid
                    title: Unauthorized
                    status: 401
                    detail: Missing or invalid API key
                    instance: urn:request:abc123
              schema:
                $ref: '#/components/schemas/problem_details'
      security:
        - bearer_auth: []
components:
  schemas:
    SearchResult:
      type: object
      required:
        - results
        - pagination
      properties:
        results:
          type: object
          properties:
            articles:
              type: array
              items:
                $ref: '#/components/schemas/ArticleSummary'
            stories:
              type: array
              items:
                $ref: '#/components/schemas/StorySummary'
            companies:
              type: array
              items:
                $ref: '#/components/schemas/CompanySummary'
            countries:
              type: array
              items:
                $ref: '#/components/schemas/CountrySummary'
            exchanges:
              type: array
              items:
                $ref: '#/components/schemas/ExchangeSummary'
            indices:
              type: array
              items:
                $ref: '#/components/schemas/IndexSummary'
        pagination:
          type: object
          properties:
            articles:
              type: object
              properties:
                count:
                  type: integer
                limit:
                  type: integer
            stories:
              type: object
              properties:
                count:
                  type: integer
                limit:
                  type: integer
            companies:
              type: object
              properties:
                count:
                  type: integer
                limit:
                  type: integer
            countries:
              type: object
              properties:
                count:
                  type: integer
                limit:
                  type: integer
            exchanges:
              type: object
              properties:
                count:
                  type: integer
                limit:
                  type: integer
            indices:
              type: object
              properties:
                count:
                  type: integer
                limit:
                  type: integer
    problem_details:
      type: object
      required:
        - type
        - title
        - status
        - detail
        - instance
      properties:
        type:
          type: string
          description: URI that identifies the problem type
        title:
          type: string
          description: Short human-readable summary
        status:
          type: integer
          description: HTTP status code
        detail:
          type: string
          description: Human-readable explanation
        instance:
          type: string
          description: URI that identifies the specific occurrence
    ArticleSummary:
      type: object
      required:
        - id
        - title
        - published_at
        - article_url
        - content_type
        - category
        - source
        - company_ids
        - country
      properties:
        id:
          type: string
          description: Unique article identifier
          example: art_abc123def
        title:
          type: string
          description: Article title in English
          example: Volvo Reports Record Q3 Earnings
        article_url:
          type: string
          description: Link to the original article
          example: https://di.se/articles/volvo-q3-2026
        content_type:
          type: string
          description: Type of article content
          example: news
          enum:
            - news
            - analysis
            - press_release
            - market_commentary
            - market_news
            - trading_halt
            - trading_event
            - other
        published_at:
          type: string
          format: date-time
          description: When the article was published (ISO 8601)
          example: '2026-03-15T09:30:00.000Z'
        category:
          type: object
          description: Article category
          properties:
            id:
              type: string
              example: cat_earnings1
            name:
              type: string
              example: Earnings & Financial Results
        source:
          type: object
          description: The news source that published this article
          properties:
            id:
              type: string
              description: Unique source identifier
              example: abc123def456
            name:
              type: string
              example: Dagens Industri
            domain:
              type: string
              example: di.se
        company_ids:
          type: array
          items:
            type: string
          description: IDs of companies mentioned in the article
          example:
            - uejazctgchj4
        country:
          type: string
          nullable: true
          description: Country code (ISO 3166-1 alpha-2)
          example: SE
    StorySummary:
      type: object
      required:
        - id
        - title
        - summary
        - article_count
        - published_at
      properties:
        id:
          type: string
          description: Unique story identifier
          example: story_volvo_q3
        title:
          type: string
          description: Story title
          example: Volvo Reports Record Q3 Results
        summary:
          type: string
          description: Story summary
          example: >-
            Volvo reported record third-quarter earnings, beating analyst
            expectations...
        article_count:
          type: integer
          description: Number of articles in this story
          example: 4
        published_at:
          type: string
          format: date-time
          description: When the story was first published (ISO 8601)
          example: '2026-03-15T09:30:00.000Z'
        article_ids:
          type: array
          items:
            type: string
          description: IDs of articles in this story
          example:
            - art_abc123def
            - art_def456ghi
        country:
          type: string
          nullable: true
          description: Country code (ISO 3166-1 alpha-2)
          example: SE
        company_ids:
          type: array
          items:
            type: string
          description: IDs of companies mentioned in this story
          example:
            - uejazctgchj4
        category:
          type: object
          description: Story category
          properties:
            id:
              type: string
            name:
              type: string
    CompanySummary:
      type: object
      required:
        - id
        - name
        - slug
      properties:
        id:
          type: string
          description: Unique company identifier
          example: w55fcw3pbg3p
        name:
          type: string
          description: Company name
          example: Volvo Car AB
        slug:
          type: string
          description: URL-friendly company name
          example: VOLCAR-B
        ticker:
          type: string
          nullable: true
          description: Primary stock ticker (null if unlisted)
          example: VOLCAR-B
        is_active:
          type: boolean
          description: Whether the company is currently active/operating
          example: true
        exchange:
          type: object
          nullable: true
          description: Primary exchange where the company is listed
          properties:
            id:
              type: string
              description: Exchange identifier
            name:
              type: string
              description: Exchange display name
            mic_code:
              type: string
              description: ISO 10383 Market Identifier Code
    CountrySummary:
      type: object
      required:
        - id
        - name
        - iso2_code
      properties:
        id:
          type: string
          description: Unique country identifier
          example: ctry_sweden12
        name:
          type: string
          description: Country display name
          example: Sweden
        iso2_code:
          type: string
          description: ISO 3166-1 alpha-2 country code
          example: SE
    ExchangeSummary:
      type: object
      required:
        - id
        - name
        - mic_code
      properties:
        id:
          type: string
          description: Unique exchange identifier
          example: exch_nasdaq1
        name:
          type: string
          description: Exchange display name
          example: Nasdaq Stockholm
        mic_code:
          type: string
          description: ISO 10383 Market Identifier Code
          example: XSTO
        acronym:
          type: string
          nullable: true
          description: Exchange acronym
          example: NASDAQ
        country:
          type: object
          description: Country where the exchange is located
          properties:
            id:
              type: string
            name:
              type: string
            iso2_code:
              type: string
    IndexSummary:
      type: object
      required:
        - id
        - name
        - symbol
      properties:
        id:
          type: string
          description: Unique stock index identifier
          example: idx_omxs30abc
        name:
          type: string
          description: Index display name
          example: OMX Stockholm 30
        symbol:
          type: string
          description: Index symbol
          example: OMXS30
        pan_nordic:
          type: boolean
          description: >-
            True if the index spans multiple Nordic exchanges (e.g. OMXN40),
            false if tied to a single exchange (e.g. OMXS30)
          example: false
        exchange:
          type: object
          nullable: true
          description: Exchange associated with this index
          properties:
            id:
              type: string
            name:
              type: string
            mic_code:
              type: string
  securitySchemes:
    bearer_auth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: API Key authentication using Bearer token

````