Grunnlag

Kvoter, grenser og feil

Planer og kvoter, hva et «anlegg» er, hvor raskt du kan kalle hvert endepunkt, og hvordan feilsvar ser ut med status, error og code.

Sist oppdatert 2026-09-15 · Markdown · OpenAPI

  • GET /health

Planer

Prognose-endepunktene (/api/forecast*) styres av planen på nøkkelen. Tallene under er de som håndheves i koden i dag. Priser står på priser.

Plan Forespørsler per døgn Anlegg per døgn Anlegg per bulk-kall Maks kWp per anlegg Utvidet prognose (/extended) Døgnprognose (daily) Koordinatoppløsning
Uten nøkkel (per IP) 24 1 1 25 Nei Nei 0,1°
Gratis 24 1 1 25 Nei Nei 0,1°
Basic 1 000 Kjøpt antall Inntil 10 (begrenset av antall anlegg på nøkkelen) 150 Ja Ja 0,03°
Pro 10 000 Kjøpt antall Inntil 50 (begrenset av antall anlegg på nøkkelen) 1 000 Ja Ja 0,03°
Enterprise Ubegrenset Ubegrenset Ubegrenset Ubegrenset Ja Ja 0,03°

TMY-endepunktene har egen teller: i lanseringsperioden får alle inntil 2000 forespørsler per døgn, med alle formater, produkter og P-verdier. Beregningene uten nøkkel (PV, snølast, snøtap, snøutsikt, terrenghorisont) har ingen kvote.

Tellerne for nøkler nullstilles 00:00 UTC. Telleren for kall uten nøkkel lever i 24 timer etter siste kall fra IP-adressen.

Hva er et «anlegg»?

Ett anlegg er én unik koordinat du har spurt om i løpet av et døgn. Koordinaten rundes til planens oppløsning (0,1° på gratis, 0,03° på betalte planer) før den telles. Samme koordinat kan spørres om så mange ganger du vil innenfor forespørselskvoten; det er først en ny koordinat som bruker en plass. Flere takflater (arrays) på samme koordinat er fortsatt ett anlegg.

Når kvoten er brukt opp, får du 429 med detaljer:

{
  "error": "Daglig anlegg-kvote brukt opp.",
  "details": "Du har 1 anlegg-plass på free-planen, og har allerede spurt om 1 unik koordinat i dag. Denne forespørselen ville lagt til 1 ny (1 avvist). Telleren nullstilles 00:00 UTC.",
  "what_is_anlegg": "Et \"anlegg\" er en unik koordinat (lat/lon snapet til tierens grid-oppløsning) i en 24-timersperiode. …",
  "quota": { "tier": "free", "limit": 1, "used": 1, "would_add": 1, "accepted": 0, "rejected": 1, "resets_at": "2026-09-16T00:00:00.000Z" },
  "rejected_coords": [ { "lat": 59.9, "lon": 10.8 } ],
  "upgrade": "https://solkart.no/api"
}

I bulk-kall avvises hele kallet når kvoten ikke rekker til alle nye koordinater; quota.would_add og rejected_coords viser hva som stoppet. Bruk quota.resets_at til å planlegge neste forsøk.

Hastighetsgrenser

De tunge beregningene har grenser per sekund og per time, per IP-adresse i pilotperioden. Ved brudd får du 429 med Retry-After i sekunder.

Endepunkt Per sekund Per time
POST /api/horizon/rooftop 5 300
POST /api/horizon/precise 1 30
POST /api/terrain/category, POST /api/terrain/jobs 1 30
POST /api/roof/jobs, POST /api/roof/layout 1 20

Statuspolling på jobber (GET /api/terrain/jobs/{id}, GET /api/roof/jobs/{id}) teller ikke. Trenger du mer i produksjon, kontakt oss for en avtale med egne grenser og X-Quota-Remaining per bruker.

Prognose-endepunktene har ingen grense per sekund utover døgnkvoten, men prognosen oppdateres bare én gang i timen, så det er ingen grunn til å hente samme anlegg oftere. Se caching.

Feilformat

