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- Gå till API-nycklar i portalen
- Skapa en nyckel — ge den ett namn och klicka "Skapa nyckel"
- Kopiera nyckeln — den visas bara en gång och kan inte hämtas igen
- 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| Metod | Endpoint | Beskrivning |
|---|---|---|
GET | /api/v1/schools | Lista/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}/kpis | Nyckeltal, historik, kvalitetsflaggor och hälsopoäng |
GET | /api/v1/schools/{kod}/trends | Historiska trender med 17+ tidsserier och riktningsindikatorer |
GET | /api/v1/municipalities | Lista 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}/kpis | Kommun-KPI:er med historik |
GET | /api/v1/municipalities/{kod}/deep | Deep — 8 datakällor kombinerade (demografi, kolada, folkhälsa...) |
GET | /api/v1/municipalities/{kod}/similar | Hitta demografiskt liknande kommuner |
GET | /api/v1/municipalities/compare?codes=... | Jämför 2–10 kommuner sida vid sida |
GET | /api/v1/providers | Lista huvudmän med skolantal och koncerntillhörighet |
GET | /api/v1/providers/{org}/schools | Skolor under en specifik huvudman |
GET | /api/v1/groups | Alla skolkoncerner med dotterbolag |
GET | /api/v1/groups/{orgNr}/overview | Koncernöversikt med aggregat + ekonomi |
GET | /api/v1/gymnasium/programs | Gymnasieprogram med söktryck per kommun |
GET | /api/v1/gymnasium/programs/{code} | Programdetalj: söktryck per kommun |
GET | /api/v1/metrics/definitions | Maskinläsbart register med KPI-definitioner |
GET | /api/v1/datasets/releases | Arkiverade dataversioner |
Autentisering och kvota
APIAPI:et har två nivåer beroende på om du skickar en API-nyckel:
| Utan nyckel | Med API-nyckel | |
|---|---|---|
| Rate limit | 30 anrop/min | 100 anrop/min |
| Månadskvota | Ingen | 10 000 anrop/månad |
| Kvota nollställs | – | 1:a varje månad |
Alla API-svar inkluderar rate-limit-headers:
| Header | Beskrivning |
|---|---|
X-RateLimit-Limit | Max antal anrop per minut (30 eller 100) |
X-RateLimit-Remaining | Kvarvarande anrop denna minut |
X-RateLimit-Reset | Unix-timestamp när fönstret nollställs |
X-Quota-Remaining | Kvarvarande anrop denna månad (bara med nyckel) |
X-Quota-Reset | ISO 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ält | Typ | Beskrivning |
|---|---|---|
skolenhetskod | string | Skolverkets 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. |
namn | string | Skolans officiella namn enligt Skolverkets register. Kan innehålla organisationsform (t.ex. "AB" eller "stiftelse"). Källa: Skolverket PE API. |
kommun | string | Namnet på den kommun där skolan är belägen (inte nödvändigtvis samma som huvudmannens hemkommun). Källa: Skolverket PE API. |
kommunKod | string | SCB:s 4-siffriga kommunkod (t.ex. "0180" = Stockholm, "1280" = Malmö). De två första siffrorna anger län. Källa: Skolverket PE API. |
lan | string | Länets namn (t.ex. "Stockholms län"). Härleds från kommunkoden. Källa: Skolverket. |
lat | number | GPS-latitud i WGS84 (decimalgrader). Null om skolan saknar registrerad besöksadress. Källa: Skolverket PE API. |
lng | number | GPS-longitud i WGS84 (decimalgrader). Null om skolan saknar registrerad besöksadress. Källa: Skolverket PE API. |
huvudman | string | Huvudmannens (skolans ägare/ansvariga organisation) namn. Kan vara ett kommunnamn, ett aktiebolag, en stiftelse etc. Källa: Skolverket PE API. |
huvudmanOrgNr | string | Huvudmannens organisationsnummer (10 siffror, format NNNNNN-NNNN). Används som nyckel för att koppla skolor till samma ägare. Källa: Skolverket PE API. |
organisationstyp | string | Huvudmannens typ. "kommun" = kommunal skola, "enskild" = friskola (inklusive aktiebolag, stiftelse, ekonomisk förening). Källa: Skolverket. |
skolformer | array | Array 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. |
status | string | "AKTIV" = skolan bedriver undervisning. "INAKTIV" = skolan är vilande eller nedlagd men finns kvar i registret. Källa: Skolverket. |
elever | integer | Totalt 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_elev | number | Antal 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_pct | number | Andel 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_ak9 | number | Genomsnittligt 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_flags | array | Array 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_score | number | Sammanvä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
| Parameter | Typ | Beskrivning |
|---|---|---|
municipality | string | Filtrera på SCB:s 4-siffriga kommunkod (t.ex. 0180 = Stockholm, 1280 = Malmö). Flera koder kan anges kommaseparerat. |
school_type | string | Filtrera på skoltyp. Accepterar både långa namn (grundskola, gymnasieskola, forskoleklass, fritidshem) och kortkoder (GR, GY, FKLASS, FTH). |
provider | string | Filtrera på huvudmannens organisationsnummer (10 siffror). Användbart för att hämta alla skolor under en specifik huvudman. |
organizer_type | string | Filtrera på organisationstyp: kommun (kommunala skolor) eller enskild (friskolor). |
search | string | Fritextsökning. Matchar mot skolnamn, skolenhetskod, huvudmannamn och kommunnamn. Skiftlägesokänslig. |
sort | string | Sorteringsordning: name (standard, alfabetiskt), municipality (kommunnamn), pupils (elevantal, störst först), merit (meritvärde, högst först). |
fields | string | Sparse fieldsets — kommaseparerade fältnamn (t.ex. namn,kommun,meritvarde_ak9). Minskar svarsstorlek och förbättrar prestanda. skolenhetskod inkluderas alltid. |
page | integer | Sidnummer (standard: 1). Svar inkluderar meta.pagination med totalt antal sidor. |
per_page | integer | Antal 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ält | Typ | Beskrivning |
|---|---|---|
skolenhetskod | string | Skolverkets unika identifierare. 8 siffror för grund-/gymnasieskolor, forsk-NNNNNN (6 siffror) för förskolor. Källa: Skolverket PE API. |
namn | string | Skolans officiella namn enligt Skolverkets register. Källa: Skolverket PE API. |
kommun | string | Kommunens namn där skolan är belägen. Källa: Skolverket PE API. |
kommunKod | string | SCB:s 4-siffriga kommunkod. Källa: Skolverket PE API. |
lan | string | Länets namn. Härleds från kommunkoden. |
lat / lng | number | GPS-koordinater i WGS84 (decimalgrader). Null om besöksadress saknas. Källa: Skolverket PE API. |
huvudman | object | { namn, orgNr, typ } — huvudmannens uppgifter. typ är "kommun" eller "enskild". orgNr är 10-siffrigt organisationsnummer. Källa: Skolverket PE API. |
koncern | object|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. |
skolformer | array | Array av skolformer som enheten bedriver. Se skollistan ovan för alla kortkoder. En enhet kan ha flera skolformer samtidigt. |
status | string | "AKTIV" = bedriver undervisning. "INAKTIV" = vilande eller nedlagd. Källa: Skolverket. |
adress | object|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ält | Typ | Beskrivning |
|---|---|---|
elever | integer | Totalt 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_elev | number | Antal 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_pct | number | Andel 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_ak9 | number | Genomsnittligt 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_ak6 | number | Andel 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_ak9 | number | Andel 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_ak9 | number | Genomsnittligt 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_ak9 | number | Genomsnittligt 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_ak9 | number | Genomsnittligt provbetygspoäng på nationella provet i engelska, åk 9. Samma skala. Rikssnitt ca 14. Källa: Skolverket, uppdateras årligen. |
examen_inom_3_ar | number | Andel 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_hogskola | number | Andel 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ält | Typ | Beskrivning |
|---|---|---|
kvalitet | object | Kvalitetsdata från Skolinspektionen. Innehåller eventuella tillsynsbeslut och bedömningar. Null om Skolinspektionen inte granskat skolan nyligen. |
quality_flags | array | Kvalitetsflaggor: 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_score | number|null | Sammanvä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. |
historik | object | Tidsserier 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. |
events | array | Händelser kopplade till skolan, t.ex. huvudmannabyte, omorganisation eller statusändring. Varje event har type, date och description. |
lankar | object | { 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
| Namn | Datakälla | Beskrivning |
|---|---|---|
enkat | Skolinspektionen | Skolenkä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. |
betyg | Skolverket | Betygsfö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. |
tillsyn | Skolinspektionen | Tillsynsbeslut 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. |
salsa | Skolverket SIRIS | SALSA (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. |
ekonomi | Bolagsverket | Ekonomisk 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. |
scores | Skolkoll (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. |
sprakutbud | Skolverket | Skolans 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ält | Typ | Beskrivning |
|---|---|---|
skolenhetskod | string | Skolverkets unika identifierare. Källa: Skolverket PE API. |
namn | string | Skolans officiella namn. |
trends | object | Tidsserier nycklat per mått. Varje serie är en array av [år, värde]-par, sorterade kronologiskt. Omfattar typiskt 5–10 år. |
trends.meritRating9 | array | Meritvärde åk 9 per år. Samma skala som meritvarde_ak9 (0–340). Null-år exkluderas. |
trends.certifiedTeachersPercent | array | Andel behöriga lärare per år (0–100%). Visar hur skolans lärarkompetens utvecklats. |
trends.totalPupils | array | Antal elever per år. Visar tillväxt eller nedgång i elevunderlag. |
trends.salsaResidual | array | SALSA-residual per år: [år, residual, faktiskt, modell]. Positiv residual = skolan presterar bättre än förväntat givet elevsammansättning. Källa: Skolverket SIRIS. |
direction | object | Automatisk riktningsindikator per nyckeltal: "up", "down" eller "stable". Beräknas baserat på de senaste 3 datapunkterna med en tröskel på ±2 enheter. |
events | array | Historiska 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ält | Typ | Beskrivning |
|---|---|---|
kommunKod | string | SCB:s 4-siffriga kommunkod (t.ex. "0180"). De två första siffrorna anger län (01 = Stockholm). Källa: SCB. |
namn | string | Kommunens officiella namn. Källa: SCB. |
lan | string | Länets namn (t.ex. "Stockholms län"). Källa: SCB. |
demografi.population | integer | Kommunens folkmängd vid senaste mätning. Källa: SCB befolkningsstatistik, uppdateras årligen. Null aldrig — alla kommuner har befolkningsdata. |
demografi.utlandsk_bakgrund_pct | number | Andel 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.medianinkomst | number | Medianinkomst i tusentals kronor (tkr) per år för personer 20+ år. Riksmedian ca 310 tkr. Källa: SCB inkomststatistik, uppdateras årligen. |
demografi.hogutbildade_pct | number | Andel vuxna (25–64 år) med eftergymnasial utbildning (%). Rikssnitt ca 44%. Starkt korrelerat med skolresultat. Källa: SCB utbildningsregistret, uppdateras årligen. |
skolor.antal | integer | Totalt antal aktiva skolor (alla skolformer) i kommunen. Källa: Skolverket PE API. |
skolor.grundskolor | integer | Antal aktiva grundskolor i kommunen. Källa: Skolverket PE API. |
skolor.gymnasieskolor | integer | Antal aktiva gymnasieskolor i kommunen. Källa: Skolverket PE API. |
skolor.friskoleandel_pct | number | Andel 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_snitt | number | Genomsnittligt meritvärde åk 9 över alla skolor i kommunen. Viktad efter elevantal. Källa: Skolverket. |
resultat.behoriga_larare_snitt | number | Snittandel behöriga lärare (%) över alla skolor i kommunen. Källa: Skolverket. |
resultat.kostnad_per_elev | number | Kommunens 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_kpi | object | Samtliga 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.skolkoll | string | Permanentlänk till kommunsidan på Skolkoll. |
Queryparametrar — /api/v1/municipalities
API Visa filtrering och sortering
| Parameter | Typ | Beskrivning |
|---|---|---|
county | string | Filtrera på länsnamn (t.ex. Stockholm, Västra Götaland). Skiftlägesokänslig. |
search | string | Fritextsökning. Matchar mot kommunnamn och kommunkod. Skiftlägesokänslig. |
sort | string | name (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
| Sektion | Datakälla | Innehåll |
|---|---|---|
demografi | SCB | Befolkningsdata: 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. |
kolada | RKA/Kolada | Kolada-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. |
folkhalsa | Folkhälsomyndigheten | Folkhä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. |
forskola | Skolverket | Förskolans nyckeltal: antal barn per avdelning, personalens utbildningsnivå, personaltäthet (barn per årsarbetare), maxtaxa/avgifter. Källa: Skolverket, uppdateras årligen. |
skolbibliotek | Kungliga biblioteket | Skolbibliotekens resurser: bokbestånd per elev, öppettider, bemanning (skolbibliotekarie vs. volontär), digitala resurser. Källa: Kungliga biblioteket (skolbiblioteksstatistiken), uppdateras årligen. |
soktryck | Skolverket | Sö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. |
skolresultat | Skolkoll (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. |
computed | Skolkoll (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": { ... }
} } } | Parameter | Typ | Beskrivning |
|---|---|---|
codes | string | Kommaseparerade 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 }, ...
] } } | Parameter | Typ | Beskrivning |
|---|---|---|
limit | integer | Antal 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ält | Typ | Beskrivning |
|---|---|---|
koncern.namn | string | Koncernens registrerade namn (t.ex. "AcadeMedia AB"). Källa: Skolkoll koncernkatalog. |
koncern.orgNr | string | Koncernens organisationsnummer (moderbolagets). 10 siffror, format NNNNNN-NNNN. |
skolor.antal | integer | Antal aktiva skolor i koncernen (alla dotterbolag sammanräknat). |
skolor.grundskolor | integer | Antal aktiva grundskolor i koncernen. |
skolor.gymnasier | integer | Antal aktiva gymnasieskolor i koncernen. |
aggregerat.snittMerit | number | Genomsnittligt meritvärde åk 9 över alla koncernens grundskolor. Viktat efter elevantal. Null om inga GR-skolor finns. |
aggregerat.snittBehorighet | number | Genomsnittlig andel behöriga lärare (%) över alla skolor i koncernen. Viktat efter elevantal. |
aggregerat.totalElever | integer | Totalt antal elever i alla koncernens skolor. |
ekonomi | object|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. |
kommuner | array | Lista 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ält | Typ | Beskrivning |
|---|---|---|
programCode | string | Skolverkets programkod (t.ex. "NA" = Naturvetenskap, "SA" = Samhällsvetenskap, "EK" = Ekonomi, "TE" = Teknik, "BF" = Barn och fritid). 2–4 bokstäver. Källa: Skolverket. |
kommunCount | integer | Antal kommuner med söktrycksdata för detta program. Högre värde = programmet erbjuds på fler platser. |
nationalAvgExam | number|null | Nationellt 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ält | Typ | Beskrivning |
|---|---|---|
programCode | string | Skolverkets programkod (t.ex. "NA"). |
kommunCount | integer | Antal kommuner med söktrycksdata. |
kommuner | array | Per 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
APIRegistrera webhooks för push-notifieringar. Payloads signeras med HMAC-SHA256. Automatisk retry (3 försök) med exponentiell backoff.
| Metod | Endpoint | Beskrivning |
|---|---|---|
POST | /api/pro/webhooks | Skapa webhook — returnerar secret (visas bara en gång) |
GET | /api/pro/webhooks | Lista 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}/deliveries | Leveranshistorik 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; Kodexempel och dokumentation
Interaktiv Swagger-sandlåda · Kodexempel (Python, R, JS, PowerBI, Excel, Google Sheets) · OpenAPI-spec (YAML)
API-referens
APIVisa 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.