Hop til indhold
Hvor bruges pengene
Beta

API og embed-widgets

Offentligt JSON-API og fær­dig­byggede embed-widgets til journalister, forskere og udviklere der vil bygge oven på data fra danskepenge.dk.21 dokumenterede endpoints, 3 plug-and-play widgets, CORS-åbnet, gratis at bruge.

1. Sådan kommer du i gang

Inden du går i gang

Bedste indsats hobby-projekt. Brug rå data fra DST eller Eurostat hvis du har brug for SLA og garantier.

  • Authentication. Ingen. Alle endpoints er åbne. Du behøver hverken nøgle, login eller registrering.
  • CORS. Alle endpoints sender Access-Control-Allow-Origin: *, så de kan kaldes direkte fra en browser-app uden proxy. OPTIONS preflight understøttes.
  • Cache. Hvert respons har Cache-Control: public, max-age=3600, s-maxage=3600, stale-while-revalidate=86400. Data opdateres dagligt på build-time.
  • Rate limit. Ikke håndhævet i kode, men hold dig under ~60 requests/minut pr. IP. Brug for større dumps? Hent JSON-eksporterne direkte fra GitHub-repoet.
  • Format. Hver respons er pretty-printed JSON med UTF-8 charset. Beløb er i mio. DKK i løbende priser, med mindre andet er angivet i feltnavnet (fx mio_dkk_real_2023 for real-pris).
  • Konvolut. Alle 2xx-responses indeholder licens, kilde, api_version, genereret (ISO 8601) og dokumentation ovenpå selve datasættet.
  • Licens.CC BY 4.0. Krediter “ danskepenge.dk + DST + Eurostat” ved videregivelse, evt. med link til den konkrete kilde-tabel.
  • Stabilitet. Hobby-projekt, ingen SLA på oppetid eller skema. api_version-feltet vil bumpes hvis brydende ændringer er nødvendige.

Første kald (curl)

Tjek at det virker, og se hvilke kilde-tabeller der findes.

curl https://DOMAIN/api/meta | jq '.meta.kilder[] | {tabel, antal_raekker}'

2. Code-eksempler

Tre korte snippets der dækker de mest typiske use-cases. Erstat DOMAIN med det aktuelle domæne (se /api/meta for current canonical URL).

Python (requests)

Hent alle 98 kommuner med headline-tal og print top 5.

import requests

# Hent alle 98 kommuner med headline-tal for seneste år
r = requests.get("https://DOMAIN/api/kommuner", timeout=15)
r.raise_for_status()
data = r.json()

print(f"{data['antal']} kommuner, opdateret {data['genereret']}")
for k in data["kommuner"][:5]:
    pr_capita = k["total_aar_dkk_per_indbygger"]
    print(f"{k['kommune']:20s} {pr_capita:>8,} kr/indbygger")

JavaScript / TypeScript (fetch)

Find sundhedssektorens seneste tal. Virker i browser, Node 18+ og Deno.

// Browser eller Node 18+ (fetch er global)
const res = await fetch("https://DOMAIN/api/sektorer");
const payload = await res.json();

// Find sektoren "Sundhed" og sidste år i tidsserien
const sundhed = payload.data.sektorer.find(s => s.sektor === "Sundhed");
const seneste = sundhed.serie.at(-1);

console.log(`Sundhed brugte ${seneste.mio_dkk_nominal} mio. kr. i ${seneste.aar}`);

Python + pandas (analyse)

Læs aktstykker ind som DataFrame og find de 10 dyreste.

import pandas as pd
import requests

# Aktstykker 2020-2025 som DataFrame
r = requests.get("https://DOMAIN/api/aktstykker?limit=200", timeout=30)
aktstykker = r.json()["aktstykker"]
df = pd.DataFrame(aktstykker)

# Top-10 dyreste aktstykker
top = (
    df.dropna(subset=["beloeb_mio_dkk_parsed_fra_titel"])
      .sort_values("beloeb_mio_dkk_parsed_fra_titel", ascending=False)
      .head(10)
)
print(top[["nummer", "ministerium", "titel", "beloeb_mio_dkk_parsed_fra_titel"]])

3. Endpoints

21 dokumenterede GET-endpoints. Alle returnerer JSON, alle har CORS, alle er versioneret som v1.

GET
/api/meta

Build-tidspunkt, kildetabeller, freshness pr. kilde og oversigt over alle endpoints.

curl

curl https://DOMAIN/api/meta

Eksempel-respons (forkortet)

