{"name":"FSM Scouting API","version":"v1","season":2026,"description":"Read-only FRC scouting metrics: FSM ratings, component breakdowns, defense scores and model-backed match predictions for the 2026 season.","authentication":{"type":"api_key","header":"X-API-Key","how_to_get_one":"Contact the FSM maintainers (FRC 846). Keys are issued per team.","note":"This is a server-to-server key. Do not embed it in browser JavaScript — anything shipped to a browser is public."},"rate_limit":{"requests_per_minute":60,"scope":"per API key","headers":["X-RateLimit-Limit","X-RateLimit-Remaining","X-RateLimit-Reset"],"on_exceeded":"429 with a Retry-After header"},"endpoints":[{"path":"/api/v1/rankings","description":"2026 season FSM leaderboard.","query":["page","page_size","country","state_prov","min_fsm"]},{"path":"/api/v1/teams/{team}","description":"One team's 2026 profile: FSM, rank, percentile, component breakdown.","example":"/api/v1/teams/846"},{"path":"/api/v1/events","description":"All 2026 events with RMS field-strength metrics.","query":["page","page_size","week","district","country","state_prov"]},{"path":"/api/v1/events/{event}","description":"One 2026 event with its strength metrics.","example":"/api/v1/events/2026casj"},{"path":"/api/v1/events/{event}/teams","description":"Scouting table for an event: FSM, components, penalty, defense_score.","query":["sort"],"example":"/api/v1/events/casj/teams?sort=defense_score"},{"path":"/api/v1/events/{event}/matches","description":"Match score predictions with actual results where played.","query":["played"],"example":"/api/v1/events/casj/matches?played=false"}],"metrics":{"fsm":"FSM rating from an iterative attribution solver over match scores. Higher is better; scale is season-specific and not comparable across years.","fuel":"Attributed hub scoring contribution.","climb":"Attributed endgame tower points.","auto":"Attributed autonomous contribution.","penalty":"2026: foul points charged to this team's own alliance. Higher is worse. Subtracted inside the FSM blend: 0.8*(fuel + climb - penalty) + 0.2*fsm. Note the identically named 2025 field meant the OPPOSING alliance's foul count.","defense_score":"Qualification matches only. Estimated points suppressed from the opposing alliance across matches where this team was judged likely to be playing defense, weighted by that likelihood and shrunk toward zero when evidence is thin. Positive means opponents scored below prediction. null when the event has no played matches.","predicted":"true when the team has no 2026 event data yet and the FSM shown is a carryover forecast from prior seasons rather than a measurement."},"notes":["Team keys are always returned in TBA form (frc846) with a separate integer team_number. Both '846' and 'frc846' are accepted as input.","Event codes are accepted with or without the season prefix: 'casj' and '2026casj' are equivalent.","Numeric metrics are JSON numbers rounded to 2 decimal places, never strings.","algae and coral are omitted: they are not scored in the 2026 game."],"openapi":"/api/v1/openapi.json","source":"https://github.com/prak132/FSM"}