{
  "$comment": [
    "Football Docs Provider Registry",
    "",
    "Source types:",
    "  llms_txt     - llms.txt or llms-full.txt (purpose-built for LLMs, highest priority)",
    "  readthedocs  - ReadTheDocs site (structured, version-pinned)",
    "  github_docs  - GitHub repo docs/ folder or README",
    "  api_docs     - Standalone API documentation site",
    "  curated      - Hand-written by football-docs contributors",
    "",
    "To add a new provider: add an entry here, then run: npm run crawl -- --provider <name>",
    "",
    "not_indexed lists providers that were assessed and are not indexed, with the reason.",
    "search_docs names them when a query mentions them, so agents do not read unrelated results as an answer."
  ],
  "providers": {
    "espn": {
      "description": "Curated observations of ESPN soccer JSON endpoints for fixtures, match summaries, teams, standings, and league discovery",
      "display_name": "ESPN",
      "aliases": ["espn-soccer", "espn-fc"],
      "access_level": "public-web",
      "licence_status": "Publicly reachable endpoints are not an open-data licence or a supported developer API. Disney terms restrict automated extraction and commercial use without permission; verify applicable rights.",
      "public_safety_notes": "Original, dated structural observations only. Do not reproduce match payloads, commentary, articles, or images. Endpoint availability and schema are not guaranteed. Verification evidence contains selected field paths and types, not raw responses.",
      "version": null,
      "package": null,
      "sources": [
        { "url": "https://site.api.espn.com/apis/site/v2/sports/soccer/eng.1/scoreboard?dates=20250817", "type": "curated", "note": "ESPN-hosted soccer responses checked on 2026-09-06; eng.1 and esp.1 only. Manual structural verification, not an automatic documentation crawl." },
        { "url": "https://sports.core.api.espn.com/v2/sports/soccer/leagues?limit=5&page=1", "type": "curated", "note": "League resource references and pagination; listing does not establish per-league endpoint coverage." },
        { "url": "https://disneytermsofuse.com/english/", "type": "curated", "note": "US terms covering ESPN; other applicable terms and permissions must also be checked." }
      ],
      "last_crawled": "2026-09-06"
    },
    "statsbomb": {
      "description": "Event data provider with free open-data repository",
      "display_name": "StatsBomb",
      "aliases": ["stats-bomb", "statsbomb-open-data", "statsbomb-open"],
      "access_level": "public",
      "licence_status": "Public open-data repository and public documentation; verify upstream licence before redistributing raw data.",
      "public_safety_notes": "Index public docs and public-safe event/data-model notes only.",
      "version": null,
      "package": { "type": "github", "repo": "hudl/open-data" },
      "sources": [
        { "url": "https://github.com/hudl/open-data", "type": "github_docs", "note": "Formerly github.com/statsbomb/open-data; the old path redirects" },
        { "type": "curated", "note": "Cross-provider comparisons, coordinate conversion formulas" }
      ],
      "last_crawled": null
    },
    "opta": {
      "description": "Stats Perform event data (F24/F7 XML format)",
      "display_name": "Opta",
      "aliases": ["statsperform", "stats-perform", "opta-f24", "whoscored", "who-scored"],
      "access_level": "licensed",
      "licence_status": "No complete public API contract; curated notes must avoid restricted payloads.",
      "public_safety_notes": "Keep examples general and public-safe; do not include customer feeds or private paths.",
      "version": null,
      "package": null,
      "sources": [
        { "type": "curated", "note": "No public docs available; compiled from community knowledge" }
      ],
      "last_crawled": null
    },
    "wyscout": {
      "description": "Hudl/Wyscout event and match data",
      "display_name": "Wyscout",
      "aliases": ["hudl", "hudl-wyscout"],
      "access_level": "public-api-docs",
      "licence_status": "Public API documentation with commercial access requirements.",
      "public_safety_notes": "Use public API and glossary facts; avoid restricted customer payloads. Spec snapshots in specs/wyscout/ come from the public, unauthenticated https://apidocs.wyscout.com/ - see specs/README.md. Endpoint claims are validated against them in CI.",
      "version": "v3 (current) / v4 (preview)",
      "package": null,
      "sources": [
        { "url": "https://apidocs.wyscout.com/", "type": "api_docs", "note": "OpenAPI specs: assets/specs/prod/{current=v3,next=v4,legacy=v2}.yml" },
        { "url": "https://dataglossary.wyscout.com/", "type": "api_docs", "note": "Event/metric/concept data glossary" },
        { "type": "curated", "note": "kloppy loading, academic open-data (Pappalardo) pointers" }
      ],
      "last_crawled": "2026-06-03"
    },
    "sportmonks": {
      "description": "REST API for football fixtures, standings, and events",
      "display_name": "SportMonks",
      "aliases": ["sport-monks"],
      "access_level": "public-api-docs",
      "licence_status": "Public documentation; API access depends on SportMonks plan and key.",
      "public_safety_notes": "Document public endpoint shapes and plan caveats only.",
      "version": "v3",
      "package": null,
      "sources": [
        { "url": "https://docs.sportmonks.com/football", "type": "api_docs" },
        { "type": "curated", "note": "Event type mappings and field descriptions" }
      ],
      "exclude_categories": [
        "ai-developer-hub",
        "api-coach",
        "api-quick-nav",
        "chatgpt",
        "claude-code",
        "claude-desktop",
        "cursor",
        "cursor-rules",
        "example-builds",
        "example-prompts",
        "github-copilot",
        "llm-tools",
        "machine-readable-docs",
        "mcp-server-beta",
        "most-important-docs-pages",
        "players-teams-leagues",
        "prompts",
        "quick-start",
        "quick-start-guide",
        "resources",
        "search",
        "setup",
        "sportmonks-ai-docs",
        "squads",
        "standings-seasons-top-scorers",
        "tools",
        "vibe-coding",
        "windsurf"
      ],
      "last_crawled": null
    },
    "sportradar": {
      "description": "Commercial official soccer data API for schedules, live timelines, extended match/player/team statistics, probabilities, insights, and push feeds",
      "display_name": "Sportradar",
      "aliases": ["sport-radar", "sportradar-api", "soccer-extended", "sportradar-soccer"],
      "access_level": "public-api-docs",
      "licence_status": "Public documentation with commercial API access requirements.",
      "public_safety_notes": "Use official public docs and avoid licensed responses or credentials.",
      "version": "Soccer v4 / Soccer Extended v4",
      "package": null,
      "sources": [
        { "url": "https://developer.sportradar.com/soccer/docs/soccer-ig-api-basics", "type": "curated", "note": "Soccer v4 integration guide, coverage tiers, auth, API style, languages" },
        { "url": "https://developer.sportradar.com/soccer/reference/soccer-extended-overview", "type": "curated", "note": "Soccer Extended v4 endpoint map and integration links" },
        { "url": "https://developer.sportradar.com/soccer/reference/soccer-extended-sport-event-extended-summary", "type": "curated", "note": "Sport Event Extended Summary reference" },
        { "url": "https://developer.sportradar.com/soccer/reference/soccer-extended-sport-event-extended-timeline", "type": "curated", "note": "Sport Event Extended Timeline fields and coordinates" },
        { "type": "curated", "note": "Project-oriented retrieval notes for charting, live match stories, IDs and official MCP usage" }
      ],
      "llms_indexes": [
        "https://developer.sportradar.com/soccer/docs/llms.txt",
        "https://developer.sportradar.com/soccer/reference/soccer-extended/llms.txt"
      ],
      "exclude_categories": [
        "soccer-extended-change-log",
        "soccer-extended-change-log-archive",
        "soccer-extended-statistics-summary",
        "soccer-extended-probabilities-feeds",
        "soccer-extended-live-probabilities",
        "soccer-extended-season-probabilities",
        "soccer-extended-season-outright-probabilities",
        "soccer-extended-sport-event-probabilities",
        "soccer-extended-sport-event-upcoming-probabilities",
        "soccer-extended-timeline-probabilities"
      ],
      "exclude_sections": ["Probabilities", "Odds"],
      "last_crawled": "2026-09-24"
    },
    "transfermarkt": {
      "description": "Public football entity pages for players, teams, competitions, matches, transfers, and market values",
      "display_name": "Transfermarkt",
      "aliases": [],
      "access_level": "public-web",
      "licence_status": "Public website evidence; respect upstream terms and avoid scraped payload dumps.",
      "public_safety_notes": "Use identity-surface facts and public-safe observations only.",
      "version": null,
      "package": null,
      "sources": [
        { "type": "curated", "note": "Public website identity surfaces and provider-quirk notes" }
      ],
      "last_crawled": null
    },
    "transferroom": {
      "description": "Commercial football transfer-market and recruitment API for player, coach, team, transfer, pitch, requirement, and injury data",
      "display_name": "TransferRoom",
      "aliases": ["transfer-room"],
      "access_level": "public-api-docs",
      "licence_status": "Public API documentation with commercial access requirements.",
      "public_safety_notes": "Index public docs and general access-tier caveats only.",
      "version": null,
      "package": null,
      "sources": [
        { "url": "https://www.transferroom.com/api-docs", "type": "api_docs", "note": "Public API documentation page; embeds the current docs application" },
        { "url": "https://proud-island-049eed003.2.azurestaticapps.net/", "type": "api_docs", "note": "Embedded API documentation application the public docs page loads in an iframe; replaced a Vercel-hosted app that went offline in 2026" },
        { "type": "curated", "note": "Endpoint grouping, access-tier, data model, and identity-resolution guidance from the public docs" }
      ],
      "last_crawled": "2026-07-09"
    },
    "besoccer": {
      "description": "Spanish football data provider; single-endpoint client API covering competitions, matches, teams, players, transfers and live scores",
      "display_name": "BeSoccer",
      "aliases": ["be-soccer", "besoccerapps", "resultados-de-futbol"],
      "access_level": "public-api-docs",
      "licence_status": "Public Postman documentation; API access is commercial and key-gated.",
      "public_safety_notes": "Document the public request surface only (base URL, req vocabulary, parameters, access levels). The published Postman collection is mostly saved response bodies containing BeSoccer match data - derive from it, never mirror it. Truth is generated by scripts/gen_postman_truth.py.",
      "version": "Postman collection \"Apiclient\"",
      "package": null,
      "sources": [
        { "url": "https://documenter.getpostman.com/view/6414020/2s93JwM1t4", "type": "api_docs", "note": "Public Postman collection: 57 req values across three access levels, with per-request query parameters" },
        { "type": "curated", "note": "Request surface, access-level grouping and coverage-window notes derived from the collection" }
      ],
      "last_crawled": "2026-07-31"
    },
    "driblab": {
      "description": "Spanish football analytics provider; REST API of aggregated player, team, season and match metrics, plus proprietary Arrigo line-breaking metrics",
      "display_name": "Driblab",
      "aliases": ["driblab-pro", "driblab-api"],
      "access_level": "public-api-docs",
      "licence_status": "Public API guide; API access requires a Driblab PRO subscription and token.",
      "public_safety_notes": "Document the public request surface only (base URL, endpoint paths, parameters, field and metric names). The guide's response samples carry real player and match data and presigned S3 URLs - derive from them, never mirror them. Truth is generated by scripts/gen_notion_truth.py, which keeps key names and no values.",
      "version": "API 1.0",
      "package": null,
      "sources": [
        { "url": "https://driblab.notion.site/Driblab-API-1-0-Guide-EN-65ce257f83b5451fb79896b01d41aede", "type": "api_docs", "note": "Public Notion guide: 59 operations across 58 paths, with per-endpoint parameter and response-field tables" },
        { "type": "curated", "note": "Metric families, naming conventions and pagination coverage derived from the guide" }
      ],
      "last_crawled": "2026-09-09"
    },
  "thesportsdb": {
      "description": "Open crowd-sourced sports database and JSON API used for football live scores, schedules, events, teams, players, artwork, and highlights",
      "display_name": "TheSportsDB",
      "aliases": ["tsdb", "the-sports-db", "the-sportsdb", "sportsdb"],
      "access_level": "public-api-docs",
      "licence_status": "Public API documentation; some features require paid access or keys.",
      "public_safety_notes": "Use public API docs and clearly mark live-score/metadata limits.",
      "version": "v1 / v2",
      "package": null,
      "sources": [
        { "url": "https://www.thesportsdb.com/docs_api_guide", "type": "api_docs", "note": "Official API guide covering v1/v2 auth, base URLs, rate limits, endpoint families, and extras" },
        { "url": "https://www.thesportsdb.com/docs_api_data", "type": "api_docs", "note": "Official data guide for livescore fields and event status codes" },
        { "url": "https://www.thesportsdb.com/docs_api_examples", "type": "api_docs", "note": "Official examples for v1 lookups/searches and v2 livescore/header authentication" },
        { "type": "curated", "note": "Project-oriented live-score/scorigami notes and team-name mapping caveats from the public docs" }
      ],
      "last_crawled": "2026-07-09"
    },
    "metric-cards": {
      "description": "Metric cards: one checked definition per football metric (xG, npxG, xG assisted, xA, PPDA, progressive passes and carries, xT, VAEP, field tilt, pass completion), with each published variant, its source and a checked quote, and reference code tested on public open data. Read one with get_metric.",
      "display_name": "Metric cards",
      "aliases": ["metrics", "metric", "metric-card", "methods"],
      "access_level": "open-data",
      "licence_status": "Written for football-docs from public sources. Each variant cites its source and quotes one short passage with attribution; reference test values come from StatsBomb open data, downloaded at test time.",
      "public_safety_notes": "Public sources only: papers, public blogs, providers' public glossaries, public open data. No values or observations from private or licensed data. Generated from metrics/cards/*.toml by scripts/gen_metric_cards.py; edit the TOML, not docs/metric-cards/.",
      "version": null,
      "package": null,
      "sources": [
        {
          "type": "curated",
          "note": "metrics/cards/*.toml, rendered to docs/metric-cards/ and metrics/cards.json"
        }
      ],
      "last_crawled": null
    },
    "reep": {
      "description": "Open football identity register: stable Reep IDs for players, coaches, referees, teams, competitions, seasons, stages and matches, with a crosswalk of provider IDs. Free CC0 download (DuckDB, CSV) and a keyed API",
      "display_name": "Reep",
      "aliases": ["reep-football", "reep.football"],
      "access_level": "open-data",
      "licence_status": "Releases are CC0 1.0, provider-ID bridges included. The download needs no key. API keys are issued by hand on request (getintouch+nutmeg@withqwerty.com); there is no self-service sign-up.",
      "public_safety_notes": "Document the current register only (reep.football, /api/v1). Spec snapshot in specs/reep/ comes from the public, unauthenticated https://reep.football/openapi.yaml - see specs/README.md. Endpoint claims are validated against it in CI. Do not hard-code release counts; they change weekly.",
      "version": "v1",
      "package": null,
      "sources": [
        { "url": "https://reep.football/openapi.yaml", "type": "curated", "note": "Public unauthenticated OpenAPI document for /api/v1, mirrored at specs/reep/openapi.yaml; endpoint docs are validated against it" },
        { "url": "https://reep.football/get-started", "type": "curated", "note": "Download vs API, DuckDB crosswalk queries, namespaces" },
        { "url": "https://reep.football/id-policy", "type": "curated", "note": "Reep ID stability: redirects and tombstones" }
      ],
      "last_crawled": "2026-09-22"
    },
    "soccerdonna": {
      "description": "Public women's football entity pages, match reports, competition pages, player profiles, and staff profiles",
      "display_name": "Soccerdonna",
      "aliases": ["soccer-donna"],
      "access_level": "public-web",
      "licence_status": "Public website evidence; respect upstream terms and avoid scraped payload dumps.",
      "public_safety_notes": "Use public identity-surface facts and coverage caveats only.",
      "version": null,
      "package": null,
      "sources": [
        { "type": "curated", "note": "Public website identity surfaces and women's football matching notes" }
      ],
      "last_crawled": null
    },
    "fotmob": {
      "description": "Consumer-facing football fixtures, teams, competitions, player profiles, lineups, and match statistics",
      "display_name": "FotMob",
      "aliases": [],
      "access_level": "public-web",
      "licence_status": "Public app/site evidence; no official public data API contract is indexed.",
      "public_safety_notes": "Document public identity surfaces and avoid private app internals.",
      "version": null,
      "package": null,
      "sources": [
        { "type": "curated", "note": "Public website and undocumented endpoint identity-surface notes" }
      ],
      "last_crawled": null
    },
    "fmdb-pro": {
      "description": "Sports Interactive commercial football database API for clubs, players, people, competitions, geography, values, appearances, and GBE-related fields",
      "display_name": "FMDB Pro",
      "aliases": ["fmdb"],
      "access_level": "public-api-docs",
      "licence_status": "Public API documentation with commercial access requirements.",
      "public_safety_notes": "Use public API documentation only; do not include customer keys or private responses. Spec snapshot in specs/fmdb-pro/ comes from the public, unauthenticated https://api.fmdb.pro/api/openapi - see specs/README.md. Endpoint claims are validated against it in CI.",
      "version": "latest",
      "package": null,
      "sources": [
        { "url": "https://app.fmdb.pro/docs", "type": "api_docs", "note": "Redoc/Swagger documentation UI" },
        { "url": "https://api.fmdb.pro/api/openapi", "type": "api_docs", "note": "OpenAPI 3.0.2 spec; local snapshot at specs/fmdb-pro/openapi.json" },
        { "type": "curated", "note": "Endpoint grouping, data model, and identity-resolution guidance from the OpenAPI spec" }
      ],
      "last_crawled": "2026-07-09"
    },
    "impect": {
      "description": "German football data provider; Packing (bypassed opponents) and pxT possession-value metrics. Documented from the public open-data repository only",
      "display_name": "Impect",
      "aliases": [],
      "access_level": "open-data",
      "licence_status": "Open-data repository governed by Impect's Terms of Use (LICENSE.pdf): analytical and research use only, no redistribution or commercial use, attribution to Impect required. Impect reserves all rights in its data, documentation and APIs.",
      "public_safety_notes": "Document the open-data repository ONLY. Do not document, crawl or infer Impect's commercial API surface (endpoints, authentication, update/delete feeds). All enum values, KPI names and field names must be validated against the open-data repository before publishing - see scripts/validate-impect.ts.",
      "version": "open-data snapshot (Bundesliga 2023/24, dataVersion V3)",
      "package": null,
      "sources": [
        { "url": "https://github.com/ImpectAPI/open-data", "type": "github", "note": "Sole permitted source: sample datasets, Documentation.pdf, kpi_definitions.json" },
        { "type": "curated", "note": "Schema, enum and KPI documentation derived from the open-data repository and validated against it" }
      ],
      "last_crawled": "2026-07-30"
    },
    "skillcorner": {
      "description": "Commercial broadcast-tracking, physical and Game Intelligence (off-ball runs, on-ball engagements) data provider",
      "display_name": "SkillCorner",
      "aliases": ["skill-corner"],
      "access_level": "public-api-docs",
      "licence_status": "Public API documentation with commercial access requirements.",
      "public_safety_notes": "Document public API concepts and avoid restricted tracking payloads. Spec snapshot in specs/skillcorner/ comes from the public, unauthenticated https://www.skillcorner.com/apidocs.json - see specs/README.md. Endpoint claims are validated against it in CI.",
      "version": "tracking v3 / physical v3 / dynamic events v3",
      "package": { "type": "pypi", "name": "skillcorner", "repo": "SkillCorner/skillcorner-toolkit" },
      "sources": [
        { "url": "https://www.skillcorner.com/apidocs.json", "type": "openapi", "note": "Public unauthenticated OpenAPI 3.1 document, mirrored at specs/skillcorner/skillcorner_openapi.json; the HTML docs UI at skillcorner.com/api/docs/ now needs a customer login" },
        { "url": "https://skillcorner.crunch.help/en", "type": "api_docs", "note": "Glossary & metric definitions" },
        { "type": "curated", "note": "Identity-resolution guidance" }
      ],
      "last_crawled": "2026-06-03"
    },
    "kloppy": {
      "description": "Python library for standardising football data across providers",
      "display_name": "kloppy",
      "aliases": ["secondspectrum", "second-spectrum"],
      "access_level": "open-source",
      "licence_status": "Open-source library documentation; provider support may depend on licensed input files.",
      "public_safety_notes": "Use public library docs and general provider-mapping guidance only.",
      "version": "3.19.1",
      "package": { "type": "pypi", "name": "kloppy" },
      "sources": [
        { "url": "https://kloppy.pysport.org/", "type": "readthedocs" },
        { "url": "https://github.com/PySport/kloppy", "type": "github_docs" }
      ],
      "last_crawled": null
    },
    "socceraction": {
      "description": "Python library for SPADL representation and VAEP/xT action valuation",
      "display_name": "socceraction",
      "aliases": ["soccer-action"],
      "access_level": "open-source",
      "licence_status": "Open-source library documentation.",
      "public_safety_notes": "Use public library docs and open research concepts only.",
      "version": "1.5.3",
      "package": { "type": "pypi", "name": "socceraction" },
      "sources": [
        { "url": "https://socceraction.readthedocs.io/en/latest/", "type": "readthedocs" },
        { "url": "https://github.com/ML-KULeuven/socceraction", "type": "github_docs" }
      ],
      "last_crawled": null
    },
    "soccerdata": {
      "description": "Python library for scraping football data from popular websites",
      "display_name": "soccerdata",
      "aliases": ["soccer-data", "sofascore", "sofa-score"],
      "access_level": "open-source",
      "licence_status": "Open-source library documentation; upstream site terms vary.",
      "public_safety_notes": "Describe supported public sources and avoid private scraper state.",
      "version": "1.9.1",
      "package": { "type": "pypi", "name": "soccerdata" },
      "sources": [
        { "url": "https://soccerdata.readthedocs.io/en/latest/", "type": "readthedocs" },
        { "url": "https://github.com/probberechts/soccerdata", "type": "github_docs" }
      ],
      "last_crawled": null
    },
    "mplsoccer": {
      "description": "Python library for drawing soccer pitches and visualisations with matplotlib",
      "display_name": "mplsoccer",
      "aliases": ["mpl-soccer"],
      "access_level": "open-source",
      "licence_status": "Open-source library documentation.",
      "public_safety_notes": "Use public plotting docs and examples only.",
      "version": "1.8.1",
      "package": { "type": "pypi", "name": "mplsoccer" },
      "sources": [
        { "url": "https://mplsoccer.readthedocs.io/en/latest/", "type": "readthedocs" },
        { "url": "https://github.com/andrewRowlinson/mplsoccer", "type": "github_docs" }
      ],
      "last_crawled": null
    },
    "databallpy": {
      "description": "Python library for loading, synchronising, and analysing tracking and event data",
      "display_name": "databallpy",
      "aliases": ["data-ball-py", "databall-py", "metrica", "metrica-sports", "metricasports", "sportec", "dfl", "sportec-dfl", "open-dfl", "tracab"],
      "access_level": "open-source",
      "licence_status": "Open-source library documentation; provider support may depend on licensed input files.",
      "public_safety_notes": "Use public docs and open-data provider examples only.",
      "version": "0.8.1",
      "package": { "type": "pypi", "name": "databallpy" },
      "sources": [
        { "url": "https://databallpy.readthedocs.io/en/latest/", "type": "readthedocs" },
        { "url": "https://github.com/Alek050/databallpy", "type": "github_docs" }
      ],
      "last_crawled": null
    },
    "floodlight": {
      "description": "Python library for spatial football data analysis (tracking, pitch control, metrics)",
      "display_name": "floodlight",
      "aliases": [
        "kinexon"
      ],
      "access_level": "open-source",
      "licence_status": "Open-source library documentation.",
      "public_safety_notes": "Use public library docs and open examples only.",
      "version": "1.2.0",
      "package": { "type": "pypi", "name": "floodlight" },
      "sources": [
        { "url": "https://floodlight.readthedocs.io/en/latest/", "type": "readthedocs" },
        { "url": "https://github.com/floodlight-sports/floodlight", "type": "github_docs" }
      ],
      "last_crawled": "2026-08-11"
    },
    "fast-forward": {
      "description": "Rust-powered loader that reads tracking data from 12 providers into Polars, PySpark, or Arrow",
      "display_name": "fast-forward",
      "aliases": ["fastforward", "fast-forward-football", "unravel-fast-forward", "hawkeye", "hawk-eye", "scisports", "signality", "respovision", "gradientsports", "optavision"],
      "access_level": "open-source",
      "licence_status": "Open-source library documentation (BSD-3-Clause); provider support depends on licensed input files.",
      "public_safety_notes": "Use public library docs and general provider-format guidance only.",
      "version": "0.3.0",
      "package": { "type": "pypi", "name": "fast-forward-football", "module": "fastforward" },
      "sources": [
        { "url": "https://fast-forward.readthedocs.io/en/latest/", "type": "readthedocs" },
        { "url": "https://github.com/UnravelSports/fast-forward", "type": "github_docs" }
      ],
      "last_crawled": "2026-07-31"
    },
    "unravelsports": {
      "description": "Python library turning tracking data into graph representations, pressing intensity, and formation detection",
      "display_name": "unravelsports",
      "aliases": ["unravel", "unravel-sports", "bigdatabowl", "big-data-bowl"],
      "access_level": "open-source",
      "licence_status": "Open-source library documentation (MPL-2.0); provider support depends on licensed input files.",
      "public_safety_notes": "Use public library docs and open-data examples only.",
      "version": "1.2.1",
      "package": { "type": "pypi", "name": "unravelsports", "module": "unravel" },
      "sources": [
        { "url": "https://unravelsports.readthedocs.io/en/latest/", "type": "readthedocs" },
        { "url": "https://github.com/UnravelSports/unravelsports", "type": "github_docs" }
      ],
      "last_crawled": "2026-07-31"
    },
    "free-sources": {
      "description": "Free football data sources (FBref, Understat, ClubElo, football-data.co.uk)",
      "display_name": "Free sources",
      "aliases": ["fbref", "football-reference", "understat", "clubelo", "club-elo", "football-data", "football-data-uk", "football-data-co-uk", "engsoccerdata", "free", "free-source"],
      "access_level": "public-web",
      "licence_status": "Public sources with differing terms; verify upstream terms before redistribution.",
      "public_safety_notes": "Document source shapes, joins, and public-safe usage caveats only.",
      "version": null,
      "package": null,
      "sources": [
        { "type": "curated", "note": "Overview and access patterns for free data sources" }
      ],
      "last_crawled": null
    },
    "statsports": {
      "description": "Wearable GPS tracking (Apex devices, Sonra software); third-party API for a customer's session, player, drill KPI and raw GPS/IMU data",
      "display_name": "STATSports",
      "aliases": ["statsports-sonra", "sonra", "apex", "statsports-apex", "statsports-pro-series"],
      "access_level": "public-api-docs",
      "licence_status": "The OpenAPI specs are public and need no login, but STATSports publishes no licence for its API documentation: the specs' license field is named 'Privacy Policy' and its link returned 404 (checked 2026-09-30). Data access needs a thirdPartyApiId; the spec does not say how one is issued.",
      "public_safety_notes": "The API returns personal and health data about a customer's athletes (names, date of birth, gender, height, weight, heart rate). Document field names and types only; never include athlete payloads or sample values. The help centre (elitesupport.statsports.com) blocks non-browser clients and is not a source. Spec snapshots in specs/statsports/ come from the public Swagger UI - see specs/README.md. Endpoint claims are validated against them in CI.",
      "version": "3rd Party API v7 (v5 and v6 also documented)",
      "package": null,
      "sources": [
        { "url": "https://statsportsproseries.com/thirdpartyapi/swagger/v7/swagger.json", "type": "openapi", "note": "Public unauthenticated OpenAPI 3.0.1 spec, mirrored at specs/statsports/thirdpartyapi-v7.json" },
        { "url": "https://statsportsproseries.com/thirdpartyapi/swagger/v6/swagger.json", "type": "openapi", "note": "v6 spec (marked deprecated in its description), mirrored at specs/statsports/thirdpartyapi-v6.json" },
        { "url": "https://statsportsproseries.com/thirdpartyapi/swagger/v5/swagger.json", "type": "openapi", "note": "v5 spec (marked deprecated in its description), mirrored at specs/statsports/thirdpartyapi-v5.json" },
        { "type": "curated", "note": "Access, endpoint, data-model, drill KPI, identity and provenance docs written from the specs; Abs and Rel metric definitions quoted from a statsports.com article" }
      ],
      "last_crawled": "2026-09-30"
    },
    "firstbeat": {
      "description": "Heart-rate and HRV monitoring (Firstbeat Sports sensors and Sports Cloud); Cloud API for a customer's athletes, measurements, sessions and analysis variables such as TRIMP and EPOC",
      "display_name": "Firstbeat Sports",
      "aliases": ["firstbeat-sports", "firstbeat-cloud-api", "firstbeat-sports-cloud"],
      "access_level": "public-api-docs",
      "licence_status": "The documentation site and OpenAPI spec are public and need no login, but Firstbeat publishes no licence for reusing them (the site shows only a copyright notice, checked 2026-09-30). Direct API access is for Premium+ customers; other levels connect through API partners. A Coach must also grant access in Sports Cloud.",
      "public_safety_notes": "The API returns personal and health data (names, email addresses, heart rate, HRV, sleep and recovery measures). Document field and variable names, units and types only; never include athlete payloads or sample values. Spec snapshot in specs/firstbeat/ comes from the public https://apidocs.firstbeat.com/assets/api-specification/openapi.json - see specs/README.md. Endpoint claims are validated against it in CI.",
      "version": "Cloud API 1.1.0",
      "package": null,
      "sources": [
        { "url": "https://apidocs.firstbeat.com/assets/api-specification/openapi.json", "type": "openapi", "note": "Public unauthenticated OpenAPI 3.0.1 spec, mirrored at specs/firstbeat/openapi.json" },
        { "type": "curated", "note": "Access, endpoint, data-model, identity and provenance docs from the spec; variable names, units and descriptions copied from https://apidocs.firstbeat.com/variables/; registration and usage limits from the public Getting Started and Usage Limits pages" }
      ],
      "last_crawled": "2026-09-30"
    },
    "hawkin-dynamics": {
      "description": "Force plates; Force Platform API for an organisation's test results (jumps, isometric tests), force-time data, athletes and per-test-type metrics",
      "display_name": "Hawkin Dynamics",
      "aliases": ["hawkin", "hawkin-connect", "hawkin-force-platform"],
      "access_level": "public-api-docs",
      "licence_status": "The API reference, its inline OpenAPI document and metrics.json are public and need no login, but Hawkin publishes no licence for reusing them; its Hawkin Connect terms say the integrations' documentation is Hawkin Dynamics' property (checked 2026-09-30). API access needs an organisation administrator's token.",
      "public_safety_notes": "The API returns personal and health data (names, date of birth, height, body weight, force and power measures). Document field names, metric ids, labels and units only; never include athlete payloads or sample values. Spec snapshots in specs/hawkin-dynamics/ come from the public API reference page - see specs/README.md. Endpoint claims are validated against them in CI.",
      "version": "Force Platform API 1.15",
      "package": null,
      "sources": [
        { "url": "https://connect.hawkindynamics.com/api", "type": "openapi", "note": "Public API reference with the OpenAPI 3.0.3 document inline; extracted to specs/hawkin-dynamics/openapi.json by scripts/extract_hawkin_openapi.mjs" },
        { "type": "curated", "note": "Access, endpoint, data-model, identity and provenance docs from the spec; test metrics copied from the public https://connect.hawkindynamics.com/assets/metrics.json (mirrored at specs/hawkin-dynamics/metrics.json)" }
      ],
      "last_crawled": "2026-09-30"
    },
    "vald": {
      "description": "Athlete testing devices (ForceDecks, NordBord, ForceFrame, SmartSpeed, DynaMo, HumanTrak); one external API per product plus Tenants and Profiles APIs",
      "display_name": "VALD",
      "aliases": ["vald-performance", "vald-hub", "forcedecks", "nordbord", "forceframe", "smartspeed", "vald-dynamo", "humantrak", "valdr"],
      "access_level": "public-api-docs",
      "licence_status": "The eight OpenAPI specs are public and need no login, but VALD publishes no licence for reusing them (checked 2026-09-30). API access needs client credentials that VALD issues.",
      "public_safety_notes": "The APIs return personal and health data (names, date of birth, sex, email, height, weight, strength and movement measures). Document field names and types only; never include athlete payloads or sample values. The help centre (support.vald.com) returns a bot challenge to non-browser clients and is not a source. Spec snapshots in specs/vald/ come from the public euw Swagger hosts - see specs/README.md. Endpoint claims are validated against them in CI.",
      "version": "ForceDecks v2019q3; NordBord, ForceFrame, SmartSpeed, DynaMo, Tenants and Profiles v1; HumanTrak v2",
      "package": null,
      "sources": [
        { "url": "https://prd-euw-api-externaltenants.valdperformance.com/swagger/v1/swagger.json", "type": "openapi", "note": "Tenants API, mirrored at specs/vald/externaltenants.json" },
        { "url": "https://prd-euw-api-externalprofile.valdperformance.com/swagger/v1/swagger.json", "type": "openapi", "note": "Profiles API, mirrored at specs/vald/externalprofile.json" },
        { "url": "https://prd-euw-api-extforcedecks.valdperformance.com/swagger/v2019q3/swagger.json", "type": "openapi", "note": "ForceDecks API, mirrored at specs/vald/extforcedecks.json" },
        { "url": "https://prd-euw-api-externalnordbord.valdperformance.com/swagger/v1/swagger.json", "type": "openapi", "note": "NordBord API, mirrored at specs/vald/externalnordbord.json" },
        { "url": "https://prd-euw-api-externalforceframe.valdperformance.com/swagger/v1/swagger.json", "type": "openapi", "note": "ForceFrame API, mirrored at specs/vald/externalforceframe.json" },
        { "url": "https://prd-euw-api-extsmartspeed.valdperformance.com/swagger/v1/swagger.json", "type": "openapi", "note": "SmartSpeed API, mirrored at specs/vald/extsmartspeed.json" },
        { "url": "https://prd-euw-api-extdynamo.valdperformance.com/swagger/v1/swagger.json", "type": "openapi", "note": "DynaMo API, mirrored at specs/vald/extdynamo.json" },
        { "url": "https://prd-euw-api-externalhumantrakv2.valdperformance.com/swagger/v2/swagger.json", "type": "openapi", "note": "HumanTrak API, mirrored at specs/vald/externalhumantrakv2.json" },
        { "type": "curated", "note": "Access, endpoint, schema, identity and provenance docs from the specs; token request, region codes and paging behaviour from VALD's MIT-licensed valdr 4.0.0 R package (https://cran.r-project.org/package=valdr)" }
      ],
      "last_crawled": "2026-09-30"
    }
  },
  "not_indexed": {
    "catapult": {
      "display_name": "Catapult",
      "aliases": [
        "catapult-sports",
        "catapult-connect",
        "openfield",
        "catapult-openfield"
      ],
      "reason": "Catapult's OpenField Connect API docs are public but not licensed for republishing, and the docs site disallows crawling (checked 2026-09-30). Impect, which Catapult owns, is indexed."
    },
    "kitman-labs": {
      "display_name": "Kitman Labs",
      "aliases": [
        "kitman"
      ],
      "reason": "Kitman Labs gives its API documentation to customers only (checked 2026-09-30)."
    },
    "inbody": {
      "display_name": "InBody",
      "aliases": [
        "lookinbody"
      ],
      "reason": "InBody's API documentation needs a LookinBody login (checked 2026-09-30)."
    },
    "wimu": {
      "display_name": "WIMU (Hudl)",
      "aliases": [
        "hudl-wimu",
        "wimu-pro",
        "realtrack"
      ],
      "reason": "Hudl has not published WIMU API reference documentation (checked 2026-09-30)."
    },
    "zone7": {
      "display_name": "Zone7",
      "aliases": [],
      "reason": "Zone7 publishes no API documentation (checked 2026-09-30)."
    }
  }
}
