ALL SYSTEMS · NOMINAL
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 answer to "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). Used heavily by parametric underwriting (T2 use case) to price weather policies.

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 (favorable / marginal / unfavorable / unsafe), and the sample size that backs the distribution.

Request

{
 "activity": "kitesurfing",
 "location": { lat: 36.013, lng: -5.604 },
 "granularity": "month",
 "yearsBack": 20,
 "daypart": "afternoon"
}

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 pricing). 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 PROVIDER_DEGRADED — ERA5 unavailable. Retry with exponential backoff; the upstream is reliable but occasional ECMWF-side maintenance windows happen.