---
name: nordcap
description: Fetch Nordic small/micro-cap stock data (First North, Spotlight, NGM, Euronext Growth) — fundamentals, news, insider trades, filings — via the nordcap.dev API. Use when the user asks about Nordic small-cap companies (Danish, Swedish, Norwegian, Finnish tickers) that US data providers don't cover, or wants webhook alerts on new Nordic market events.
---

# nordcap — Nordic small-cap market data

nordcap (https://nordcap.dev) is a financial data API covering **749 Nordic small/micro-caps** across Denmark, Sweden, Norway and Finland — the venues US data vendors are blind to: First North, Spotlight, NGM and Euronext Growth. Deliberately *not* main-market large caps (Novo Nordisk, etc. — use a US data provider for those; Novo is NVO).

## Setup

The user needs a free API key from https://nordcap.dev/signup (magic-link signup, 250 calls/day on the free Explorer tier). Expect it in the `NORDCAP_API_KEY` environment variable; if unset, ask the user to get one and set it. Never print the key.

Every request: header `X-API-KEY`, base `https://api.nordcap.dev`.

```bash
curl -s -H "X-API-KEY: $NORDCAP_API_KEY" "https://api.nordcap.dev/tickers"
```

**Prefer the MCP server when it is connected** (`https://mcp.nordcap.dev/mcp` — tools `list_tickers`, `search_companies`, `get_company_facts`, `get_income_statements`, `get_filings`, `get_news`, `get_insider_trades`). Fall back to the REST API below when MCP is unavailable or when you need webhooks.

## Endpoints

| Endpoint | Returns |
|---|---|
| `GET /tickers` | All 749 companies: ticker, name, country (dk/se/no/fi), market |
| `GET /company/facts?ticker=T` | Registry facts: legal name, CVR/orgnr, industry, employees |
| `GET /financials/income-statements?ticker=T&limit=4` | Annual fundamentals, newest first: revenue, operating_profit, net_income, total_assets, equity, cash, currency |
| `GET /filings?ticker=T&limit=10` | Official filings with document links |
| `GET /news?ticker=T&limit=10` | Press releases (all Nordic venues, via MFN) |
| `GET /insider-trades?ticker=T&limit=20` | MAR art. 19 managers' transactions — strong small-cap signal |

Find a ticker from a company name: fetch `/tickers` once and match locally (or use MCP `search_companies`).

## Coverage rules (important — empty ≠ broken)

- **Financials**: Denmark (up to 13y, XBRL) and Norway (annual accounts, Brønnøysund). **Swedish and Finnish companies return empty financials today** — that is expected, say so plainly and use facts + news + insider trades instead.
- **News and insider trades**: all four countries.
- **No share prices.** nordcap is fundamentals/events only. Get quotes elsewhere and never invent them.
- Amounts are in the reporting currency (`currency` field: DKK/NOK/SEK/EUR) — convert explicitly if the user wants another currency, and say which rate you used.
- Unknown ticker → 404 with a hint; 429 → daily quota hit (resets midnight UTC); 401 → key missing/invalid.

## Webhooks (Quant/Fund tiers)

Push instead of poll — register an HTTPS endpoint, get a signed POST when new data lands:

```bash
curl -X POST https://api.nordcap.dev/webhooks/destinations \
  -H "X-API-KEY: $NORDCAP_API_KEY" -H "Content-Type: application/json" \
  -d '{"url": "https://your-app.com/hook", "event_type": "insider_trade.created"}'
```

Event types: `news.created`, `insider_trade.created`, `financials.created`, `filing.created`. The response contains a `whsec_...` signing secret shown **once** — tell the user to store it in a secret manager immediately.

Verify incoming deliveries (header `NC-Signature: t=<ts>,v1=<hex>`): HMAC-SHA256 of `"{t}.{raw_body}"` keyed with the secret. Verify the **raw bytes** (not re-serialized JSON), compare constant-time, reject `|now - t| > 300s`. Deliveries retry at ~1 and ~10 minutes; dedupe on the envelope `id`. Manage with `GET`/`DELETE /webhooks/destinations[/{id}]`, fire a canned test via `POST /webhooks/destinations/{id}/test` (`livemode: false`).

On the free Explorer tier these endpoints return 403 — tell the user webhooks need the Quant tier (https://nordcap.dev/#pricing).

## Presenting data

- Lead with the latest period and name the currency and period end date.
- Insider buying/selling: report what happened (who-ish, when, link) — never turn it into a buy/sell recommendation.
- Small-cap accounts can be stale (annual filings only) — check `period_end` and say how old the numbers are.
- Full reference: https://nordcap.dev/docs
