---
title: "Get Event"
method: GET
path: "/api/v1/events/{id}"
tags: ["Events"]
---

# Get Event

`GET /api/v1/events/{id}`

## Request

- Base URL: `https://nordicfinancialnews.com`
- URL: `https://nordicfinancialnews.com/api/v1/events/{id}`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/nordicfinancialnews/apis/nordic-financial-news-api/docs/api/v1/events/:id/get.ts> (a function with typed inputs; its response is checked against the schema)

Fetches a single event by ID.

A merged or removed event returns 200 with the minimal tombstone shape (see the list endpoint's description) rather than 404. The id still resolves; it carries no content. An event with no live member articles at all returns 404. An event whose live members exist but are all outside your plan's age/source restrictions returns 403 with an upgrade problem, distinct from the plain 404.

Responses are cached with `ETag` and `Cache-Control: private, max-age=300`; send `If-None-Match` to receive a `304 Not Modified`. There is no `Last-Modified` here, for the same reason as `GET /api/v1/events`.

## Query parameters

- `include_peripheral` boolean

## Headers

- `If-None-Match` string

## Response `200`

Event retrieved

- object
  - `event` EventDetail, required: An event: one real-world development, grouping the articles that report it. A `merged` or `removed` event (see `status`) returns only the minimal tombstone fields (`id`, `status`, `merged_into`, `updated_at`). Title, significance, event_type, counts, and every id array are omitted, never null-but-present, so a tombstone carries no content.
    - `id` string, required: Unique event identifier
    - `title` string: Event title (omitted on a tombstone)
    - `status` 'active' | 'closed' | 'merged' | 'removed', required: Lifecycle status. `active`/`closed` are live (closed = coverage window lapsed but the event stays visible and can reopen). `merged` = absorbed into another event (see `merged_into`); `removed` = withdrawn from the feed (no live articles remain, or it was found to be incorrect). `merged`/`removed` never appear in the default list and carry only the tombstone fields.
    - `significance` 'notable' | 'routine' | 'commentary': Editorial importance (omitted on a tombstone). `notable` = front-page-worthy; `routine` = factual ledger record; `commentary` = single-article opinion/analysis.
    - `event_type` object, nullable: The kind of event (omitted on a tombstone)
      - `slug` string
      - `label` string
      - `category` string
    - `article_count` integer: Number of live articles reporting this event (omitted on a tombstone). This is the total count. Your plan's age and source restrictions do not reduce it; use GET on the event to see which of them your plan can fetch.
    - `first_reported_at` string, date-time, nullable: When this event was first reported (ISO 8601, omitted on a tombstone): the earliest known publication time among this event's member articles. Falls back to `last_article_at` for ordering when null. This is editorial time, not the time the record reached this API.
    - `last_article_at` string, date-time, nullable: Publication time of the newest article reporting this event (ISO 8601, omitted on a tombstone).
    - `updated_at` string, date-time, required: When this record last changed (ISO 8601). This is the clock incremental sync runs on. Pass your last completed sync time as `updated_after`, drain every page via `pagination.next_cursor`, and only then advance your stored timestamp.
    - `company_ids` string[]: IDs of companies associated with this event, verified and visible only (omitted on a tombstone). Restricted to companies with an active-involvement role (subject, acquirer, target, investor, issuer, partner) unless `include_peripheral=true`.
    - `story_ids` string[]: IDs of published stories generated from this event, if any (omitted on a tombstone)
    - `merged_into` string, nullable: ID of the surviving event this one was merged into. Present only when `status` is `merged`; null for every other status, including `removed` and on some older merged events.
    - `related_to` string, nullable: Commentary-only metadata: the `id` of the factual event this commentary event comments on or reacts to, when the piece is about a specific factual event. Always null for non-commentary events, and often null for commentary events too (the piece may not be about a specific event). Filter with `related_to=<id>` to find commentary reacting to a given event.
    - `summary` string, nullable: Event summary (omitted on a tombstone). Null when no summary has been generated for the event yet.
    - `article_ids` string[]: IDs of this event's live articles that your plan can fetch, oldest first by publication time (omitted on a tombstone). May be shorter than `article_count` on a plan with age or source restrictions. That gap is not an error.
    - `primary_disclosure_article_id` string, nullable: The primary disclosure among this event's live articles your plan can fetch: the earliest one from a primary-disclosure source (wire service, stock exchange feed, PR platform, or government body). Null when the event has none. Always an element of `article_ids`, or null; omitted on a tombstone. A plan with age or source restrictions may see a later official copy of the same disclosure, or null, instead of the true earliest one.
    - `member_figures_disagree` boolean: True when this event's own member articles report divergent values for the same headline figure (e.g. one source reports operating profit as −2.2m, another as −2.4m). A signal that the single consolidated summary hides a source-level disagreement. Omitted on a tombstone.
    - `figure_divergence` object, nullable: Detail behind `member_figures_disagree`: the specific metrics whose values disagree across member articles, with the per-source figures and range. Null when there is no disagreement; omitted on a tombstone.
      - `groups` object[]: One entry per disagreeing metric.
        - `concept` string: The canonical measure that disagrees
        - `basis` string: Whether the measure is as-reported or an adjusted/alternative one
        - `role` string: Whether the figure is an outcome, forecast, or comparative
        - `period` string: The reporting period the figure covers: 2026-Q1, 2026-H1, 2026-FY, 2026-08, 2026-08-15, or a month span like 2026-01/2026-09
        - `currency` string: ISO currency of the figures
        - `labels` string[]: The source's own wording(s) for the measure
        - `min` number: Smallest reported value (absolute base units)
        - `max` number: Largest reported value (absolute base units)
        - `values` object[]: The reported figure per member article.
          - `id` string: The reporting article's id
          - `source` string, nullable: The reporting source's name
          - `normalized_value` number: The figure in absolute base units
          - `value` string: The figure as originally stated
    - `companies` object[]: The same companies as `company_ids`, with detail per company: name, ticker, primary flag, association tier. Primary company first; omitted on a tombstone.
      - `id` string, required: Unique company identifier
      - `name` string, required: Company name
      - `ticker` string, nullable: Primary stock ticker
      - `is_primary` boolean, required: Whether this company is the primary subject of the event
      - `association_tier` 'principal' | 'peripheral', required: How the company relates to the event. `principal` (subject, acquirer, target, investor, issuer, partner) is the default set; `peripheral` (advisor, speaker, passing mention) appears only when `include_peripheral=true`. Always present.

## Other responses

- `304`: Not Modified
- `401`: Missing or invalid API key
- `403`: Event is outside this plan's access window
- `404`: Event not found

---

[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)
