Integration

Integration på 30 minutter

Celembi rører ikke jeres anlæg. Der er ingen SCADA-kobling, ingen adgang til jeres OT-net og intet, der skal installeres. Det, der skal ind i Celembi, er tal, I allerede har: hvad I kan levere eller har brug for, og hvad måleren viste. Denne side viser den korteste vej fra konto til første afregning, og hvad I får tilbage som dokumentation.

Den korte version
  1. Log ind med jeres Microsoft-konto, opret organisationen og lav en API-nøgle. Alt kan også gøres i portalen uden kode.
  2. Registrér jeres enhed (varmekilde eller net) og læg et tilbud eller et behov på bogen. Motoren matcher og foreslår en handel, I accepterer.
  3. Efter leverancen indsender begge parter deres måleraflæsning: i portalen, som CSV eller som ét API-kald for hele måneden. Så afregnes handlen, og dokumentationen ligger klar.

Hvad I skal have klar

Alle kald nedenfor går til https://api.celembi.dk med jeres nøgle i headeren X-API-Key. Ethvert svar er en JSON-konvolut med success, data, eventuelt error og et request_id, som I kan henvise til, hvis noget skal undersøges.

Trin 1: Konto og API-nøgle 5 minutter

Gå til portalen, log ind med Microsoft og opret jeres organisation. Ved oprettelsen accepterer I vilkårene; de gælder for alle handler, jeres nøgle laver. Kolleger inviteres på e-mail under Indstillinger.

API-nøgler laves under Indstillinger af organisationens ejer. Nøglen vises kun én gang: gem den i jeres hemmelighedslager, aldrig i kode eller mails. Nøglen er bundet til jeres organisation, så ethvert kald kun ser jeres egne enheder, ordrer og handler. Mist I nøglen, tilbagekalder I den og laver en ny; intet andet ændrer sig.

curl https://api.celembi.dk/api/v2/admin/me \
  -H "X-API-Key: $CELEMBI_API_KEY"

Svaret viser, hvilken organisation nøglen tilhører. Det er det første kald, I bør lave fra jeres integration.

Trin 2: Jeres enhed 5 minutter

En enhed er det, der leverer eller modtager varmen: et datacenter, en fabrik, en køleproces, eller fjernvarmenettet. Enheden registreres én gang og bruges i alle ordrer og handler. Det er nemmest i portalen under Enheder; via API ser det sådan ud for et net, der køber:

curl -X POST https://api.celembi.dk/api/v2/entities \
  -H "X-API-Key: $CELEMBI_API_KEY" -H "Content-Type: application/json" \
  -d '{
    "tenant_id": "jeres-organisation",
    "name": "Nordby Fjernvarme, hovednettet",
    "roles": ["buyer"],
    "heat_source_type": "district_heating",
    "capacity_mwh": "12.000",
    "temperature_min_celsius": 60.0,
    "temperature_max_celsius": 90.0,
    "annual_volume_mwh": "85000.000",
    "location_lat": 56.15, "location_lon": 10.20,
    "price_area": "DK1",
    "webhook_url": "https://erp.nordby.example/celembi",
    "terms_accepted": true
  }'

Svaret indeholder entity_id, som alle senere kald peger på. Rollen kan være seller, buyer eller begge. Temperaturintervallet bruges af motoren til at afvise fysisk umulige matches, før de når jer.

Trin 3: Tilbud, behov og handel 5 minutter

En sælger lægger et tilbud på bogen: volumen, temperatur, periode og laveste pris. En køber lægger et behov: volumen, laveste fremløbstemperatur, periode og højeste pris. Er kilden koldere end behovet, angiver den part, der løfter temperaturen, sin løfteomkostning pr. MWh, så prisen sammenlignes på leveret varme.

curl -X POST https://api.celembi.dk/api/v2/demands \
  -H "X-API-Key: $CELEMBI_API_KEY" -H "Content-Type: application/json" \
  -d '{
    "tenant_id": "jeres-organisation",
    "entity_id": "ent_...",
    "volume_mwh_needed": "400.000",
    "min_temperature": 70.0,
    "needed_from": "2026-11-01T00:00:00Z",
    "needed_to": "2026-11-30T23:59:59Z",
    "max_price_dkk": "320.00"
  }'

Motoren søger bogen med det samme. Passer et tilbud på temperatur, periode, afstand og pris, foreslås en handel til begge parter. Prisen ligger altid inden for de grænser, I selv har sat: aldrig under sælgers mindstepris, aldrig over købers maksimum. Forslaget er ikke en handel, før det er accepteret i portalen eller via POST /api/v2/deals/{id}/accept; kun handlens to parter kan acceptere eller afvise, og et forslag, der ikke besvares inden fristen, udløber af sig selv, hvorefter tilbuddet er åbent igen.

Vil I se, om en ordre overhovedet kan leveres, før I lægger den ud, tjekker POST /api/v2/physics/preflight den mod rørets fysik og svarer med, hvad der binder.

Trin 4: Aflæsninger og afregning 10 minutter

Når leveranceperioden er slut, indsender begge parter deres målte volumen for handlen. Det er de to tal, afregningen bygger på; Celembi læser ikke jeres måler. Der er tre veje, og de kan blandes frit:

