🌍 Klimakommuner API

Dokumentasjon for tilgjengelige API-endepunkter

Base URL

https://api.klimakommuner.no
💡 Alle forespørsler må gjøres til base URL-en med riktig endepunkt-sti.

🔐 Autentisering

Enkelte endepunkter krever en API-nøkkel (merket med 🔒). Du kan sende token på tre måter:

1. Query parameter (enklest):

https://api.klimakommuner.no/utils/clean-url?token=YOUR_TOKEN

2. Authorization header:

Authorization: Bearer YOUR_TOKEN

3. X-API-Token header:

X-API-Token: YOUR_TOKEN
⚠️ Kontakt systemadministrator for å få API-nøkkel. Nøkkelen er personlig og skal ikke deles.

Oversikt autentisering:

🔒 Krever token: /utils/clean-url, /geojson/municipalities, /geojson/counties

🌍 Offentlig: /, /docs, /utils/tracking-params, /search/multi

📡 Webhook: /maps/generate (bruker Sanity-autentisering)

Health Check

GET / Offentlig

Sjekk API-status og versjon.

Respons:

{
  "name": "Klimakommuner API",
  "version": "1.0.0",
  "status": "healthy"
}

URL-rensing Nytt

GET /utils/tracking-params Offentlig

Hent liste over alle sporingsparametere som fjernes fra URL-er.

Respons:

{
  "params": ["utm_source", "utm_medium", "fbclid", ...],
  "prefixes": ["ref_", "pf_rd_"],
  "count": 70,
  "description": "Tracking parameters that should be removed from URLs",
  "source": "Inspired by ClearURLs"
}
POST /utils/clean-url 🔒 Krever token

Fjern sporingsparametere fra én eller flere URL-er.

Request Body (enkelt URL):

{
  "url": "https://example.com?utm_source=email&fbclid=abc123"
}

Request Body (batch):

{
  "urls": [
    "https://example.com?utm_source=email",
    "https://example.org?gclid=xyz789"
  ]
}

Respons (enkelt):

{
  "original": "https://example.com?utm_source=email&fbclid=abc123",
  "cleaned": "https://example.com"
}

Respons (batch):

{
  "results": [
    {
      "original": "https://example.com?utm_source=email",
      "cleaned": "https://example.com"
    },
    {
      "original": "https://example.org?gclid=xyz789",
      "cleaned": "https://example.org"
    }
  ]
}
💡 Fjerner 70+ sporingsparametere fra Google, Facebook, Microsoft, Amazon, LinkedIn, TikTok, Instagram m.fl.

GeoJSON Data

GET /geojson/municipalities 🔒 Krever token

Hent GeoJSON-data for norske kommuner.

Respons:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "kommunenummer": "0301",
        "kommunenavn": "Oslo"
      },
      "geometry": { ... }
    }
  ]
}
GET /geojson/counties 🔒 Krever token

Hent GeoJSON-data for norske fylker.

Respons:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "fylkesnummer": "03",
        "fylkesnavn": "Oslo"
      },
      "geometry": { ... }
    }
  ]
}

Kartgenerering

POST /maps/generate Webhook

Generer SVG-kart for et klimanettverk basert på kommunekoder.

⚠️ Bruker Sanity webhook-autentisering. Kalles automatisk når nettverk oppdateres.

Request Body:

{
  "networkId": "network-123",
  "networkSlug": "follo-klimanettverk",
  "municipalityCodes": ["0301", "0219", "3001"]
}

Respons:

{
  "success": true,
  "message": "Map generated for follo-klimanettverk",
  "svgLength": 1234
}

Søk

POST /search/multi Offentlig

Proxy til MeiliSearch for multi-søk. Brukes av nettsiden for søkefunksjonalitet.

💡 Offentlig tilgjengelig - ingen API-token nødvendig. MeiliSearch-nøkkelen er skjult på serveren.

Request Body:

{
  "queries": [
    {
      "indexUid": "klimakommuner",
      "q": "klimanettverk",
      "limit": 20
    }
  ]
}

CORS & Sikkerhet

Tillatte domener:

  • https://klimakommuner.no
  • https://*.klimakommuner.no (alle subdomener)
  • http://localhost:* (for utvikling)

Eksempler

JavaScript/Fetch:

// Rens en URL
const response = await fetch('https://api.klimakommuner.no/utils/clean-url?token=YOUR_TOKEN', {
  method: 'POST',
  headers: { 
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    url: 'https://example.com?utm_source=newsletter'
  })
});

const data = await response.json();
console.log(data.cleaned); // https://example.com

cURL:

# Health check (ingen token nødvendig)
curl https://api.klimakommuner.no/

# Rens URL (med token i query)
curl -X POST 'https://api.klimakommuner.no/utils/clean-url?token=YOUR_TOKEN' \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com?utm_source=email"}'

# Rens URL (med token i header)
curl -X POST https://api.klimakommuner.no/utils/clean-url \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{"url":"https://example.com?utm_source=email"}'