Alle feil er JSON med Content-Type: application/json og feltet error med en forklaring på norsk (noen eldre meldinger i prognose-API-et er på engelsk). Endepunktene for horisont (nivå 2 og 3), terreng og tak legger til code i STORE_BOKSTAVER som du kan programmere mot. Ett unntak: 422 fra horisont nivå 2 og 3 når høydemodell mangler kommer rått fra beregningstjeneren som {"detail": "…"} uten error.

{ "error": "lat må være et tall mellom 57 og 72.", "code": "INVALID_INPUT" }
Status Betyr code (der den finnes) Hva du bør gjøre
400 Ugyldig parameter, JSON eller koordinat utenfor Norge INVALID_INPUT Rett forespørselen. Ikke prøv på nytt uendret.
401 Manglende eller ugyldig nøkkel, eller døgnkvoten for kall er brukt UNAUTHENTICATED, PASSWORD_REQUIRED Sjekk nøkkelen; vent til nullstilling.
402 Nøkkelen har ingen anleggskvote, eller kvoten på en avtale er brukt opp QUOTA_EXHAUSTED Oppgrader eller vent til quota_reset_at.
403 Planen gir ikke tilgang (utvidet prognose, for mange anlegg, for mange kWp) Oppgrader, eller del opp forespørselen.
404 Ukjent jobb, ingen datacelle ved punktet, ingen høydemodell NOT_FOUND Sjekk id eller koordinat.
405 Feil HTTP-metode METHOD_NOT_ALLOWED Se Allow-hodet.
409 Jobben er ikke ferdig NOT_READY Poll status først.
410 Tegnegrunnlaget for en jobb er utløpt EXPIRED Kjør analysen på nytt.
413 For stor forespørsel TOO_LARGE Reduser innholdet.
422 Ingen bygning ved punktet, ingen datadekning NO_BUILDING, NO_COVERAGE Flytt punktet.
429 Anleggskvote eller hastighetsgrense RATE_LIMITED Vent Retry-After sekunder, eller til resets_at.
500 Intern feil FORMAT_ERROR m.fl. Prøv igjen; vedvarer det, meld fra.
502 Bakenforliggende tjeneste svarte feil (MET, NVE, beregningstjener) BACKEND_ERROR Prøv igjen med økende ventetid (2, 4, 8 s).
503 Prognosedata mangler, kø full, tjeneste opptatt BACKEND_BUSY Vent Retry-After (standard 30 s) og prøv igjen.
504 Beregningen tok for lang tid BACKEND_TIMEOUT, TIMEOUT Prøv igjen, eller bruk jobb-endepunktet i kø.

Ukjent sti under /api/ på prognosetjeneren svarer 200 med en katalog over endepunkter, ikke 404, og teller som ett kall. Sjekk derfor at svaret inneholder feltene du forventer, ikke bare statuskoden.

Kvotestatus i hodene

Det finnes ingen X-RateLimit-*-hoder. Prognose-API-et gir kvotestatus i 429-svaret (quota). Horisont nivå 2 og 3 setter X-Quota-Remaining (unmetered i pilot) og X-Worker-Request-Id, som du bør oppgi ved feilmeldinger til oss. Terreng- og takendepunktene setter bare fagspesifikke hoder (X-Terrengkategori, X-Konfidens på PDF/HTML; X-Moduler, X-Kwp på tegningen).

Robust klient i praksis

  • Sett tidsavbrudd: 15 s for prognose og TMY, 30 s for horisont nivå 2, 60 s for terrengkategori og horisont nivå 3, 120 s for takanalyse (eller bruk jobb-endepunktene).
  • Prøv på nytt bare ved 429, 502, 503 og 504, med Retry-After der det finnes, ellers eksponentiell ventetid med tilfeldig tillegg. Maks 3 forsøk.
  • Aldri på nytt ved 400, 401, 402, 403, 422.
  • Logg X-Worker-Request-Id og cycle_time/issued_utc sammen med svaret.

Helsesjekk

GET https://api.solkart.no/health svarer {"status":"ok","auth_enabled":true}. Det bekrefter at tjeneren svarer, ikke at prognosedata er ferske. Bruk GET /api/forecast/latest og sammenlign cycle_time med nå for å se om prognosen er oppdatert.