{
  "endpoint": "/api/meta",
  "meta": {
    "bygget_kl": "2026-05-23T14:25:16+00:00",
    "aar_fra": 2010,
    "aar_til": 2024,
    "kilder": [
      {
        "tabel": "fact_actual",
        "antal_raekker": 319485
      }
    ]
  },
  "licens": "CC BY 4.0",
  "kilde": "danskepenge.dk + DST + Eurostat"
}
GET
/api/sektorer

Alle 8 statslige sektorer (gruppering af ministerier) med tidsserie 2010-2023.

curl

curl https://DOMAIN/api/sektorer

Eksempel-respons (forkortet)

{
  "endpoint": "/api/sektorer",
  "antal": 8,
  "data": {
    "enhed_beloeb": "mio DKK",
    "sektorer": [
      {
        "sektor": "Sundhed",
        "ministerier_canonical": [
          "Indenrigs- og Sundhedsministeriet"
        ],
        "serie": [
          {
            "aar": 2023,
            "mio_dkk_nominal": 13139.7,
            "dkk_per_indbygger_real_2023": 2214.7
          }
        ]
      }
    ]
  }
}
GET
/api/kommuner

Liste over alle 98 danske kommuner med headline-tal for 2023 (drift, anlæg, total, kr/indbygger).

curl

curl https://DOMAIN/api/kommuner

Eksempel-respons (forkortet)

{
  "endpoint": "/api/kommuner",
  "antal": 98,
  "kommuner": [
    {
      "slug": "koebenhavn",
      "kommune": "København",
      "region": "Hovedstaden",
      "befolkning_aar": 644431,
      "total_aar_mio_dkk": 56789.1,
      "total_aar_dkk_per_indbygger": 88123,
      "detalje_url": "/api/kommuner/koebenhavn"
    }
  ]
}
GET
/api/kommuner/{slug}

Detalje for en kommune: hovedkonto-fordeling 2023, tidsserie 2014-2023, og peer-kommuner.

curl

curl https://DOMAIN/api/kommuner/aarhus

Eksempel-respons (forkortet)

{
  "endpoint": "/api/kommuner/aarhus",
  "data": {
    "kommune": "Aarhus",
    "region": "Midtjylland",
    "befolkning_aar": 359268,
    "total_aar_mio_dkk": 28456,
    "hovedkonti_aar": [
      {
        "kode": "5",
        "navn": "Sociale opgaver og beskæftigelse",
        "total_mio_dkk": 11200
      }
    ],
    "peers_befolkning": [
      "aalborg",
      "odense"
    ]
  }
}
GET
/api/funktioner

Katalog over kommunale autoritetskonto-funktioner (folkeskoler, daginstitutioner, aeldrepleje m.v.).

curl

curl https://DOMAIN/api/funktioner

Eksempel-respons (forkortet)

{
  "endpoint": "/api/funktioner",
  "antal": 11,
  "funktioner": [
    {
      "slug": "folkeskoler",
      "kode": "3.22.01",
      "navn": "Folkeskoler",
      "hovedkonto": "3 Undervisning og kultur",
      "detalje_url": "/api/funktioner/3.22.01"
    }
  ]
}
GET
/api/funktioner/{kode}

Historisk drift/anlæg-serie for en kommunal funktion på landsplan. Accepterer både kode (3.22.01) og slug (folkeskoler).

curl

curl https://DOMAIN/api/funktioner/3.22.01

Eksempel-respons (forkortet)

{
  "endpoint": "/api/funktioner/3.22.01",
  "katalog": {
    "kode": "3.22.01",
    "navn": "Folkeskoler"
  },
  "data": {
    "kode": "3.22.01",
    "enhed": "mio. kr. i løbende priser",
    "serie": [
      {
        "aar": 2023,
        "drift_mio_dkk_nominal": 58234.1,
        "anlaeg_mio_dkk_nominal": 2103.5,
        "total_mio_dkk_nominal": 60337.6,
        "dkk_per_indbygger_nominal": 10164
      }
    ]
  }
}
GET
/api/aktstykker

Pagineret liste af aktstykker fra Folketinget (ODA) 2020-2025, med filtre.

Query-parametre

  • tema (ukraine|covid|energi|klima|mink|andet) Filter på tema.
  • aar (int) Afgoerelses-aar (fx 2023).
  • minister (string) Substring i ministerium-navn.
  • min_mio (float) Minimum beloeb i mio. DKK.
  • q (string) Fritekstsoegning i titel.
  • limit (int (max 200, default 50)) Antal pr side.
  • offset (int) Start-index.

