UTC --:--:--
Explain

Two ways to explain every decision.

Give people a clear answer, or give systems the exact constraints behind the score.

Grounded in the score breakdownLLM output validated against source metricsDeterministic fallback on every request
The invariant

Explanation endpoints never change the underlying score, verdict or safety gates. They only render or analyse the existing decision record. The physics engine produces the decision; the LLM, when configured, is the optional renderer, not the product.

01
Live example

One score, rendered and analysed

The same decision record feeds a readable answer and a quantified constraint view. The request on the left produces a score; the natural-language surface renders it; the decision-logic surface shows what is holding it back.

The score request

What was asked

POST /v1/score
{
  "activity": "kitesurfing",
  "spot": { "lat": 36.013,
            "lng": -5.604 },
  "window": {
    "from": "2026-07-04T14:00:00Z",
    "to":   "2026-07-04T18:00:00Z"
  },
  "rider_skill_level": "intermediate"
}

rider_skill_level is a Pro+ input on /v1/score. Without it, the score uses the standard intermediate profile. The example names it so the explanation stays honest about what it knows.

Grounded natural-language explanation

A clear answer

Saturday afternoon at Tarifa Balneario looks favorable for the intermediate rider profile, scoring 87/100. The 22-knot cross-onshore wind suits the conditions in this window. Two factors hold it below the 90s: the chop is slightly above the flat-water ideal (1.5m at 10s adds work for freestyle), and the gust factor of 1.18 is steady but not glassy. No safety gates triggered: clear sightlines, no convective activity within 50km. Suggested planning signal: Conditions suit intermediate kitesurfing. For flat-water freestyle, the calmer window around 14:00 UTC may be a better fit.

drivers (with provenance)
  1. wind.speed+ strong

    22 kt cross-onshore, well inside the working band

    source_type: forecast_model · staleness_minutes: 40
  2. wave.height- moderate

    1.5 m at 10 s sits above the flat-water ideal

    source_type: forecast_model · staleness_minutes: 40
  3. wind.gustFactor- slight

    1.18 is steady but not glassy

    source_type: station · staleness_minutes: 15

confidence_note: Wave confidence is moderate because no representative buoy is available. How to read source_type.

What would make this better?

Decision constraints, quantified

See what is limiting the score, how much it matters and what would improve the plan.

  1. wave.height1.5 m to 0.8 m+9 points, opens a flat-water freestyle window
  2. wind.gustFactor1.18 to 1.05+4 points, steadier wind eases freestyle riding
  3. wind.speed22 kt to 24 kt+2 points, faster but still below the comfort ceiling
  4. temp.airC22 °C to 24 °C+1 point, approaches the optimum thermal-comfort band

Sensitivities are local to this activity profile, place and forecast window; they are not universal thresholds.

02
Two surfaces

Natural language, or decision logic

Same question, two product shapes, one decision record. The natural-language surface produces copy a booking flow can show a customer. The decision-logic surface produces structured output a workflow can route on. Pick the one your consumer needs; the other is ready when you need it.

Claude-backed, optional renderer, validated against source metrics

Natural language

A grounded, evidence-based explanation of the score. The LLM renders the existing breakdown into readable copy; it never changes the decision. Every numeric claim is re-validated, and the surface falls back to a deterministic template when no key is set or a check fails.

Pure math, binding constraint and sensitivities

Decision logic

Binding constraint, marginal sensitivities, best 24h window and best nearby spots, computed directly from the breakdown. No LLM involved, fully deterministic, defensible for systems that route on the output rather than read it.

03
When to use it

Three places this lands

For booking platforms, tour operators and outdoor apps.

Booking platforms

Booking, user trust

Show the natural-language paragraph next to the confirmation: the three conditions behind the verdict, in plain language. Customers stop asking why a slot was held or released.

Tour operators and guides

Operator planning

A morning briefing across spots and windows, a paragraph plus a best-window table for each candidate. It replaces the analyst juggling five tabs before the day starts.

Outdoor and activity apps

Risk-aware UX

An in-app card with a one-line summary and a 'what would change' chip, plus an edge-case nudge when a favorable score hides real uncertainty. Warn without blocking.

04
Why it is trustworthy

Structured inputs, validated output, deterministic fallback

LLMs can drift. Booking flows cannot. The natural-language surface is safe to put in front of a customer because it renders a structured record, re-validates every number, isolates user input, and always has a template to fall back to.

Structured inputs

Explanations are built from the score breakdown, not from free text. The model renders the decision record it is given; it does not decide anything.

Numeric validation

Every number the model produces is re-validated against the breakdown. A mismatch triggers a one-shot retry with a tightened prompt; a second failure falls back to the deterministic template.

Input isolation and prompt-hardening

User-controlled text is not used as instruction content. Identifiers are sanitized, and generated output is validated against the structured decision record.

Deterministic fallback

Every LLM call has a template fallback. If the provider is unavailable, the token budget is exhausted, or validation fails, the response still ships, rendered from a template instead of generated.

05
Evidence and provenance

Every driver carries where it came from

An explanation is only as trustworthy as the numbers under it. Each driver carries a source_type (forecast model, in-situ station, buoy, reanalysis) and a staleness_minutes, and the surface adds a confidence note when a value rests on thin coverage, for example when no representative buoy is nearby. This is the same provenance the score response exposes.

How source_type and confidence work
06
Endpoints

Four endpoints, one decision record

Feature status: counterfactual analysis is available now. Natural-language explanations require a configured Anthropic key; without one, the intelligence endpoints return 503 INTELLIGENCE_UNAVAILABLE and the counterfactual natural-language block degrades to a template.

POST /v1/intelligence/explain

One-paragraph, grounded natural-language summary of a score. Claude-backed when a tenant key is set; every numeric claim is re-validated against the breakdown, with a deterministic template fallback.

Use for: Show end-users a readable answer for a booking-flow verdict.
POST /v1/intelligence/edge-case

Surfaces the cases that a favorable score can hide: high uncertainty, provider disagreement, or a nearby safety gate. So a risk-aware flow can warn without blocking.

Use for: Risk-aware booking flows that want to nudge, not block.
POST /v1/score/explain-counterfactual

Analytical, no LLM. Returns the binding constraint, marginal sensitivities, the best 24h window and the best nearby alternative spots. Pure math from the existing breakdown.

Use for: Decision-logic systems that need defensible, quantified constraints.
POST /v1/intelligence/briefing

Multi-spot, multi-window briefing for a guide or operator. Returns a paragraph plus a tabular best-window summary per candidate.

Use for: Operator daily plan, guide morning brief, channel digest.

None of these endpoints change the score, verdict or safety gates. They render or analyse the record that /v1/score already produced.

07
BYOK and security

Your key, your budget

Bring your own Anthropic key

Use your own Anthropic API key, subject to Anthropic account availability and terms. The three intelligence endpoints run on that key and draw on your Anthropic token budget, and a flat 500,000-token monthly guard applies as a runaway-loop check on your own spend.

BYOK data flow and security
What consumes what

Each counterfactual analysis consumes one score-equivalent from your plan quota; it is pure math and needs no key. Its optional natural-language block additionally uses your Anthropic key. The explain, briefing and edge-case endpoints do not draw on your score quota; they run on your Anthropic key and count against your Anthropic token budget.

08
Reference

Read the endpoint docs