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

Score multiple activities at one location

One call, N activities, one shared weather fetch. The natural endpoint for booking-platform "what's good at this spot today?" screens.

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

When to use

When you need to compare scores for 2–10 activities at the SAME location and window (kitesurfing vs windsurfing vs SUP at Tarifa Saturday morning). Avoids N separate /v1/score calls and the engine de-duplicates the weather fetch, so it is cheaper than the N equivalent single calls.

For one activity across N locations, batch on the client. For one activity across many timesteps, use the time-series endpoint.

Request

{
 "activities": [
 "kitesurfing",
 "windsurfing",
 "sup"
 ],
 "location": { "lat": 36.013, "lng": -5.604 },
 "window": {
 "from": "2026-06-01T09:00:00Z",
 "to": "2026-06-01T18:00:00Z"
 }
}

window is optional; omitting it scores the next 6 hours. ensemble + members work the same way as on the other scoring endpoints (Pro+ only).

Response

{
 "session_id": "sess_…",
 "location": { "lat": 36.013, "lng": -5.604 },
 "results": [
 { "activity": "kitesurfing", "score": 82, "verdict": "favorable", "confidence": 0.81, "breakdown": [] },
 { "activity": "windsurfing", "score": 74, "verdict": "favorable", … },
 { "activity": "sup", "score": 41, "verdict": "marginal", … }
 ],
 "rankedByScore": ["kitesurfing", "windsurfing", "sup"],
 "samplesUsed": 1
}

results is an array; each entry has { activity, profile_slug?, score?, verdict?, confidence?, breakdown?, distribution?, error? }. This is a lighter shape than the single-score response: there is no eco block and no confidenceDetail per entry, only the scalar confidence. If an activity fails to resolve, its entry carries error instead of the score fields. The weather fetch is de-duplicated once for the shared location/window, so samplesUsed reflects that single fetch, not one per activity.

Plan limits

Maximum activities per call depends on your plan: Free 2 · Starter 5 · Pro/Scale 10. Past it the API returns 422 MAX_ACTIVITIES_EXCEEDED with detail.maxActivities.

Errors

422 MAX_ACTIVITIES_EXCEEDED: too many slugs for your plan. 404 ACTIVITY_NOT_FOUND: one of the slugs isn't in the catalog (the response lists which one). 402 PAYMENT_REQUIRED: ensemble requested on free/starter.