API-guide
API-guide: Så använder du vår öppna dataportal
Välkommen till API-guiden för Svenska kraftnäts Data Service. Vi vill göra vår elmarknaadsdata och våra stödtjänster så tillgängliga som möjligt för vidareutnyttjande. Portalen erbjuder ett kraftfullt REST-API (baserat på CKAN) som gör det möjligt att hämta maskinläsbar data kostnadsfritt direkt till dina applikationer eller integrationsflöden.
Autentisering och åtkomst
💡 Ingen API-token krävs: Vår dataportal är helt öppen. Du behöver inte registrera något konto, skapa utvecklarprofiler eller bifoga en
API_TOKEN(ellerX-CKAN-API-Key) i dina HTTP-headers för att anropa våra publika API:er.
Bästa praxis för API-användning
För att säkerställa en stabil plattform för alla användare rekommenderar vi följande riktlinjer vid integration, i linje med hur datahantering sker hos andra nordiska systemansvariga:
- API:et är ingen direkt backend för slutanvändarapplikationer: Portalen är till för att hämta data för vidare bearbetning. Om du bygger en app eller tjänst bör din plattform i sin utsträckning hämta datan från oss och därefter agera datakälla för dina egna slutanvändare.
- Undvik onödig pollning: Designa dina integrationer för att respektera datasetets uppdateringsfrekvens snarare än att kontinuerligt ställa samma fråga. Om ett dataset uppdateras en gång per dygn räcker det med ett dagligt anrop.
- Filtrera vid källan: Använd API:ets parametrar för att enbart hämta den data du faktiskt behöver, i stället för att hämta hela datasetet och filtrera lokalt.
Bygg din sökfråga (Request methods)
Vårt REST-API är ett synkront gränssnitt som du når via standard HTTP GET-anrop. Övriga operationer och anrop som kan förändra datat på portalen, t.ex. PUT, DELETE, m.fl. är avstängda för externa användare.
Dataportalens grundläggande sök-ändpunkt (datastore) är:
https://data.svk.se/sv/api/3/action/ med operationen datastore_search
Svaret returneras i JSON-format och innehåller både metadata (schema/ontologier) och själva dataposterna (records).
Notera: det finns flera operationer att nyttja och dessa är beskrivna på CKANs officiella Action API-guide. I denna guide fokuserar vi dock på
datastore_search
Parametrar
Du anger dina urvalskriterier som parametrar direkt i URI-strängen:
- resource_id (Krävs): Det unika ID:t (UUID) för just det dataset eller den resurs du vill hämta.
- limit: Maximala antalet rader att returnera (standard är ofta 100). Sätt
limitochoffsetför att paginera genom stora datamängder. - q: Fritextsökning över alla fält.
- filters: JSON-formaterat objekt för att filtrera på exakta kolumnvärden (t.ex. elområde eller specifik reservprodukt).
Exempel på anrop
I denna guide och exempel utgår vi ifrån datasetet FCR kapacitetsmarknad, budvolymer (Uppdateras ej, se beskrivning)
Datasetet innehåller historiska observationer och har resurs-ID: bbe7d8c7-912f-4665-99e0-74493c75f7ef.
Du hittar resurs-ID för det dataset som du vill arbeta med under antingen:
- URL för ett dataset likt: https://data.svk.se/sv/dataset/fcr_accepted_aggregated_offers/resource/bbe7d8c7-912f-4665-99e0-74493c75f7ef
- Under fältvärdet för ID på datasetets sida, sektion "Mer information".
- Nästlad json-datastruktur från API-anrop Package search
1. Hämta de första 5 raderna
För att snabbt inspektera strukturen på en dataresurs kan du begränsa resultatet med limit.
HTTP GET-anrop: webbläsare eller via t.ex. Postman
https://data.svk.se/sv/api/3/action/datastore_search?resource_id=bbe7d8c7-912f-4665-99e0-74493c75f7ef&limit=5
Förväntat resultat (utdrag): Du får tillbaka ett JSON-objekt där nyckeln records innehåller arrayen med data. Här ser du tydligt fält som reserve_direction (t.ex. up), reserve_product (t.ex. FCRD) och uppgifter om pris och volym. Svaret innehåller även den metadata som är dekorerat som egenskaper till records för att uppnå Öppen Länkad Data-principer.
"result": {
"include_next_page": false,
"include_total": true,
"limit": 5,
"records_format": "objects",
"resource_id": "bbe7d8c7-912f-4665-99e0-74493c75f7ef",
"total_estimation_threshold": null,
"records": [
{
"_id": 1, // API:et sorterar per default på _id stigande
"start_time_sweden": "2025-12-07T18:00:00",
"start_time_utc": "2025-12-07T17:00:00",
"auction_round": "fcrAuction2",
"reserve_product": "FCRD",
"reserve_direction": "up",
"volume": 396.6,
"volume_unit": "MW",
"soda_hashbyte": "989e8a0e88e53df8e053189d4c2553d2",
"soda_identity": 1
},
{
"_id": 2,
"start_time_sweden": "2023-02-13T03:00:00",
"start_time_utc": "2023-02-13T02:00:00",
"auction_round": "fcrAuction2",
"reserve_product": "FCRD",
"reserve_direction": "up",
"volume": 313.1,
"volume_unit": "MW",
"soda_hashbyte": "217d84df7ff9f8be97d4614a44fca6d4",
"soda_identity": 2
},
// etc mera json-data och metadata från Öppen Länkad Data
2. Sökning via nyckelord och filter
Om du vill söka efter ett specifikt nyckelord över alla kolumner använder du parametern q. Vi filtrerar här på en verklig stödtjänst, exempelvis primärregleringsreserven FCRN.
Anrop nyckelord:
https://data.svk.se/sv/api/3/action/datastore_search?resource_id=bbe7d8c7-912f-4665-99e0-74493c75f7ef&q=FCRN
Resultatet filtreras automatiskt till att enbart visa de observationer där strängen FCRN förekommer i någon av kolumnerna.
Anrop med filter
Det går även att söka med bifogat filter. Filtret är formaterat som ett json object som skickas med i URL-parametern i GET-anropet.
För att hitta 4 rader som uppfyller produkt FCRD och riktning up skapar vi filtret:
// Ex filter 1
{
"reserve_product":"FCRD",
"reserve_direction":"up"
}
och bifogar det som en URL-parameter &filters= och därefter lägger till &limit=4
https://data.svk.se/sv/api/action/datastore_search?resource_id=bbe7d8c7-912f-4665-99e0-74493c75f7ef&filters={"reserve_product":"FCRD","reserve_direction":"up"}&limit=4
Svar
"result": {
"filters": {
"reserve_product": "FCRD",
"reserve_direction": "up"
},
"include_next_page": false,
"include_total": true,
"limit": 4,
"records_format": "objects",
"resource_id": "bbe7d8c7-912f-4665-99e0-74493c75f7ef",
"total_estimation_threshold": null,
"filterops": {
"op": "$and",
"field": null,
"value": [
{
"op": "eq",
"field": "reserve_product",
"value": "FCRD"
},
{
"op": "eq",
"field": "reserve_direction",
"value": "up"
}
]
},
"records": [
{
"_id": 1,
"start_time_sweden": "2025-12-07T18:00:00",
"start_time_utc": "2025-12-07T17:00:00",
"auction_round": "fcrAuction2",
"reserve_product": "FCRD",
"reserve_direction": "up",
"volume": 396.6,
"volume_unit": "MW",
"soda_hashbyte": "989e8a0e88e53df8e053189d4c2553d2",
"soda_identity": 1
},
{
"_id": 2,
"start_time_sweden": "2023-02-13T03:00:00",
"start_time_utc": "2023-02-13T02:00:00",
"auction_round": "fcrAuction2",
"reserve_product": "FCRD",
"reserve_direction": "up",
"volume": 313.1,
"volume_unit": "MW",
"soda_hashbyte": "217d84df7ff9f8be97d4614a44fca6d4",
"soda_identity": 2
}
// mera rader och Öpen Länkad Data-metadata
3. Sökning via SQL-sats (datastore_search_sql)
För mer avancerade eller komplexa urval stödjer portalen SQL-frågor via ändpunkten datastore_search_sql.
💡 SQL ÄR EN TUNG OPERATION Notera att
SQL-select statementgår igenom hela datamängden och bearbetar i svaret. Där våra tidigare anrop returnerar40-50 KB, returnerar detta svar hela mängden och sorterar innan resultat, vilket kan göra att svaret blir i storleken15+ MB)
Låt oss säga att du vill hämta 2 datarader för FCRD (reserve_product) och reservriktning (reserve_direction) Upp sorterat på starttid (start_time_sweden) så konstruerar vi SQL-statement likt:
SELECT * from "bbe7d8c7-912f-4665-99e0-74493c75f7ef" WHERE reserve_product = 'FCRD' AND reserve_direction = 'up' ORDER BY start_time_sweden ASC LIMIT 2 // notera avsaknad av avslutande ; tecken.
HTTP GET-anrop: webbläsare eller via t.ex. Postman
https://data.svk.se/sv/api/3/action/datastore_search_sql?sql=SELECT * from "bbe7d8c7-912f-4665-99e0-74493c75f7ef" WHERE reserve_product = 'FCRD' AND reserve_direction = 'up' ORDER BY start_time_sweden ASC LIMIT 2
Tips: Notera att resurs-ID:t måste omges av dubbla citattecken ("") i SQL-strängen, medan textvärden omges av enkla citattecken (''), samt att avslutande ; ej är med i detta SQL-statement
Svar
"result": {
"sql": "SELECT * from \"bbe7d8c7-912f-4665-99e0-74493c75f7ef\" WHERE reserve_product = 'FCRD' AND reserve_direction = 'up' ORDER BY start_time_sweden ASC LIMIT 2",
"records": [
{
"_id": 241056,
"_full_text": "'-01':2,3 '-12':8 '-31':9 '00':5,6,11,12 '2019':7 '2020':1 '241056':19 '672.4':16 'f149cf5f25e1f798b6033ed19d7ad947':18 'fcrauction1':13 'fcrd':14 'mw':17 't00':4 't23':10",
"start_time_sweden": "2020-01-01T00:00:00", // samma klockslag
"start_time_utc": "2019-12-31T23:00:00",
"auction_round": "fcrAuction1", // gäller auktionsrunda 1
"reserve_product": "FCRD",
"reserve_direction": "up",
"volume": 672.4,
"volume_unit": "MW",
"soda_hashbyte": "f149cf5f25e1f798b6033ed19d7ad947",
"soda_identity": 241056
},
{
"_id": 256531,
"_full_text": "'-01':2,3 '-12':8 '-31':9 '00':5,6,11,12 '2019':7 '2020':1 '216.9':16 '256531':19 'a72ab08f1cf43b4f1c14395a80dcd54d':18 'fcrauction2':13 'fcrd':14 'mw':17 't00':4 't23':10",
"start_time_sweden": "2020-01-01T00:00:00", // samma klockslag
"start_time_utc": "2019-12-31T23:00:00",
"auction_round": "fcrAuction2", // men gäller auktionsrunda 2
"reserve_product": "FCRD",
"reserve_direction": "up",
"volume": 216.9,
"volume_unit": "MW",
"soda_hashbyte": "a72ab08f1cf43b4f1c14395a80dcd54d",
"soda_identity": 256531
}
...vidare json med metadatafält...
Förstå resultatet: Semantik och Länkad Data
Vår portal är byggd med principerna för Öppen Länkad Data. När du gör ett anrop till API:et får du inte bara de råa värdena, utan även datans semantiska schema via schema-blocket i JSON-svaret.
Här definieras hur vår data mappar mot öppna, strukturerade ontologier:
- bidding_zone: Relaterar värdet till
https://data.svk.se/ontology/emdo#hasBiddingZone(geografiskt marknadsområde). - price: Relaterar till
https://data.svk.se/ontology/base#priceValue, där prisenheten definieras separat via egenskapenhasPricePerUnit. - start_time_utc: Definieras via
https://data.svk.se/ontology/base#validFromDateTime(standardiserad giltighetsperiod i UTC).
Detta gör det möjligt för dig som integratör att lita på att exempelvis SE1, FCRN eller prisvärdet 4.73 inte bara är isolerade textsträngar, utan entiteter med tydligt definierade koncept inom europeisk elmarknadsstandard. Målet är maskinläsbarhet och semantisk tydlighet hela vägen!