Ö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:

  1. 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).

  2. Mätvärden uppdateras en gång per dygn och senast 2–5 dagar efter mätning.

  3. All data mäts i normaltid, vilket kan vara bra att tänka på vid övergång till sommar-/vintertid.

  4. Data kan hämtas från de senaste 24 månaderna fram till dagens datum ner på timnivå.

  5. All data presenteras med tre decimaler, dock utan att visa avslutande nollor.

  6. 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

     POST https://apiserviceifaygmxspn66s.azure-api.net/apiauth/token HTTP/1.1
Api-version: {{version}}
Content-Type: application/x-www-form-urlencoded

client_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.1
Api-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 request
url = "https://{{apigateway}}/conapi/{{version}}/electricitydata"
# Payload to be sent in JSON format
payload = {
"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 token
headers = {
"Authorization": "Bearer your_bearer_token_here",
"Content-Type": "application/json"
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
print(response.text)