API-access — Dokumentation

REST-API för att integrera skoldata i egna system.

API-access — REST-API för skoldata

Den här tjänsten riktar sig till utvecklare och analytiker som vill integrera Skolkoll-data i egna system.

Kom igång

Portal
  1. Gå till API-nycklar i portalen
  2. Skapa en nyckel — ge den ett namn och klicka "Skapa nyckel"
  3. Kopiera nyckeln — den visas bara en gång och kan inte hämtas igen
  4. Använd nyckeln i X-API-Key-headern i alla API-anrop
curl -H "X-API-Key: sk_live_abc123" https://skolkoll.se/api/v1/schools

Endpoints

API
MetodEndpointBeskrivning
GET/api/v1/schoolsLista/sök skolor med filtrering, paginering och sortering
GET/api/v1/schools/{kod}Fullständig skoldetalj med statistik, historik och events
GET/api/v1/schools/{kod}?include=...Skoldetalj med utökade datakällor (enkät, betyg, tillsyn m.fl.)
GET/api/v1/schools/{kod}/kpisNyckeltal, historik, kvalitetsflaggor och hälsopoäng
GET/api/v1/schools/{kod}/trendsHistoriska trender med 17+ tidsserier och riktningsindikatorer
GET/api/v1/municipalitiesLista alla ~290 kommuner med grundläggande statistik
GET/api/v1/municipalities/{kod}Kommundetalj med demografi, skolstatistik och Kolada-KPI:er
GET/api/v1/municipalities/{kod}/kpisKommun-KPI:er med historik
GET/api/v1/municipalities/{kod}/deepDeep — 8 datakällor kombinerade (demografi, kolada, folkhälsa...)
GET/api/v1/municipalities/{kod}/similarHitta demografiskt liknande kommuner
GET/api/v1/municipalities/compare?codes=...Jämför 2–10 kommuner sida vid sida
GET/api/v1/providersLista huvudmän med skolantal och koncerntillhörighet
GET/api/v1/providers/{org}/schoolsSkolor under en specifik huvudman
GET/api/v1/groupsAlla skolkoncerner med dotterbolag
GET/api/v1/groups/{orgNr}/overviewKoncernöversikt med aggregat + ekonomi
GET/api/v1/gymnasium/programsGymnasieprogram med söktryck per kommun
GET/api/v1/gymnasium/programs/{code}Programdetalj: söktryck per kommun
GET/api/v1/metrics/definitionsMaskinläsbart register med KPI-definitioner
GET/api/v1/datasets/releasesArkiverade dataversioner

Autentisering och kvota

API

API:et har två nivåer beroende på om du skickar en API-nyckel:

Utan nyckelMed API-nyckel
Rate limit30 anrop/min100 anrop/min
MånadskvotaIngen10 000 anrop/månad
Kvota nollställs1:a varje månad

Alla API-svar inkluderar rate-limit-headers:

HeaderBeskrivning
X-RateLimit-LimitMax antal anrop per minut (30 eller 100)
X-RateLimit-RemainingKvarvarande anrop denna minut
X-RateLimit-ResetUnix-timestamp när fönstret nollställs
X-Quota-RemainingKvarvarande anrop denna månad (bara med nyckel)
X-Quota-ResetISO 8601-datum då månadskvoten nollställs
GET /api/v1/schools?municipality=0180&school_type=grundskola&sort=merit&per_page=50&page=2
→ { "meta": { "pagination": { "page": 2, "total_records": 248 } }, "data": [...] }

// Sparse fieldsets — hämta bara de fält du behöver:
GET /api/v1/schools?fields=namn,kommun,meritvarde_ak9&per_page=200

Skolfält — response fields för /api/v1/schools

