Skill-conditioned scoring
Same scoring engine, but conditioned on rider/operator skill. Returns the score curve as a function of skill level, so a booking flow can branch into "good for beginners" vs "experts only" without a separate endpoint per profile.
What it does
A wave height that's "marginal" for an intermediate kitesurfer is "excellent" for an expert and "unsafe" for a beginner. This endpoint scores a single (activity × location × window) at multiple skill levels in one call. The output is the difficulty curve — useful both for UI ("show users matching their level") and pricing ("charge a risk premium when conditions are only suitable for expert level").
Request
{
"activity": "kitesurfing",
"location": { lat, lng },
"window": { from, to },
"riderSkillLevels": [0.1, 0.3, 0.5, 0.7, 0.9]
}riderSkillLevels is optional — omit it for the default 5-quantile sweep (0.1, 0.3, 0.5, 0.7, 0.9). Values must be in [0, 1].
Skill levels
Skill is a continuous [0,1] dimension where 0 is "first lesson" and 1 is "world champion". The catalog ships a Bayesian-estimated mapping for each activity that links skill to the dimension thresholds (e.g. a skill 0.3 kitesurfer's wave ceiling vs a skill 0.7 kitesurfer's). The mapping is data-driven from the operator outcome corpus, not handcrafted.
Difficulty bands
Response includes both per-skill-level scores and a derived difficulty_band classifier (beginner / intermediate / advanced / expert) — the lowest skill level at which the verdict reaches "favorable". Use it for one-line UI copy: "today is suitable for intermediate and above".
Use cases
- Booking filter — match users to sessions appropriate for their declared skill level.
- School logistics — auto-route beginners away from a spot today and offer them a different sub-spot.
- Risk-tiered pricing — charge a premium when conditions require expert tier; offer a discount on intermediate-friendly days for higher-skill bookings.