API Reference

Call the API in one line

A read-only REST API over EU private-company registries. Every response is JSON; every error follows RFC 7807. No keys, no OAuth, no SDK to install — just HTTP.

No authentication required (preview)

The public read endpoints are open during preview. Metered API keys arrive with billing. Build now; nothing you write today will break when keys land.

Base URL

https://api.privatefinancials.eu

Quickstart

List the registries we cover, then drill into a company and its filings:

# 1 — what's covered?
curl -s https://api.privatefinancials.eu/v1/registries | jq '.[].registry'

# 2 — look up a company (NEOXX a.s., Slovakia)
curl -s https://api.privatefinancials.eu/v1/companies/SK/00603783 | jq

# 3 — its filing history (with download URLs)
curl -s "https://api.privatefinancials.eu/v1/companies/SK/00603783/filings?limit=5" | jq '.items[].document_url'

Endpoints

GET/v1/registries

List registries

The catalog of covered EU company registries, each with live company and filing counts. Start here — it tells you which jurisdictions are populated.

curl -s https://api.privatefinancials.eu/v1/registries

Response

[
  {
    "country_code": "BE",
    "registry": "be_kbo",
    "companies_count": 1000,
    "filings_count": 183,
    "last_observed_at": "2026-05-29T07:09:38Z"
  },
  {
    "country_code": "GB",
    "registry": "uk_ch",
    "companies_count": 16,
    "filings_count": 96,
    "last_observed_at": "2026-05-29T08:00:02Z"
  }
  // … one entry per registry
]
GET/v1/companies/{country}/{company_number}

Get a company

A single company by ISO-3166 alpha-2 country code and its registry company number. Country code is case-insensitive. Optional fields are null when the source registry didn't supply them.

curl -s https://api.privatefinancials.eu/v1/companies/SK/00603783

Response

{
  "country_code": "SK",
  "registry": "sk_orsr",
  "company_number": "00603783",
  "name": "NEOXX a. s.",
  "status": null,
  "status_normalized": null,
  "company_type": null,
  "incorporated_on": null,
  "registered_address": null,
  "filings_count": 60,
  "latest_filed_at": "2025-09-25T00:00:00Z",
  "external_ids": []
}
GET/v1/companies/{country}/{company_number}/filings

List a company's filings

Paginated statutory-filing history for one company, newest first. Use ?limit=N and pass the opaque next_cursor back as ?cursor= to page. Documents are returned as short-lived presigned URLs in document_url (null = metadata-only filing).

curl -s "https://api.privatefinancials.eu/v1/companies/SK/00603783/filings?limit=2"

Response

{
  "items": [
    {
      "registry": "sk_orsr",
      "source_filing_id": "11583216",
      "company_number": "00603783",
      "filing_type": "Regulatory News",
      "filed_at": "2025-09-25T00:00:00Z",
      "description": "…",
      "document_url": "https://pf-artifacts…s3.amazonaws.com/…?Signature=…",
      "document_content_type": "application/pdf"
    }
  ],
  "next_cursor": "WyIyMDI1LTA5LTI1VDAw…"
}
GET/v1/filings/{registry}/{source_filing_id}

Get a single filing

One filing by its registry slug and source filing id. document_url, when present, is a freshly-signed download link (~5 min TTL) — fetch it server-side or follow it promptly.

curl -s https://api.privatefinancials.eu/v1/filings/sk_orsr/11583216

Response

{
  "registry": "sk_orsr",
  "source_filing_id": "11583216",
  "country_code": "SK",
  "company_number": "00603783",
  "filing_type": "Regulatory News",
  "filed_at": "2025-09-25T00:00:00Z",
  "document_url": "https://pf-artifacts…s3.amazonaws.com/…?Signature=…",
  "document_content_type": "application/pdf"
}
GET/v1/health

Health check

Liveness + database reachability. Returns 200 with db status.

curl -s https://api.privatefinancials.eu/v1/health

Response

{ "status": "ok", "db": "ok", "time": "2026-05-29T07:33:38Z" }

Errors

Errors return the appropriate 4xx/5xx status with an application/problem+json body:

{
  "type": "about:blank",
  "title": "company_not_found",
  "status": 404,
  "detail": "No company for (GB, 99999999).",
  "instance": "/v1/companies/GB/99999999"
}

Coverage

Coverage is expanding registry by registry. Call /v1/registries for the authoritative, live list and per-registry counts — that endpoint is always the source of truth, not this page.