UTC --:--:--
Docs·API reference·POST /v1/score/historical

Score historical climatology

Run the same scoring engine against the last 30+ years of reanalysis. Returns score distributions + exceedance probabilities, the statistical view on "how often is Tarifa kitable in May, really?".

POSThttps://api.goable.io/v1/score/historical

Pro plan and above. Backed by ERA5 reanalysis (atmospheric from 1940, marine from 1979). The distribution shape is intended to support parametric-underwriting research, which is a research direction with qualified partners, not a live automated pricing product.

What it returns

Not a single score, a distribution. For each granularity bucket (month, day-of-year, daypart) the response returns: percentiles (p10/p25/p50/p75/p90), exceedance probabilities by verdict band (excellent / favorable / fair / marginal / poor / not_feasible / unsafe), and the sample size that backs the distribution.

Request

{
 "activity": "kitesurfing",
 "location": { lat: 36.013, lng: -5.604 },
 "yearsRange": { "from": 2006, "to": 2026 },
 "granularity": "daypart",
 "selector": { "month": 5, "daypart": "afternoon" }
}

yearsRange.from is capped at 1940 (ERA5 atmospheric floor). selector fields are only read when relevant to the chosen granularity, e.g. daypart needs a selector.daypart, day-of-year needs a selector.dayOfYear. Optional failOnMarineGap makes marine-dependent activities error instead of silently degrading when CMEMS coverage is missing for the window.

Historical scoring runs entirely on ERA5 reanalysis; it does not use the live-forecast consensus (Open-Meteo, Stormglass + a premium partner model) or the real-observation corrections (METAR, CMEMS wave validation, lightning strikes) that a live /v1/score call applies. Those are real-time signals with no retrospective equivalent; ERA5 is already the observation-assimilated ground truth for the past.

Granularity

month: one distribution per month (12 entries) over the requested year range. week: 52 entries. day-of-year: 365 entries (heavy; use for high-fidelity underwriting-research pricing work). daypart: combine with daypart: "morning" | "midday" | "afternoon" | "evening" to restrict the window.

Caching

Historical responses are tenant-agnostic: same (activity, location, granularity, yearsBack) yields the same distribution. The engine caches with a long TTL, so popular spots return in <50ms. First call for a new location pays the ERA5 fetch (~5s); subsequent calls are cached.

Errors

402 PAYMENT_REQUIRED: Free or Starter plan. 404 ACTIVITY_NOT_FOUND: activity slug not in catalog. 503 ARCHIVE_UNAVAILABLE: no ERA5 historical provider is configured on this deployment.