nordfeed API

Nordic regulatory press releases as structured JSON, seconds after publication. Base URL: the host you were given. Every timestamp is UTC. OpenAPI · status

Authentication

Send your key in the X-API-Key header (or Authorization: Bearer). For the stream, ?api_key= is accepted because browsers cannot set headers on EventSource.

curl -H "X-API-Key: $KEY" "$HOST/v1/reports?limit=5"

The envelope

Every item, whatever its type, has the same outer shape. payload depends on type.

{
  "id": "evt_10545",
  "type": "report",
  "company": "Bilia",
  "isin": "SE0009921588",
  "tickers": ["XSTO:BILI A"],
  "market": "SE",
  "published": "2026-07-17T06:00:00Z",      // the source's publication time
  "received": "2026-07-17T06:00:01Z",       // our poller saw it
  "structured": "2026-07-17T06:00:03Z",     // parsing done
  "source": "mfn",
  "source_url": "https://mfn.se/a/bilia/andra-kvartalet-2026",
  "correction": false,
  "review_status": "auto",                  // or "needs_review"
  "confidence": 0.95,
  "payload": { ... }
}

review_status is needs_review when confidence is below 0.85: key fields missing, the model and the rules disagree, or a sanity check fired. Treat those as provisional.

Reports

GET /v1/reports

parametermeaning
isinone company
tickere.g. BILI A or XSTO:BILI A
companyname contains
latest=1one item per company, the newest report
period2026-Q2, 2026-H1, 2026-9M, 2026-FY
sectorgeneral, real_estate, bank, investment_company, insurance
since, untilpublication time, RFC 3339 or a date
review_statusauto or needs_review
limitdefault 50, max 500

Report payload: figures per field with unit, comparison and confidence. Units are MSEK, KSEK, MEUR and so on; per-share fields carry the bare currency. yoy is the change against the comparison figure the release itself gives.

"payload": {
  "period": "2026-Q2", "report_period": "2026-Q2", "sector": "general", "currency": "SEK", "unit": "MSEK",
  "fields": {
    "revenue":    { "value": 10908, "unit": "MSEK", "yoy": 0.034, "confidence": 0.95, "source": "prose+model" },
    "ebit":       { "value": 362,   "unit": "MSEK", "yoy": 0.121, "confidence": 0.95, "source": "prose+model" },
    "net_income": { "value": 230,   "unit": "MSEK", "yoy": 0.198, "confidence": 0.95, "source": "prose+model" },
    "eps_basic":  { "value": 2.50,  "unit": "SEK",  "yoy": 0.202, "confidence": 0.95, "source": "prose+model" }
  },
  "stages": ["prose", "model_verify"]
}
sectorfields
generalrevenue, ebit, ebita, ebitda, profit_before_tax, net_income, eps_basic, operating_cash_flow; _adjusted variants when the release states them
real_estaterental_income, net_operating_income, property_management_income, property_value_change, nav_per_share, net_income, eps_basic
banknet_interest_income, net_commission_income, total_income, ebit, credit_losses, cost_income_ratio, cet1_ratio, return_on_equity, net_income, eps_basic
investment_companynav_per_share, nav_total, value_change, net_income, eps_basic
insurancepremiums, underwriting_result, combined_ratio, solvency_ratio, profit_before_tax, net_income, eps_basic

A field's period is set only when it differs from the report period (a half-year figure in a quarterly report).

Events

GET /v1/events

Same parameters as reports, plus type (comma separated). Extracted payloads exist for profit warnings, directed issues, rights issues, orders, bids, acquisitions, trading updates and flaggings; other types carry the classification and headline.

{ "type": "directed_issue", "company": "Moank Fintech Group AB", ...,
  "payload": {
    "event": "directed_issue",
    "headline": "Moank Fintech Group meddelar att riktad emission om 150 MSEK är övertecknad",
    "fields": { "amount": 150, "currency": "SEK", "price": 160, "shares": 937500, "discount_pct": null, "bookbuilding": false, "investors": [] },
    "confidence": 0.94
  } }

{ "type": "profit_warning", "company": "Envar Holding AB", ...,
  "payload": {
    "event": "profit_warning",
    "headline": "Envar Holding AB Issues a Reverse Profit Warning Following a Significant Increase in Operating Profit",
    "fields": { "direction": "positive", "metric": "EBIT", "period": "Q2 2026", "previous_guidance": null },
    "confidence": 0.96
  } }

Feed and polling

GET /v1/feed

Reports and events together, newest first. To poll, pass after=evt_N: you get everything structured after that id, oldest first, and next_after to use on the next call. Nothing is skipped and nothing repeats.

curl -H "X-API-Key: $KEY" "$HOST/v1/feed?after=evt_12345&limit=200"

GET /v1/feed/:id

One envelope.

Stream

GET /v1/stream

Server-Sent Events. Each envelope arrives as one event with id set to the envelope id and event set to the type. Reconnect with Last-Event-ID and you resume where you were. Filters: type, isin.

curl -N -H "X-API-Key: $KEY" "$HOST/v1/stream?type=report,profit_warning"

id: evt_12346
event: report
data: {"id":"evt_12346","type":"report", ...}

Webhooks

POST /v1/subscriptions

curl -X POST -H "X-API-Key: $KEY" -H "Content-Type: application/json" "$HOST/v1/subscriptions" \
  -d '{"name":"nordic smallcap","url":"https://example.com/hooks/nordfeed","types":["report","profit_warning"],"isins":["SE0009921588"]}'

Omit types or isins to receive everything. The response includes the signing secret once. Each delivery is a POST with the envelope as body and headers X-Timestamp, X-Delivery-Id and X-Signature: sha256=HMAC_SHA256(secret, timestamp + "." + body). Answer 2xx within 10 seconds. Otherwise we retry after 1 min, 5 min, 30 min, 2 h, 6 h and 24 h; after the seventh failure the delivery is marked failed and shows on the status page.

GET /v1/subscriptions

DELETE /v1/subscriptions/:id

Types

typewhat
reportinterim and year-end reports, figures extracted
profit_warningprofit warnings and reverse profit warnings
directed_issue, rights_issueshare issues, terms extracted
orderorders and contracts, value extracted
bidpublic offers
acquisitionacquisitions and divestments
trading_updatevolume and sales updates ahead of the report: metric, value, unit, period, change
flaggingmajor holding notifications: holder, share and vote percentages, previous holding, threshold, direction
management_change, buyback, insider, agm, bond, nav, rating, voting_rights, ex_date, research, annual_reportclassified, headline delivered

Corrections: a release marked as a correction repeats the envelope with correction: true. Duplicate language versions of the same release are collapsed to one envelope.