API
Visa alla fält i skollistan
FältTypBeskrivning
skolenhetskodstringSkolverkets unika identifierare för varje skolenhet. 8 siffror för grund-/gymnasieskolor, forsk-NNNNNN (6 siffror) för förskolor. Ändras aldrig under skolans livstid. Källa: Skolverket PE API.
namnstringSkolans officiella namn enligt Skolverkets register. Kan innehålla organisationsform (t.ex. "AB" eller "stiftelse"). Källa: Skolverket PE API.
kommunstringNamnet på den kommun där skolan är belägen (inte nödvändigtvis samma som huvudmannens hemkommun). Källa: Skolverket PE API.
kommunKodstringSCB:s 4-siffriga kommunkod (t.ex. "0180" = Stockholm, "1280" = Malmö). De två första siffrorna anger län. Källa: Skolverket PE API.
lanstringLänets namn (t.ex. "Stockholms län"). Härleds från kommunkoden. Källa: Skolverket.
latnumberGPS-latitud i WGS84 (decimalgrader). Null om skolan saknar registrerad besöksadress. Källa: Skolverket PE API.
lngnumberGPS-longitud i WGS84 (decimalgrader). Null om skolan saknar registrerad besöksadress. Källa: Skolverket PE API.
huvudmanstringHuvudmannens (skolans ägare/ansvariga organisation) namn. Kan vara ett kommunnamn, ett aktiebolag, en stiftelse etc. Källa: Skolverket PE API.
huvudmanOrgNrstringHuvudmannens organisationsnummer (10 siffror, format NNNNNN-NNNN). Används som nyckel för att koppla skolor till samma ägare. Källa: Skolverket PE API.
organisationstypstringHuvudmannens typ. "kommun" = kommunal skola, "enskild" = friskola (inklusive aktiebolag, stiftelse, ekonomisk förening). Källa: Skolverket.
skolformerarrayArray av skolformer som enheten bedriver. GR = grundskola, GY = gymnasieskola, FKLASS = förskoleklass, FTH = fritidshem, SP = specialskola, SAME = sameskola, GRSAR = anpassad grundskola, GYSAR = anpassad gymnasieskola, FORSK = förskola. En enhet kan ha flera skolformer.
statusstring"AKTIV" = skolan bedriver undervisning. "INAKTIV" = skolan är vilande eller nedlagd men finns kvar i registret. Källa: Skolverket.
eleverintegerTotalt antal inskrivna elever vid senaste datainsamlingen. Inkluderar alla årskurser som skolan erbjuder. Null om data saknas eller skolan är inaktiv. Källa: Skolverket PE API, uppdateras dagligen vid sync.
larare_per_elevnumberAntal elever per heltidsanställd lärare. Lägre värde = fler lärare per elev. Rikssnitt ca 12. Null om data saknas. Källa: Skolverket, uppdateras årligen.
behoriga_larare_pctnumberAndel lärare med pedagogisk examen och ämnesbehörighet, i procent (0–100). Rikssnitt ca 72%. Null om data saknas. Källa: Skolverket, uppdateras årligen.
meritvarde_ak9numberGenomsnittligt meritvärde för avgångselever i årskurs 9. Beräknas som summan av de 16 bästa betygen x betygspoäng (A=20, B=17.5, C=15, D=12.5, E=10, F=0). Max 320 (340 med moderna språk). Rikssnitt ca 230. Null om skolan saknar åk 9 eller om data ej publicerats. Källa: Skolverket, uppdateras årligen.
quality_flagsarrayArray av kvalitetsvarningar. Varje flagga har type (t.ex. "low_cert", "declining_merit"), severity ("red" eller "yellow"), och message (förklaring). Tom array = inga varningar identifierade.
health_scorenumberSammanvägt kvalitetspoäng 0–100 baserat på datakomplethet, aktualitet och avvikelser. 100 = inga problem identifierade. Under 80 = en eller flera kvalitetsindikatorer avviker. Null för inaktiva skolor.
Visa exempelsvar — skollista

EXEMPEL Fiktivt svar — skolnamn, kommunkoder och värden är påhittade.

GET https://example.org/api/v1/schools?municipality=0000&school_type=grundskola&per_page=2

{
  "meta": {
    "pagination": {
      "page": 1,
      "per_page": 2,
      "total_records": 248,
      "total_pages": 124
    }
  },
  "data": [
    {
      "skolenhetskod": "00000000",
      "namn": "Exempelskolan AB",
      "kommun": "Exempelkommun",
      "kommunKod": "0000",
      "lan": "Exempellän",
      "lat": 59.3178,
      "lng": 18.1044,
      "huvudman": "Exempelkommun",
      "huvudmanOrgNr": "0000000000",
      "organisationstyp": "kommun",
      "skolformer": ["GR", "FKLASS", "FTH"],
      "status": "AKTIV",
      "elever": 682,
      "larare_per_elev": 11.3,
      "behoriga_larare_pct": 84.2,
      "meritvarde_ak9": 243.5,
      "quality_flags": [],
      "health_score": 92
    },
    {
      "skolenhetskod": "00000001",
      "namn": "Exempelskolan B",
      "kommun": "Exempelkommun",
      "kommunKod": "0000",
      "lan": "Exempellän",
      "lat": 59.2891,
      "lng": 18.0756,
      "huvudman": "Exempel Friskola AB",
      "huvudmanOrgNr": "0000000001",
      "organisationstyp": "enskild",
      "skolformer": ["GR", "FKLASS"],
      "status": "AKTIV",
      "elever": 928,
      "larare_per_elev": 13.7,
      "behoriga_larare_pct": 68.5,
      "meritvarde_ak9": 251.0,
      "quality_flags": [
        { "type": "low_cert", "severity": "yellow", "message": "Andel behöriga lärare under rikssnitt" }
      ],
      "health_score": 78
    }
  ]
}

Queryparametrar — /api/v1/schools

