Skip to content

API-guide

25 juni 2026

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 (eller X-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. PUTDELETE, 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 limit och offset för att paginera genom stora datamängder. Maxgräns för limit är 32000
  • 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).
  • sort: Används för att styra i vilken ordning resultatet returneras från API:et.

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:

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. Arbeta med datum

För att effektivt hämta relevanta datamängder kan du använda datumfilter i dina API-anrop.

Tidszoner

Datum och tid anges enligt standarden ISO 8601 (YYYY-MM-DDTHH:MM:SS), t.ex. den 1 april 2026 kl.08:00 👉 2026-04-01T08:00:00.

Tidsfält förekommer i två varianter:

  • start_time_utc – tid i UTC
  • start_time_sweden – lokal svensk tid

💡 Observera att endast ange ett datum utan tid (t.ex. "2026-04-01") inte kommer matcha tidsfältet som även innehåller ett klockslag, och kommer resultera i ett tomt result.

Filtrering på datum

Filtrering sker via parametern filters, där datum kan kombineras med jämförelseoperatorer.

Tillgängliga operatorer:

  • gt (större än)
  • gte (större än eller lika med)
  • lt (mindre än)
  • lte (mindre än eller lika med)

Exempel: filtrera på ett specifikt datum

För att hämta data för en enskild dag definieras ett intervall från kl. 00:00 den aktuella dagen till kl. 00:00 dagen efter. Då standarvärdet för limit är 100, anges värdet 144 i detta exemepl för att samtliga observationer ska följa med:

// Ex datum 1

{
  "start_time_utc": {
    "gte": "2026-04-01T00:00:00",
    "lt": "2026-04-02T00:00:00"
  }
}
&sort=start_time_sweden
&limit=144

och bifogar det som en URL-parameter &filters=

https://data.svk.se/api/action/datastore_search?resource_id=bbe7d8c7-912f-4665-99e0-74493c75f7ef&filters={"start_time_sweden":{"gte":"2026-04-01T00:00:00","lt":"2026-04-02T00:00:00"}}&sort=start_time_sweden&limit=144

Resultatet innehåller samtliga observationer för den 1 april 2026.

Svar (utdrag)