Portalen, pr. handel

Under Handler: tryk Indsend måleraflæsning på handlen, indtast tallet. Ingen IT.

CSV, hele måneden

Hent skabelonen med jeres leverancer under Handler, udfyld én kolonne fra jeres afregningssystem, upload. Kommatal og GJ er fint.

API, hele måneden

Ét kald med op til 200 aflæsninger. Hver række behandles for sig, så én fejl aldrig stopper de andre.

curl -X POST https://api.celembi.dk/api/v2/deals/meter-readings \
  -H "X-API-Key: $CELEMBI_API_KEY" -H "Content-Type: application/json" \
  -d '{
    "readings": [
      { "deal_id": "…", "entity_id": "ent_…", "metered_volume_mwh": "398.250", "meter_id": "M-1042" },
      { "deal_id": "…", "entity_id": "ent_…", "metered_volume": "1433.7", "metered_volume_unit": "gj" }
    ]
  }'

Svaret har ét resultat pr. række med success og, ved fejl, en kode I kan handle på (ukendt handel, allerede afregnet, forkert enhed). Genindsend kun de rækker, der fejlede.

Reglerne, der gælder for alle tre veje

Webhooks 5 minutter

Angiver I en webhook_url på enheden eller på den enkelte ordre, sender Celembi et HTTPS POST, når der sker noget i en handel, I er part i. Adressen skal være offentlig og køre HTTPS.

HændelseHvornår
deal.proposedMotoren har fundet et match og foreslår en handel til jer
deal.accepted, deal.executedModparten har accepteret; begge har accepteret, og leverancen er oprettet
deal.rejectedForslaget er afvist
meter.submittedEn aflæsning er registreret på en af jeres handler
meter.reminderPeriode udløbet, jeres aflæsning mangler
delivery.settled, delivery.expiredAfregnet med fuldt beløb i kaldet, eller udløbet uden aflæsninger

Kaldets krop er {"event_type": "...", "timestamp": "...", "data": {...}}, hvor data er et øjebliksbillede af handlen eller leverancen. Headeren X-Celembi-Signature bærer en HMAC-SHA256 over <t>.<krop> i formatet t=<tidsstempel>,v1=<hex>. Signeringsnøglen er jeres egen: den står under Indstillinger i portalen (ejeren kan vise og rotere den), og ingen anden partner kan lave et kald, der består jeres kontrol. Afvis kald ældre end fem minutter og sammenlign i konstant tid.

Byg det robust. Svar 2xx med det samme og behandl bagefter. Celembi venter 5 sekunder og prøver tre gange med stigende pause; derefter opgives kaldet, men handlen står stadig i Celembi. Behandl derfor et webhook som en besked om, at noget skete, og hent den gældende tilstand med jeres nøgle: GET /api/v2/deals/{id}/delivery. Så er I aldrig afhængige af, at hvert kald nåede frem.

Foretrækker I at trække frem for at få skubbet, lister GET /api/v2/deals?tenant_id=… og GET /api/v2/deliveries alt, hvad der er sket, og GET /api/v2/stream giver de samme hændelser som en løbende strøm.

Hvad I får tilbage

Alt, der er afregnet, findes som dokumentation, I kan hente uden at spørge nogen:

Tallene er de samme alle steder, fordi de kommer fra samme afregning. Celembi er ikke en revisionsvirksomhed, men laget, revisor kan læse ud af; sådan efterprøves evidensen.

Rammer og sikkerhed

Adskillelse
Nøglen ser kun jeres organisation. Modparten ser kun de handler, I deler, og aldrig jeres øvrige ordrer.
Kaldsgrænse
60 kald pr. minut pr. nøgle med plads til korte spidser. Svaret bærer headere med, hvad der er tilbage, og et 429 siger, hvor længe I skal vente. En måneds aflæsninger er ét kald.
Gentagne kald
Sender I en ny aflæsning på samme handel, før modparten har indsendt sin, erstatter den jeres tidligere; efter afregning afvises nye aflæsninger med en kode, aldrig med en dobbelt afregning. Mod netværksfejl bærer alle skrivende kald headeren Idempotency-Key: samme nøgle giver samme svar uden at køre igen.
Data
Jeres tal er jeres. Celembi bruger dem til at matche, afregne og dokumentere jeres handler, og til anonyme markedstal (antal og volumen, aldrig navne eller priser pr. part). Databehandleraftale og opbevaring: se privatlivspolitikken.
Drift
Kørende i EU, adgang via Microsoft-login, revisionsspor med request_id på alle kald. Detaljer under Sikkerhed.
Det, Celembi ikke gør
Ingen styring af anlæg, ingen adgang til SCADA, ingen forhandling uden mennesker. Projektering, hydraulik og myndighedsgodkendelse bliver hos jeres rådgiver; beregneren eksporterer en datapakke til dem.

Den fulde API-reference med alle felter og eksempler ligger i dokumentationen. Vil I have os med på det første kald, tager et onboarding-møde en halv time.

API-reference Book onboarding

Siden følger API'et: når en regel i afregningen ændres, opdateres den her og i dokumentationen samtidig. Senest gennemgået 6. september 2026. Spørgsmål: kontakt@celembi.dk.