API
Visa filtrering, sortering och paginering
ParameterTypBeskrivning
municipalitystringFiltrera på SCB:s 4-siffriga kommunkod (t.ex. 0180 = Stockholm, 1280 = Malmö). Flera koder kan anges kommaseparerat.
school_typestringFiltrera på skoltyp. Accepterar både långa namn (grundskola, gymnasieskola, forskoleklass, fritidshem) och kortkoder (GR, GY, FKLASS, FTH).
providerstringFiltrera på huvudmannens organisationsnummer (10 siffror). Användbart för att hämta alla skolor under en specifik huvudman.
organizer_typestringFiltrera på organisationstyp: kommun (kommunala skolor) eller enskild (friskolor).
searchstringFritextsökning. Matchar mot skolnamn, skolenhetskod, huvudmannamn och kommunnamn. Skiftlägesokänslig.
sortstringSorteringsordning: name (standard, alfabetiskt), municipality (kommunnamn), pupils (elevantal, störst först), merit (meritvärde, högst först).
fieldsstringSparse fieldsets — kommaseparerade fältnamn (t.ex. namn,kommun,meritvarde_ak9). Minskar svarsstorlek och förbättrar prestanda. skolenhetskod inkluderas alltid.
pageintegerSidnummer (standard: 1). Svar inkluderar meta.pagination med totalt antal sidor.
per_pageintegerAntal resultat per sida (standard: 100, max: 500). Högre värden ger längre svarstider.

Skoldetalj — utökade fält (/api/v1/schools/{kod})

API

Skoldetaljen returnerar ett utökat objekt med fler fält än skollistan, inklusive adressuppgifter, statistik, historik och händelser.

Visa alla detalj-fält
FältTypBeskrivning
skolenhetskodstringSkolverkets unika identifierare. 8 siffror för grund-/gymnasieskolor, forsk-NNNNNN (6 siffror) för förskolor. Källa: Skolverket PE API.
namnstringSkolans officiella namn enligt Skolverkets register. Källa: Skolverket PE API.
kommunstringKommunens namn där skolan är belägen. Källa: Skolverket PE API.
kommunKodstringSCB:s 4-siffriga kommunkod. Källa: Skolverket PE API.
lanstringLänets namn. Härleds från kommunkoden.
lat / lngnumberGPS-koordinater i WGS84 (decimalgrader). Null om besöksadress saknas. Källa: Skolverket PE API.
huvudmanobject{ namn, orgNr, typ } — huvudmannens uppgifter. typ är "kommun" eller "enskild". orgNr är 10-siffrigt organisationsnummer. Källa: Skolverket PE API.
koncernobject|null{ namn, orgNr } — koncerntillhörighet om huvudmannen ägs av en skolkoncern (t.ex. Academedia, Kunskapsskolan). null om skolan är oberoende eller kommunal. Källa: Skolkoll koncernkatalog.
skolformerarrayArray av skolformer som enheten bedriver. Se skollistan ovan för alla kortkoder. En enhet kan ha flera skolformer samtidigt.
statusstring"AKTIV" = bedriver undervisning. "INAKTIV" = vilande eller nedlagd. Källa: Skolverket.
adressobject|null{ besoksadress, postnummer, postort } — skolans besöksadress. Null om adress saknas i registret. Källa: Skolverket PE API.
Statistik-objekt (statistik)

Statistik-objektet samlar alla numeriska nyckeltal. Alla värden kan vara null om data saknas för den aktuella skolan eller om nyckeltalet inte är relevant för skoltypen.