curl

curl "https://DOMAIN/api/aktstykker?tema=ukraine&aar=2023&limit=10"

Eksempel-respons (forkortet)

{
  "endpoint": "/api/aktstykker",
  "filtre": {
    "tema": "ukraine",
    "aar": 2023
  },
  "paginering": {
    "offset": 0,
    "limit": 10,
    "total": 42,
    "naeste_offset": 10
  },
  "aktstykker": [
    {
      "aktstykke_id": 123,
      "nummer": "Akt. 45",
      "ministerium": "Forsvarsministeriet",
      "afgoerelsesdato": "2023-04-12",
      "titel": "Donation af militaert materiel til Ukraine på 1.200 mio. kr.",
      "beloeb_mio_dkk_parsed_fra_titel": 1200,
      "tema": "ukraine"
    }
  ]
}
GET
/api/skatter

Skatter og afgifter fra DST SKAT: level-1 hovedkategorier + top 15 enkeltskatter, 2010-2024.

curl

curl https://DOMAIN/api/skatter

Eksempel-respons (forkortet)

{
  "endpoint": "/api/skatter",
  "kategorier": {
    "total_pr_aar": [
      {
        "aar": 2024,
        "mia_dkk_nominal": 1333.65
      }
    ],
    "kategorier": [
      {
        "kategori": "1. Indkomstskatter i alt",
        "serie": [
          {
            "aar": 2024,
            "mia_dkk_nominal": 909.94
          }
        ]
      }
    ]
  },
  "top_skatter": {
    "skatter": [
      {
        "type_kode": "1.1.3.",
        "type_label": "1.1.3. Kommunal indkomstskat",
        "serie": [
          {
            "aar": 2024,
            "mia_dkk_nominal": 314.94
          }
        ]
      }
    ]
  }
}
GET
/api/skatter/maanedlig

Maanedlig og kvartalsvis skatte-provenu fra DST. Giver sæsonmønstre og friskeste tal.

curl

curl https://DOMAIN/api/skatter/maanedlig

Eksempel-respons (forkortet)

{
  "endpoint": "/api/skatter/maanedlig",
  "data": {
    "kilde": "DST",
    "enhed": "mio. kr.",
    "perioder_maaned": [
      {
        "periode": "2024M12",
        "beloeb_mio_dkk": 112345.6
      }
    ],
    "perioder_kvartal": [
      {
        "periode": "2024K4",
        "beloeb_mio_dkk": 345678.9
      }
    ]
  }
}
GET
/api/folkeskoler

Komplet liste over danske folkeskoler (ca. 2.667 skoler) med elevtal-serie, adresse og geo-koordinater.

curl

curl https://DOMAIN/api/folkeskoler

Eksempel-respons (forkortet)

{
  "endpoint": "/api/folkeskoler",
  "data": {
    "antal_skoler": 2667,
    "aar_elevtal_seneste": 2025,
    "skoler": [
      {
        "inst_nr": "545016",
        "navn": "10. klasse Aabenraa",
        "kommune": "Aabenraa",
        "kommune_slug": "aabenraa",
        "elevtal_seneste": 110
      }
    ]
  }
}
GET
/api/folkeskoler/{kommuneSlug}

Folkeskoler i én kommune med fuld detalje (elevtal-serie, adresse, geo, kontakt).

curl

curl https://DOMAIN/api/folkeskoler/aarhus

Eksempel-respons (forkortet)

{
  "endpoint": "/api/folkeskoler/aarhus",
  "kommune": "Aarhus",
  "antal_skoler": 47,
  "samlet_elevtal_seneste": 29850,
  "skoler": [
    {
      "inst_nr": "751001",
      "navn": "Skåde Skole",
      "elevtal_seneste": 612
    }
  ]
}
GET
/api/kommuner/{slug}/funktioner

Top autoritetskonto-funktioner for én kommune med drift, anlæg og andel, samt tidsserie hvor tilgængelig.

curl

curl https://DOMAIN/api/kommuner/aarhus/funktioner

Eksempel-respons (forkortet)

{
  "endpoint": "/api/kommuner/aarhus/funktioner",
  "kommune": "Aarhus",
  "aar": 2024,
  "total_mio_dkk": 28456,
  "top_funktioner": [
    {
      "kode": "3.22.01",
      "navn": "Folkeskoler",
      "drift_mio_dkk": 2103.4,
      "anlaeg_mio_dkk": 56.8,
      "total_mio_dkk": 2160.2,
      "andel_pct": 7.6
    }
  ]
}
GET
/api/velfaerd

