πŸ”Œ National API Catalog

Standardized, discoverable APIs transforming government services into composable building blocks

What It Is

A National API Catalog is a centralized registry where government agencies publish machine-readable API specifications for their digital services. Instead of humans navigating web portals to request services, software systems discover, understand, and invoke services programmatically through standardized APIs.

Vision: Every public serviceβ€”tax filing, business registration, health records, permitsβ€”becomes an API. Third-party developers build citizen-facing apps, AI agents orchestrate multi-service workflows, and government systems integrate seamlessly. "Government as a Platform."

This isn't just REST endpoints. It's a semantic API layer where:

Technical Architecture

Core Components

Component Technology Purpose
API Registry OpenAPI 3.1 specs, AsyncAPI for events Centralized catalog of all government APIs
API Gateway Kong, Apigee, AWS API Gateway Routing, rate limiting, authentication, monitoring
Developer Portal Swagger UI, Redocly, custom React app Human-readable docs, sandbox environments, API keys
Identity Provider OAuth 2.0, OpenID Connect, DID Auth Authenticate API consumers (apps, agents, citizens)
Semantic Linker JSON-LD contexts, SHACL validators Link API schemas to national data models
Analytics Dashboard Grafana, ELK stack Track API usage, errors, performance metrics
SLA Monitor Prometheus, PagerDuty Alert on SLA breaches (uptime, latency)

API Catalog Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ National API Catalog (api.suomi.fi) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ API PROVIDERS (Agencies) β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Tax Office β”‚ β”‚ DVV β”‚ β”‚ Kela β”‚ β”‚ β”‚ β”‚ (Vero API) β”‚ β”‚ (Pop. Reg) β”‚ β”‚ (Benefits) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ Publish β”‚ Publish β”‚ Publish β”‚ β”‚ β”‚ OpenAPI β”‚ OpenAPI β”‚ OpenAPI β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ API Registry β”‚ β”‚ - OpenAPI specs β”‚ β”‚ - Semantic links β”‚ β”‚ - Rate limits β”‚ β”‚ - SLA terms β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β” β”‚ API β”‚ β”‚ Developer β”‚ β”‚ Semantic β”‚ β”‚ Gateway β”‚ β”‚ Portal β”‚ β”‚ Validatorβ”‚ β”‚ (Routing) β”‚ β”‚ (Sandbox) β”‚ β”‚ (SHACL) β”‚ β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ Authenticated requests β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ API CONSUMERS β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Mobile App β”‚ β”‚ AI Agent β”‚ β”‚ 3rd-Party β”‚ β”‚ β”‚ β”‚ (Citizen) β”‚ β”‚ (Orchestr.) β”‚ β”‚ Service β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ Flow: 1. Agencies publish OpenAPI specs to registry 2. Developers browse catalog, generate API clients 3. Consumers authenticate (OAuth), call APIs via gateway 4. Gateway enforces rate limits, logs usage 5. Analytics track API health (uptime, latency, errors)

API Standards & Specifications

OpenAPI 3.1 (Swagger)

All APIs must provide an OpenAPI specificationβ€”a machine-readable description of endpoints, parameters, authentication, and data schemas. This enables automatic client generation and validation.

# Example: Tax Office API (vero.fi/api/openapi.yaml) openapi: 3.1.0 info: title: Finnish Tax Office API version: 1.0.0 description: Access tax records, file returns, retrieve tax cards contact: name: Tax Office API Team email: api@vero.fi servers: - url: https://api.vero.fi/v1 security: - oauth2: - tax.read - tax.write paths: /taxpayers/{hetu}/tax-card: get: summary: Retrieve tax card for a taxpayer operationId: getTaxCard parameters: - name: hetu in: path required: true schema: type: string pattern: '^\d{6}[-+A]\d{3}[0-9A-Z]$' description: Finnish personal identity code responses: '200': description: Tax card retrieved successfully content: application/json: schema: $ref: '#/components/schemas/TaxCard' example: hetu: "010190-900C" taxPercentage: 18.5 additionalPercentage: 0 validFrom: "2026-01-01" validTo: "2026-12-31" '404': description: Taxpayer not found '403': description: Unauthorized (missing consent or scope) components: schemas: TaxCard: type: object properties: hetu: type: string description: Personal identity code taxPercentage: type: number format: float description: Main tax withholding percentage additionalPercentage: type: number format: float validFrom: type: string format: date validTo: type: string format: date required: - hetu - taxPercentage - validFrom - validTo

Semantic API Design

APIs are linked to national data models via JSON-LD contexts. This ensures interoperability: different agencies use the same vocabulary for "address," "person," "company."