"result": {
    "filters": {
        "start_time_sweden": {
        "gte": "2026-04-01T00:00:00",
        "lt": "2026-04-02T00:00:00"
        }
    },
    "include_next_page": false,
    "include_total": true,
    "limit": 144,
    "records_format": "objects",
    "resource_id": "bbe7d8c7-912f-4665-99e0-74493c75f7ef",
    "sort": "start_time_sweden",
    "total_estimation_threshold": null,
    "filterops": {
        "op": "$and",
        "field": null,
        "value": [
            {
            "op": "gte",
            "field": "start_time_sweden",
            "value": "2026-04-01T00:00:00"
            },
            {
            "op": "lt",
            "field": "start_time_sweden",
            "value": "2026-04-02T00:00:00"
            }
        ]
    },
    "records": [
        {
        "_id": 167150,
        "start_time_sweden": "2026-04-01T00:00:00",
        "start_time_utc": "2026-03-31T22:00:00",
        "auction_round": "fcrAuction2",
        "reserve_product": "FCRD",
        "reserve_direction": "up",
        "volume": 325.6,
        "volume_unit": "MW",
        "soda_hashbyte": "aed983ceb5a39c051235f9b697f23c8c",
        "soda_identity": 167150
        },
    ...
        {
        "_id": 242054,
        "start_time_sweden": "2026-04-01T23:00:00",
        "start_time_utc": "2026-04-01T21:00:00",
        "auction_round": "fcrAuction1",
        "reserve_product": "FCRD",
        "reserve_direction": "down",
        "volume": 658.1,
        "volume_unit": "MW",
        "soda_hashbyte": "b2bf79554dd05dbf5aee1e0ccbfe17d5",
        "soda_identity": 242054
        }
        

Exempel: filtrera data från och med ett angivet startdatum

För att hämta data från ett visst datum och framåt används endast gte utan någon övre gräns.

// Ex datum 2

{
  "start_time_sweden": {
    "gte": "2026-04-01T00:00:00"
    }
}

och bifogar det som en URL-parameter &filters=

https://data.svk.se/api/action/datastore_search?resource_id=bbe7d8c7-912f-4665-99e0-74493c75f7ef&filters={"start_time_sweden":{"gte":"2026-04-01T00:00:00"}}&sort=start_time_sweden

💡 Om parametern limit inte anges returnerar API:et som standard de första 100 raderna. För att hämta fler rader behöver du själv ange limit eller använda paginering med offset.

// Ex datum 3

{
  "start_time_sweden": {
    "gte": "2026-04-01T00:00:00"
  }
}
&limit=1000
https://data.svk.se/api/action/datastore_search?resource_id=bbe7d8c7-912f-4665-99e0-74493c75f7ef&filters={"start_time_sweden":{"gte":"2026-04-01T00:00:00"}}&sort=start_time_sweden&limit=1000

I ovan exempel hämtas de 1000 första raderna. Om det är stora datamänger som önskas hämtas kombineras limit med offset för att hämta datan stegvis.

// Ex datum 4
// Anrop 1: hämtarrad 1–1000

{
  "start_time_sweden": {
    "gte": "2026-04-01T00:00:00"
  }
}
&limit=1000
&offset=0

// Anrop 2: hämtar rad 1001-2000
{
  "start_time_sweden": {
    "gte": "2026-04-01T00:00:00"
  }
}
&limit=1000
&offset=1000

💡 Det är inte möjligt att ange flera offset i samma anrop. För att hämta flera "sidor" av data krävs flera separata API-anrop där offset ökas stegvis. Maximal övre gräns för parametern limit är 32000.

// Anrop 1
https://data.svk.se/api/action/datastore_search?resource_id=bbe7d8c7-912f-4665-99e0-74493c75f7ef&filters={"start_time_sweden":{"gte":"2026-04-01T00:00:00"}}&sort=start_time_sweden&limit=1000&offset=0
// Anrop 2
https://data.svk.se/api/action/datastore_search?resource_id=bbe7d8c7-912f-4665-99e0-74493c75f7ef&filters={"start_time_sweden":{"gte":"2026-04-01T00:00:00"}}&sort=start_time_sweden&limit=1000&offset=1000

Svar anrop 1 (utdrag)

"result": {
    "filters": {
        "start_time_sweden": {
        "gte": "2026-04-01T00:00:00"
        }
    },
    "include_next_page": false,
    "include_total": true,
    "limit": 1000,
    "offset": 0,
    "records_format": "objects",
    "resource_id": "bbe7d8c7-912f-4665-99e0-74493c75f7ef",
    "sort": "start_time_sweden",
    "total_estimation_threshold": null,
    "filterops": {
        "op": "gte",
        "field": "start_time_sweden",
        "value": "2026-04-01T00:00:00"
    },
    "records": [
        {
        "_id": 10155,
        "start_time_sweden": "2026-04-01T00:00:00",
        "start_time_utc": "2026-03-31T22:00:00",
        "auction_round": "fcrAuction2",
        "reserve_product": "FCRN",
        "reserve_direction": "symmetric",
        "volume": 134,
        "volume_unit": "MW",
        "soda_hashbyte": "0362de6edbdd46935bb45594a507ca57",
        "soda_identity": 10155
        },
    ...
        {
        "_id": 188646,
        "start_time_sweden": "2026-04-07T22:00:00",
        "start_time_utc": "2026-04-07T20:00:00",
        "auction_round": "fcrAuction1",
        "reserve_product": "FCRD",
        "reserve_direction": "up",
        "volume": 626.4,
        "volume_unit": "MW",
        "soda_hashbyte": "cc901802db003c8660f9146746e27838",
        "soda_identity": 188646
        }

Svar anrop 2 (utdrag)

"result": {
    "filters": {
        "start_time_sweden": {
        "gte": "2026-04-01T00:00:00"
        }
    },
    "include_next_page": false,
    "include_total": true,
    "limit": 1000,
    "offset": 1000,
    "records_format": "objects",
    "resource_id": "bbe7d8c7-912f-4665-99e0-74493c75f7ef",
    "sort": "start_time_sweden",
    "total_estimation_threshold": null,
    "filterops": {
        "op": "gte",
        "field": "start_time_sweden",
        "value": "2026-04-01T00:00:00"
    },
    "records": [
        {
        "_id": 83262,
        "start_time_sweden": "2026-04-07T22:00:00",
        "start_time_utc": "2026-04-07T20:00:00",
        "auction_round": "fcrAuction2",
        "reserve_product": "FCRD",
        "reserve_direction": "down",
        "volume": 236.9,
        "volume_unit": "MW",
        "soda_hashbyte": "e270feb4894f9ff68e98a5e6e9900450",
        "soda_identity": 83262
        },
    ...
        {
        "_id": 171218,
        "start_time_sweden": "2026-04-14T21:00:00",
        "start_time_utc": "2026-04-14T19:00:00",
        "auction_round": "fcrAuction2",
        "reserve_product": "FCRD",
        "reserve_direction": "down",
        "volume": 339.7,
        "volume_unit": "MW",
        "soda_hashbyte": "39fb594643e585e24f287b93bc15353e",
        "soda_identity": 171218
        }

4. 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 statement går igenom hela datamängden och bearbetar i svaret. Där våra tidigare anrop returnerar 40-50 KB, returnerar detta svar hela mängden och sorterar innan resultat, vilket kan göra att svaret blir i storleken 15+ MB)

⚠️ Observera: Ändpunkten datastore_search_sql är avstängd på portalen och kan inte längre användas för datauttag. Använd istället de ordinarier API-änpunkterna för filtrering och datauttag.

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 egenskapen hasPricePerUnit.
  • 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 SE1FCRN 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!