Översikt
Följande API är tillgängligt för företagskunder. Notera att detta är en pilot. Om du är intresserad eller har frågor kontakta oss: Kundservice Göteborg Energi.
API:et innehåller debiteringsgrundande mätvärden för el, gas, fjärrvärme och fjärrkyla. Detta inkluderar mätvärden för mätare som ligger inom Göteborg Energis nät. Tilläggsmätare ingår ej.
API:et består av följande ändpunkter:
MeterMetaData: information om mätare, id och plats
GasData, ElectricityData, DistrictCoolingData, DistrictHeatingData: information om förbrukning för mätare per timme över en tidsintervall.
I det första anropet (MeterMetaData) som innehåller ert kund id får ni tillbaka alla era mätare ni har och någonsin haft hos Göteborg Energi. Detta innebär att ni får tillbaka alla mätare som är aktiva respektive avslutade. Anledningen till att uppsagda mätare kommer med är för att ni ska kunna hämta historiska mätvärden. Vill ni inte ha historisk data kan ni enkelt filtrera bort detta genom att utesluta fältet slutdatum om värde finns.
API:et exponerar data som har följande karaktär och beroende:
Energi och flöde mäts under en timme och ackumuleras (tex energianvändning för klockan 12-13 får tidsstämpeln 13:00 ) medan temperaturer mäts varje heltimme (tex 13:00).
Mätvärden uppdateras en gång per dygn och senast 2–5 dagar efter mätning.
All data mäts i normaltid, vilket kan vara bra att tänka på vid övergång till sommar-/vintertid.
Data kan hämtas från de senaste 24 månaderna fram till dagens datum ner på timnivå.
All data presenteras med tre decimaler, dock utan att visa avslutande nollor.
Alla tidsangivelser i API-anrop kommer automatiskt att tolkas som UTC+1 (svensk normaltid), oberoende av den tidszon som anges. Likaså kommer alla tidsangivelser i API-svaren att vara i UTC+1.
API authentication och data authorization
Vi använder oss av client_grant tokens enligt OAuth2.0 i typ av en Bearer Token (OIDC).
Autentifciering
Som kund med avtal tillhandahålls tillgång med följande attribut:
client_id
client_secret
API behörighet
Tillgång till resurser styrs av scopes. Beroende på avtal har man behörighet till en eller flera resurser (vilket är bland annat energislag).
MeterMetadata:read
ElectricityData:read
GasData:read
DistrictCoolingData:read
DistrictHeatingData:read
Grant type
Värdet måste vara:
client_credentials
Token endpoint
https://apiserviceifaygmxspn66s.azure-api.net/apiauth/token
Certificat endpoint
https://apiserviceifaygmxspn66s.azure-api.net/apiauth/certs
Versionen av API anges i en header med namn API-version.
Create token
POSThttps://apiserviceifaygmxspn66s.azure-api.net/apiauth/tokenHTTP/1.1Api-version: {{version}}Content-Type: application/x-www-form-urlencodedclient_id={{client_id}}&client_secret={{client_secret}}&grant_type=client_credentials&scope={{scope}}
Verifiera riktighet
Vi rekommenderar att klienten verifierar token på sin riktighet med hjälp av certifikat (se ovan).
GET https://apiserviceifaygmxspn66s.azure-api.net/apiauth/certs HTTP/1.1Api-version: {{version}}
Exempel med Python
url = "https://apiserviceifaygmxspn66s.azure-api.net/apiauth/token"payload = {"client_id": "your_client_id","client_secret": "your_client_secret","grant_type": "client_credentials","scope": "ElectricityData:read DistrictHeatingData:read GasData:read DistrictCoolingData:read MeterMetaData:read"}headers = {"Api-version": f"{version}"}response = requests.post(url, data=payload, headers=headers)print(response.text)
# Response{"access_token": "..............","expires_in": 1800,"refresh_expires_in": 0,"token_type": "Bearer","not-before-policy": 0,"scope": "GasData:read DistrictCoolingData:read MeterMetaData:read ElectricityData:read DistrictHeatingData:read"}
Användning Bearer Token
För varje anrop till API:et behövs HTTP header:
Authorization: Bearer <här är token>Exempel med Python
# Endpoint URL for the API requesturl = "https://{{apigateway}}/conapi/{{version}}/electricitydata"# Payload to be sent in JSON formatpayload = {"ClientID": "12345678","AssetID": ["10101010101"],"DateTimeFrom": "2023-11-29T12:00:00Z","DateTimeTo": "2023-12-29T12:00:00Z","Limit": 365,"Skip": 0}# Header including the bearer token - replace 'your_bearer_token_here' with your actual tokenheaders = {"Authorization": "Bearer your_bearer_token_here","Content-Type": "application/json"}response = requests.post(url, headers=headers, data=json.dumps(payload))print(response.text)