# API response with semantic annotations (JSON-LD) { "@context": "https://tietomallit.suomi.fi/contexts/person/v1", "@type": "Person", "id": "urn:person:010190-900C", "name": { "@type": "FullName", "givenName": "Matti", "familyName": "MeikΓ€lΓ€inen" }, "address": { "@type": "PostalAddress", "streetAddress": "Mannerheimintie 5", "postalCode": "00100", "addressLocality": "Helsinki", "addressCountry": "FI" } } # Benefit: AI agents can understand this structure without custom parsing # Same vocabulary used by DVV, Kela, Tax Office β†’ automatic interoperability

Authentication & Authorization

Method Use Case Example
OAuth 2.0 (User Delegation) Citizen authorizes app to access their data Mobile app fetches user's tax card (with consent)
Client Credentials (M2M) System-to-system integration (no user) Payroll system queries tax office API automatically
API Keys Public data APIs (no sensitive data) Weather data, public transport schedules
DID Auth Verifiable credential holders authenticate Company proves registration certificate to access B2B API

Key Service APIs

Citizen Services

API Provider Capabilities
Tax Card API Vero (Tax Office) Fetch tax card, update prepayment, file corrections
Population Register API DVV Address lookup, family relations, birth/death registration
Benefits API Kela Check eligibility, apply for benefits, track status
Healthcare API Kanta (National Health Archive) Fetch prescriptions, lab results, patient records (consent-based)
Education Credentials API Universities, schools Fetch degrees, transcripts, certificates as VCs

Business Services

API Provider Capabilities
Company Register API PRH Register company, update details, fetch certificates
VAT Registration API Vero Register for VAT, file returns, check VAT number validity
Customs Declaration API Tulli (Customs) Submit declarations, check clearance status, pay duties
Permits & Licenses API Various regulators Apply for permits (construction, food handling, etc.)
Public Procurement API Hilma Search tenders, submit bids, track awards

Example: Automated Tax Filing

Use Case: Freelancer files quarterly VAT return via accounting software.

Traditional: Log into Vero portal, manually enter revenue, expenses β†’ submit form.

With API:
  1. Accounting software (e.g., Procountor) aggregates transactions
  2. Software calls POST /vat/returns (Vero API) with structured data
  3. Vero API validates submission β†’ returns confirmation ID
  4. User receives notification: "VAT return filed successfully"
  5. Zero manual data entry, automatic submission before deadline
Result: Compliance becomes automaticβ€”software handles filing, alerts on issues.

API Governance & Quality

API Lifecycle Management

Stage Activities Governance
Design Define endpoints, schemas, error codes API design review board approves spec
Development Implement backend, generate OpenAPI spec Automated schema validation (CI/CD pipeline)
Testing Unit tests, integration tests, contract tests 100% test coverage for public APIs
Publication Register in API catalog, publish docs SLA commitment (uptime, latency, rate limits)
Versioning Deprecate old versions, migrate consumers 12-month deprecation notice, backward compatibility
Monitoring Track usage, errors, performance Alert on SLA breaches, publish uptime reports

API Design Principles

Mandatory Standards (Finland):
  • REST: Resource-based URLs, HTTP verbs (GET, POST, PUT, DELETE)
  • JSON: Default format (XML optional for legacy)
  • Semantic alignment: Use tietomallit.suomi.fi vocabularies
  • OAuth 2.0: Standard authentication (no custom auth)
  • OpenAPI 3.x: Machine-readable spec required
  • HTTPS only: TLS 1.3, no plain HTTP
  • Rate limiting: Transparent limits (e.g., 100 req/min)
  • Error codes: Standard HTTP status + semantic error messages

Developer Experience (DX)

# Good DX Example: Developer journey 1. Visit api.suomi.fi (national API catalog) 2. Browse services: "Population Register API" 3. Read OpenAPI spec β†’ understand endpoints 4. Register app β†’ receive OAuth client credentials 5. Try sandbox: curl -H "Authorization: Bearer {token}" \ https://api-sandbox.dvv.fi/v1/persons/010190-900C 6. Receive test data β†’ validate integration 7. Move to production β†’ same API, different base URL 8. Monitor usage dashboard β†’ track quota, errors Key: Zero friction, comprehensive docs, sandbox environment
Challenge: Legacy systems don't expose APIs natively. Solution: API facade patternβ€”build a REST API gateway in front of SOAP/mainframe systems. Gradual modernization without replacing backends.

Deployment Roadmap

Phase Timeframe Deliverables
Foundation 2024-2025 API gateway deployed, first 10 APIs published (core services)
Expansion 2026 50+ APIs, developer portal live, OAuth federation operational
Semantic Layer 2027 All APIs linked to tietomallit.suomi.fi, JSON-LD adoption
Third-Party Ecosystem 2027-2028 100+ third-party apps built on gov APIs (fintech, healthtech)
AI Integration 2028+ AI agents discover and compose APIs autonomously (agentic layer)

Technical References

Back to Overview