Calendar Events

List Calendar Events

Returns a paginated list of scheduled Nordic financial calendar events: earnings reports (Q1 / H1 / FY etc.), earnings calls, trading updates, AGMs/EGMs, capital markets days, conference presentations, dividends, and M&A milestones (announcements, offer deadlines, completions).

Each event is tied to a single company and is sorted by scheduled_at ascending (soonest first). scheduled_at is always in UTC; for local-time display use the local_time field (scheduled_at rendered in the issuer's timezone, ISO 8601 with offset). Prefer local_time for the calendar date. A day-precision event is stored at local midnight, so its UTC scheduled_at falls on the previous day for ahead-of-UTC (Nordic) zones. title and description are always English regardless of the source-article language.

Dividends

Each dividend row carries a nested dividend object with ex_date, record_date, payment_date, declaration_date, and kind. scheduled_at follows the priority ex-date > record-date > payment-date, whichever is explicitly stated, in that order. dividend is null for non-dividend events.

Default window

By default only upcoming events are returned, from today onward by the issuer's local date (so events scheduled for today stay listed throughout the day). Pass scheduled_after or scheduled_before to query a specific window. This also surfaces past events, which carry status: published (events flip from scheduled to published ~2 days after their date). An updated_after sync walk also lifts this floor, since sync must cover past events too.

Status

List endpoints return scheduled + published events and exclude cancelled by default. Pass the status parameter to filter (status=cancelled to retrieve cancellations, or scheduled/published to narrow). Discarded events are never returned. Note: a scheduled → cancelled transition is not surfaced by default updated_after polling. To track cancellations, poll with status=cancelled or subscribe to cancellation alerts.

Filtering

Compose ticker, country, market, domicile, exchange, index, sector, and event_type to narrow the result set. All filters are intersected.

Polling for updates

Use updated_after with the timestamp of your last completed sync to fetch only events that have changed since. Results are then ordered by updated_at ascending and cursor-paginated: follow pagination.next_cursor, resending the same updated_after, until it is null. Advance your stored timestamp only once every page is drained. Incremental sync is not available on plans with a capped calendar. updated_after returns 403 there, because the capped window is recomputed per request and a change feed over it cannot be drained. The walk covers the full served dataset, including past events, so a first sync from an old watermark returns history rather than only upcoming events. Updates to past events that occurred before your currently stored watermark are not replayed; reset the watermark (or start a fresh sync) to backfill them.

Pagination

List responses include pagination.next_cursor when more pages are available. Pass it back as the cursor parameter on the next request. Cursors are opaque. Do not parse them.

Caching

Requests with updated_after are not cached: they return Cache-Control: no-cache, no-store and no ETag. Otherwise 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.

get/api/v1/calendar_events

Request

Query parameters

limitinteger

Number of events to return per page (default 25, max 100).

cursorstring

Opaque pagination cursor returned as pagination.next_cursor from a previous response. When continuing an updated_after sync, resend the same updated_after value alongside it.

fieldsstring

Comma-separated list of fields to include in the response. Reduces payload size. id is always included. Available fields: title, description, event_type, status, date_precision, fiscal_period, scheduled_at, timezone, local_time, scheduled_at_changed_at, source_article_id, source, company_id, company, country, dividend, coverage_event, updated_at.

updated_afterstring

ISO 8601 datetime. Returns only events updated after this timestamp. Use for incremental sync: store the timestamp of your last completed sync and pass it on the next request. Results are ordered by updated_at ascending and cursor-paginated. Drain pagination.next_cursor before advancing your stored timestamp. Passing this parameter also disables the default upcoming-only floor, so past events with newer updates are included.

tickerstring

Filter by company stock ticker (e.g. VOLV-B), comma-separated for several (matches any of them). Also accepts exchange-suffixed form (e.g. VOLV-B.ST); former tickers resolve. Matching is case-insensitive. Every value must resolve to a company, or the request is rejected with 400 naming the unknown values. A company outside the calendar's Nordic coverage resolves but returns no events. Combined with company, the two filters intersect.

companystring

Filter by company id (as returned by the companies endpoints), comma-separated for several (matches any of them). Complements ticker; use this to reach companies without a stock listing. Every value must resolve, or the request is rejected with 400 naming the unknown ids. A company outside the calendar's Nordic coverage resolves but returns no events. Combined with ticker, the two filters intersect.

countrystring

Filter by country using ISO 3166-1 alpha-2 code (e.g. SE, DK, NO, FI, IS). Comma-separated for multiple (e.g. SE,NO). Case-insensitive. This is the event's country: the issuer's, with source-country fallback.

marketstring

Filter to events for an issuer with an active equity listing in these countries' exchanges (ISO 3166-1 alpha-2, comma-separated, e.g. SE,NO). SE covers Nasdaq Stockholm, First North, Spotlight and NGM. Distinct from country (the event's own country) and domicile (legal domicile). Includes foreign-domiciled but locally-listed issuers.

domicilestring

Filter to events for an issuer legally domiciled in these countries (ISO 3166-1 alpha-2, comma-separated). Reaches unlisted companies; excludes foreign-domiciled but locally-listed issuers. Use market for market-coverage questions.

exchangestring