FältTypBeskrivning
eleverintegerTotalt antal inskrivna elever vid senaste datainsamlingen. Inkluderar alla årskurser. Null om data saknas eller skolan är inaktiv. Källa: Skolverket PE API, uppdateras dagligen vid sync.
larare_per_elevnumberAntal elever per heltidsanställd lärare. Lägre värde = fler lärare per elev. Rikssnitt ca 12 för grundskolan. Null om data saknas. Källa: Skolverket, uppdateras årligen.
behoriga_larare_pctnumberAndel lärare med pedagogisk examen och ämnesbehörighet, i procent (0–100). Rikssnitt ca 72%. Null om data saknas. Källa: Skolverket, uppdateras årligen.
meritvarde_ak9numberGenomsnittligt meritvärde för avgångselever i årskurs 9. Summan av de 16 bästa betygen x betygspoäng (A=20, B=17.5, C=15, D=12.5, E=10, F=0). Max 320 (340 med moderna språk). Rikssnitt ca 230. Null om skolan saknar åk 9 eller data ej publicerats. Källa: Skolverket, uppdateras årligen.
godkand_alla_amnen_ak6numberAndel elever i åk 6 som uppnått minst betyg E (godkänt) i alla ämnen, i procent. Mäter bredden i elevernas kunskaper. Null om skolan saknar åk 6. Källa: Skolverket, uppdateras årligen.
godkand_alla_amnen_ak9numberAndel elever i åk 9 som uppnått minst betyg E i alla ämnen, i procent. Viktig indikator för gymnasiebehörighet — elever utan E i alla ämnen riskerar att inte komma in på gymnasiet. Null om skolan saknar åk 9. Källa: Skolverket, uppdateras årligen.
np_svenska_ak9numberGenomsnittligt provbetygspoäng på nationella provet i svenska, åk 9. Skala 0–20 (A=20, B=17.5, C=15, D=12.5, E=10, F=0). Rikssnitt ca 13. Null om skolan ej rapporterat. Källa: Skolverket, uppdateras årligen.
np_matte_ak9numberGenomsnittligt provbetygspoäng på nationella provet i matematik, åk 9. Samma skala som np_svenska_ak9. Rikssnitt ca 11. Källa: Skolverket, uppdateras årligen.
np_engelska_ak9numberGenomsnittligt provbetygspoäng på nationella provet i engelska, åk 9. Samma skala. Rikssnitt ca 14. Källa: Skolverket, uppdateras årligen.
examen_inom_3_arnumberAndel gymnasieelever som tar examen inom 3 år, i procent. Gäller bara skolor med GY i skolformer. Rikssnitt ca 75%. Null om skolan inte har gymnasieelever. Källa: Skolverket, uppdateras årligen.
behorig_hogskolanumberAndel gymnasieelever med grundläggande behörighet till högskola, i procent. Gäller bara GY. Kräver examen + godkänt i Svenska 3 / Engelska 6 / Matematik 1. Rikssnitt ca 70%. Null om ej GY. Källa: Skolverket, uppdateras årligen.
Övriga fält
FältTypBeskrivning
kvalitetobjectKvalitetsdata från Skolinspektionen. Innehåller eventuella tillsynsbeslut och bedömningar. Null om Skolinspektionen inte granskat skolan nyligen.
quality_flagsarrayKvalitetsflaggor: varje element har type (t.ex. "low_cert", "declining_merit", "high_ratio"), severity ("red" = allvarlig, "yellow" = varning), field (berört fält) och message (beskrivning). Tom array = inga varningar.
health_scorenumber|nullSammanvägt kvalitetspoäng 0–100. Baseras på datakomplethet, aktualitet och avvikelser. 100 = inga problem. Under 80 = en eller flera indikatorer avviker. Null för inaktiva skolor.
historikobjectTidsserier per nyckeltal. Varje serie är en array av [år, värde]-par, t.ex. { "meritRating9": [[2019,230],[2020,235]] }. Omfattar typiskt 5–10 år beroende på datatillgänglighet.
eventsarrayHändelser kopplade till skolan, t.ex. huvudmannabyte, omorganisation eller statusändring. Varje event har type, date och description.
lankarobject{ skolkoll: "https://skolkoll.se/skola/..." } — permanentlänk till skolsidan på Skolkoll.
Visa exempelsvar — skoldetalj

EXEMPEL Fiktivt svar — skolnamn, kommunkoder och värden är påhittade.

GET https://example.org/api/v1/schools/00000000

{
  "data": {
    "skolenhetskod": "00000000",
    "namn": "Exempelskolan AB",
    "kommun": "Exempelkommun",
    "kommunKod": "0000",
    "lan": "Exempellän",
    "lat": 59.3178,
    "lng": 18.1044,
    "huvudman": {
      "namn": "Exempelkommun",
      "orgNr": "0000000000",
      "typ": "kommun"
    },
    "koncern": null,
    "skolformer": ["GR", "FKLASS", "FTH"],
    "status": "AKTIV",
    "adress": {
      "besoksadress": "Exempelgatan 1",
      "postnummer": "00000",
      "postort": "Exempelort"
    },
    "statistik": {
      "elever": 682,
      "larare_per_elev": 11.3,
      "behoriga_larare_pct": 84.2,
      "meritvarde_ak9": 243.5,
      "godkand_alla_amnen_ak6": 82.1,
      "godkand_alla_amnen_ak9": 78.5,
      "np_svenska_ak9": 14.2,
      "np_matte_ak9": 12.8,
      "np_engelska_ak9": 15.1,
      "examen_inom_3_ar": null,
      "behorig_hogskola": null
    },
    "kvalitet": null,
    "quality_flags": [],
    "health_score": 92,
    "historik": {
      "meritRating9": [[2020, 235.0], [2021, 238.2], [2022, 241.0], [2023, 243.5]],
      "certifiedTeachersPercent": [[2020, 80.1], [2021, 81.5], [2022, 83.0], [2023, 84.2]],
      "totalPupils": [[2020, 620], [2021, 645], [2022, 668], [2023, 682]]
    },
    "events": [],
    "lankar": {
      "skolkoll": "https://example.org/skola/exempelskolan-00000000/"
    }
  }
}

Enrichments (?include=)

API

Utöka skoldetaljen med extra datakällor genom att skicka ?include= som kommaseparerad lista. Returneras i ett enrichments-objekt.

// Hämta betygsfördelning och SALSA-data:
GET /api/v1/schools/12345678?include=betyg,salsa

