---
title: "List Company Articles"
method: GET
path: "/api/v1/companies/{identifier}/articles"
tags: ["Companies"]
---

# List Company Articles

`GET /api/v1/companies/{identifier}/articles`

## Request

- Base URL: `https://nordicfinancialnews.com`
- URL: `https://nordicfinancialnews.com/api/v1/companies/{identifier}/articles`
- Auth: HTTP bearer

Returns articles where the company is a principal association (subject, partner, investor,
or competitor), ordered by publication date (newest first). An article where this company
is only the source, an advisor, or a passing mention is excluded.

## Parameters
Accepts the same `q`, `sort`, `fields`, `updated_after`, `country`, `category`, `sources`, `source_type`, `content_type`, `published_after` and `published_before` parameters as `GET /api/v1/articles`, with identical semantics, scoped to this company. `primary_only=true` narrows further within that principal set, to only articles where this company is the primary subject.

## Rejected parameters
`ticker`, `company`, `watchlist`, `listed`, `exchange`, `market`, `domicile`, `index`, `sector` and `market_segment` are rejected (400). The path already fixes the company; use `GET /api/v1/articles` to filter the full collection by them (`watchlist=false` and `listed` with any value other than `true` are ignored, as on the flat resource).

## Caching
Requests with `updated_after` are not cached: they return `Cache-Control: no-cache, no-store` and no `ETag`. The `ETag` reflects the response as served, not only record timestamps: it changes when plan limits alter the visible set, so a changed `ETag` does not necessarily mean a record was updated.

## Query parameters

- `limit` integer
- `cursor` string
- `fields` string
- `updated_after` string
- `q` string
- `sort` 'relevance' | 'latest'
- `country` string
- `category` string
- `sources` string
- `source_type` string
- `content_type` string
- `published_after` string
- `published_before` string
- `primary_only` boolean
- `include_peripheral` boolean

## Headers

- `If-None-Match` string
- `If-Modified-Since` string

## Response `200`

Company articles retrieved successfully

- object
  - `articles` ArticleSummary[], required
    - `id` string, required: Unique article identifier
    - `title` string, required: Article title in English. Machine-translated when the source article is not in English.
    - `article_url` string, required: Link to the original article
    - `content_type` 'news' | 'analysis' | 'press_release' | 'market_commentary' | 'market_news' | 'trading_halt' | 'trading_event' | 'other', required: Type of article content
    - `published_at` string, date-time, required: When the article was published by its source (ISO 8601). This is editorial time, not the time the article reached this API. Use it to filter by when news happened, never to track what is new to you.
    - `updated_at` string, date-time, required: When this record last changed (ISO 8601). This is the clock incremental sync runs on. It only ever moves forward, unlike published_at. To sync: pass your last completed sync time as `updated_after`, drain every page via `pagination.next_cursor`, and only then advance your stored timestamp.
    - `category` object, required: Article category
      - `id` string
      - `name` string
    - `source` object, required: The news source that published this article
      - `id` string: Unique source identifier
      - `name` string
      - `domain` string
      - `source_type` 'news_publication' | 'wire_service' | 'press_release' | 'government' | 'trade_publication' | 'blog' | 'stock_exchange' | 'research'
    - `company_ids` string[], required: IDs of companies mentioned in the article
    - `country` string, nullable, required: Country code (ISO 3166-1 alpha-2)
    - `event_id` string, nullable: ID of the event this article belongs to. Null when the article has not been assigned to an event yet. An event that has since been merged or removed still answers `GET /events/{id}` with a tombstone rather than a 404.
  - `pagination` object
    - `count` integer
    - `next_cursor` string, nullable
  - `plan_limited` boolean: Present and `true` when your plan restricted what this endpoint can return, so the result may be incomplete. Absent when your plan applies no restriction.

## Other responses

- `304`: Not Modified
- `400`: Invalid parameter

---

[API](https://skmtc.dev/nordicfinancialnews/apis/nordic-financial-news-api.md) - [All operations](https://skmtc.dev/nordicfinancialnews/apis/nordic-financial-news-api/llms.txt) - [OpenAPI document](https://skmtc.dev/nordicfinancialnews/apis/nordic-financial-news-api/revisions/aa48db8c82fc?raw)
