API og embed-widgets
Offentligt JSON-API og færdigbyggede 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.
Indhold
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.OPTIONSpreflight 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_2023for real-pris). - Konvolut. Alle 2xx-responses indeholder
licens,kilde,api_version,genereret(ISO 8601) ogdokumentationovenpå 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.
/api/metaBuild-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"
}/api/sektorerAlle 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
}
]
}
]
}
}/api/kommunerListe 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"
}
]
}/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"
]
}
}/api/funktionerKatalog 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"
}
]
}/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
}
]
}
}/api/aktstykkerPagineret 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"
}
]
}/api/skatterSkatter 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
}
]
}
]
}
}/api/skatter/maanedligMaanedlig 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
}
]
}
}/api/folkeskolerKomplet 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
}
]
}
}/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
}
]
}/api/kommuner/{slug}/funktionerTop 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
}
]
}/api/velfaerdSamlet 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": []
}
}
}/api/folkepensionFolkepensionister 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
}
]
}
}/api/demografiBefolkningsfremskrivning 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": []
}
}/api/anlaegListe 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"
}
]
}
}/api/kl-benchmarkKL 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": []
}
}/api/aktstykker/temaerTematiske 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
}
]
}
}/api/ledighedLedighedsdata 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
}
]
}
]
}/api/boligpriserBoligpriser 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
}
]
}/api/search-indexStatisk 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/heightpræ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.
/embed/kommune/{slug}?metric=total640×180 pxKommune-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
/embed/sektorer640×320 pxSektor-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
/embed/aktstykker/temaer640×240 pxAktstykker, 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.