// Hämta allt:
GET /api/v1/schools/12345678?include=all
Visa alla enrichment-typer med fältbeskrivningar
NamnDatakällaBeskrivning
enkatSkolinspektionenSkolenkäten — Skolinspektionens nationella elevenkät. Innehåller svar från elever i åk 5, åk 8 och vårdnadshavare. Varje kategori (trygghet, studiero, stimulans, bemötande m.fl.) har ett indexvärde 1–10 där 10 är bäst. Uppdateras årligen, vanligtvis på hösten. Null om skolan inte ingick i årets urval.
betygSkolverketBetygsfördelning per ämne och årskurs. Visar andelen elever med varje betygssteg (A–F) i respektive ämne. Användbart för att analysera betygsspridning och identifiera starka/svaga ämnen. Uppdateras årligen.
tillsynSkolinspektionenTillsynsbeslut och granskningsrapporter från Skolinspektionen. Innehåller beslutsdatum, typ av granskning (regelbunden tillsyn, kvalitetsgranskning, anmälningsärende) och eventuella förelägganden. Null om skolan inte granskats.
salsaSkolverket SIRISSALSA (Skolverkets Arbetsverktyg för Lokala SambandsAnalyser). Jämför skolans faktiska resultat med modellberäknade förväntade resultat baserat på elevsammansättning (föräldrars utbildningsnivå, migrationsbakgrund, kön). mr = merit-residual (positiv = skolan presterar bättre än förväntat, negativ = sämre). Källa: Skolverket SIRIS, uppdateras årligen. Null om skolan har för få elever för statistisk analys.
ekonomiBolagsverketEkonomisk data från huvudmannens årsredovisning. Kopplas via huvudmanOrgNr. Innehåller omsättning, resultat efter finansnetto, antal anställda. Gäller bara enskilda huvudmän (aktiebolag). Null för kommunala skolor. Uppdateras årligen.
scoresSkolkoll (beräknad)Förberäknade Skolkoll-scores. skolkollScore = 5-dimensionell viktad composite 0–100 (Resultat 30%, Personal 25%, Mervärde 20%, Trygghet 15%, Resurser 10%). percentiles = skolans rangordning inom sin skoltyp. radarProfile = 5 normaliserade dimensioner 0–1. warningSignals = identifierade riskindikatorer.
sprakutbudSkolverketSkolans språkutbud — vilka moderna språk (franska, spanska, tyska, kinesiska m.fl.) som erbjuds. Visar antal elever per språk. Relevant för grundskolor med åk 6–9. Null om skolan inte erbjuder moderna språk.

Alla enrichment-värden kan vara null om data saknas för den aktuella skolan. Använd include=all för att hämta samtliga på en gång.

Trender — /api/v1/schools/{kod}/trends

API

Historiska trender med upp till 17+ tidsserier, riktningsindikatorer och SALSA-residual. Användbart för att identifiera skolor med förbättrings- eller försämringstrender.

Visa response-struktur
FältTypBeskrivning
skolenhetskodstringSkolverkets unika identifierare. Källa: Skolverket PE API.
namnstringSkolans officiella namn.
trendsobjectTidsserier nycklat per mått. Varje serie är en array av [år, värde]-par, sorterade kronologiskt. Omfattar typiskt 5–10 år.
trends.meritRating9arrayMeritvärde åk 9 per år. Samma skala som meritvarde_ak9 (0–340). Null-år exkluderas.
trends.certifiedTeachersPercentarrayAndel behöriga lärare per år (0–100%). Visar hur skolans lärarkompetens utvecklats.
trends.totalPupilsarrayAntal elever per år. Visar tillväxt eller nedgång i elevunderlag.
trends.salsaResidualarraySALSA-residual per år: [år, residual, faktiskt, modell]. Positiv residual = skolan presterar bättre än förväntat givet elevsammansättning. Källa: Skolverket SIRIS.
directionobjectAutomatisk riktningsindikator per nyckeltal: "up", "down" eller "stable". Beräknas baserat på de senaste 3 datapunkterna med en tröskel på ±2 enheter.
eventsarrayHistoriska händelser (huvudmannabyte, statusändringar, omorganisationer). Varje event har type, date och description. Användbart för att kontextualisera trendbrott.
Visa exempelsvar — trender

EXEMPEL Fiktivt svar — skolnamn och värden är påhittade.

GET https://example.org/api/v1/schools/00000000/trends

{
  "data": {
    "skolenhetskod": "00000000",
    "namn": "Exempelskolan AB",
    "trends": {
      "meritRating9": [[2019, 228.0], [2020, 235.0], [2021, 238.2], [2022, 241.0], [2023, 243.5]],
      "certifiedTeachersPercent": [[2019, 76.5], [2020, 80.1], [2021, 81.5], [2022, 83.0], [2023, 84.2]],
      "totalPupils": [[2019, 580], [2020, 620], [2021, 645], [2022, 668], [2023, 682]],
      "pupilTeacherRatio": [[2019, 12.8], [2020, 12.1], [2021, 11.9], [2022, 11.5], [2023, 11.3]],
      "salsaResidual": [[2019, 5.2, 228.0, 222.8], [2020, 8.1, 235.0, 226.9], [2021, 7.4, 238.2, 230.8], [2022, 6.9, 241.0, 234.1]],
      "passAllSubjectsGrade9": [[2020, 75.2], [2021, 76.8], [2022, 77.5], [2023, 78.5]],
      "npSwedish9": [[2020, 13.5], [2021, 13.8], [2022, 14.0], [2023, 14.2]],
      "npMath9": [[2020, 11.9], [2021, 12.2], [2022, 12.5], [2023, 12.8]]
    },
    "direction": {
      "meritRating9": "up",
      "certifiedTeachersPercent": "up",
      "totalPupils": "up",
      "pupilTeacherRatio": "down",
      "salsaResidual": "stable"
    },
    "events": [
      {
        "type": "expansion",
        "date": "2020-08-01",
        "description": "Skolan utökade med nya lokaler och ökade kapaciteten med 100 platser"
      }
    ]
  }
}