Filter by exchange using ISO 10383 Market Identifier Code, comma-separated for multiple (e.g. XSTO for Nasdaq Stockholm, XCSE for Nasdaq Copenhagen, XHEL for Nasdaq Helsinki, XOSL for Oslo Børs, or XSTO,XCSE). Only events for an issuer with an active listing on the exchange match. Case-insensitive.

indexstring

Filter by stock index id or symbol (e.g. OMXS30, OMXC25, OMXH25, OBX). Returns events only for companies in that index. Case-insensitive for symbols.

sectorstring

Filter by company sector. Must exactly match one of the standard sector names: Communication Services, Consumer Discretionary, Consumer Staples, Energy, Financials, Health Care, Industrials, Information Technology, Materials, Real Estate, Utilities.

market_segmentstring

Filter by the cap segment of the issuer's primary listing. Comma-separated; a row matches any listed value: large_cap, mid_cap, small_cap, first_north_premier, first_north_growth (also in /meta market_segments). Case-sensitive; an unknown value returns 400. Segments exist only for Nasdaq Nordic markets (Stockholm, Helsinki, Copenhagen, Iceland and First North), so companies listed only elsewhere never match. Secondary listings don't count.

event_type'earnings_report' | 'earnings_call' | 'agm' | 'egm' | 'dividend' | 'capital_markets_day' | 'trading_update' | 'conference_presentation' | 'ma_announcement' | 'ma_offer_deadline' | 'ma_completion' | 'listing' | 'delisting'

Filter by calendar event type. Accepts a single value or a comma-separated list for multiple types. These are calendar event types (underscored) and are the only values accepted here. The hyphenated Events taxonomy slugs from GET /api/v1/event_types belong to GET /api/v1/events and are rejected. A few spellings overlap across the two vocabularies (e.g. delisting) while denoting different things: a calendar event is a dated, scheduled entry for one issuer; an Events slug classifies a narrative event that already happened.

status'scheduled' | 'published' | 'cancelled'

Filter by lifecycle status. Omitted: returns scheduled + past published events and excludes cancelled. Pass cancelled to retrieve cancellations, or scheduled/published to narrow.

scheduled_afterstring

Window start. A bare date (YYYY-MM-DD) means that calendar date in each issuer's own timezone, inclusive: scheduled_after=2026-10-01&scheduled_before=2026-10-31 is October in every issuer's local calendar. An ISO 8601 datetime (Z or a UTC offset) means an exact UTC instant, at or after. Passing this parameter disables the default upcoming-only floor, allowing past events to be returned.

scheduled_beforestring

Window end. A bare date means that calendar date in each issuer's own timezone, inclusive. An ISO 8601 datetime means an exact UTC instant, exclusive (strictly before). Passing this parameter disables the default upcoming-only floor, allowing past events to be returned.

watchliststring

Restricts to events for companies in a single watchlist, identified by its id (from the List Watchlists endpoint). An unknown id returns no events. Requires read:watchlist scope.

Headers

If-None-Matchstring

ETag value from a previous response. Returns 304 Not Modified if data has not changed.

If-Modified-Sincestring

HTTP date from a previous Last-Modified header. Returns 304 Not Modified if nothing has changed since.

Response

Calendar events retrieved successfully

plan_limitedboolean

Present and true when your plan restricted the result to its upcoming-events window, so the result may be incomplete. Filters narrow within that window rather than searching the full calendar, so on a limited plan an issuer filter often returns an empty list. Absent when your plan applies no restriction.

Example response

{
  "calendar_events": [
    {
      "id": "cale_q3volvo1",
      "title": "Q3 2026 Interim Report",
      "description": "Publication of the interim report for Q3 2026 and earnings call at 10:00 CET.",
      "event_type": "earnings_report",
      "status": "scheduled",
      "date_precision": "day",
      "fiscal_period": "q3_2026",
      "scheduled_at": "2026-10-22T05:00:00.000Z",
      "timezone": "Europe/Stockholm",
      "local_time": "2026-10-22T07:00:00.000+02:00",
      "scheduled_at_changed_at": "2026-03-15T10:00:00.000Z",
      "source_article_id": "art_xyz45678",
      "source": {
        "type": "article",
        "name": "Cision",
        "article_id": "art_xyz45678"
      },
      "company_id": "w55fcw3pbg3p",
      "company": {
        "id": "w55fcw3pbg3p",
        "name": "Telefonaktiebolaget LM Ericsson",
        "ticker": "ERIC-B"
      },
      "country": "SE",
      "dividend": {
        "ex_date": "2026-04-25",
        "record_date": "2026-04-28",
        "payment_date": "2026-05-06",
        "declaration_date": "2026-03-20",
        "kind": "ordinary"
      },
      "coverage_event": {
        "id": "p2hmwsev8sp9",
        "title": "Ericsson Q3 2026 Earnings Report",
        "significance": "notable",
        "url": "https://nordicfinancialnews.com/events/p2hmwsev8sp9"
      },
      "updated_at": "2026-03-01T09:00:00.000Z"
    }
  ],
  "pagination": {
    "count": 2,
    "next_cursor": "IlVtcHByZXRPQVZTWnJrVS4uLiI="
  },
  "plan_limited": true
}

Changes

No recorded changes to this operation across all 1 revision of this API.