# Get article details
Source: https://docs.nordicfinancialnews.com/api-reference/articles/get-article-details
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/articles/{public_id}
Returns the full details of a single article, including AI-translated content, key points, associated companies, and topic tags. Supports conditional requests via `If-None-Match` for efficient caching.
# List articles
Source: https://docs.nordicfinancialnews.com/api-reference/articles/list-articles
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/articles
Returns a paginated list of live, translated articles ordered by publication date (newest first). Supports filtering by country, category, company ticker, and content type. Use `updated_after` for incremental syncing, or `q` for full-text search ranked by relevance. Use `ids` for batch lookup of specific articles. Responses include cursor-based pagination and support field projection to minimize payload size.
# Get category details
Source: https://docs.nordicfinancialnews.com/api-reference/categories/get-category-details
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/categories/{id}
Returns details for a single category, including its description.
# List categories
Source: https://docs.nordicfinancialnews.com/api-reference/categories/list-categories
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/categories
Returns all enabled article categories, ordered alphabetically by name. Categories are used to classify articles and stories (e.g. Earnings, M&A, IPO). Use category IDs to filter articles and stories by topic.
# List category articles
Source: https://docs.nordicfinancialnews.com/api-reference/categories/list-category-articles
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/categories/{public_id}/articles
Returns articles classified under a specific category, ordered by publication date (newest first). Supports incremental syncing via `updated_after` and field projection.
# List category stories
Source: https://docs.nordicfinancialnews.com/api-reference/categories/list-category-stories
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/categories/{public_id}/stories
Returns stories classified under a specific category, ordered by publication date (newest first). Supports incremental syncing via `updated_after`.
# Get company details
Source: https://docs.nordicfinancialnews.com/api-reference/companies/get-company-details
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/companies/{identifier}
Returns detailed information about a single company, including alternative names (aliases), article and story counts, and stock listing details. Look up by company ID (e.g. `comp_apple123`) or ticker symbol (e.g. `AAPL`, `VOLV-B.ST`).
# List companies
Source: https://docs.nordicfinancialnews.com/api-reference/companies/list-companies
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/companies
Returns a paginated list of verified Nordic companies, ordered alphabetically by name. Use `q` for full-text search across company names and aliases, ranked by relevance.
# List company articles
Source: https://docs.nordicfinancialnews.com/api-reference/companies/list-company-articles
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/companies/{identifier}/articles
Returns articles that mention a specific company, ordered by publication date (newest first). Use `primary_only=true` to return only articles where this company is the primary subject of the article.
# List company stories
Source: https://docs.nordicfinancialnews.com/api-reference/companies/list-company-stories
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/companies/{identifier}/stories
Returns stories that mention a specific company, ordered by publication date (newest first).
# Get country details
Source: https://docs.nordicfinancialnews.com/api-reference/countries/get-country-details
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/countries/{identifier}
Returns details for a single country. Look up by country ID, ISO 3166-1 alpha-2 code (e.g. `SE`), or slug (e.g. `sweden`).
# List countries
Source: https://docs.nordicfinancialnews.com/api-reference/countries/list-countries
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/countries
Returns active Nordic countries covered by the API, ordered alphabetically. Currently includes Sweden, Norway, Denmark, Finland, and Iceland. Use country identifiers to filter articles and stories by geographic region.
# List country articles
Source: https://docs.nordicfinancialnews.com/api-reference/countries/list-country-articles
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/countries/{identifier}/articles
Returns articles from a specific country, ordered by publication date (newest first). Supports incremental syncing via `updated_after` and field projection.
# List country exchanges
Source: https://docs.nordicfinancialnews.com/api-reference/countries/list-country-exchanges
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/countries/{identifier}/exchanges
Returns stock exchanges located in a specific country, ordered alphabetically. Requires `read:exchanges` scope.
# List country stories
Source: https://docs.nordicfinancialnews.com/api-reference/countries/list-country-stories
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/countries/{identifier}/stories
Returns stories from a specific country, ordered by publication date (newest first). Supports incremental syncing via `updated_after`.
# Get exchange details
Source: https://docs.nordicfinancialnews.com/api-reference/exchanges/get-exchange-details
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/exchanges/{identifier}
Returns detailed information about a stock exchange, including currency, timezone, and location. Look up by exchange ID (e.g. `exch_nasdaq1`) or MIC code (e.g. `XSTO`).
# List exchange companies
Source: https://docs.nordicfinancialnews.com/api-reference/exchanges/list-exchange-companies
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/exchanges/{identifier}/companies
Returns verified companies with stock listings on a specific exchange, ordered alphabetically by name. Only companies that are verified and have an active ticker symbol are included.
# List exchanges
Source: https://docs.nordicfinancialnews.com/api-reference/exchanges/list-exchanges
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/exchanges
Returns active Nordic stock exchanges, ordered alphabetically. Supports filtering by country.
# Health check endpoint
Source: https://docs.nordicfinancialnews.com/api-reference/health/health-check-endpoint
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/health
Returns the health status of the API
# Get stock index details
Source: https://docs.nordicfinancialnews.com/api-reference/indices/get-stock-index-details
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/indices/{identifier}
Returns detailed information about a stock index, including description and companies count. Look up by index ID or symbol (case-insensitive, e.g. `OMXS30`).
# List index companies
Source: https://docs.nordicfinancialnews.com/api-reference/indices/list-index-companies
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/indices/{identifier}/companies
Returns verified companies that are members of a specific stock index, ordered alphabetically by name.
# List stock indexes
Source: https://docs.nordicfinancialnews.com/api-reference/indices/list-stock-indexes
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/indices
Returns stock indexes, ordered alphabetically by name. Supports filtering by exchange MIC code.
# API reference
Source: https://docs.nordicfinancialnews.com/api-reference/introduction
Complete reference for the Nordic Financial News REST API.
The Nordic Financial News API provides read-only access to translated Nordic financial news articles, AI-generated story clusters, company profiles, and market data.
## Base URL
```
https://nordicfinancialnews.com/api/v1
```
## Authentication
All endpoints require a Bearer token in the `Authorization` header:
```bash theme={"dark"}
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://nordicfinancialnews.com/api/v1/articles"
```
See the [authentication guide](/guides/authentication) for details on API keys, scopes, and rate limits.
## Resources
Browse endpoints using the sidebar navigation. Available resources:
| Resource | Description | Endpoints |
| ---------- | ------------------------------------- | --------------------------------------- |
| Articles | Translated Nordic news articles | List, Get |
| Stories | AI-generated article clusters | List, Get, Articles |
| Companies | Nordic company profiles | List, Get, Articles, Stories |
| Categories | News categories | List, Get, Articles, Stories |
| Countries | Nordic countries | List, Get, Articles, Stories, Exchanges |
| Exchanges | Stock exchanges | List, Get, Companies |
| Search | Full-text search across all resources | Search |
| Meta | API metadata and capabilities | Get |
## Common features
All list endpoints support:
* **[Cursor pagination](/guides/pagination)** for stable paging through results
* **[Field projection](/guides/field-projection)** to select specific response fields
* **[ETag caching](/guides/caching)** on individual resource endpoints
* **[Real-time updates](/guides/real-time-updates)** via the `updated_after` parameter (articles and stories)
* **Filtering** by country, category, ticker, content type, and date range
* **Full-text search** with the `q` parameter
## Response format
All responses are JSON. List endpoints return a resource array and pagination object:
```json theme={"dark"}
{
"articles": [...],
"pagination": {
"count": 25,
"next_cursor": "eyJpZCI6..."
}
}
```
Errors follow [RFC 9457 Problem Details](/guides/errors) format.
# Get API metadata
Source: https://docs.nordicfinancialnews.com/api-reference/meta/get-api-metadata
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/meta
Returns API metadata including version, capabilities, supported fields, content types, and rate limit policy.
# Search across all resource types
Source: https://docs.nordicfinancialnews.com/api-reference/search/search-across-all-resource-types
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/search
Performs a unified full-text search across articles, stories, companies, countries, and exchanges. Results are grouped by resource type and ordered by relevance within each group. Only returns results for resource types that the API key has access to (based on scopes). Use `type` to limit which resource types are searched. Ideal for building typeahead or global search experiences.
# Get story details
Source: https://docs.nordicfinancialnews.com/api-reference/stories/get-story-details
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/stories/{public_id}
Returns the full details of a single story, including AI-generated content in Markdown format, associated articles, companies, and topic tags. Supports conditional requests via `If-None-Match` for efficient caching.
# List articles in a story
Source: https://docs.nordicfinancialnews.com/api-reference/stories/list-articles-in-a-story
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/stories/{public_id}/articles
Returns the articles that belong to a story cluster, ordered by relevance score (most relevant first). Each article includes its full summary representation.
# List stories
Source: https://docs.nordicfinancialnews.com/api-reference/stories/list-stories
https://nordicfinancialnews.com/api-docs/v1/swagger.yaml get /api/v1/stories
Returns a paginated list of published stories ordered by publication date (newest first). Stories are AI-generated clusters of related articles about the same event or topic. Supports filtering by country, category, and company ticker. Use `updated_after` for incremental syncing, or `q` for full-text search ranked by relevance.
# AI tools & resources
Source: https://docs.nordicfinancialnews.com/guides/ai-tools
Use AI assistants and agents to explore the Nordic Financial News API and docs.
Every page on this site is optimized for AI tools. You can send content to your favourite AI assistant, connect the docs to your IDE, or point agents directly at machine-readable files.
## Contextual menu
Each page has a contextual menu (top-right of the page content) that lets you interact with AI tools in one click:
* **Copy** — copy the page as Markdown, ready to paste into any AI chat
* **View** — view the raw Markdown source in a new tab
* **ChatGPT / Claude** — open a conversation with the page loaded as context
* **Cursor / VS Code** — install the docs MCP server directly into your IDE
* **MCP** — copy the docs MCP server URL for any MCP-compatible client
## Connect docs to your IDE
This documentation site hosts its own MCP server, powered by Mintlify. Connect it to your AI coding assistant so it can search the NFN docs without leaving your editor.
Use the contextual menu on any page and select **Connect to Cursor**, or manually add to `.cursor/mcp.json`:
```json theme={"dark"}
{
"mcpServers": {
"nfn-docs": {
"url": "https://docs.nordicfinancialnews.com/mcp"
}
}
}
```
Use the contextual menu on any page and select **Connect to VS Code**, or add to your MCP settings:
```json theme={"dark"}
{
"mcpServers": {
"nfn-docs": {
"url": "https://docs.nordicfinancialnews.com/mcp"
}
}
}
```
```bash theme={"dark"}
claude mcp add nfn-docs https://docs.nordicfinancialnews.com/mcp
```
This connects your AI assistant to the **documentation** for search and context. To query **live API data** (articles, stories, companies), use the [NFN API MCP server](/model-context-protocol) instead.
## Connect the API to your AI
The NFN API has its own MCP server for querying live data — articles, stories, companies, and more — directly from your AI assistant. This is separate from the docs MCP server above.
Connect AI assistants to query live Nordic Financial News data.
## For agents and LLMs
If you're building AI integrations on top of Nordic Financial News, these machine-readable files are available at the root of the docs site:
| File | URL | Purpose |
| --------------- | -------------------------------- | -------------------------------------------------------------------------------- |
| `llms.txt` | [/llms.txt](/llms.txt) | Directory of all documentation pages with descriptions — like a sitemap for AI |
| `llms-full.txt` | [/llms-full.txt](/llms-full.txt) | The entire documentation site combined into a single file |
| `skill.md` | [/skill.md](/skill.md) | Auto-generated capability summary describing what agents can do with the NFN API |
### Markdown export
Every page is available as clean Markdown by appending `.md` to the URL. For example:
```
https://docs.nordicfinancialnews.com/guides/authentication.md
```
This is useful for feeding specific pages into AI tools or building custom integrations.
### Using skill.md with agents
The `skill.md` file follows the [agentskills.io](https://agentskills.io) specification. AI coding tools can install it directly:
```bash theme={"dark"}
npx skills add https://docs.nordicfinancialnews.com
```
This gives your agent context about NFN API capabilities, required inputs, and constraints — so it can make API calls on your behalf more reliably.
# Authentication
Source: https://docs.nordicfinancialnews.com/guides/authentication
API key authentication, scopes, rate limits, and monthly usage quotas.
All API endpoints require Bearer token authentication using an API key.
## API keys
Include your API key in the `Authorization` header on every request:
```bash theme={"dark"}
Authorization: Bearer YOUR_API_KEY
```
Generate API keys from **Settings > API Keys** in your Nordic Financial News account. API access requires a Plus or Pro plan.
## Scopes
API keys use scope-based access control. All scopes are enabled by default:
| Scope | Access |
| ----------------- | ----------------------------- |
| `read:articles` | List and retrieve articles |
| `read:stories` | List and retrieve stories |
| `read:companies` | List and retrieve companies |
| `read:countries` | List and retrieve countries |
| `read:categories` | List and retrieve categories |
| `read:exchanges` | List and retrieve exchanges |
| `read:watchlist` | Access your company watchlist |
You can restrict scopes when creating an API key to limit access.
## Rate limits
The API enforces hourly rate limits per API key:
* **3,600 requests per hour** (1 request per second average)
Rate limit headers are included in every response:
| Header | Description |
| ----------------------- | ------------------------------ |
| `X-RateLimit-Limit` | Maximum requests per hour |
| `X-RateLimit-Remaining` | Requests remaining this hour |
| `X-RateLimit-Reset` | Seconds until the limit resets |
## Monthly usage limits
Each API key has a monthly request allowance based on your plan:
| Plan | Monthly requests |
| ---- | ---------------- |
| Free | 50 |
| Plus | 10,000 |
| Pro | 50,000 |
Monthly usage headers are included in every response:
| Header | Description |
| --------------------- | ---------------------------------------- |
| `X-Monthly-Limit` | Your plan's monthly allowance |
| `X-Monthly-Remaining` | Requests remaining this month |
| `X-Monthly-Reset` | ISO 8601 timestamp when the limit resets |
When either limit is exceeded, the API returns `429 Too Many Requests` with a `Retry-After` header.
## IP allowlists
You can optionally restrict API key access to specific IP addresses. Configure this in **Settings > API Keys** when creating or editing a key.
`304 Not Modified` responses from [ETag caching](/guides/caching) do not count against your monthly quota.
# Caching
Source: https://docs.nordicfinancialnews.com/guides/caching
Use ETags and conditional requests to save bandwidth and reduce API usage.
The API supports HTTP caching with ETags on individual resource endpoints.
## How it works
The response includes an `ETag` header with a unique identifier for the current state of the resource.
```bash theme={"dark"}
curl -i -H "Authorization: Bearer $API_KEY" \
"https://nordicfinancialnews.com/api/v1/articles/art_abc123def"
```
```http Response headers theme={"dark"}
HTTP/1.1 200 OK
ETag: "a1b2c3d4e5f6"
```
Include the `If-None-Match` header with the ETag value:
```bash theme={"dark"}
curl -i -H "Authorization: Bearer $API_KEY" \
-H 'If-None-Match: "a1b2c3d4e5f6"' \
"https://nordicfinancialnews.com/api/v1/articles/art_abc123def"
```
If the resource hasn't changed, the API returns `304 Not Modified` with no body:
```http theme={"dark"}
HTTP/1.1 304 Not Modified
```
## Benefits
* **Save bandwidth** by not re-downloading unchanged data
* **Reduce monthly usage** since `304` responses do not count against your monthly quota
* **Faster responses** with no body to parse
## When caching is disabled
ETags are not available when using:
* The `q` (search) parameter
* The `updated_after` parameter
* List endpoints (only individual resource endpoints support ETags)
# Error handling
Source: https://docs.nordicfinancialnews.com/guides/errors
Error format, status codes, and how to handle API errors.
The API uses [RFC 9457 Problem Details](https://www.rfc-editor.org/rfc/rfc9457) for error responses.
## Error format
```json theme={"dark"}
{
"type": "https://docs.nordicfinancialnews.com/problems/not-found",
"title": "Resource not found",
"status": 404,
"detail": "No article found with id 'abc123'."
}
```
| Field | Description |
| -------- | ---------------------------------------- |
| `type` | URI identifying the error type |
| `title` | Short human-readable summary |
| `status` | HTTP status code |
| `detail` | Specific explanation for this occurrence |
## Status codes
| Code | Meaning | Common cause |
| ----- | --------------------- | --------------------------------------- |
| `400` | Bad request | Invalid parameters or malformed request |
| `401` | Unauthorized | Missing or invalid API key |
| `403` | Forbidden | API key lacks required scope |
| `404` | Not found | Resource does not exist |
| `429` | Too many requests | Rate limit or monthly limit exceeded |
| `500` | Internal server error | Unexpected server error |
## Rate limit errors
When you hit a rate limit, the response includes a `Retry-After` header indicating how many seconds to wait:
```http theme={"dark"}
HTTP/1.1 429 Too Many Requests
Retry-After: 60
```
Check the `X-RateLimit-Remaining` and `X-Monthly-Remaining` headers to monitor your usage proactively. See [authentication](/guides/authentication) for details on rate limits and monthly quotas.
## Request tracing
Every response includes an `X-Request-Id` header. Include this ID when contacting support about a specific request.
# Field projection
Source: https://docs.nordicfinancialnews.com/guides/field-projection
Select specific response fields to minimize payload size and speed up requests.
Use the `fields` parameter to request only the fields you need. This reduces payload size and optimizes database queries.
## Usage
Pass a comma-separated list of field names:
```bash theme={"dark"}
curl -H "Authorization: Bearer $API_KEY" \
"https://nordicfinancialnews.com/api/v1/articles?fields=id,title_en,summary_en,published_at"
```
## Available fields
### Articles
`id`, `title`, `title_en`, `summary_en`, `article_url`, `content_type`, `published_at`, `story_ids`, `source`, `companies`, `country`, `category`, `image_url`
### Stories
`id`, `title`, `summary`, `published_at`, `article_count`, `article_ids`, `country`, `category`, `topics`, `companies`
### Companies
`id`, `name`, `slug`, `ticker_symbol`, `exchange`
### Countries
`id`, `name`, `iso2_code`
### Exchanges
`id`, `name`, `mic_code`, `acronym`, `country`
Field projection is especially useful with [real-time updates](/guides/real-time-updates) to minimize bandwidth when polling frequently.
# Pagination
Source: https://docs.nordicfinancialnews.com/guides/pagination
Cursor-based pagination for stable, efficient paging through large result sets.
List endpoints use cursor-based pagination for stable results, even as new data is added.
## How it works
Every list response includes a `pagination` object:
```json theme={"dark"}
{
"articles": [...],
"pagination": {
"count": 25,
"next_cursor": "eyJpZCI6..."
}
}
```
Pass `next_cursor` as the `cursor` query parameter to fetch the next page. When `next_cursor` is `null`, you've reached the end.
```bash theme={"dark"}
# First page
curl -H "Authorization: Bearer $API_KEY" \
"https://nordicfinancialnews.com/api/v1/articles?limit=25"
# Next page
curl -H "Authorization: Bearer $API_KEY" \
"https://nordicfinancialnews.com/api/v1/articles?limit=25&cursor=eyJpZCI6..."
```
## Parameters
| Parameter | Type | Default | Description |
| --------- | ------- | ------- | -------------------------------------- |
| `limit` | integer | 25 | Results per page (1-100) |
| `cursor` | string | — | Opaque cursor from a previous response |
## Cursor types
Different endpoints use different cursor strategies for optimal ordering:
| Endpoint | Cursor based on | Default order |
| -------------------- | --------------------- | ------------- |
| Articles, Stories | `published_at` + `id` | Newest first |
| Companies, Countries | `name` + `public_id` | Alphabetical |
| Exchanges | `name` + `public_id` | Alphabetical |
Cursors are opaque and signed. Do not attempt to construct or modify them. They may change format without notice.
When using the `q` (search) parameter, cursor pagination is replaced by relevance-ranked results. The `cursor` and `q` parameters are mutually exclusive.
# Real-time updates
Source: https://docs.nordicfinancialnews.com/guides/real-time-updates
Keep a local mirror in sync using the updated_after polling pattern.
Use the `updated_after` parameter on the `/articles` and `/stories` endpoints to fetch only records that changed since your last sync.
## Polling pattern
Start with an initial timestamp (e.g. when you first synced) and update it after each successful poll.
Pass `updated_after` with your stored timestamp:
```bash theme={"dark"}
curl -H "Authorization: Bearer $API_KEY" \
"https://nordicfinancialnews.com/api/v1/articles?updated_after=2024-01-01T00:00:00Z&fields=id,title_en,summary_en,published_at"
```
Process the results, update your timestamp to the current time, then wait before polling again.
## Example
```bash cURL theme={"dark"}
LAST_SYNC="2024-01-01T00:00:00Z"
# Fetch new/updated articles since last sync
curl -H "Authorization: Bearer $API_KEY" \
"https://nordicfinancialnews.com/api/v1/articles?updated_after=$LAST_SYNC&fields=id,title_en,summary_en,published_at"
# Fetch new/updated stories since last sync
curl -H "Authorization: Bearer $API_KEY" \
"https://nordicfinancialnews.com/api/v1/stories?updated_after=$LAST_SYNC"
```
```python Python theme={"dark"}
import requests
import time
from datetime import datetime, timezone
API_KEY = "your_api_key"
BASE = "https://nordicfinancialnews.com/api/v1"
headers = {"Authorization": f"Bearer {API_KEY}"}
last_sync = "2024-01-01T00:00:00Z"
while True:
for endpoint in ["articles", "stories"]:
resp = requests.get(
f"{BASE}/{endpoint}",
headers=headers,
params={"updated_after": last_sync},
)
items = resp.json()[endpoint]
for item in items:
process(item) # your sync logic
last_sync = datetime.now(timezone.utc).isoformat()
time.sleep(60) # poll every 60 seconds
```
## How updated\_after works
When `updated_after` is set:
* **All matching results** are returned in a single response (cursor pagination is disabled)
* **Caching is disabled** since the results are time-sensitive
* Results include both newly created and updated records
Use the `fields` parameter to request only the fields you need, reducing bandwidth and response time. A 30-60 second polling interval works well for most use cases.
# Nordic Financial News API
Source: https://docs.nordicfinancialnews.com/index
Access translated Nordic business news, company data, and market stories through a REST API and MCP server.
## What you can access
Translated news articles from Nordic sources with summaries, key points, and company associations.
AI-generated clusters of related articles about the same event or topic.
Nordic company profiles with stock listings, FIGI identifiers, and exchange data.
Sweden, Norway, Denmark, Finland, and Iceland with associated exchanges and articles.
Nordic stock exchanges (XSTO, XCSE, XHEL, XOSL, XICE) with listed companies.
Full-text search across articles, stories, companies, countries, and exchanges.
## Get started
Get your API key and make your first request in minutes.
Browse all endpoints with interactive examples.
Use AI assistants and agents to explore the API and docs.
Connect AI assistants to query Nordic Financial News data.
# MCP server
Source: https://docs.nordicfinancialnews.com/model-context-protocol/index
Connect AI assistants to query Nordic Financial News data using the Model Context Protocol.
Connect your AI agents and assistants to Nordic Financial News directly using the [Model Context Protocol](https://modelcontextprotocol.io). The MCP server provides the same data as the REST API through a tool-based interface designed for LLMs.
## Endpoint
```
POST https://nordicfinancialnews.com/mcp
```
Streamable HTTP transport. All requests use `POST` with `Content-Type: application/json`.
## Authentication
The MCP server uses the same API keys as the REST API. Include a Bearer token in the `Authorization` header:
```
Authorization: Bearer YOUR_API_KEY
```
Requires a Plus or Pro plan. If you have an IP allowlist configured, make sure your AI client's IP is included.
## Setup
```bash theme={"dark"}
claude mcp add --transport http nordic-financial-news \
https://nordicfinancialnews.com/mcp \
--header "Authorization: Bearer YOUR_API_KEY"
```
Requires the `mcp-remote` npm proxy. Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):
```json theme={"dark"}
{
"mcpServers": {
"nordic-financial-news": {
"command": "npx",
"args": [
"mcp-remote",
"https://nordicfinancialnews.com/mcp",
"--header",
"Authorization: Bearer YOUR_API_KEY"
]
}
}
}
```
Requires a full restart of Claude Desktop after saving.
Add to `.cursor/mcp.json` in your project:
```json theme={"dark"}
{
"mcpServers": {
"nordic-financial-news": {
"type": "streamable-http",
"url": "https://nordicfinancialnews.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
Use any MCP client that supports Streamable HTTP transport:
| Setting | Value |
| --------- | ------------------------------------- |
| Transport | Streamable HTTP |
| Method | `POST` |
| URL | `https://nordicfinancialnews.com/mcp` |
| Header | `Authorization: Bearer YOUR_API_KEY` |
| Header | `Content-Type: application/json` |
## Quick test
Verify your API key works by listing available tools:
```bash theme={"dark"}
curl -X POST https://nordicfinancialnews.com/mcp \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","params":{},"id":1}'
```
## Example prompts
Once connected, try asking your AI assistant:
* "What are the latest news articles about Volvo?"
* "Summarize trending stories from Sweden this week"
* "Find companies listed on the Helsinki exchange"
* "Show me recent press releases from Norwegian companies"
# Resources
Source: https://docs.nordicfinancialnews.com/model-context-protocol/resources
MCP resources for priming AI assistant context with recent Nordic financial data.
The MCP server provides resources that AI assistants can read to prime their context without making tool calls. Resources are useful for giving an assistant an overview of recent activity before the user asks a question.
## Available resources
| URI | Description |
| -------------------------------- | ---------------------------------- |
| `nordic-news:///recent-articles` | 10 most recent translated articles |
| `nordic-news:///recent-stories` | 10 most recent published stories |
Resource support varies by MCP client. Not all clients read resources automatically.
## Troubleshooting
| Error | Cause | Fix |
| ----------------------------------------------------- | ------------------------------- | ---------------------------------------------------- |
| `Unauthorized: Invalid or missing API key` | Missing or invalid Bearer token | Check your API key is active and correctly formatted |
| `Unauthorized: API access not available on your plan` | Free plan | Upgrade to Plus or Pro |
| Tool not appearing | Missing scope on API key | Enable the required scope in **Settings > API Keys** |
| `Monthly API request limit exceeded` | Hit monthly limit | Wait for reset or upgrade your plan |
# Tools
Source: https://docs.nordicfinancialnews.com/model-context-protocol/tools
MCP tools available for querying Nordic Financial News data.
The MCP server exposes tools that AI assistants can call to search and retrieve Nordic financial data. Tools are filtered by your API key's scopes.
## Available tools
| Tool | Description | Required scope |
| ------------------ | ---------------------------------------------------------------------------------- | ----------------- |
| `search_articles` | Full-text search articles; filter by country, category, ticker, date, content type | `read:articles` |
| `search_stories` | Search clustered article stories | `read:stories` |
| `search_companies` | Search companies by name or ticker; filter by country, exchange | `read:companies` |
| `get_article` | Retrieve full article with translated content | `read:articles` |
| `get_story` | Retrieve story with all related articles | `read:stories` |
| `get_company` | Look up company by ID or ticker symbol | `read:companies` |
| `list_countries` | List Nordic countries with ISO2 codes | `read:countries` |
| `list_categories` | List news categories | `read:categories` |
| `list_exchanges` | List stock exchanges with MIC codes | `read:exchanges` |
| `list_watchlist` | List your followed companies | `read:watchlist` |
If a tool doesn't appear when listing tools, check that the required scope is enabled on your API key. All scopes are enabled by default.
## Tool details
### search\_articles
Search translated articles with full-text search and filters.
| Parameter | Type | Required | Description |
| ------------------ | ------- | -------- | -------------------------------------------------------- |
| `query` | string | No | Full-text search query |
| `country` | string | No | ISO 3166-1 alpha-2 code (SE, NO, DK, FI, IS) |
| `category` | string | No | Category ID |
| `ticker` | string | No | Company stock ticker |
| `content_type` | string | No | news, analysis, press\_release, market\_commentary, etc. |
| `published_after` | string | No | ISO 8601 datetime |
| `published_before` | string | No | ISO 8601 datetime |
| `limit` | integer | No | Results per page (1-100, default 25) |
### search\_stories
Search AI-generated story clusters.
| Parameter | Type | Required | Description |
| ---------- | ------- | -------- | ------------------------------------ |
| `query` | string | No | Full-text search query |
| `country` | string | No | ISO 3166-1 alpha-2 code |
| `category` | string | No | Category ID |
| `ticker` | string | No | Company stock ticker |
| `limit` | integer | No | Results per page (1-100, default 25) |
### search\_companies
Search companies by name or ticker symbol.
| Parameter | Type | Required | Description |
| ---------- | ------- | -------- | ------------------------------------ |
| `query` | string | No | Company name or ticker search |
| `country` | string | No | ISO 3166-1 alpha-2 code |
| `exchange` | string | No | Exchange MIC code (XSTO, XCSE, etc.) |
| `limit` | integer | No | Results per page (1-100, default 25) |
### get\_article
Retrieve the full details of a single article including translated content, key points, and company associations.
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | --------------------------------- |
| `id` | string | Yes | Article ID (e.g. `art_abc123def`) |
### get\_story
Retrieve a story with its full AI-generated content and related articles.
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ------------------------------- |
| `id` | string | Yes | Story ID (e.g. `sty_abc123def`) |
### get\_company
Look up a company by ID or ticker symbol.
| Parameter | Type | Required | Description |
| ------------ | ------ | -------- | --------------------------- |
| `identifier` | string | Yes | Company ID or ticker symbol |
### list\_countries, list\_categories, list\_exchanges
These tools take no required parameters and return all available entries.
| Parameter | Type | Required | Description |
| --------- | ------- | -------- | ----------------------------- |
| `limit` | integer | No | Results per page (default 25) |
# Quickstart
Source: https://docs.nordicfinancialnews.com/quickstart
Get your API key and make your first request to the Nordic Financial News API.
[Sign up](https://nordicfinancialnews.com/users/sign_up) for a Nordic Financial News account, then navigate to **Settings > API Keys** to generate your key.
API access is available on Plus and Pro plans.
```bash cURL theme={"dark"}
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://nordicfinancialnews.com/api/v1/articles?limit=5"
```
```python Python theme={"dark"}
import requests
resp = requests.get(
"https://nordicfinancialnews.com/api/v1/articles",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"limit": 5},
)
data = resp.json()
print(data["articles"][0]["title_en"])
```
```ruby Ruby theme={"dark"}
require "net/http"
require "json"
uri = URI("https://nordicfinancialnews.com/api/v1/articles?limit=5")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer YOUR_API_KEY"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(req)
end
data = JSON.parse(res.body)
puts data["articles"].first["title_en"]
```
```javascript JavaScript theme={"dark"}
const resp = await fetch(
"https://nordicfinancialnews.com/api/v1/articles?limit=5",
{
headers: { Authorization: "Bearer YOUR_API_KEY" },
}
);
const data = await resp.json();
console.log(data.articles[0].title_en);
```
Every list endpoint returns a resource array (e.g. `articles`, `stories`) along with pagination cursors. Use the `cursor` parameter to page through results.
```json Example response theme={"dark"}
{
"articles": [
{
"id": "art_abc123def",
"title": "Volvo rapporterar rekordvinst",
"title_en": "Volvo reports record profit",
"summary_en": "Volvo Group reported record quarterly profit...",
"content_type": "news",
"published_at": "2024-06-15T10:30:00Z",
"country": "SE",
"companies": [
{ "id": "comp_volvo123", "name": "Volvo Group", "ticker_symbol": "VOLV-B.ST" }
]
}
],
"pagination": {
"count": 5,
"next_cursor": "eyJpZCI6..."
}
}
```
## Next steps
Learn about API keys, scopes, and rate limits.
Browse all endpoints with interactive examples.