Kommundetalj — /api/v1/municipalities/{kod}

API

Returnerar demografi, skolstatistik och Kolada-KPI:er för en kommun. Kolada (Kommun- och Landstingsdatabasen) är Sveriges officiella nyckeltalsdatabas för kommuner och regioner, med ca 6 000 nyckeltal som möjliggör jämförelser mellan kommuner.

Visa response-struktur
FältTypBeskrivning
kommunKodstringSCB:s 4-siffriga kommunkod (t.ex. "0180"). De två första siffrorna anger län (01 = Stockholm). Källa: SCB.
namnstringKommunens officiella namn. Källa: SCB.
lanstringLänets namn (t.ex. "Stockholms län"). Källa: SCB.
demografi.populationintegerKommunens folkmängd vid senaste mätning. Källa: SCB befolkningsstatistik, uppdateras årligen. Null aldrig — alla kommuner har befolkningsdata.
demografi.utlandsk_bakgrund_pctnumberAndel invånare med utländsk bakgrund (%), dvs. personer som är utrikes födda eller har två utrikes födda föräldrar. Rikssnitt ca 26%. Källa: SCB, uppdateras årligen.
demografi.medianinkomstnumberMedianinkomst i tusentals kronor (tkr) per år för personer 20+ år. Riksmedian ca 310 tkr. Källa: SCB inkomststatistik, uppdateras årligen.
demografi.hogutbildade_pctnumberAndel vuxna (25–64 år) med eftergymnasial utbildning (%). Rikssnitt ca 44%. Starkt korrelerat med skolresultat. Källa: SCB utbildningsregistret, uppdateras årligen.
skolor.antalintegerTotalt antal aktiva skolor (alla skolformer) i kommunen. Källa: Skolverket PE API.
skolor.grundskolorintegerAntal aktiva grundskolor i kommunen. Källa: Skolverket PE API.
skolor.gymnasieskolorintegerAntal aktiva gymnasieskolor i kommunen. Källa: Skolverket PE API.
skolor.friskoleandel_pctnumberAndel skolor med enskild huvudman (friskolor), i procent. Varierar kraftigt — från 0% i glesbygdskommuner till 50%+ i storstadsområden. Källa: Skolverket PE API.
resultat.meritvarde_snittnumberGenomsnittligt meritvärde åk 9 över alla skolor i kommunen. Viktad efter elevantal. Källa: Skolverket.
resultat.behoriga_larare_snittnumberSnittandel behöriga lärare (%) över alla skolor i kommunen. Källa: Skolverket.
resultat.kostnad_per_elevnumberKommunens totala kostnad per grundskoleelev i kronor. Rikssnitt ca 125 000 kr. Inkluderar undervisning, lokaler, skolmåltider och elevhälsa. Källa: Kolada KPI N15033.
kolada_kpiobjectSamtliga Kolada-KPI:er relevanta för utbildning, nycklat per KPI-id: { [kpiId]: { value, year } }. Kolada (Kommun- och Landstingsdatabasen) är RKA:s öppna databas med ca 6 000 nyckeltal. Se /api/v1/metrics/definitions för KPI-definitioner.
lankar.skolkollstringPermanentlänk till kommunsidan på Skolkoll.

Queryparametrar — /api/v1/municipalities

API
Visa filtrering och sortering
ParameterTypBeskrivning
countystringFiltrera på länsnamn (t.ex. Stockholm, Västra Götaland). Skiftlägesokänslig.
searchstringFritextsökning. Matchar mot kommunnamn och kommunkod. Skiftlägesokänslig.
sortstringname (standard, alfabetiskt), population (folkmängd, störst först), schools (antal skolor, flest först).

Deep kommun — /api/v1/municipalities/{kod}/deep

API

Kombinerar 8 datakällor i ett enda API-anrop — ett djupdyk i kommunens situation. Returnerar all data som finns tillgänglig om kommunen, strukturerat i separata sektioner.