Samlet velfaerds-snapshot: daginstitutioner, aeldrepleje, boligstoette og kommunal sundhed.

curl

curl https://DOMAIN/api/velfaerd

Eksempel-respons (forkortet)

{
  "endpoint": "/api/velfaerd",
  "data": {
    "daginstitutioner": {
      "aar": 2024,
      "kommuner": []
    },
    "aeldrepleje": {
      "aar": 2024,
      "kommuner": []
    },
    "boligstoette": {
      "aar": 2024,
      "kommuner": []
    },
    "sundhed_kommunal": {
      "aar": 2024,
      "kommuner": []
    }
  }
}
GET
/api/folkepension

Folkepensionister per kommune med tidsserie 2021-seneste, vækst og national total.

curl

curl https://DOMAIN/api/folkepension

Eksempel-respons (forkortet)

{
  "endpoint": "/api/folkepension",
  "data": {
    "antal_kommuner": 98,
    "kommuner": [
      {
        "kommune": "Aabenraa",
        "seneste_aar": 2025,
        "antal_folkepensionister_seneste": 13162,
        "vaekst_pct_2021_seneste": 3.16
      }
    ]
  }
}
GET
/api/demografi

Befolkningsfremskrivning fra DST: national og regional, opdelt på aldersbaand.

curl

curl https://DOMAIN/api/demografi

Eksempel-respons (forkortet)

{
  "endpoint": "/api/demografi",
  "data": {
    "kilde_national": "DST FRDK124",
    "aar_fra": 2025,
    "aar_til": 2060,
    "aldersbaand": [
      "0-5",
      "6-16",
      "17-66",
      "67-79",
      "80+"
    ],
    "national": []
  }
}
GET
/api/anlaeg

Liste over store offentlige anlægsprojekter (statslige investeringer, infrastruktur, byggeri).

curl

curl https://DOMAIN/api/anlaeg

Eksempel-respons (forkortet)

{
  "endpoint": "/api/anlaeg",
  "data": {
    "aar": 2024,
    "projekter": [
      {
        "navn": "Femern-forbindelsen",
        "beloeb_mia_dkk": 55.1,
        "status": "I gang"
      }
    ]
  }
}
GET
/api/kl-benchmark

KL benchmark-noegletal per kommune (drift, anlæg, service-niveau). Bruges til sammenligning på tværs.

curl

curl https://DOMAIN/api/kl-benchmark

Eksempel-respons (forkortet)

{
  "endpoint": "/api/kl-benchmark",
  "data": {
    "aar": 2024,
    "kilde": "Kommunernes Landsforening (KL)",
    "metrics": [
      "drift_pr_indbygger",
      "anlaeg_pr_indbygger"
    ],
    "kommuner": []
  }
}
GET
/api/aktstykker/temaer

Tematiske totaler for aktstykker: samlede beloeb per tema (ukraine, covid, energi, klima, mink) og per aar.

curl

curl https://DOMAIN/api/aktstykker/temaer

Eksempel-respons (forkortet)

{
  "endpoint": "/api/aktstykker/temaer",
  "data": {
    "aar_fra": 2020,
    "aar_til": 2025,
    "temaer": {
      "ukraine": 18500,
      "covid": 87000,
      "energi": 12300
    },
    "pr_aar": [
      {
        "aar": 2023,
        "ukraine": 6200,
        "covid": 1500
      }
    ]
  }
}
GET
/api/ledighed
Rå JSON (ingen envelope)

Ledighedsdata per kommune med 24-mdrs tidsserie. Raa JSON uden envelope; bruges af /ledighed-siden til lazy-load.

curl

curl https://DOMAIN/api/ledighed

Eksempel-respons (forkortet)

{
  "seneste_periode": "2025M10",
  "kilde": "DST AUS08",
  "kommuner": [
    {
      "kommune": "Aarhus",
      "ledighedsprocent_seneste": 3.4,
      "serie": [
        {
          "periode": "2025M10",
          "ledighedsprocent": 3.4
        }
      ]
    }
  ]
}
GET
/api/boligpriser
Rå JSON (ingen envelope)

Boligpriser per kommune (kvm-pris, hus/lejlighed-fordeling). Raa JSON uden envelope; bruges af /boligpriser-siden.

curl

curl https://DOMAIN/api/boligpriser

Eksempel-respons (forkortet)

