Komplet REST API til digital udstyrsjournal for køle-, varmepumpe- og trykanlæg. Session-baseret autentificering via OTP.
https://refilog.dksession_tokencookieapplication/jsonRefiLog bruger OTP-baseret (engangskode) autentificering. Der er ingen API-nøgler — alle kald autentificeres via en session_token cookie der sættes ved login.
Superadmin → Admin → Tekniker → Ejer → Inspektør → Gæst. Hvert endpoint kræver en minimumsrolle.
Alle API-endpoints er rate-limiteret (120 req/min pr. IP). Auth-endpoints har strengere grænser. Backed af Redis.
API'et er beskyttet med flere lag af sikkerhed for at beskytte kundernes data.
Alle muterende requests (POST/PATCH/PUT/DELETE) kræver gyldig Origin eller Referer header fra godkendte domæner.
Hvert firma kan kun se eget udstyr og egne data. Ejere ser kun deres eget udstyr. Gæster er scopet til ét anlæg.
CSP, HSTS, X-Frame-Options: DENY, nosniff, Permissions-Policy. TLS enforced via Let's Encrypt.
Alle ændringer logges med bruger, firma, IP og tidspunkt. GDPR-kompatibel med automatisk anonymisering.
OTP-baseret login, session-håndtering og gæsteadgang.
/api/auth/otpSend en 8-cifret engangskode til brugerens email.
{ email: string }{ success: true }/api/auth/verifyVerificér OTP-kode og opret session. Sætter session_token cookie.
{ email: string, code: string }{ success: true, userId: string }/api/auth/sessionReturnér aktuel bruger eller gæsteadgang-info.
{ authenticated: true, user: { id, name, email, role, company } }/api/auth/sessionLog ud — sletter session_token cookie.
{ success: true }/api/auth/guestOpret midlertidig gæstesession (4 timer) til at se udstyrshistorik.
{ email: string, equipmentId: string }{ success: true }Firma-registrering via CVR-opslag og auto-godkendelse.
/api/registerRegistrér firma via CVR. Auto-godkender VVS, bygningsinstallation og ingeniørfirmaer.
{ cvr: string, companyName, branchCode, branchText, contactName, contactEmail, contactPhone? }{ success: true, companyId, status, autoApproved: boolean }/api/cvrSlå firma op i det danske CVR-register.
?cvr=12345678{ cvr, name, address, branchCode, autoApproved }CRUD for køle- og trykanlæg, QR-koder, AI-udtræk og compliance.
/api/equipmentList udstyr for brugerens firma med paginering og søgning.
?page=1&limit=25&search=...{ equipment: [...], pagination: { page, limit, total, pages } }/api/equipmentOpret udstyr med auto-genereret QR-kode. Kan inkludere billeder af eksisterende papir-logbog.
{ serial, equipmentType, manufacturer, model, refrigerant?, chargeKg?, location, address?, ... }{ equipment, qrCode, photoUrls }/api/equipment/:idHent enkelt udstyr med de seneste 50 journalposter.
{ equipment: { ..., entries: [...] } }/api/equipment/:idOpdatér udstyr, godkend/afvis, eller tilknyt datablad.
{ manufacturer?, model?, refrigerant?, ... } eller { action: "approve" }{ equipment }/api/equipment/qr-printGenerér QR-kode data-URLs til batch-print af labels.
{ equipmentIds: string[] (maks 100) }{ equipment: [{ id, serial, qrCode, qrDataUrl, ... }] }/api/equipment/:id/complianceBeregn regulatorisk compliance-status (EU 2024/573 F-gas, BEK 498, PED).
{ compliance: { leakCheck, inspection, co2eqFormatted, warnings, overallStatus } }/api/equipment/:id/pdfGenerér PDF-rapport med udstyrsdata, compliance og journalhistorik.
PDF-fil (Content-Disposition: attachment)Registrering og kontrol af trykbærende udstyr efter PED-direktivet.
/api/equipment/:id/vesselsList trykbeholdere inkl. seneste inspektionshistorik.
[{ serial, vesselType, volumeLiters, designPressureBar, pedCategory, inspections }]/api/equipment/:id/vesselsRegistrér trykbeholder med fulde tekniske specifikationer.
{ serial, vesselType, volumeLiters?, designPressureBar?, pedCategory?, ... }Vessel-objekt (201)/api/equipment/:id/inspectionsList kontroller (opstilling, periodisk, beholder, trykprøvning). Kan filtreres på type/beholder.
?type=periodisk_enhedskontrol&vesselId=...[{ type, inspectionDate, result, nextDueDate, inspectorName, inspectorOrg, certificateNo }]/api/equipment/:id/inspectionsOpret kontrolrapport. Kræver inspektørdetaljer og næste kontroldato.
{ vesselId?, type, inspectionDate, result, nextDueDate, inspectorName, inspectorOrg, certificateNo }Inspection-objekt (201)/api/equipment/:id/inspections/:inspIdUpload kontrolrapport-PDF til eksisterende inspektion.
FormData: { file: PDF, maks 20 MB }{ inspection: { ..., reportUrl } }Sporing af vedligeholdelseskomponenter (filtre, tørrere, sikkerhedsventiler, olie).
/api/equipment/:id/componentsList sporbare komponenter med fornyelsestidspunkter.
[{ type, label, installedAt, intervalMonths, nextDueAt, notes }]/api/equipment/:id/componentsTilføj komponent med fornyelsesinterval.
{ type: "sikkerhedsventil"|"filter"|"drier"|"olie"|"andet", label, installedAt, intervalMonths, notes? }Component-objekt (201)/api/equipment/:id/componentsOpdatér eller forny komponent (nulstil installationsdato).
{ componentId, installedAt?, intervalMonths?, notes? }/api/equipment/:id/componentsSlet sporet komponent.
{ componentId }Servicelog — eftersyn, lækagekontrol, reparation, påfyldning m.m.
/api/journalOpret journalpost. Ved eftersyn genereres digitalt inspektionscertifikat automatisk.
{ equipmentId, type, notes, refrigerantAdded?, oilType?, signature?, ... }{ entry, certificateUrl? }/api/journal/:equipmentIdHent paginerede journalposter for udstyr med typefiltrering.
?page=1&limit=25&type=eftersyn{ entries: [...], pagination }/api/journal/uploadUpload filer (fotos, PDF) til journalposter. Maks 10 filer, 20 MB pr. fil.
FormData: { files: File[] }{ files: [{ url, name, type, size }] }/api/journal/certificateGenerér digitalt inspektionscertifikat (SVG) for en eftersyn-post.
{ journalEntryId }{ certificateUrl, nextInspectionDate }/api/journal/certificate/pdfEksportér inspektionscertifikat som PDF med firmabranding.
?entryId=...PDF-fil (inline)Filhåndtering — datablade, tegninger, manualer m.m. organiseret i kategorier.
/api/documentsList dokumenter for udstyr grupperet efter kategori.
?equipmentId=...{ categories: [{ category, documents: [...] }], totalCount }/api/documents/uploadUpload enkelt dokument til udstyr. Maks 50 MB.
FormData: { file, equipmentId, categoryId, description? }{ document }/api/documents/bulk-uploadBatch-upload med mappestruktur. Auto-opretter kategorier fra mappenavne.
FormData: { equipmentId, files: File[], paths: JSON }{ uploaded, errors, files }/api/documents/categoriesList alle dokumentkategorier.
{ categories: [{ id, name, slug, icon }] }/api/documents/:idSlet dokument og fjern fil fra disk.
{ success: true }/api/documents/:id/downloadDownload dokumentfil. Gæster har ikke adgang.
Filindhold med korrekt Content-TypeSamlet compliance-overblik og deadline-beregning for alt udstyr.
/api/service-planBatch compliance + serviceoversigt. Kan eksporteres som CSV til Excel.
?format=json|csv&status=forfalden|snart|alle&days=90{ equipment: [...], summary: { total, forfalden, snart, ok, totalCO2eqTonnes } }Email-påmindelser om kommende deadlines — indstilinger pr. bruger pr. servicetype.
/api/notification-preferencesHent notifikations-email og aktive præferencer pr. type.
{ notificationEmail, preferences: { eftersyn, laekagekontrol, kontrol, ... } }/api/notification-preferencesOpdatér notifikations-email og slå typer til/fra.
{ notificationEmail?, preferences: { [type]: boolean } }{ success: true }Bruger- og firmahåndtering, ejere og QR-scanning.
/api/company/usersList alle brugere i firmaet.
{ users: [{ id, name, email, role, active, _count: { entries } }] }/api/company/usersTilføj tekniker eller ejer til firmaet.
{ name, email, phone?, role: "technician"|"owner" }{ user, owner? }/api/ownersList alle udstyrseejere for firmaet.
{ owners: [{ id, name, cvr, email, _count: { equipment } }] }/api/ownersOpret ny ejer/kunde. Kan automatisk oprette brugerkonto.
{ name, cvr?, email?, phone?, address? }{ owner, user? }/api/scan/:qrCodeOffentligt opslag af udstyr via QR-kode. Bruges på scan-landingssiden.
{ equipment: { id, serial, manufacturer, model, entries, ... } }Dataudtræk, sletning og audit-log iht. GDPR.
/api/meGDPR Art. 20 — eksportér alle personlige data (bruger, udstyr, poster, dokumenter, audit).
{ exportedAt, user, company, equipment, journalEntries, datasheets, auditLogs }/api/meGDPR Art. 17 — slet brugerkonto. Anonymiserer audit-logs for compliance.
{ success: true }/api/auditRollebaseret audit-log. Superadmin ser alt; admin/tekniker ser firmaets logs.
?page=1&limit=25&search=...&action=...&from=2025-01-01&to=2025-12-31{ logs: [...], actions: [...], pagination }Bestilling af QR-klistermærker (hvid = abonnement, blå = lifetime).
/api/stickersList klistermærke-ordrer for firmaet.
{ orders: [{ type, quantity, status, company }] }/api/stickersBestil klistermærker. Beregner pris (25 kr/stk ekskl. moms). Sender ordrebekræftelse.
{ type: "hvid"|"blå", quantity: 1-500 }{ order, confirmation: { pricePerUnit, totalExclVat, vat, totalInclVat } }Health-check og filservering.
/api/healthHealth check — returnerer { status: 'ok' }.
{ status: "ok" }/api/uploads/certificates/:filenameServér inspektionscertifikat (SVG). Cache: immutable, 1 år.
SVG-fil (image/svg+xml)/api/uploads/reports/:filenameServér kontrolrapport (PDF). Cache: immutable, 1 år.
PDF-fil (application/pdf)