Visa 8 datakällor med fältbeskrivningar
SektionDatakällaInnehåll
demografiSCBBefolkningsdata: folkmängd, åldersfördelning, inkomstnivåer, utbildningsnivå, andel med utländsk bakgrund. Nyckeln till att förstå elevunderlaget. Källa: SCB befolknings- och utbildningsregistret, uppdateras årligen.
koladaRKA/KoladaKolada-KPI:er (Kommun- och Landstingsdatabasen). Inkluderar kostnader per elev, lärartäthet, andel behöriga lärare, resultatsiffror — allt med årtal för trendanalys. Varje KPI har id, value, year. Källa: RKA, uppdateras löpande.
folkhalsaFolkhälsomyndighetenFolkhälsodata på kommunnivå: psykisk ohälsa bland unga, övervikt, fysisk aktivitet, levnadsvanor. Relevant för att förstå elevers förutsättningar bortom skolans väggar. Källa: Folkhälsomyndighetens öppna data, uppdateras vartannat år.
forskolaSkolverketFörskolans nyckeltal: antal barn per avdelning, personalens utbildningsnivå, personaltäthet (barn per årsarbetare), maxtaxa/avgifter. Källa: Skolverket, uppdateras årligen.
skolbibliotekKungliga biblioteketSkolbibliotekens resurser: bokbestånd per elev, öppettider, bemanning (skolbibliotekarie vs. volontär), digitala resurser. Källa: Kungliga biblioteket (skolbiblioteksstatistiken), uppdateras årligen.
soktryckSkolverketSöktryck till gymnasieprogram i kommunen: antal förstahandssökande, antagna per program, antagningspoäng. Visar vilka program som är populära och hur konkurrensen ser ut. Källa: Skolverket, uppdateras årligen.
skolresultatSkolkoll (aggregerat)Aggregerade skolresultat för kommunen: antal skolor per typ, snittmeritvärde, totalt elevantal, spridning mellan skolor (min/max/median). Beräknas av Skolkoll baserat på individuella skoldata.
computedSkolkoll (beräknad)Beräknade kommunindex: segregationsindex (mäter skillnaden i elevsammansättning mellan skolor), likvärdighetsindex (mäter resultatspridning), trendindex. Alla normaliserade 0–100. Beräknas av Skolkoll.

Varje sektion kan vara null om data saknas. Små kommuner saknar ibland folkhälsodata eller söktrycksdata.

Jämför kommuner — /api/v1/municipalities/compare

API

Jämför 2–10 kommuner sida vid sida. Returnerar skolresultat, Kolada-KPI:er och beräknade index per kommun. Användbart för benchmarking och kommunala jämförelser.

GET /api/v1/municipalities/compare?codes=0180,1280,1480
→ { "data": { "municipalities": {
    "0180": { "skolresultat": ..., "kolada": ..., "computed": ... },
    "1280": { ... },
    "1480": { ... }
  } } }
ParameterTypBeskrivning
codesstringKommaseparerade 4-siffriga kommunkoder, 2–10 st (t.ex. 0180,1280,1480 = Stockholm, Malmö, Göteborg). Returnerar 400 om färre än 2 eller fler än 10.

Liknande kommuner — /api/v1/municipalities/{kod}/similar

API

Hitta demografiskt liknande kommuner. Likhet beräknas som euklidiskt avstånd i ett normaliserat rum av befolkningsmängd, medianinkomst och andel utlandsfödda. Lägre distance = mer lika.

GET /api/v1/municipalities/0180/similar?limit=5
→ { "data": { "target": "0180", "similar": [
    { "kod": "1280", "namn": "Malmö", "distance": 0.42 },
    { "kod": "1480", "namn": "Göteborg", "distance": 0.58 }, ...
  ] } }
ParameterTypBeskrivning
limitintegerAntal resultat (standard: 5, max: 20). Returnerar de mest liknande kommunerna sorterat efter stigande distance.

Koncernöversikt — /api/v1/groups/{orgNr}/overview

API

Aggregerad överblick för en skolkoncern. En koncern äger en eller flera huvudmän som i sin tur driver skolor. Returnerar samlad statistik och ekonomi.

Visa response-struktur
FältTypBeskrivning
koncern.namnstringKoncernens registrerade namn (t.ex. "AcadeMedia AB"). Källa: Skolkoll koncernkatalog.
koncern.orgNrstringKoncernens organisationsnummer (moderbolagets). 10 siffror, format NNNNNN-NNNN.
skolor.antalintegerAntal aktiva skolor i koncernen (alla dotterbolag sammanräknat).
skolor.grundskolorintegerAntal aktiva grundskolor i koncernen.
skolor.gymnasierintegerAntal aktiva gymnasieskolor i koncernen.
aggregerat.snittMeritnumberGenomsnittligt meritvärde åk 9 över alla koncernens grundskolor. Viktat efter elevantal. Null om inga GR-skolor finns.
aggregerat.snittBehorighetnumberGenomsnittlig andel behöriga lärare (%) över alla skolor i koncernen. Viktat efter elevantal.
aggregerat.totalEleverintegerTotalt antal elever i alla koncernens skolor.
ekonomiobject|null{ omsattning, resultat, anstallda } — från senaste årsredovisningen. omsattning i kr. resultat = resultat efter finansnetto i kr. anstallda = antal anställda. Null om årsredovisning saknas. Källa: Bolagsverket.
kommunerarrayLista med 4-siffriga kommunkoder där koncernen har aktiva skolor. Användbart för geografisk analys av koncernens spridning.

Gymnasieprogram — /api/v1/gymnasium/programs

API

Söktryck per gymnasieprogram aggregerat från alla kommuner. Visar hur populära olika program är och examensgraden per program.