{
  "kilde": "DST EJEN77",
  "seneste_aar": 2025,
  "kommuner": [
    {
      "kommune": "Aarhus",
      "kvm_pris_hus_seneste": 32450,
      "kvm_pris_lejlighed_seneste": 38120
    }
  ]
}
GET
/api/search-index
Rå JSON (ingen envelope)

Statisk søge-index der driver Cmd/Ctrl+K-dialogen i headeren. Raa JSON-array uden envelope. Indeholder kommuner, funktioner, sektorer og aktstykker.

curl

curl https://DOMAIN/api/search-index

Eksempel-respons (forkortet)

[
  {
    "type": "kommune",
    "navn": "Aarhus",
    "slug": "aarhus",
    "href": "/kommune/aarhus"
  },
  {
    "type": "funktion",
    "navn": "Folkeskoler",
    "kode": "3.22.01",
    "href": "/funktion/folkeskoler"
  }
]

4. Embed-widgets

Færdig-stylede mini-visualiseringer, beregnet til at blive indlejret med et <iframe> på en artikel, blog eller dashboard. Faste dimensioner, ingen JS-runtime hos klienten, ingen tracking. Hver widget er en self-contained HTML side på /embed/... og kan også åbnes direkte i browseren.

Generelle regler

  • Tilgængelig via <iframe> på enhver side. Ingen X-Frame-Options blokering.
  • Brug loading="lazy" hvis widget'en er under fold, så den ikke koster initial load-tid.
  • Faste dimensioner gør at indholdet ikke shifter under load (CLS-venligt). Brug de angivne width/height præcist.
  • Links inde i widget'en åbner i _top-target, så de erstatter artikel-siden (ikke i en mini-iframe).
  • Widgets er ikke indekseret af søgemaskiner (noindex) for at undgå duplicate content.
Widget
/embed/kommune/{slug}?metric=total640×180 px

Kommune-hovedtal

Mini-card med en kommunes nøgletal (befolkning, samlet udgift, region) og link til den fulde kommune-side. Skift mellem hovedtal via ``metric``-query (``total``, ``per_capita``, ``drift``, ``anlaeg``).

Iframe-snippet

<iframe src="https://DOMAIN/embed/kommune/aarhus?metric=total" width="640" height="180" frameborder="0" loading="lazy" title="Aarhus kommune - hovedtal fra danskepenge.dk"></iframe>

Live preview

Klik for at åbne widget'en direkte: /embed/kommune/aarhus?metric=total

Widget
/embed/sektorer640×320 px

Sektor-fordeling

Rangeret bar-chart over de 8 statslige sektorer (Social, Sundhed, Forsvar, m.fl.) i 2023, med andel og milliarder kr.

Iframe-snippet

<iframe src="https://DOMAIN/embed/sektorer" width="640" height="320" frameborder="0" loading="lazy" title="Statens udgifter fordelt på sektorer - danskepenge.dk"></iframe>

Live preview

Klik for at åbne widget'en direkte: /embed/sektorer

Widget
/embed/aktstykker/temaer640×240 px

Aktstykker, tematiske totaler

Fem tema-cards (Ukraine, COVID, energi, klima, mink) med samlet bevilling og antal aktstykker for perioden 2020-2025.

Iframe-snippet

<iframe src="https://DOMAIN/embed/aktstykker/temaer" width="640" height="240" frameborder="0" loading="lazy" title="Aktstykker bevilget pr. tema - danskepenge.dk"></iframe>

Live preview

Klik for at åbne widget'en direkte: /embed/aktstykker/temaer

5. Fejlrespons

Standardformat ved 404/400/500. status matcher HTTP-status. hint kan medfølge med forslag til hvordan klienten kan rette kaldet.

{
  "fejl": "Kommune 'xyz' findes ikke.",
  "status": 404,
  "hint": "Hent listen via /api/kommuner og brug 'slug'-feltet.",
  "licens": "CC BY 4.0",
  "kilde": "danskepenge.dk + DST + Eurostat",
  "api_version": "v1",
  "dokumentation": "/api"
}

6. Kontakt og kildekode

Spotter du fejl i tallene? Åbn et issue på repoet eller kontakt Casper Abel direkte. Hele pipelinen (Python + DuckDB) og denne webapp ligger som open source på GitHub. Pull requests er meget velkomne, særligt på nye datakilder.

Bruger du API'et eller en widget i en artikel? Send gerne et link, så føjer jeg det til en “set i naturen”-liste.