Integration på 30 minutter
Celembi rører ikke jeres anlæg: ingen SCADA-kobling, ingen adgang til jeres OT-net og intet, der skal installeres. Det, der skal ind, er tal, I allerede har. Portalen klarer hele forløbet uden kode, og API'et er til jer, der vil koble jeres eget system på.
Kort fortalt
- Hvad det er
- En markedsplads for overskudsvarme. Celembi matcher og dokumenterer, er ikke part i handlen og holder aldrig partnernes midler.
- Hvad det kræver
- Tal, I allerede har: hvad I kan levere eller har brug for, og hvad måleren viste. Ingen IT hos jer, hvis I bruger portalen; en Microsoft-konto og et CVR-nummer er nok til at komme i gang.
- Hvad det koster
- Celembis gebyr er 5 % af bruttoværdien og betales af sælger. Køber betaler intet gebyr til Celembi. Procentsatsen står på Priser.
- Hvem der siger ja
- Den, der opretter organisationen, accepterer vilkårene. Et handelsforslag er ikke en handel, før begge parter har accepteret det.
- Prisen
- Prisen ligger mellem sælgers mindstepris og købers maksimalpris. Købers maksimum er dens egen alternative varme, substitutionsprisen, og den regnes måned for måned. Regnestykket står på evidenssiden.
- Dokumentation
- Afregning, ESG-rapport og en månedsrapport pr. anlæg, alle regnet af de samme tal og hentet uden at spørge nogen. Ingen garanti for, hvad en revisor eller en myndighed godtager, men hvert tal kan efterregnes.
Den korte version
- Log ind med jeres Microsoft-konto, opret organisationen og lav en API-nøgle. Alt kan også gøres i portalen uden kode.
- Registrér jeres anlæg (varmekilde eller net) og læg et tilbud eller et behov på bogen. Motoren matcher og foreslår en handel, I accepterer.
- 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
- En Microsoft-konto i jeres organisation (den, I logger på Office med). Ingen ny adgangskode.
- Jeres CVR-nummer. Før jeres første accept verificerer Celembi CVR og dokumentation; som verificeret partner kan I handle op til 500 MWh om året.
- For jeres anlæg: navn, rolle (sælger eller køber), varmekildetype, kapacitet i MW, temperaturinterval, og gerne placering og årligt volumen.
- Til aflæsninger: den målte MWh, GJ eller kWh pr. leverance, og eventuelt måler-ID. Det er alt, der kræves af jeres måler.
- Valgfrit: en URL i jeres ERP eller integrationsplatform, der kan modtage et HTTPS-kald, når noget sker i en handel.
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: den opretter og handler kun for jer, og listerne over anlæg, ordrer og handler viser kun jeres egne. Markedets ordrebog er åben, så kortet (GET /api/v2/map) viser enhver nøgle alle partneres anlæg og åbne ordrer med pris, også jeres; se rammer og sikkerhed. 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 anlæg 5 minutter
Et anlæg er det, der leverer eller modtager varmen: et datacenter, en fabrik, en køleproces, eller fjernvarmenettet. Anlægget registreres én gang og bruges i alle ordrer og handler. Det er nemmest i portalen under Anlæg; 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": "Eksempel Fjernvarme A/S, hovednettet",
"roles": ["buyer"],
"heat_source_type": "district_heating_utility",
"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://partner.example/celembi",
"terms_accepted": true
}'
Svaret indeholder entity_id, som alle senere kald peger på; feltet hedder sådan i API'et og er anlæggets id. 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 mindstepris. En køber lægger et behov: volumen, laveste fremløbstemperatur, periode og maksimalpris. 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 maksimalpris. 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 anlæg). Genindsend kun de rækker, der fejlede.
Reglerne, der gælder for alle tre veje
- To aflæsninger, én afregning. Når den anden aflæsning er inde, afregnes handlen automatisk på leveret volumen, aftalt pris og afgifter, med Celembis gebyr på 5 % af bruttoværdien, betalt af sælger, medmindre en part har angivet force majeure, eller intet er leveret, uden at en årsag er angivet. Så svarer API'et med status
disputedogdispute_reasonforce_majeure_reviewellerzero_delivery_review, og Celembi afregner, når årsagen er gennemgået. Køber betaler intet gebyr til Celembi. - Tab i røret. Er handlen prissat på sælgers rør (dimension, isoleringsserie og længde), regner afregningen hver periodes tab med samme rørmodel ved den mængde, sælgers måler viste, og trækker det fra sælgers måling. Et nedgravet rør taber varme til jorden, også når der løber lidt igennem. Ved lav gennemstrømning køler vandet mere af på vejen, så tabet falder, men langsommere end mængden: en svag måned taber en større andel end en stærk. Er handlen ikke prissat på et rør, trækkes den tabsandel fra, den blev prissat med. En forskel mellem sælgers og købers måler, der svarer til tabet, er derfor ikke en afvigelse.
- Afvigelse over 8 %. Afviger de to aflæsninger mere end 8 % ud over tabet, afregnes der ikke automatisk. Handlen markeres til afklaring, og begge parter får besked. Mellem 5 og 8 % afregnes der automatisk, og Celembi gennemgår leverancen bagefter.
- 48 timers frist. Mangler en aflæsning 48 timer efter periodens udløb, afregnes der på den aflæsning, der findes, med de samme undtagelser. Mangler begge, udløber leverancen uden afregning. I får en påmindelse, mens fristen løber.
- Måleenheder. MWh, GJ eller kWh; Celembi regner om (1 GJ = 0,278 MWh) og afregner i MWh med tre decimaler.
Webhooks 5 minutter
Angiver I en webhook_url på anlægget 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ændelse | Hvornår |
|---|---|
deal.proposed | Motoren har fundet et match og foreslår en handel til jer |
deal.accepted, deal.executed | Modparten har accepteret; begge har accepteret, og leverancen er oprettet |
deal.rejected | Forslaget er afvist |
meter.submitted | En aflæsning er registreret på en af jeres handler |
meter.reminder | Periode udløbet, jeres aflæsning mangler |
delivery.settled, delivery.expired | Afregnet 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:
- Afregningen for handlen:
GET /api/v2/deals/{id}/invoice-preview, med leveret volumen, pris, afgifter og gebyr linje for linje. Ordrebekræftelsen ligger som udskriftsklar HTML fra det øjeblik, handlen er accepteret. - ESG- og revisionsrapporten pr. handel:
GET /api/v2/deals/{id}/esg-report, deterministisk beregnet af de samme tal som afregningen, med fortrængt brændsel og CO₂. - Månedsrapporten pr. anlæg:
GET /api/v2/entities/{id}/monthly-evidence-report, som JSON eller udskriftsklar HTML. Den er skrevet til EED artikel 26 og CSRD/ESRS E1: hvad der blev leveret, hvorfra, og hvad det erstattede. - Hele historikken som fil:
GET /api/v2/export/deals.csveller.json, også fra portalen med ét klik.
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 evidenspakken.
Rammer og sikkerhed
- Adskillelse
- Nøglen handler kun for jeres organisation. Jeres åbne ordrer står med anlæg, mængde og pris i markedets ordrebog, som alle partnere kan se. Ingen partner uden for en handel ser dens vilkår.
- 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_idpå alle kald. Detaljer under Sikkerhed. - Det, Celembi ikke gør
- Celembi er en markedsplads og ikke part i handlen, og holder aldrig partnernes midler. 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 møde 30 minutter på Teams.