Visa response-struktur
Lista: /api/v1/gymnasium/programs
FältTypBeskrivning
programCodestringSkolverkets programkod (t.ex. "NA" = Naturvetenskap, "SA" = Samhällsvetenskap, "EK" = Ekonomi, "TE" = Teknik, "BF" = Barn och fritid). 2–4 bokstäver. Källa: Skolverket.
kommunCountintegerAntal kommuner med söktrycksdata för detta program. Högre värde = programmet erbjuds på fler platser.
nationalAvgExamnumber|nullNationellt snitt för andel elever som tar examen inom 3 år (%). Högpresterande program som NA har ofta 85%+, medan yrkesprogram kan ligga runt 65–75%. Null om data saknas.

Stöder paginering med page och per_page.

Detalj: /api/v1/gymnasium/programs/{code}
FältTypBeskrivning
programCodestringSkolverkets programkod (t.ex. "NA").
kommunCountintegerAntal kommuner med söktrycksdata.
kommunerarrayPer kommun: { kommunKod, namn, sokande, antagna, antagningspoang }. sokande = antal förstahandssökande. antagna = antal antagna. antagningspoang = lägsta antagningspoäng (meritvärde). Källa: Skolverket.

Webhooks

API

Registrera webhooks för push-notifieringar. Payloads signeras med HMAC-SHA256. Automatisk retry (3 försök) med exponentiell backoff.

MetodEndpointBeskrivning
POST/api/pro/webhooksSkapa webhook — returnerar secret (visas bara en gång)
GET/api/pro/webhooksLista alla webhooks
PATCH/api/pro/webhooks/{id}Uppdatera webhook (enable/disable, url, events)
DELETE/api/pro/webhooks/{id}Ta bort webhook
GET/api/pro/webhooks/{id}/deliveriesLeveranshistorik för en webhook

Events: school.data_changed, school.quality_alert, report.completed, export.completed, * (alla)

HMAC-verifiering: Varje webhook-leverans inkluderar headern X-Skolkoll-Signature: sha256={hmac_hex}. Signera den fullständiga JSON-bodyn med webhook-hemligheten (HMAC-SHA256) och jämför med headerns värde.

// Skapa webhook:
POST /api/pro/webhooks
{ "url": "https://example.com/hook", "events": ["school.data_changed", "export.completed"] }
→ 201 { "id": "abc", "secret": "whsec_..." }

// Verifiera signatur (Node.js):
const crypto = require("crypto");
const expected = crypto.createHmac("sha256", webhookSecret)
  .update(rawBody).digest("hex");
const valid = sig === "sha256=" + expected;

API-referens

API
Visa komplett API-referens
// Publika endpoints (alla GET):
GET    /api/v1/schools                              Lista/sök skolor
GET    /api/v1/schools/{kod}                        Skoldetalj
GET    /api/v1/schools/{kod}?include=betyg,salsa    Skoldetalj + enrichments
GET    /api/v1/schools/{kod}/kpis                   Nyckeltal + historik
GET    /api/v1/schools/{kod}/trends                 Tidsserier + riktning
GET    /api/v1/municipalities                       Lista kommuner
GET    /api/v1/municipalities/{kod}                 Kommundetalj
GET    /api/v1/municipalities/{kod}/kpis            Kommun-KPI:er
GET    /api/v1/municipalities/{kod}/deep            Deep — 8 datakällor
GET    /api/v1/municipalities/{kod}/similar         Demografiskt liknande
GET    /api/v1/municipalities/compare?codes=...     Jämför 2–10 kommuner
GET    /api/v1/providers                            Lista huvudmän
GET    /api/v1/providers/{org}/schools              Skolor under en huvudman
GET    /api/v1/groups                               Koncerner
GET    /api/v1/groups/{orgNr}/overview              Koncernöversikt + ekonomi
GET    /api/v1/gymnasium/programs                   Gymnasieprogram (söktryck)
GET    /api/v1/gymnasium/programs/{code}            Programdetalj per kommun
GET    /api/v1/metrics/definitions                  KPI-definitioner
GET    /api/v1/datasets/releases                    Dataversioner

// API-nyckelhantering (kräver autentisering):
POST   /api/pro/api-keys                           Skapa nyckel → returnerar fullständig nyckel (visas en gång)
GET    /api/pro/api-keys                           Lista nycklar (redacted, status, expiresAt)
DELETE /api/pro/api-keys/{keyId}                    Ta bort nyckel
POST   /api/pro/api-keys/{keyId}/rotate             Rotera → ny nyckel + 7d grace för gamla
GET    /api/pro/api-keys/quota                     Kvotanvändning (used, limit, resetAt)

// Webhooks (kräver autentisering):
POST   /api/pro/webhooks                           Skapa webhook → returnerar secret (visas en gång)
GET    /api/pro/webhooks                           Lista webhooks
PATCH  /api/pro/webhooks/{id}                      Uppdatera (enabled, url, events)
DELETE /api/pro/webhooks/{id}                      Ta bort webhook
GET    /api/pro/webhooks/{id}/deliveries           Leveranshistorik

Har du frågor? Kontakta oss via supportsidan eller mejla support@skolkoll.se.