{
    "openapi": "3.1.0",
    "info": {
        "title": "Darts API",
        "version": "1",
        "summary": "Darts results, statistics, ratings, prices and probabilities, match by match.",
        "description": "Every result back to 1994, with averages, checkouts, 180s, ratings and closing prices.\n\nSend your key as a bearer token. Free keys are made in one click at https://dartsapi.com/free-api-key.\n\nLimits by plan: Free key: 60 a minute, 500 a day; Live: 120 a minute, 250,000 a month; Archive: 120 a minute, 250,000 a month; Complete: 180 a minute, 600,000 a month; Analyst: 240 a minute, 1,000,000 a month. Every response carries X-RateLimit-* and X-Allowance-* headers.",
        "termsOfService": "https://dartsapi.com/terms",
        "contact": {
            "name": "Darts API support",
            "url": "https://dartsapi.com/support"
        }
    },
    "externalDocs": {
        "description": "Documentation",
        "url": "https://dartsapi.com/documentation"
    },
    "servers": [
        {
            "url": "https://api.dartsapi.com"
        }
    ],
    "security": [
        {
            "bearer": []
        }
    ],
    "tags": [
        {
            "name": "Reference and coverage"
        },
        {
            "name": "Editions"
        },
        {
            "name": "Players"
        },
        {
            "name": "Matches"
        },
        {
            "name": "Ratings"
        },
        {
            "name": "Markets"
        },
        {
            "name": "Probability and props"
        },
        {
            "name": "Leaders, sync and usage"
        },
        {
            "name": "History"
        },
        {
            "name": "Rankings"
        }
    ],
    "paths": {
        "/v1/coverage": {
            "get": {
                "operationId": "coverage",
                "summary": "Coverage",
                "description": "Measured coverage, with close seasons told apart from real gaps.\n\nPlans: Free key, Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/coverage",
                "tags": [
                    "Reference and coverage"
                ],
                "parameters": [
                    {
                        "name": "season",
                        "in": "query",
                        "required": false,
                        "description": "Just one season, such as 2025. Leave it out for every season.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "competition_id",
                        "in": "query",
                        "required": false,
                        "description": "Just one competition.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "held": {
                                            "matches": 437996,
                                            "players": 37973,
                                            "players_with_full_statistics": 10106,
                                            "competitions": 1015,
                                            "events": 5120,
                                            "first_match": "1994-01-02",
                                            "last_match": "2026-09-30",
                                            "statistics": [
                                                "three_dart_avg",
                                                "first_9_avg",
                                                "first_3_avg"
                                            ]
                                        },
                                        "by_season": [
                                            {
                                                "season": 2025,
                                                "matches": 65925,
                                                "events": 701,
                                                "three_dart_avg": {
                                                    "both_players_pct": 100
                                                },
                                                "full_statistics": {
                                                    "either_player_pct": 94.6,
                                                    "both_players_pct": 76.7
                                                }
                                            }
                                        ],
                                        "note": "The three-dart average is held for almost every match. The full set of statistics is held for players with 25 or more matches, and for anyone who has played a major, so a match between two newcomers carries a result and averages but not the rest."
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "measured_at": "2026-09-30T18:08:03Z",
                                        "data_as_of": "2026-09-30T18:38:31Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Free key",
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/coverage"
                }
            }
        },
        "/v1/organisers": {
            "get": {
                "operationId": "organisers",
                "summary": "Organisers",
                "description": "Tour bodies and what each runs.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/organisers",
                "tags": [
                    "Reference and coverage"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": [
                                        {
                                            "organiser": "unattributed",
                                            "competitions": 1004,
                                            "events": 5013,
                                            "first_event": "1994-01-02",
                                            "last_event": "2026-10-04"
                                        },
                                        {
                                            "organiser": "pdc_development",
                                            "competitions": 4,
                                            "events": 48,
                                            "first_event": "2021-07-02",
                                            "last_event": "2021-11-07"
                                        }
                                    ],
                                    "meta": {
                                        "count": 5,
                                        "plan": "analyst",
                                        "data_as_of": "2026-09-30T18:38:31Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/organisers"
                }
            }
        },
        "/v1/competitions": {
            "get": {
                "operationId": "competitions",
                "summary": "Competitions",
                "description": "Every competition with its tier and format.\n\nPlans: Free key, Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/competitions",
                "tags": [
                    "Reference and coverage"
                ],
                "parameters": [
                    {
                        "name": "organiser",
                        "in": "query",
                        "required": false,
                        "description": "Only this tour body, as /v1/organisers names it: pdc, pdc_development, pdc_affiliate, bdo or unattributed.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "tier",
                        "in": "query",
                        "required": false,
                        "description": "Only this tier: majors, players_championship, european_tour, world_series, qualifiers, development_tour, challenge_tour, womens_series, junior, regional, wdf_platinum, wdf_gold, wdf_silver, wdf_bronze, and so on.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "required": false,
                        "description": "Search text. Accents and particles are folded, so \"van gerwen\" finds Michael van Gerwen.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "How many to return. Default 50, at most 200.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "cursor",
                        "in": "query",
                        "required": false,
                        "description": "Carry on from here: pass back meta.next_cursor exactly as it came.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": [
                                        {
                                            "competition_id": "cp_X63B14",
                                            "name": "25 Bull Darts UK Open Qualifier",
                                            "organiser": null,
                                            "tier": "qualifiers",
                                            "editions": 9,
                                            "first_event": "2024-12-14",
                                            "last_event": "2025-02-15"
                                        },
                                        {
                                            "competition_id": "cp_QEA2F5",
                                            "name": "AB Darts Open Men",
                                            "organiser": null,
                                            "tier": "wdf_bronze",
                                            "editions": 1,
                                            "first_event": "2026-03-22",
                                            "last_event": "2026-03-22"
                                        }
                                    ],
                                    "meta": {
                                        "count": 3,
                                        "next_cursor": "c_gAYXRfVSTL1nvUIddwq7",
                                        "plan": "analyst",
                                        "data_as_of": "2026-09-30T18:38:31Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Free key",
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/competitions"
                }
            }
        },
        "/v1/competitions/{competition_id}": {
            "get": {
                "operationId": "competition",
                "summary": "A competition",
                "description": "One competition, its editions and how its market behaves.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/competition",
                "tags": [
                    "Reference and coverage"
                ],
                "parameters": [
                    {
                        "name": "competition_id",
                        "in": "path",
                        "required": true,
                        "description": "A competition, as cp_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "competition_id": "cp_2YJ4TA",
                                        "name": "European Tour",
                                        "editions": [
                                            {
                                                "event_id": "ev_9A6CF7",
                                                "date": "2026-09-13",
                                                "organiser": null,
                                                "tier": "european_tour",
                                                "matches": 47
                                            },
                                            {
                                                "event_id": "ev_15WNS6",
                                                "date": "2026-09-06",
                                                "organiser": null,
                                                "tier": "european_tour",
                                                "matches": 47
                                            },
                                            {
                                                "event_id": "ev_STY6YB",
                                                "date": "2026-08-30",
                                                "organiser": null,
                                                "tier": "european_tour",
                                                "matches": 47
                                            }
                                        ]
                                    },
                                    "meta": {
                                        "count": 100,
                                        "plan": "analyst",
                                        "data_as_of": "2026-09-30T18:38:31Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/competition"
                }
            }
        },
        "/v1/calendar": {
            "get": {
                "operationId": "calendar",
                "summary": "Calendar",
                "description": "Editions across a date range with status.\n\nPlans: Free key, Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/calendar",
                "tags": [
                    "Reference and coverage"
                ],
                "parameters": [
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Earliest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Latest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "description": "completed, scheduled or no_results_held.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "organiser",
                        "in": "query",
                        "required": false,
                        "description": "Only this tour body, as /v1/organisers names it: pdc, pdc_development, pdc_affiliate, bdo or unattributed.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "How many to return. Default 50, at most 200.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "cursor",
                        "in": "query",
                        "required": false,
                        "description": "Carry on from here: pass back meta.next_cursor exactly as it came.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": [
                                        {
                                            "event_id": "ev_0ATG2W",
                                            "competition_id": "cp_7B1KJZ",
                                            "name": "World Grand Prix",
                                            "date": "2026-10-04",
                                            "organiser": null,
                                            "tier": "tour_other",
                                            "matches": 12,
                                            "status": "completed"
                                        },
                                        {
                                            "event_id": "ev_H1H9W3",
                                            "competition_id": "cp_2WREDF",
                                            "name": "MODUS Super Series #15 Week",
                                            "date": "2026-10-03",
                                            "organiser": null,
                                            "tier": "regional",
                                            "matches": 15,
                                            "status": "completed"
                                        }
                                    ],
                                    "meta": {
                                        "count": 3,
                                        "next_cursor": "c_VSwJ283LAW1dp4pnhR-OcFIOmWfR2ihM",
                                        "plan": "analyst",
                                        "data_as_of": "2026-09-30T18:38:31Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Free key",
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/calendar"
                }
            }
        },
        "/v1/editions/{edition_id}": {
            "get": {
                "operationId": "edition",
                "summary": "An edition",
                "description": "One staging: field, winner and completeness. Matches are grouped by round where the draw is complete, by day otherwise.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/edition",
                "tags": [
                    "Editions"
                ],
                "parameters": [
                    {
                        "name": "edition_id",
                        "in": "path",
                        "required": true,
                        "description": "One staging of a competition, as ev_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "event_id": "ev_FTY24C",
                                        "competition_id": "cp_X645YM",
                                        "name": "World Series of Darts Finals",
                                        "date": "2026-09-20",
                                        "organiser": "pdc",
                                        "tier": "majors",
                                        "matches": 31,
                                        "field": 32,
                                        "last_match": {
                                            "match_id": "mt_0WFNJWN226KKHKW9AGN7",
                                            "played_on": "2026-09-20",
                                            "round": "quarter_final",
                                            "winner": {
                                                "player_id": "pl_EWH24M",
                                                "name": "Gian van Veen",
                                                "score": 10
                                            },
                                            "loser": {
                                                "player_id": "pl_0886SR",
                                                "name": "Dirk van Duijvenbode",
                                                "score": 8
                                            },
                                            "event": {
                                                "event_id": "ev_FTY24C",
                                                "competition_id": "cp_X645YM",
                                                "name": "World Series of Darts Finals",
                                                "date": "2026-09-20",
                                                "tier": "majors"
                                            }
                                        }
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "data_as_of": "2026-09-30T18:38:31Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/edition"
                }
            }
        },
        "/v1/editions/{edition_id}/standings": {
            "get": {
                "operationId": "editionStandings",
                "summary": "Standings",
                "description": "League and group tables, Premier League nights included.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/edition-standings",
                "tags": [
                    "Editions"
                ],
                "parameters": [
                    {
                        "name": "edition_id",
                        "in": "path",
                        "required": true,
                        "description": "One staging of a competition, as ev_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": [
                                        {
                                            "position": 1,
                                            "player_id": "pl_VEB8HM",
                                            "name": "Luke Littler",
                                            "won": 26,
                                            "lost": 10,
                                            "legs": {
                                                "for": 199,
                                                "against": 169,
                                                "difference": 30
                                            }
                                        },
                                        {
                                            "position": 2,
                                            "player_id": "pl_NWEKMD",
                                            "name": "Jonny Clayton",
                                            "won": 20,
                                            "lost": 13,
                                            "legs": {
                                                "for": 163,
                                                "against": 149,
                                                "difference": 14
                                            }
                                        }
                                    ],
                                    "meta": {
                                        "count": 8,
                                        "plan": "analyst",
                                        "note": "Built from the matches held for this edition, so a knockout reads as a run rather than a league table.",
                                        "data_as_of": "2026-09-30T18:38:31Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/edition-standings"
                }
            }
        },
        "/v1/editions/{edition_id}/outrights": {
            "get": {
                "operationId": "editionOutrights",
                "summary": "Outrights",
                "description": "Exact title and round-reaching probabilities over the known draw.\n\nPlans: Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/edition-outrights",
                "tags": [
                    "Editions"
                ],
                "parameters": [
                    {
                        "name": "edition_id",
                        "in": "path",
                        "required": true,
                        "description": "One staging of a competition, as ev_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "simulations",
                        "in": "query",
                        "required": false,
                        "description": "Not needed: the odds are worked out exactly through the draw, so nothing is simulated.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "edition": {
                                            "event_id": "ev_FTY24C",
                                            "name": "World Series of Darts Finals",
                                            "date": "2026-09-20"
                                        },
                                        "field": 32,
                                        "champion": "pl_60EH4D",
                                        "champion_title_pct_beforehand": 3.67,
                                        "favourite_won": false,
                                        "players": [
                                            {
                                                "player_id": "pl_VEB8HM",
                                                "name": "Luke Littler",
                                                "rating": 2428.3,
                                                "title_pct": 38.65,
                                                "fair_odds": 2.59,
                                                "reach": [
                                                    {
                                                        "stage": "last 32",
                                                        "reach_pct": 100
                                                    },
                                                    {
                                                        "stage": "last 16",
                                                        "reach_pct": 85.59
                                                    },
                                                    {
                                                        "stage": "quarter-finals",
                                                        "reach_pct": 72.61
                                                    }
                                                ],
                                                "went_out_at": "quarter-finals"
                                            },
                                            {
                                                "player_id": "pl_PMAW5J",
                                                "name": "Luke Humphries",
                                                "rating": 2319,
                                                "title_pct": 19.58,
                                                "fair_odds": 5.11,
                                                "reach": [
                                                    {
                                                        "stage": "last 32",
                                                        "reach_pct": 100
                                                    },
                                                    {
                                                        "stage": "last 16",
                                                        "reach_pct": 77.1
                                                    },
                                                    {
                                                        "stage": "quarter-finals",
                                                        "reach_pct": 65.38
                                                    }
                                                ],
                                                "went_out_at": "last 16"
                                            },
                                            {
                                                "player_id": "pl_47SWAC",
                                                "name": "Gerwyn Price",
                                                "rating": 2223,
                                                "title_pct": 6.34,
                                                "fair_odds": 15.78,
                                                "reach": [
                                                    {
                                                        "stage": "last 32",
                                                        "reach_pct": 100
                                                    },
                                                    {
                                                        "stage": "last 16",
                                                        "reach_pct": 61.93
                                                    },
                                                    {
                                                        "stage": "quarter-finals",
                                                        "reach_pct": 54.12
                                                    }
                                                ],
                                                "went_out_at": "final"
                                            }
                                        ]
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "exact": true,
                                        "model": {
                                            "ratings_as_of": "2026-09-30",
                                            "length_effect": {
                                                "baseline_race": 6,
                                                "gamma": 0,
                                                "verdict": "No length adjustment beat the rating alone, so every format gets the rating's own probability."
                                            },
                                            "log_loss": {
                                                "chosen": 0.58968,
                                                "rating_alone": 0.58968
                                            },
                                            "how": "The rating's probability, adjusted for the length of the format only as far as the archive shows length matters, then turned into a per-leg chance to give scores and legs."
                                        },
                                        "how": "The draw is recovered from the results, tracing the champion back through every match. Each match is priced at the length it was actually played, from the ratings each player carried into the edition, so nothing learned during it is used.",
                                        "data_as_of": "2026-09-30T18:38:31Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/edition-outrights"
                }
            }
        },
        "/v1/simulate/bracket": {
            "post": {
                "operationId": "simulateBracket",
                "summary": "Simulate bracket",
                "description": "The same calculation over a draw the caller supplies, so outrights exist before a draw reaches the archive.\n\nPlans: Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/simulate-bracket",
                "tags": [
                    "Editions"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "field": 8,
                                        "rounds": [
                                            {
                                                "stage": "quarter-finals",
                                                "format": "First to 6 legs"
                                            },
                                            {
                                                "stage": "semi-finals",
                                                "format": "First to 7 legs"
                                            },
                                            {
                                                "stage": "final",
                                                "format": "First to 8 legs"
                                            }
                                        ],
                                        "players": [
                                            {
                                                "player_id": "pl_VEB8HM",
                                                "name": "Luke Littler",
                                                "rating": 2415.6,
                                                "title_pct": 42.27,
                                                "fair_odds": 2.37,
                                                "reach": [
                                                    {
                                                        "stage": "quarter-finals",
                                                        "reach_pct": 100
                                                    },
                                                    {
                                                        "stage": "semi-finals",
                                                        "reach_pct": 79.97
                                                    },
                                                    {
                                                        "stage": "final",
                                                        "reach_pct": 59.81
                                                    }
                                                ]
                                            },
                                            {
                                                "player_id": "pl_PMAW5J",
                                                "name": "Luke Humphries",
                                                "rating": 2312.4,
                                                "title_pct": 18.8,
                                                "fair_odds": 5.32,
                                                "reach": [
                                                    {
                                                        "stage": "quarter-finals",
                                                        "reach_pct": 100
                                                    },
                                                    {
                                                        "stage": "semi-finals",
                                                        "reach_pct": 65.68
                                                    },
                                                    {
                                                        "stage": "final",
                                                        "reach_pct": 40.18
                                                    }
                                                ]
                                            },
                                            {
                                                "player_id": "pl_47SWAC",
                                                "name": "Gerwyn Price",
                                                "rating": 2250.1,
                                                "title_pct": 10.01,
                                                "fair_odds": 9.99,
                                                "reach": [
                                                    {
                                                        "stage": "quarter-finals",
                                                        "reach_pct": 100
                                                    },
                                                    {
                                                        "stage": "semi-finals",
                                                        "reach_pct": 55.46
                                                    },
                                                    {
                                                        "stage": "final",
                                                        "reach_pct": 25.87
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "exact": true,
                                        "ratings_as_of": "2026-09-30",
                                        "model": {
                                            "ratings_as_of": "2026-09-30",
                                            "length_effect": {
                                                "baseline_race": 6,
                                                "gamma": 0,
                                                "verdict": "No length adjustment beat the rating alone, so every format gets the rating's own probability."
                                            },
                                            "log_loss": {
                                                "chosen": 0.58968,
                                                "rating_alone": 0.58968
                                            },
                                            "how": "The rating's probability, adjusted for the length of the format only as far as the archive shows length matters, then turned into a per-leg chance to give scores and legs."
                                        },
                                        "how": "Worked exactly through the draw from the current ratings: every node holds each player's chance of coming out of it, so no simulation is needed.",
                                        "data_as_of": "2026-09-30T18:38:31Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/simulate-bracket"
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    },
                    "description": "A JSON body: draw is a list of player ids in draw order, a power of two long, with null for a bye; format or rounds give the match length."
                }
            }
        },
        "/v1/players": {
            "get": {
                "operationId": "players",
                "summary": "Players",
                "description": "Search and list, with accents and particles folded.\n\nPlans: Free key, Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/players",
                "tags": [
                    "Players"
                ],
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "required": false,
                        "description": "Search text. Accents and particles are folded, so \"van gerwen\" finds Michael van Gerwen.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "country_code",
                        "in": "query",
                        "required": false,
                        "description": "An ISO 3166 country code, lower case, such as nl or de; the home nations are gb-eng, gb-sct, gb-wls and gb-nir.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "active",
                        "in": "query",
                        "required": false,
                        "description": "true for players who played this year or last; false for the rest.",
                        "schema": {
                            "type": "boolean"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "How many to return. Default 50, at most 200.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "A page number, for a pager in a UI. Use this or cursor, not both.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "cursor",
                        "in": "query",
                        "required": false,
                        "description": "Carry on from here: pass back meta.next_cursor exactly as it came.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": [
                                        {
                                            "player_id": "pl_60FSJP",
                                            "name": "Keenan Littler",
                                            "country_code": "za",
                                            "first_year": 2023,
                                            "last_year": 2025,
                                            "matches": 37
                                        },
                                        {
                                            "player_id": "pl_0A1EQ8",
                                            "name": "Leon Littler",
                                            "country_code": null,
                                            "first_year": 2019,
                                            "last_year": 2019,
                                            "matches": 16
                                        }
                                    ],
                                    "meta": {
                                        "count": 2,
                                        "next_cursor": "c_m8dKmBUIJ_00smsXiWLW",
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Free key",
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/players"
                }
            }
        },
        "/v1/players/{player_id}": {
            "get": {
                "operationId": "player",
                "summary": "A player",
                "description": "Profile.\n\nPlans: Free key, Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/player",
                "tags": [
                    "Players"
                ],
                "parameters": [
                    {
                        "name": "player_id",
                        "in": "path",
                        "required": true,
                        "description": "A player, as pl_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "player_id": "pl_VEB8HM",
                                        "name": "Luke Littler",
                                        "country_code": "gb-eng",
                                        "first_year": 2019,
                                        "last_year": 2026,
                                        "matches": null,
                                        "record": {
                                            "matches": 1066,
                                            "won": 872,
                                            "lost": 194,
                                            "win_pct": 81.8,
                                            "first_match": "2019-01-12",
                                            "last_match": "2026-09-20"
                                        }
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Free key",
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/player"
                }
            }
        },
        "/v1/players/{player_id}/matches": {
            "get": {
                "operationId": "playerMatches",
                "summary": "Player matches",
                "description": "Match log with the market and rating beside every result.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/player-matches",
                "tags": [
                    "Players"
                ],
                "parameters": [
                    {
                        "name": "player_id",
                        "in": "path",
                        "required": true,
                        "description": "A player, as pl_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Earliest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Latest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "competition_id",
                        "in": "query",
                        "required": false,
                        "description": "Only matches in this competition.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "How many to return. Default 50, at most 200.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "cursor",
                        "in": "query",
                        "required": false,
                        "description": "Carry on from here: pass back meta.next_cursor exactly as it came.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": [
                                        {
                                            "match_id": "mt_0CWS66BSK1H725020W3E",
                                            "played_on": "2026-09-20",
                                            "round": "quarter_final",
                                            "winner": {
                                                "player_id": "pl_NWEKMD",
                                                "name": "Jonny Clayton",
                                                "score": 10
                                            },
                                            "loser": {
                                                "player_id": "pl_VEB8HM",
                                                "name": "Luke Littler",
                                                "score": 4
                                            },
                                            "event": {
                                                "event_id": "ev_FTY24C",
                                                "competition_id": "cp_X645YM",
                                                "name": "World Series of Darts Finals",
                                                "date": "2026-09-20",
                                                "tier": "majors"
                                            },
                                            "result": "lost"
                                        },
                                        {
                                            "match_id": "mt_035G2W0G8FVGH0PPB5XD",
                                            "played_on": "2026-09-19",
                                            "round": "last_16",
                                            "winner": {
                                                "player_id": "pl_VEB8HM",
                                                "name": "Luke Littler",
                                                "score": 10
                                            },
                                            "loser": {
                                                "player_id": "pl_RNBEW9",
                                                "name": "Nathan Aspinall",
                                                "score": 9
                                            },
                                            "event": {
                                                "event_id": "ev_FTY24C",
                                                "competition_id": "cp_X645YM",
                                                "name": "World Series of Darts Finals",
                                                "date": "2026-09-20",
                                                "tier": "majors"
                                            },
                                            "result": "won"
                                        }
                                    ],
                                    "meta": {
                                        "count": 2,
                                        "next_cursor": "c_wNtb1hAe7JeTmTE0b7_JOxd-O_9qjVH0ImWP2tfhAvAT-UQ",
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/player-matches"
                }
            }
        },
        "/v1/players/{player_id}/form": {
            "get": {
                "operationId": "playerForm",
                "summary": "Player form",
                "description": "Recent form measured against expectation.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/player-form",
                "tags": [
                    "Players"
                ],
                "parameters": [
                    {
                        "name": "player_id",
                        "in": "path",
                        "required": true,
                        "description": "A player, as pl_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "matches",
                        "in": "query",
                        "required": false,
                        "description": "How many recent matches to measure form over: 5 to 100, default 20.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "player_id": "pl_VEB8HM",
                                        "over": "20 matches",
                                        "won": 17,
                                        "lost": 3,
                                        "win_pct": 85,
                                        "legs": {
                                            "for": 134,
                                            "against": 86,
                                            "difference": 48
                                        },
                                        "three_dart_avg": 100.07,
                                        "run": "LWWWWWWWLWWWWWWWLWWW",
                                        "from": "2026-07-26",
                                        "to": "2026-09-20"
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/player-form"
                }
            }
        },
        "/v1/players/{player_id}/splits": {
            "get": {
                "operationId": "playerSplits",
                "summary": "Player splits",
                "description": "Record split by tier, format length, year, price band or competition. Every row carries A/E and level-stakes P/L at best price.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/player-splits",
                "tags": [
                    "Players"
                ],
                "parameters": [
                    {
                        "name": "player_id",
                        "in": "path",
                        "required": true,
                        "description": "A player, as pl_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "by",
                        "in": "query",
                        "required": false,
                        "description": "Split the record by year, tier, race_to or round. Leave it out for year, tier and race_to together.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Earliest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Latest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "player_id": "pl_VEB8HM",
                                        "splits": {
                                            "tier": [
                                                {
                                                    "key": "regional",
                                                    "label": "Regional and affiliate events",
                                                    "matches": 290,
                                                    "won": 240,
                                                    "lost": 50,
                                                    "win_pct": 82.8,
                                                    "legs": {
                                                        "for": 1077,
                                                        "against": 531,
                                                        "difference": 546
                                                    },
                                                    "three_dart_avg": 88.99,
                                                    "competitions": [
                                                        {
                                                            "name": "MODUS Super Series",
                                                            "matches": 110
                                                        },
                                                        {
                                                            "name": "JDC Advanced Tour",
                                                            "matches": 105
                                                        },
                                                        {
                                                            "name": "JDC Super",
                                                            "matches": 36
                                                        }
                                                    ]
                                                },
                                                {
                                                    "key": "tour_other",
                                                    "label": "Other tour events",
                                                    "matches": 200,
                                                    "won": 158,
                                                    "lost": 42,
                                                    "win_pct": 79,
                                                    "legs": {
                                                        "for": 1140,
                                                        "against": 776,
                                                        "difference": 364
                                                    },
                                                    "three_dart_avg": 100.76,
                                                    "competitions": [
                                                        {
                                                            "name": "Premier League",
                                                            "matches": 112
                                                        },
                                                        {
                                                            "name": "World Series of Darts",
                                                            "matches": 37
                                                        },
                                                        {
                                                            "name": "World Championship",
                                                            "matches": 20
                                                        }
                                                    ]
                                                },
                                                {
                                                    "key": "development_tour",
                                                    "label": "Development Tour",
                                                    "matches": 138,
                                                    "won": 119,
                                                    "lost": 19,
                                                    "win_pct": 86.2,
                                                    "legs": {
                                                        "for": 542,
                                                        "against": 251,
                                                        "difference": 291
                                                    },
                                                    "three_dart_avg": 92.89,
                                                    "competitions": [
                                                        {
                                                            "name": "Development Tour",
                                                            "matches": 138
                                                        }
                                                    ]
                                                }
                                            ]
                                        }
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "race_to": "The winning score of each match. For set-play formats it counts sets, not legs.",
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/player-splits"
                }
            }
        },
        "/v1/players/{player_id}/scoring": {
            "get": {
                "operationId": "playerScoring",
                "summary": "Player scoring",
                "description": "Scoring and finishing profile.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/player-scoring",
                "tags": [
                    "Players"
                ],
                "parameters": [
                    {
                        "name": "player_id",
                        "in": "path",
                        "required": true,
                        "description": "A player, as pl_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Earliest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Latest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "player_id": "pl_VEB8HM",
                                        "matches_with_figures": 1055,
                                        "from": "2019-01-12",
                                        "to": "2026-09-06",
                                        "statistics": {
                                            "scoring": {
                                                "three_dart_avg": {
                                                    "value": 93.91,
                                                    "matches": 1055
                                                },
                                                "first_9_avg": {
                                                    "value": 104.76,
                                                    "matches": 963
                                                },
                                                "first_3_avg": {
                                                    "value": 104.58,
                                                    "matches": 964
                                                },
                                                "avg_with_throw": {
                                                    "value": 92.96,
                                                    "matches": 964
                                                },
                                                "avg_vs_throw": {
                                                    "value": 95.65,
                                                    "matches": 964
                                                }
                                            },
                                            "big_scores": {
                                                "count_180": {
                                                    "total": 3118,
                                                    "per_match": 2.96,
                                                    "matches": 1055
                                                },
                                                "visits_171_180": {
                                                    "total": 3285,
                                                    "per_match": 3.41,
                                                    "matches": 964
                                                },
                                                "visits_140": {
                                                    "total": 4505,
                                                    "per_match": 4.27,
                                                    "matches": 1056
                                                },
                                                "visits_131_140": {
                                                    "total": 6997,
                                                    "per_match": 7.26,
                                                    "matches": 964
                                                }
                                            },
                                            "finishing": {
                                                "checkout_pct": {
                                                    "value": 42.58,
                                                    "matches": 1055
                                                },
                                                "highest_checkout": {
                                                    "best": 170,
                                                    "matches": 1055
                                                },
                                                "functional_doubles": {
                                                    "value": 53.28,
                                                    "matches": 901
                                                }
                                            },
                                            "legs": {
                                                "legs_won_pct": {
                                                    "value": 67.65,
                                                    "matches": 1056
                                                },
                                                "won_on_throw_pct": {
                                                    "value": 77.84,
                                                    "matches": 963
                                                },
                                                "won_vs_throw_pct": {
                                                    "value": 57.66,
                                                    "matches": 963
                                                }
                                            }
                                        },
                                        "records": {
                                            "best_match_avg": 122.96,
                                            "lowest_match_avg": 54,
                                            "darts_thrown": 127294
                                        }
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "how": "Averages and percentages are the mean of each match's figure; counts are summed and given per match; highest_checkout is the best single match.",
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/player-scoring"
                }
            }
        },
        "/v1/players/{player_id}/ratings": {
            "get": {
                "operationId": "playerRatings",
                "summary": "Player ratings",
                "description": "Rating history.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/player-ratings",
                "tags": [
                    "Players"
                ],
                "parameters": [
                    {
                        "name": "player_id",
                        "in": "path",
                        "required": true,
                        "description": "A player, as pl_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Earliest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Latest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "player": {
                                            "player_id": "pl_VEB8HM",
                                            "name": "Luke Littler",
                                            "country_code": "gb-eng",
                                            "rating": 2415.6,
                                            "change_30d": 8.5,
                                            "matches": 1066,
                                            "last_match": "2026-09-20",
                                            "peak": {
                                                "rating": 2438.5,
                                                "on": "2026-05-07"
                                            }
                                        },
                                        "provisional": false,
                                        "history": [
                                            {
                                                "match_id": "mt_19RDBD5DHG09G6C5YP58",
                                                "played_on": "2025-10-07",
                                                "result": "won",
                                                "opponent_id": "pl_47SWAC",
                                                "before": 2322,
                                                "after": 2330.1,
                                                "change": 8.1
                                            },
                                            {
                                                "match_id": "mt_02F7V92M5HER1MGVGY5F",
                                                "played_on": "2025-10-07",
                                                "result": "won",
                                                "opponent_id": "pl_EWH24M",
                                                "before": 2330.1,
                                                "after": 2338.5,
                                                "change": 8.4
                                            },
                                            {
                                                "match_id": "mt_1JNS4VBFM4AT4N7CB2SN",
                                                "played_on": "2025-10-07",
                                                "result": "won",
                                                "opponent_id": "pl_NWEKMD",
                                                "before": 2338.5,
                                                "after": 2345.9,
                                                "change": 7.4
                                            }
                                        ]
                                    },
                                    "meta": {
                                        "count": 137,
                                        "capped_at": 1000,
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/player-ratings"
                }
            }
        },
        "/v1/head-to-head": {
            "get": {
                "operationId": "headToHead",
                "summary": "Head to head",
                "description": "A full rivalry.\n\nPlans: Free key, Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/head-to-head",
                "tags": [
                    "Players"
                ],
                "parameters": [
                    {
                        "name": "player_id",
                        "in": "query",
                        "required": false,
                        "description": "A player, as pl_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "opponent_id",
                        "in": "query",
                        "required": false,
                        "description": "The other player, as pl_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Earliest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Latest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "players": [
                                            {
                                                "player_id": "pl_VEB8HM",
                                                "name": "Luke Littler",
                                                "wins": 24,
                                                "legs": 239
                                            },
                                            {
                                                "player_id": "pl_PMAW5J",
                                                "name": "Luke Humphries",
                                                "wins": 15,
                                                "legs": 217
                                            }
                                        ],
                                        "meetings": 39,
                                        "first_meeting": "2024-01-03",
                                        "last_meeting": "2026-09-06",
                                        "matches": [
                                            {
                                                "match_id": "mt_085F4YW2FH0RXX98F6TD",
                                                "played_on": "2026-09-06",
                                                "round": "final",
                                                "winner": {
                                                    "player_id": "pl_VEB8HM",
                                                    "name": "Luke Littler",
                                                    "score": 8
                                                },
                                                "loser": {
                                                    "player_id": "pl_PMAW5J",
                                                    "name": "Luke Humphries",
                                                    "score": 6
                                                },
                                                "event": {
                                                    "event_id": "ev_15WNS6",
                                                    "competition_id": "cp_2YJ4TA",
                                                    "name": "European Tour",
                                                    "date": "2026-09-06",
                                                    "tier": "european_tour"
                                                }
                                            },
                                            {
                                                "match_id": "mt_1VJRZXN584YBD4QP08DM",
                                                "played_on": "2026-06-26",
                                                "round": "final",
                                                "winner": {
                                                    "player_id": "pl_PMAW5J",
                                                    "name": "Luke Humphries",
                                                    "score": 8
                                                },
                                                "loser": {
                                                    "player_id": "pl_VEB8HM",
                                                    "name": "Luke Littler",
                                                    "score": 7
                                                },
                                                "event": {
                                                    "event_id": "ev_JCT7FZ",
                                                    "competition_id": "cp_GE7BFK",
                                                    "name": "World Series of Darts",
                                                    "date": "2026-06-26",
                                                    "tier": "world_series"
                                                }
                                            },
                                            {
                                                "match_id": "mt_1JA7GM7BNYN0MD8H7QV3",
                                                "played_on": "2026-06-06",
                                                "round": "semi_final",
                                                "winner": {
                                                    "player_id": "pl_PMAW5J",
                                                    "name": "Luke Humphries",
                                                    "score": 7
                                                },
                                                "loser": {
                                                    "player_id": "pl_VEB8HM",
                                                    "name": "Luke Littler",
                                                    "score": 5
                                                },
                                                "event": {
                                                    "event_id": "ev_EHC0TR",
                                                    "competition_id": "cp_GE7BFK",
                                                    "name": "World Series of Darts",
                                                    "date": "2026-06-06",
                                                    "tier": "world_series"
                                                }
                                            }
                                        ]
                                    },
                                    "meta": {
                                        "count": 39,
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Free key",
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/head-to-head"
                }
            }
        },
        "/v1/fixtures": {
            "get": {
                "operationId": "fixtures",
                "summary": "Fixtures",
                "description": "Upcoming matches, with the best price only where one was held: no live prices are held since 20 March 2026.\n\nPlans: Free key, Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/fixtures",
                "tags": [
                    "Matches"
                ],
                "parameters": [
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Earliest fixture date to include.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Latest fixture date to include.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "competition_id",
                        "in": "query",
                        "required": false,
                        "description": "A competition, as cp_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "player_id",
                        "in": "query",
                        "required": false,
                        "description": "A player, as pl_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "How many to return. Default 100, at most 500.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "cursor",
                        "in": "query",
                        "required": false,
                        "description": "Carry on from here: pass back meta.next_cursor exactly as it came.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": [
                                        {
                                            "fixture_id": "fx_f9ca28d20999df4e",
                                            "competition": "",
                                            "round": null,
                                            "date": "2026-09-30",
                                            "date_confirmed": false,
                                            "starts_at": "2026-09-30T19:00:00Z",
                                            "players": [
                                                {
                                                    "player_id": "pl_YERQEQ",
                                                    "name": "Danny Noppert",
                                                    "known": true
                                                },
                                                {
                                                    "player_id": "pl_KZWF7B",
                                                    "name": "Ryan Joyce",
                                                    "known": true
                                                }
                                            ],
                                            "price": null
                                        },
                                        {
                                            "fixture_id": "fx_01f0fa053b7d6e6b",
                                            "competition": "World Grand Prix 2026",
                                            "round": "last_16",
                                            "date": "2026-09-30",
                                            "date_confirmed": false,
                                            "starts_at": "2026-09-30T19:00:00Z",
                                            "players": [
                                                {
                                                    "player_id": "pl_YERQEQ",
                                                    "name": "Danny Noppert",
                                                    "known": true
                                                },
                                                {
                                                    "player_id": "pl_KZWF7B",
                                                    "name": "Ryan Joyce",
                                                    "known": true
                                                }
                                            ],
                                            "price": null
                                        }
                                    ],
                                    "meta": {
                                        "plan": "analyst",
                                        "count": 2,
                                        "total": 8,
                                        "next_cursor": "c_d28vce_d3b85f5b",
                                        "freshness": {
                                            "captured_at": "2026-09-30T18:35:06Z",
                                            "age_seconds": 214,
                                            "refreshed": "every 5 minutes",
                                            "behind": false
                                        },
                                        "notes": [
                                            "starts_at is UTC, and null where the order of play gives no time yet. A date marked unconfirmed is not yet fixed by the organiser.",
                                            "price is empty until live prices are collected again; /v1/probability prices any fixture whose players are both known."
                                        ],
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Free key",
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/fixtures"
                }
            }
        },
        "/v1/results": {
            "get": {
                "operationId": "results",
                "summary": "Results",
                "description": "Settled matches.\n\nPlans: Free key, Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/results",
                "tags": [
                    "Matches"
                ],
                "parameters": [
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Earliest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Latest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "competition_id",
                        "in": "query",
                        "required": false,
                        "description": "Only matches in this competition.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "player_id",
                        "in": "query",
                        "required": false,
                        "description": "Only matches this player played.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "How many to return. Default 50, at most 200.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "A page number, for a pager in a UI. Use this or cursor, not both.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "cursor",
                        "in": "query",
                        "required": false,
                        "description": "Carry on from here: pass back meta.next_cursor exactly as it came.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": [
                                        {
                                            "match_id": "mt_0CWS66BSK1H725020W3E",
                                            "played_on": "2026-09-20",
                                            "round": "quarter_final",
                                            "winner": {
                                                "player_id": "pl_NWEKMD",
                                                "name": "Jonny Clayton",
                                                "score": 10
                                            },
                                            "loser": {
                                                "player_id": "pl_VEB8HM",
                                                "name": "Luke Littler",
                                                "score": 4
                                            },
                                            "event": {
                                                "event_id": "ev_FTY24C",
                                                "competition_id": "cp_X645YM",
                                                "name": "World Series of Darts Finals",
                                                "date": "2026-09-20",
                                                "tier": "majors"
                                            }
                                        },
                                        {
                                            "match_id": "mt_035G2W0G8FVGH0PPB5XD",
                                            "played_on": "2026-09-19",
                                            "round": "last_16",
                                            "winner": {
                                                "player_id": "pl_VEB8HM",
                                                "name": "Luke Littler",
                                                "score": 10
                                            },
                                            "loser": {
                                                "player_id": "pl_RNBEW9",
                                                "name": "Nathan Aspinall",
                                                "score": 9
                                            },
                                            "event": {
                                                "event_id": "ev_FTY24C",
                                                "competition_id": "cp_X645YM",
                                                "name": "World Series of Darts Finals",
                                                "date": "2026-09-20",
                                                "tier": "majors"
                                            }
                                        }
                                    ],
                                    "meta": {
                                        "count": 2,
                                        "next_cursor": "c_wNtb1hAe7JeTmTE0b7_JOxd-O_9qjVH0ImWP2tfhAvAT-UQ",
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Free key",
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/results"
                }
            }
        },
        "/v1/results/yesterday": {
            "get": {
                "operationId": "resultsYesterday",
                "summary": "Yesterday",
                "description": "Every match settled yesterday, UTC, on every plan including the free key.\n\nPlans: Free key, Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/results-yesterday",
                "tags": [
                    "Matches"
                ],
                "parameters": [
                    {
                        "name": "competition_id",
                        "in": "query",
                        "required": false,
                        "description": "Only matches in this competition.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "player_id",
                        "in": "query",
                        "required": false,
                        "description": "Only matches this player played.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "How many to return. Default 50, at most 200.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "cursor",
                        "in": "query",
                        "required": false,
                        "description": "Carry on from here: pass back meta.next_cursor exactly as it came.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": [
                                        {
                                            "match_id": "mt_1TBCSWQVAGYETS5N1WK5",
                                            "played_on": "2026-09-29",
                                            "round": "last_32",
                                            "winner": {
                                                "player_id": "pl_EWH24M",
                                                "name": "Gian van Veen",
                                                "score": 2
                                            },
                                            "loser": {
                                                "player_id": "pl_0886SR",
                                                "name": "Dirk van Duijvenbode",
                                                "score": 0
                                            },
                                            "event": {
                                                "event_id": "ev_0ATG2W",
                                                "competition_id": "cp_7B1KJZ",
                                                "name": "World Grand Prix",
                                                "date": "2026-10-04",
                                                "tier": "tour_other"
                                            }
                                        },
                                        {
                                            "match_id": "mt_0MDDYQ445TWCY1KQ7E5C",
                                            "played_on": "2026-09-29",
                                            "round": "round_robin",
                                            "winner": {
                                                "player_id": "pl_HCKF7Z",
                                                "name": "Jim Widmayer",
                                                "score": 4
                                            },
                                            "loser": {
                                                "player_id": "pl_6M913B",
                                                "name": "Jamie Atkins",
                                                "score": 3
                                            },
                                            "event": {
                                                "event_id": "ev_H1H9W3",
                                                "competition_id": "cp_2WREDF",
                                                "name": "MODUS Super Series #15 Week",
                                                "date": "2026-10-03",
                                                "tier": "regional"
                                            }
                                        }
                                    ],
                                    "meta": {
                                        "count": 2,
                                        "date": "2026-09-29",
                                        "next_cursor": "c_JC_-22FVO0n56c0FrbQstb6rsxBbvBhVrcKJeDQzGSBCyw8",
                                        "plan": "analyst",
                                        "window": "yesterday, UTC, on every plan",
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Free key",
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/results-yesterday"
                }
            }
        },
        "/v1/live": {
            "get": {
                "operationId": "live",
                "summary": "Live",
                "description": "Matches in play, with freshness reported explicitly.\n\nPlans: Live, Complete, Analyst. In-play data, so only on plans with live scores.\n\nFull reference: https://dartsapi.com/documentation/endpoints/live",
                "tags": [
                    "Matches"
                ],
                "parameters": [
                    {
                        "name": "competition_id",
                        "in": "query",
                        "required": false,
                        "description": "Only matches in this competition.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": [],
                                    "meta": {
                                        "plan": "analyst",
                                        "count": 0,
                                        "freshness": {
                                            "captured_at": "2026-09-30T18:35:06Z",
                                            "age_seconds": 214,
                                            "refreshed": "every 5 minutes",
                                            "behind": false
                                        },
                                        "notes": [
                                            "Scores as of the snapshot time in freshness.captured_at, which is refreshed every 5 minutes: a score here can be a few minutes behind the board.",
                                            "Nothing is in play right now."
                                        ],
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/live"
                }
            }
        },
        "/v1/matches/{match_id}": {
            "get": {
                "operationId": "match",
                "summary": "A match",
                "description": "The full record.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/match",
                "tags": [
                    "Matches"
                ],
                "parameters": [
                    {
                        "name": "match_id",
                        "in": "path",
                        "required": true,
                        "description": "A match, as mt_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "match_id": "mt_1MW2NW9SQ8JZ9HP9M6JE",
                                        "played_on": "2026-09-06",
                                        "round": "semi_final",
                                        "winner": {
                                            "player_id": "pl_VEB8HM",
                                            "name": "Luke Littler",
                                            "score": 7
                                        },
                                        "loser": {
                                            "player_id": "pl_8HN4TH",
                                            "name": "Michael van Gerwen",
                                            "score": 3
                                        },
                                        "event": {
                                            "event_id": "ev_15WNS6",
                                            "competition_id": "cp_2YJ4TA",
                                            "name": "European Tour",
                                            "date": "2026-09-06",
                                            "tier": "european_tour"
                                        },
                                        "statistics_held": true
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/match"
                }
            }
        },
        "/v1/matches/{match_id}/preview": {
            "get": {
                "operationId": "matchPreview",
                "summary": "Match preview",
                "description": "The one call a preview writer needs.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/match-preview",
                "tags": [
                    "Matches"
                ],
                "parameters": [
                    {
                        "name": "match_id",
                        "in": "path",
                        "required": true,
                        "description": "A match, as mt_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "match": {
                                            "match_id": "mt_1MW2NW9SQ8JZ9HP9M6JE",
                                            "played_on": "2026-09-06",
                                            "round": "semi_final",
                                            "winner": {
                                                "player_id": "pl_VEB8HM",
                                                "name": "Luke Littler",
                                                "score": 7
                                            },
                                            "loser": {
                                                "player_id": "pl_8HN4TH",
                                                "name": "Michael van Gerwen",
                                                "score": 3
                                            },
                                            "event": {
                                                "event_id": "ev_15WNS6",
                                                "competition_id": "cp_2YJ4TA",
                                                "name": "European Tour",
                                                "date": "2026-09-06",
                                                "tier": "european_tour"
                                            }
                                        },
                                        "as_of": "2026-09-06",
                                        "players": [
                                            {
                                                "player_id": "pl_VEB8HM",
                                                "name": "Luke Littler",
                                                "country_code": "gb-eng",
                                                "rating_before": 2409.3,
                                                "form": {
                                                    "last": 10,
                                                    "run": "WLWWWWWWWL",
                                                    "won": 8,
                                                    "lost": 2,
                                                    "win_pct": 80
                                                },
                                                "last_12_months": {
                                                    "matches_with_figures": 140,
                                                    "three_dart_avg": 101.04,
                                                    "count_180_per_match": 5.31,
                                                    "checkout_pct": 47
                                                }
                                            },
                                            {
                                                "player_id": "pl_8HN4TH",
                                                "name": "Michael van Gerwen",
                                                "country_code": "nl",
                                                "rating_before": 2124.3,
                                                "form": {
                                                    "last": 10,
                                                    "run": "WLWWLWLLWW",
                                                    "won": 6,
                                                    "lost": 4,
                                                    "win_pct": 60
                                                },
                                                "last_12_months": {
                                                    "matches_with_figures": 136,
                                                    "three_dart_avg": 97.15,
                                                    "count_180_per_match": 3.13,
                                                    "checkout_pct": 40.51
                                                }
                                            }
                                        ],
                                        "head_to_head": {
                                            "meetings": 27,
                                            "wins": {
                                                "pl_VEB8HM": 17,
                                                "pl_8HN4TH": 10
                                            },
                                            "last": {
                                                "match_id": "mt_0TN6WK3K2QH55GR122K8",
                                                "played_on": "2026-05-07",
                                                "round": "weekly_quarter_final",
                                                "winner": {
                                                    "player_id": "pl_VEB8HM",
                                                    "name": "Luke Littler",
                                                    "score": 6
                                                },
                                                "loser": {
                                                    "player_id": "pl_8HN4TH",
                                                    "name": "Michael van Gerwen",
                                                    "score": 5
                                                },
                                                "event": {
                                                    "event_id": "ev_AANAFE",
                                                    "competition_id": "cp_ATC49K",
                                                    "name": "Premier League",
                                                    "date": "2026-05-28",
                                                    "tier": "tour_other"
                                                }
                                            }
                                        },
                                        "rating_edge": {
                                            "favourite": "pl_VEB8HM",
                                            "expected_pct": 83.8,
                                            "how": "From the two ratings as they stood before the match. Format-aware probability is on /v1/matches/{id}/probability."
                                        }
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "measured": "everything in this preview stops the day before the match was played",
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/match-preview"
                }
            }
        },
        "/v1/matches/{match_id}/statistics": {
            "get": {
                "operationId": "matchStatistics",
                "summary": "Match statistics",
                "description": "Per-player statistics, on the detail route only, never on lists.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/match-statistics",
                "tags": [
                    "Matches"
                ],
                "parameters": [
                    {
                        "name": "match_id",
                        "in": "path",
                        "required": true,
                        "description": "A match, as mt_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "players": [
                                            {
                                                "player_id": "pl_VEB8HM",
                                                "name": "Luke Littler",
                                                "statistics": {
                                                    "scoring": {
                                                        "three_dart_avg": 106.64,
                                                        "first_9_avg": 119.03,
                                                        "first_3_avg": 110.2,
                                                        "avg_with_throw": 115.62,
                                                        "avg_vs_throw": 98.54
                                                    },
                                                    "big_scores": {
                                                        "count_180": 6,
                                                        "visits_171_180": 6,
                                                        "visits_140": 5,
                                                        "visits_131_140": 11
                                                    },
                                                    "finishing": {
                                                        "checkout_pct": 46.67,
                                                        "highest_checkout": 167,
                                                        "functional_doubles": 50
                                                    },
                                                    "legs": {
                                                        "legs_won_pct": 70,
                                                        "won_on_throw_pct": 100,
                                                        "won_vs_throw_pct": 40
                                                    }
                                                }
                                            },
                                            {
                                                "player_id": "pl_8HN4TH",
                                                "name": "Michael van Gerwen",
                                                "statistics": {
                                                    "scoring": {
                                                        "three_dart_avg": 83.53,
                                                        "first_9_avg": 86.07,
                                                        "first_3_avg": 106.3,
                                                        "avg_with_throw": 80.05,
                                                        "avg_vs_throw": 88.61
                                                    },
                                                    "big_scores": {
                                                        "count_180": 2,
                                                        "visits_171_180": 3,
                                                        "visits_140": 4,
                                                        "visits_131_140": 5
                                                    },
                                                    "finishing": {
                                                        "checkout_pct": 30,
                                                        "highest_checkout": 62,
                                                        "functional_doubles": 33.33
                                                    },
                                                    "legs": {
                                                        "legs_won_pct": 30,
                                                        "won_on_throw_pct": 60,
                                                        "won_vs_throw_pct": 0
                                                    }
                                                }
                                            }
                                        ]
                                    },
                                    "meta": {
                                        "count": 2,
                                        "plan": "analyst",
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/match-statistics"
                }
            }
        },
        "/v1/matches/{match_id}/prices": {
            "get": {
                "operationId": "matchPrices",
                "summary": "Match prices",
                "description": "Every reading held, for every market held. Prices are history: held from 2016 to 20 March 2026, with no live prices since.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/match-prices",
                "tags": [
                    "Matches"
                ],
                "parameters": [
                    {
                        "name": "match_id",
                        "in": "path",
                        "required": true,
                        "description": "A match, as mt_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "market",
                        "in": "query",
                        "required": false,
                        "description": "match_winner, the one market held for darts.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "match": {
                                            "match_id": "mt_1WPYX3K955Y1R2BZBNKP",
                                            "played_on": "2026-03-20",
                                            "round": "last_48",
                                            "winner": {
                                                "player_id": "pl_ZDYYD1",
                                                "name": "Boris Krčmar",
                                                "score": 6
                                            },
                                            "loser": {
                                                "player_id": "pl_X29RN1",
                                                "name": "Raymond van Barneveld",
                                                "score": 1
                                            },
                                            "event": {
                                                "event_id": "ev_MX0A6T",
                                                "competition_id": "cp_2YJ4TA",
                                                "name": "European Tour",
                                                "date": "2026-03-22",
                                                "tier": "european_tour"
                                            }
                                        },
                                        "starts_at": "2026-03-20T20:00:00Z",
                                        "readings": [
                                            {
                                                "taken_at": "2026-03-20T17:17:59Z",
                                                "before_start": true,
                                                "decimal": {
                                                    "pl_ZDYYD1": 1.58,
                                                    "pl_X29RN1": 2.58
                                                },
                                                "implied_pct": {
                                                    "pl_ZDYYD1": 62.02,
                                                    "pl_X29RN1": 37.98
                                                },
                                                "book_pct": 102.05,
                                                "best_from": {
                                                    "pl_ZDYYD1": "cashwin",
                                                    "pl_X29RN1": "pinnacle"
                                                },
                                                "the_price": true
                                            }
                                        ]
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "market": "match_winner",
                                        "prices": "The best price across bookmakers at the last reading before the start, or the first reading after it where none came before. A best-of-market price: not one bookmaker's line and not a closing line.",
                                        "odds_archive": {
                                            "priced_matches": 10222,
                                            "first": "2016-01-03",
                                            "last": "2026-03-20"
                                        },
                                        "count": 1,
                                        "note": "the_price marks the reading every other endpoint uses for this match.",
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/match-prices"
                }
            }
        },
        "/v1/ratings": {
            "get": {
                "operationId": "ratings",
                "summary": "Ratings",
                "description": "The current table.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/ratings",
                "tags": [
                    "Ratings"
                ],
                "parameters": [
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "How many to return. Default 50, at most 200.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "cursor",
                        "in": "query",
                        "required": false,
                        "description": "Carry on from here: pass back meta.next_cursor exactly as it came.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": [
                                        {
                                            "rank": 1,
                                            "player_id": "pl_VEB8HM",
                                            "name": "Luke Littler",
                                            "country_code": "gb-eng",
                                            "rating": 2415.6,
                                            "change_30d": 8.5,
                                            "matches": 1066,
                                            "last_match": "2026-09-20",
                                            "peak": {
                                                "rating": 2438.5,
                                                "on": "2026-05-07"
                                            }
                                        },
                                        {
                                            "rank": 2,
                                            "player_id": "pl_PMAW5J",
                                            "name": "Luke Humphries",
                                            "country_code": "gb-eng",
                                            "rating": 2312.4,
                                            "change_30d": 9.7,
                                            "matches": 1355,
                                            "last_match": "2026-09-29",
                                            "peak": {
                                                "rating": 2338,
                                                "on": "2026-06-26"
                                            }
                                        }
                                    ],
                                    "meta": {
                                        "count": 3,
                                        "next_cursor": "c_4o0e8q_c5d102df",
                                        "active": "players with 20 or more matches who have played since 2025-09-30",
                                        "model": {
                                            "measured_on": 225550,
                                            "favourite_won_pct": 68,
                                            "brier": 0.2028,
                                            "by_gap": [
                                                {
                                                    "gap": "0-50",
                                                    "matches": 51045,
                                                    "expected_pct": 53.6,
                                                    "actual_pct": 53.4
                                                },
                                                {
                                                    "gap": "50-100",
                                                    "matches": 46788,
                                                    "expected_pct": 60.5,
                                                    "actual_pct": 60.4
                                                },
                                                {
                                                    "gap": "100-150",
                                                    "matches": 38714,
                                                    "expected_pct": 67.1,
                                                    "actual_pct": 67.4
                                                },
                                                {
                                                    "gap": "150-200",
                                                    "matches": 29688,
                                                    "expected_pct": 73.1,
                                                    "actual_pct": 72.7
                                                },
                                                {
                                                    "gap": "200-300",
                                                    "matches": 35773,
                                                    "expected_pct": 80.1,
                                                    "actual_pct": 80.4
                                                },
                                                {
                                                    "gap": "300+",
                                                    "matches": 23542,
                                                    "expected_pct": 89.8,
                                                    "actual_pct": 91.1
                                                }
                                            ],
                                            "how": "Every match between two established players, predicted from the ratings as they stood before it was played."
                                        },
                                        "as_of": "2026-09-30",
                                        "plan": "analyst",
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/ratings"
                }
            }
        },
        "/v1/ratings/snapshot": {
            "get": {
                "operationId": "ratingsSnapshot",
                "summary": "Ratings snapshot",
                "description": "The table exactly as it stood on a date, built only from matches that started before it.\n\nPlans: Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/ratings-snapshot",
                "tags": [
                    "Ratings"
                ],
                "parameters": [
                    {
                        "name": "on",
                        "in": "query",
                        "required": false,
                        "description": "The date to rebuild the table as of, YYYY-MM-DD. Only matches that started before it count.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "How many to return. Default 50, at most 200.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": [
                                        {
                                            "rank": 1,
                                            "player_id": "pl_VEB8HM",
                                            "name": "Luke Littler",
                                            "country_code": "gb-eng",
                                            "rating": 2268,
                                            "matches": 797,
                                            "last_match": "2025-01-01"
                                        },
                                        {
                                            "rank": 2,
                                            "player_id": "pl_PMAW5J",
                                            "name": "Luke Humphries",
                                            "country_code": "gb-eng",
                                            "rating": 2219.3,
                                            "matches": 1094,
                                            "last_match": "2024-12-29"
                                        }
                                    ],
                                    "meta": {
                                        "on": "2025-01-01",
                                        "active": "players with 20 or more matches who had played since 2024-01-02",
                                        "count": 3,
                                        "plan": "analyst",
                                        "data_as_of": "2026-09-30T18:38:38Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/ratings-snapshot"
                }
            }
        },
        "/v1/ratings/movers": {
            "get": {
                "operationId": "ratingsMovers",
                "summary": "Ratings movers",
                "description": "Biggest risers and fallers.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/ratings-movers",
                "tags": [
                    "Ratings"
                ],
                "parameters": [
                    {
                        "name": "days",
                        "in": "query",
                        "required": false,
                        "description": "How far back movement is measured, in days: 7 to 365, default 30.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "How many to return. Default 50, at most 200.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "span": {
                                            "days": 60,
                                            "from": "2026-08-01",
                                            "to": "2026-09-30"
                                        },
                                        "risers": [
                                            {
                                                "player_id": "pl_K45R32",
                                                "name": "Ron Leon Kolberg",
                                                "country_code": "de",
                                                "rating": 1714.4,
                                                "change_30d": 18.2,
                                                "matches": 80,
                                                "last_match": "2026-09-03",
                                                "peak": {
                                                    "rating": 1717.3,
                                                    "on": "2026-09-03"
                                                },
                                                "moved": 329.8,
                                                "matches_in_span": 61
                                            },
                                            {
                                                "player_id": "pl_DD6PD4",
                                                "name": "Soren Gobel",
                                                "country_code": null,
                                                "rating": 1777.8,
                                                "change_30d": 29.7,
                                                "matches": 37,
                                                "last_match": "2026-09-06",
                                                "peak": {
                                                    "rating": 1777.8,
                                                    "on": "2026-09-06"
                                                },
                                                "moved": 301.4,
                                                "matches_in_span": 31
                                            },
                                            {
                                                "player_id": "pl_QC2YV3",
                                                "name": "Christian Goedl",
                                                "country_code": "at",
                                                "rating": 1812.9,
                                                "change_30d": 38.5,
                                                "matches": 31,
                                                "last_match": "2026-09-01",
                                                "peak": {
                                                    "rating": 1812.9,
                                                    "on": "2026-09-01"
                                                },
                                                "moved": 289.7,
                                                "matches_in_span": 29
                                            }
                                        ],
                                        "fallers": [
                                            {
                                                "player_id": "pl_R26FEJ",
                                                "name": "Dominik Borer",
                                                "country_code": "ch",
                                                "rating": 1192.8,
                                                "change_30d": -30.2,
                                                "matches": 29,
                                                "last_match": "2026-09-18",
                                                "peak": {
                                                    "rating": 1214.9,
                                                    "on": "2026-09-11"
                                                },
                                                "moved": -279.7,
                                                "matches_in_span": 26
                                            },
                                            {
                                                "player_id": "pl_DRSSJQ",
                                                "name": "Joel Rappo",
                                                "country_code": "ch",
                                                "rating": 1260,
                                                "change_30d": 0,
                                                "matches": 33,
                                                "last_match": "2026-08-26",
                                                "peak": {
                                                    "rating": 1305.7,
                                                    "on": "2026-08-13"
                                                },
                                                "moved": -218,
                                                "matches_in_span": 30
                                            },
                                            {
                                                "player_id": "pl_ZY2GH5",
                                                "name": "Carmen Netzer",
                                                "country_code": null,
                                                "rating": 1241.3,
                                                "change_30d": -23.1,
                                                "matches": 27,
                                                "last_match": "2026-09-02",
                                                "peak": {
                                                    "rating": 1277.9,
                                                    "on": "2026-08-26"
                                                },
                                                "moved": -215.8,
                                                "matches_in_span": 25
                                            }
                                        ]
                                    },
                                    "meta": {
                                        "counted": "established players with three or more matches in the span",
                                        "plan": "analyst",
                                        "data_as_of": "2026-09-30T18:38:43Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/ratings-movers"
                }
            }
        },
        "/v1/prices/bulk": {
            "get": {
                "operationId": "pricesBulk",
                "summary": "Prices in bulk",
                "description": "Priced history in bulk for model builders. Prices are history: held from 2016 to 20 March 2026, with no live prices since.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/prices-bulk",
                "tags": [
                    "Markets"
                ],
                "parameters": [
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Earliest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Latest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "market",
                        "in": "query",
                        "required": false,
                        "description": "match_winner, the one market held for darts.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "How many to return. Default 50, at most 200.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "cursor",
                        "in": "query",
                        "required": false,
                        "description": "Carry on from here: pass back meta.next_cursor exactly as it came.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": [
                                        {
                                            "match": {
                                                "match_id": "mt_0HMAEKY1109KNWVSP02A",
                                                "played_on": "2026-03-20",
                                                "round": "last_48",
                                                "winner": {
                                                    "player_id": "pl_KZWF7B",
                                                    "name": "Ryan Joyce",
                                                    "score": 6
                                                },
                                                "loser": {
                                                    "player_id": "pl_KZ3YMS",
                                                    "name": "Adam Gawlas",
                                                    "score": 4
                                                },
                                                "event": {
                                                    "event_id": "ev_MX0A6T",
                                                    "competition_id": "cp_2YJ4TA",
                                                    "name": "European Tour",
                                                    "date": "2026-03-22",
                                                    "tier": "european_tour"
                                                }
                                            },
                                            "tier": {
                                                "key": "european_tour",
                                                "name": "European Tour"
                                            },
                                            "price": {
                                                "market": "match_winner",
                                                "taken_at": "2026-03-20T17:17:59Z",
                                                "reading": "first_after_start",
                                                "decimal": {
                                                    "pl_KZWF7B": 1.952,
                                                    "pl_KZ3YMS": 2
                                                },
                                                "implied_pct": {
                                                    "pl_KZWF7B": 50.61,
                                                    "pl_KZ3YMS": 49.39
                                                },
                                                "book_pct": 101.23
                                            },
                                            "favourite": "pl_KZWF7B",
                                            "favourite_won": true,
                                            "model": {
                                                "source": "ratings as they stood before the match",
                                                "win_pct": {
                                                    "pl_KZWF7B": 51.4,
                                                    "pl_KZ3YMS": 48.6
                                                }
                                            }
                                        },
                                        {
                                            "match": {
                                                "match_id": "mt_0PT10676KFQNRMGWPKEM",
                                                "played_on": "2026-03-20",
                                                "round": "last_48",
                                                "winner": {
                                                    "player_id": "pl_D0J15E",
                                                    "name": "Sebastian Bialecki",
                                                    "score": 6
                                                },
                                                "loser": {
                                                    "player_id": "pl_EYX327",
                                                    "name": "Wessel Nijman",
                                                    "score": 3
                                                },
                                                "event": {
                                                    "event_id": "ev_MX0A6T",
                                                    "competition_id": "cp_2YJ4TA",
                                                    "name": "European Tour",
                                                    "date": "2026-03-22",
                                                    "tier": "european_tour"
                                                }
                                            },
                                            "tier": {
                                                "key": "european_tour",
                                                "name": "European Tour"
                                            },
                                            "price": {
                                                "market": "match_winner",
                                                "taken_at": "2026-03-20T17:17:59Z",
                                                "reading": "last_before_start",
                                                "decimal": {
                                                    "pl_D0J15E": 4.5,
                                                    "pl_EYX327": 1.25
                                                },
                                                "implied_pct": {
                                                    "pl_D0J15E": 21.74,
                                                    "pl_EYX327": 78.26
                                                },
                                                "book_pct": 102.22
                                            },
                                            "favourite": "pl_EYX327",
                                            "favourite_won": false,
                                            "model": {
                                                "source": "ratings as they stood before the match",
                                                "win_pct": {
                                                    "pl_D0J15E": 18.74,
                                                    "pl_EYX327": 81.26
                                                }
                                            }
                                        }
                                    ],
                                    "meta": {
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "market": "match_winner",
                                        "prices": "The best price across bookmakers at the last reading before the start, or the first reading after it where none came before. A best-of-market price: not one bookmaker's line and not a closing line.",
                                        "odds_archive": {
                                            "priced_matches": 10222,
                                            "first": "2016-01-03",
                                            "last": "2026-03-20"
                                        },
                                        "count": 2,
                                        "next_cursor": "c_qVzCdZolj6DTCsn3ZYWQOLL-3Eo60lnNjrLou_KGgzc4OQU",
                                        "data_as_of": "2026-09-30T18:38:43Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/prices-bulk"
                }
            }
        },
        "/v1/markets/calibration": {
            "get": {
                "operationId": "marketsCalibration",
                "summary": "Calibration",
                "description": "Implied probability against what actually happened, by price band. Prices are history: held from 2016 to 20 March 2026, with no live prices since.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/markets-calibration",
                "tags": [
                    "Markets"
                ],
                "parameters": [
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Earliest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Latest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "bucket",
                        "in": "query",
                        "required": false,
                        "description": "The width of each price band in percentage points: 5 or 10.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "tier",
                        "in": "query",
                        "required": false,
                        "description": "Only this tier: majors, players_championship, european_tour, world_series, qualifiers, development_tour, challenge_tour, womens_series, junior, regional, wdf_platinum, wdf_gold, wdf_silver, wdf_bronze, and so on.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "bands": [
                                            {
                                                "band": "50-60",
                                                "matches": 3417,
                                                "implied_pct": 55.1,
                                                "actual_pct": 56,
                                                "difference": 0.9
                                            },
                                            {
                                                "band": "60-70",
                                                "matches": 3172,
                                                "implied_pct": 64.8,
                                                "actual_pct": 65.7,
                                                "difference": 0.9
                                            },
                                            {
                                                "band": "70-80",
                                                "matches": 2228,
                                                "implied_pct": 74.4,
                                                "actual_pct": 73.4,
                                                "difference": -1
                                            }
                                        ],
                                        "all": {
                                            "matches": 10171,
                                            "level_prices_left_out": 51,
                                            "favourite_won_pct": 67,
                                            "brier": 0.2098,
                                            "log_loss": 0.60609
                                        }
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "market": "match_winner",
                                        "prices": "The best price across bookmakers at the last reading before the start, or the first reading after it where none came before. A best-of-market price: not one bookmaker's line and not a closing line.",
                                        "odds_archive": {
                                            "priced_matches": 10222,
                                            "first": "2016-01-03",
                                            "last": "2026-03-20"
                                        },
                                        "bucket_points": 10,
                                        "tier": null,
                                        "how": "Each match read from the favourite's side: the market's chance, with the bookmakers' margin taken out, against how often the favourite actually won.",
                                        "data_as_of": "2026-09-30T18:38:43Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/markets-calibration"
                }
            }
        },
        "/v1/markets/favourites": {
            "get": {
                "operationId": "marketsFavourites",
                "summary": "Favourites",
                "description": "Favourite win rate and level-stakes return by price and format. Prices are history: held from 2016 to 20 March 2026, with no live prices since.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/markets-favourites",
                "tags": [
                    "Markets"
                ],
                "parameters": [
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Earliest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Latest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "tier",
                        "in": "query",
                        "required": false,
                        "description": "Only this tier: majors, players_championship, european_tour, world_series, qualifiers, development_tour, challenge_tour, womens_series, junior, regional, wdf_platinum, wdf_gold, wdf_silver, wdf_bronze, and so on.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "by_price": [
                                            {
                                                "band": "1 to 1.2",
                                                "matches": 1148,
                                                "implied_pct": 86.4,
                                                "won_pct": 87.7,
                                                "average_price": 1.12,
                                                "level_stakes_return_pct": -2
                                            },
                                            {
                                                "band": "1.2 to 1.4",
                                                "matches": 2408,
                                                "implied_pct": 74.8,
                                                "won_pct": 74,
                                                "average_price": 1.3,
                                                "level_stakes_return_pct": -4.2
                                            },
                                            {
                                                "band": "1.4 to 1.6",
                                                "matches": 2818,
                                                "implied_pct": 65.3,
                                                "won_pct": 66.3,
                                                "average_price": 1.49,
                                                "level_stakes_return_pct": -1.2
                                            }
                                        ],
                                        "by_format": [
                                            {
                                                "band": "first to 1-3",
                                                "matches": 31,
                                                "implied_pct": 66.3,
                                                "won_pct": 71,
                                                "average_price": 1.5,
                                                "level_stakes_return_pct": 1.2
                                            },
                                            {
                                                "band": "first to 4-5",
                                                "matches": 791,
                                                "implied_pct": 67.5,
                                                "won_pct": 68.4,
                                                "average_price": 1.49,
                                                "level_stakes_return_pct": -1
                                            },
                                            {
                                                "band": "first to 6",
                                                "matches": 6139,
                                                "implied_pct": 65.8,
                                                "won_pct": 65.9,
                                                "average_price": 1.52,
                                                "level_stakes_return_pct": -2.4
                                            }
                                        ],
                                        "all": {
                                            "favourites": {
                                                "band": "every favourite",
                                                "matches": 10171,
                                                "implied_pct": 66.4,
                                                "won_pct": 67,
                                                "average_price": 1.51,
                                                "level_stakes_return_pct": -1.6
                                            },
                                            "outsiders": {
                                                "band": "every outsider",
                                                "matches": 10171,
                                                "implied_pct": 33.6,
                                                "won_pct": 33,
                                                "average_price": 3.48,
                                                "level_stakes_return_pct": -5.1
                                            }
                                        }
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "market": "match_winner",
                                        "prices": "The best price across bookmakers at the last reading before the start, or the first reading after it where none came before. A best-of-market price: not one bookmaker's line and not a closing line.",
                                        "odds_archive": {
                                            "priced_matches": 10222,
                                            "first": "2016-01-03",
                                            "last": "2026-03-20"
                                        },
                                        "tier": null,
                                        "returns": "Returns are level stakes at the best price across bookmakers, which flatters any approach compared with what one bookmaker would have paid.",
                                        "how": "Favourite bands are by the favourite's price. Format bands read the race from the winning score; set-play events are kept apart as sets.",
                                        "data_as_of": "2026-09-30T18:38:43Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/markets-favourites"
                }
            }
        },
        "/v1/markets/upsets": {
            "get": {
                "operationId": "marketsUpsets",
                "summary": "Upsets",
                "description": "The longest-priced winners and upset rates. Prices are history: held from 2016 to 20 March 2026, with no live prices since.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/markets-upsets",
                "tags": [
                    "Markets"
                ],
                "parameters": [
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Earliest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Latest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "min_price",
                        "in": "query",
                        "required": false,
                        "description": "Only winners at this decimal price or longer. Default 3.0.",
                        "schema": {
                            "type": "number"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "How many to return. Default 50, at most 200.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "longest_priced_winners": [
                                            {
                                                "match": {
                                                    "match_id": "mt_0KEYXBX9AR3Z95VZXKN0",
                                                    "played_on": "2025-12-18",
                                                    "round": "last_128",
                                                    "winner": {
                                                        "player_id": "pl_705SC9",
                                                        "name": "David Munyua",
                                                        "score": 3
                                                    },
                                                    "loser": {
                                                        "player_id": "pl_GGFTQP",
                                                        "name": "Mike De Decker",
                                                        "score": 2
                                                    },
                                                    "event": {
                                                        "event_id": "ev_CBJAWE",
                                                        "competition_id": "cp_P0X9NS",
                                                        "name": "World Championship",
                                                        "date": "2026-01-03",
                                                        "tier": "tour_other"
                                                    }
                                                },
                                                "tier": {
                                                    "key": "tour_other",
                                                    "name": "Other tour events"
                                                },
                                                "price": {
                                                    "market": "match_winner",
                                                    "taken_at": "2026-03-20T17:36:27Z",
                                                    "reading": "first_after_start",
                                                    "decimal": {
                                                        "pl_705SC9": 17,
                                                        "pl_GGFTQP": 1.035
                                                    },
                                                    "implied_pct": {
                                                        "pl_705SC9": 5.74,
                                                        "pl_GGFTQP": 94.26
                                                    },
                                                    "book_pct": 102.5
                                                },
                                                "favourite": "pl_GGFTQP",
                                                "favourite_won": false
                                            },
                                            {
                                                "match": {
                                                    "match_id": "mt_03AG4PH63HJM85HV75NC",
                                                    "played_on": "2022-12-15",
                                                    "round": "last_96",
                                                    "winner": {
                                                        "player_id": "pl_P76KPC",
                                                        "name": "Grant Sampson",
                                                        "score": 3
                                                    },
                                                    "loser": {
                                                        "player_id": "pl_15JJZ0",
                                                        "name": "Keane Barry",
                                                        "score": 1
                                                    },
                                                    "event": {
                                                        "event_id": "ev_W315CK",
                                                        "competition_id": "cp_P0X9NS",
                                                        "name": "World Championship",
                                                        "date": "2023-01-03",
                                                        "tier": "tour_other"
                                                    }
                                                },
                                                "tier": {
                                                    "key": "tour_other",
                                                    "name": "Other tour events"
                                                },
                                                "price": {
                                                    "market": "match_winner",
                                                    "taken_at": "2026-03-20T17:36:43Z",
                                                    "reading": "first_after_start",
                                                    "decimal": {
                                                        "pl_P76KPC": 15.31,
                                                        "pl_15JJZ0": 1.1
                                                    },
                                                    "implied_pct": {
                                                        "pl_P76KPC": 6.7,
                                                        "pl_15JJZ0": 93.3
                                                    },
                                                    "book_pct": 97.44
                                                },
                                                "favourite": "pl_15JJZ0",
                                                "favourite_won": false
                                            },
                                            {
                                                "match": {
                                                    "match_id": "mt_0ZCV9BAAQWDD6ZDJ6PZH",
                                                    "played_on": "2017-12-19",
                                                    "round": "last_64",
                                                    "winner": {
                                                        "player_id": "pl_R64ETG",
                                                        "name": "Kevin Münch",
                                                        "score": 3
                                                    },
                                                    "loser": {
                                                        "player_id": "pl_JCCFB5",
                                                        "name": "Adrian Lewis",
                                                        "score": 1
                                                    },
                                                    "event": {
                                                        "event_id": "ev_12SWHR",
                                                        "competition_id": "cp_P0X9NS",
                                                        "name": "World Championship",
                                                        "date": "2018-01-02",
                                                        "tier": "tour_other"
                                                    }
                                                },
                                                "tier": {
                                                    "key": "tour_other",
                                                    "name": "Other tour events"
                                                },
                                                "price": {
                                                    "market": "match_winner",
                                                    "taken_at": "2026-03-20T18:02:18Z",
                                                    "reading": "first_after_start",
                                                    "decimal": {
                                                        "pl_R64ETG": 12.78,
                                                        "pl_JCCFB5": 1.046
                                                    },
                                                    "implied_pct": {
                                                        "pl_R64ETG": 7.57,
                                                        "pl_JCCFB5": 92.43
                                                    },
                                                    "book_pct": 103.43
                                                },
                                                "favourite": "pl_JCCFB5",
                                                "favourite_won": false
                                            }
                                        ],
                                        "upset_rates": [
                                            {
                                                "band": "2 to 3",
                                                "matches": 5364,
                                                "implied_pct": 41.2,
                                                "outsider_won_pct": 40.1,
                                                "average_price": 2.39,
                                                "level_stakes_return_pct": -5.5
                                            },
                                            {
                                                "band": "3 to 5",
                                                "matches": 3207,
                                                "implied_pct": 27.4,
                                                "outsider_won_pct": 28.3,
                                                "average_price": 3.64,
                                                "level_stakes_return_pct": 0.5
                                            },
                                            {
                                                "band": "5 to 10",
                                                "matches": 1061,
                                                "implied_pct": 15.7,
                                                "outsider_won_pct": 14.1,
                                                "average_price": 6.43,
                                                "level_stakes_return_pct": -13.5
                                            }
                                        ],
                                        "all": {
                                            "matches": 10171,
                                            "upsets": 3356,
                                            "upset_pct": 33,
                                            "winners_at_or_over_min_price": 1073
                                        }
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "market": "match_winner",
                                        "prices": "The best price across bookmakers at the last reading before the start, or the first reading after it where none came before. A best-of-market price: not one bookmaker's line and not a closing line.",
                                        "odds_archive": {
                                            "priced_matches": 10222,
                                            "first": "2016-01-03",
                                            "last": "2026-03-20"
                                        },
                                        "min_price": 3,
                                        "returns": "Returns are level stakes at the best price across bookmakers, which flatters any approach compared with what one bookmaker would have paid.",
                                        "how": "An upset is the outsider winning. Rates are banded by the outsider's price.",
                                        "data_as_of": "2026-09-30T18:38:43Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/markets-upsets"
                }
            }
        },
        "/v1/markets/value": {
            "get": {
                "operationId": "marketsValue",
                "summary": "Value",
                "description": "Fixtures where model and market disagree past a threshold. Empty while no live prices are held (none since 20 March 2026).\n\nPlans: Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/markets-value",
                "tags": [
                    "Markets"
                ],
                "parameters": [
                    {
                        "name": "edge",
                        "in": "query",
                        "required": false,
                        "description": "The smallest gap between model and market to report, in percentage points: 0 to 50, default 5.",
                        "schema": {
                            "type": "number"
                        }
                    },
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Earliest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Latest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "How many to return. Default 50, at most 200.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "model_against_market": {
                                            "matches": 10222,
                                            "log_loss": {
                                                "model": 0.62688,
                                                "market": 0.60652
                                            },
                                            "brier": {
                                                "model": 0.2189,
                                                "market": 0.21
                                            },
                                            "same_favourite_pct": 85.9,
                                            "better_forecast": "market"
                                        },
                                        "backing_the_model_where_it_disagreed": {
                                            "band": "disagreed by 5+ points",
                                            "matches": 5689,
                                            "model_side_won_pct": 44.2,
                                            "average_price": 2.86,
                                            "level_stakes_return_pct": -2.5,
                                            "model_expected_pct": 55
                                        },
                                        "by_disagreement": [
                                            {
                                                "band": "disagreed by 2+ points",
                                                "matches": 8318,
                                                "model_side_won_pct": 45.8,
                                                "average_price": 2.76,
                                                "level_stakes_return_pct": -3.1
                                            },
                                            {
                                                "band": "disagreed by 5+ points",
                                                "matches": 5689,
                                                "model_side_won_pct": 44.2,
                                                "average_price": 2.86,
                                                "level_stakes_return_pct": -2.5
                                            },
                                            {
                                                "band": "disagreed by 10+ points",
                                                "matches": 2590,
                                                "model_side_won_pct": 40,
                                                "average_price": 3.15,
                                                "level_stakes_return_pct": -2.9
                                            }
                                        ],
                                        "disagreements": [
                                            {
                                                "match": {
                                                    "match_id": "mt_1XPCTP90DH7M0GFP9ATE",
                                                    "played_on": "2026-03-20",
                                                    "round": "last_48",
                                                    "winner": {
                                                        "player_id": "pl_Z4342S",
                                                        "name": "Ryan Meikle",
                                                        "score": 6
                                                    },
                                                    "loser": {
                                                        "player_id": "pl_EQ4VDT",
                                                        "name": "Francois Schweyen",
                                                        "score": 4
                                                    },
                                                    "event": {
                                                        "event_id": "ev_MX0A6T",
                                                        "competition_id": "cp_2YJ4TA",
                                                        "name": "European Tour",
                                                        "date": "2026-03-22",
                                                        "tier": "european_tour"
                                                    }
                                                },
                                                "model_pct": {
                                                    "pl_Z4342S": 58.82,
                                                    "pl_EQ4VDT": 41.18
                                                },
                                                "market_pct": {
                                                    "pl_Z4342S": 72.48,
                                                    "pl_EQ4VDT": 27.52
                                                },
                                                "disagreement_points": 13.7,
                                                "model_side": "pl_EQ4VDT",
                                                "price": 3.59,
                                                "model_side_won": false
                                            },
                                            {
                                                "match": {
                                                    "match_id": "mt_1E0G8VNQ78CG7XZ6S0X6",
                                                    "played_on": "2026-03-20",
                                                    "round": "last_48",
                                                    "winner": {
                                                        "player_id": "pl_0886SR",
                                                        "name": "Dirk van Duijvenbode",
                                                        "score": 6
                                                    },
                                                    "loser": {
                                                        "player_id": "pl_C8VA26",
                                                        "name": "Lukas Wenig",
                                                        "score": 3
                                                    },
                                                    "event": {
                                                        "event_id": "ev_MX0A6T",
                                                        "competition_id": "cp_2YJ4TA",
                                                        "name": "European Tour",
                                                        "date": "2026-03-22",
                                                        "tier": "european_tour"
                                                    }
                                                },
                                                "model_pct": {
                                                    "pl_0886SR": 48.77,
                                                    "pl_C8VA26": 51.23
                                                },
                                                "market_pct": {
                                                    "pl_0886SR": 64.62,
                                                    "pl_C8VA26": 35.38
                                                },
                                                "disagreement_points": 15.9,
                                                "model_side": "pl_C8VA26",
                                                "price": 2.8,
                                                "model_side_won": false
                                            },
                                            {
                                                "match": {
                                                    "match_id": "mt_0C6MCG9TAC9TA357T43N",
                                                    "played_on": "2026-03-20",
                                                    "round": "last_48",
                                                    "winner": {
                                                        "player_id": "pl_PRJ5BF",
                                                        "name": "Daryl Gurney",
                                                        "score": 6
                                                    },
                                                    "loser": {
                                                        "player_id": "pl_ZJRTY0",
                                                        "name": "Ian White",
                                                        "score": 1
                                                    },
                                                    "event": {
                                                        "event_id": "ev_MX0A6T",
                                                        "competition_id": "cp_2YJ4TA",
                                                        "name": "European Tour",
                                                        "date": "2026-03-22",
                                                        "tier": "european_tour"
                                                    }
                                                },
                                                "model_pct": {
                                                    "pl_PRJ5BF": 71.47,
                                                    "pl_ZJRTY0": 28.53
                                                },
                                                "market_pct": {
                                                    "pl_PRJ5BF": 65.88,
                                                    "pl_ZJRTY0": 34.12
                                                },
                                                "disagreement_points": 5.6,
                                                "model_side": "pl_PRJ5BF",
                                                "price": 1.45,
                                                "model_side_won": true
                                            }
                                        ]
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "market": "match_winner",
                                        "prices": "The best price across bookmakers at the last reading before the start, or the first reading after it where none came before. A best-of-market price: not one bookmaker's line and not a closing line.",
                                        "odds_archive": {
                                            "priced_matches": 10222,
                                            "first": "2016-01-03",
                                            "last": "2026-03-20"
                                        },
                                        "edge_points": 5,
                                        "returns": "Returns are level stakes at the best price across bookmakers, which flatters any approach compared with what one bookmaker would have paid.",
                                        "model": {
                                            "ratings_as_of": "2026-09-30",
                                            "length_effect": {
                                                "baseline_race": 6,
                                                "gamma": 0,
                                                "verdict": "No length adjustment beat the rating alone, so every format gets the rating's own probability."
                                            },
                                            "log_loss": {
                                                "chosen": 0.58968,
                                                "rating_alone": 0.58968
                                            },
                                            "how": "The rating's probability, adjusted for the length of the format only as far as the archive shows length matters, then turned into a per-leg chance to give scores and legs."
                                        },
                                        "how": "Past matches only, since a disagreement can only be judged once the match is played. Each is priced from the ratings as they stood before it was played, with the market's margin taken out, and a disagreement backs whichever side the model rated higher than the market did.",
                                        "data_as_of": "2026-09-30T18:38:47Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/markets-value"
                }
            }
        },
        "/v1/markets/formats": {
            "get": {
                "operationId": "marketsFormats",
                "summary": "Formats",
                "description": "How match length changes volatility.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/markets-formats",
                "tags": [
                    "Markets"
                ],
                "parameters": [
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Earliest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Latest date to include, YYYY-MM-DD.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "formats": [
                                            {
                                                "band": "first to 1-3",
                                                "matches": 31,
                                                "implied_pct": 66.3,
                                                "favourite_won_pct": 71,
                                                "average_price": 1.5,
                                                "level_stakes_return_pct": 1.2,
                                                "upset_pct": 29,
                                                "favourite_beat_the_market_by": 4.7
                                            },
                                            {
                                                "band": "first to 4-5",
                                                "matches": 791,
                                                "implied_pct": 67.5,
                                                "favourite_won_pct": 68.4,
                                                "average_price": 1.49,
                                                "level_stakes_return_pct": -1,
                                                "upset_pct": 31.6,
                                                "favourite_beat_the_market_by": 0.9
                                            },
                                            {
                                                "band": "first to 6",
                                                "matches": 6139,
                                                "implied_pct": 65.8,
                                                "favourite_won_pct": 65.9,
                                                "average_price": 1.52,
                                                "level_stakes_return_pct": -2.4,
                                                "upset_pct": 34.1,
                                                "favourite_beat_the_market_by": 0.1
                                            }
                                        ]
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "market": "match_winner",
                                        "prices": "The best price across bookmakers at the last reading before the start, or the first reading after it where none came before. A best-of-market price: not one bookmaker's line and not a closing line.",
                                        "odds_archive": {
                                            "priced_matches": 10222,
                                            "first": "2016-01-03",
                                            "last": "2026-03-20"
                                        },
                                        "returns": "Returns are level stakes at the best price across bookmakers, which flatters any approach compared with what one bookmaker would have paid.",
                                        "how": "Every priced match read from the favourite's side and banded by race length. The race is read from the winning score; set-play events are kept apart as sets. If longer races are steadier, the favourite's price shortens and its win rate rises together.",
                                        "data_as_of": "2026-09-30T18:38:47Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/markets-formats"
                }
            }
        },
        "/v1/probability": {
            "get": {
                "operationId": "probability",
                "summary": "Probability",
                "description": "Any pairing in any format.\n\nPlans: Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/probability",
                "tags": [
                    "Probability and props"
                ],
                "parameters": [
                    {
                        "name": "player_id",
                        "in": "query",
                        "required": false,
                        "description": "A player, as pl_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "opponent_id",
                        "in": "query",
                        "required": false,
                        "description": "The other player, as pl_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "format",
                        "in": "query",
                        "required": false,
                        "description": "legs or sets.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "legs",
                        "in": "query",
                        "required": false,
                        "description": "First to this many legs (in a sets match, legs per set).",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "sets",
                        "in": "query",
                        "required": false,
                        "description": "First to this many sets, for a sets match.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "format": {
                                            "format": "legs",
                                            "first_to_legs": 6,
                                            "label": "First to 6 legs"
                                        },
                                        "players": [
                                            {
                                                "player_id": "pl_VEB8HM",
                                                "name": "Luke Littler",
                                                "rating": 2415.6,
                                                "provisional": false
                                            },
                                            {
                                                "player_id": "pl_PMAW5J",
                                                "name": "Luke Humphries",
                                                "rating": 2312.4,
                                                "provisional": false
                                            }
                                        ],
                                        "leg_win_pct": {
                                            "pl_VEB8HM": 55.44,
                                            "pl_PMAW5J": 44.56
                                        },
                                        "match_win_pct": {
                                            "pl_VEB8HM": 64.43,
                                            "pl_PMAW5J": 35.57
                                        },
                                        "fair_odds": {
                                            "pl_VEB8HM": 1.55,
                                            "pl_PMAW5J": 2.81
                                        },
                                        "expected_legs": 9.2,
                                        "scores": [
                                            {
                                                "score": "6-4",
                                                "winner": "pl_VEB8HM",
                                                "pct": 14.42
                                            },
                                            {
                                                "score": "6-3",
                                                "winner": "pl_VEB8HM",
                                                "pct": 14.38
                                            },
                                            {
                                                "score": "6-5",
                                                "winner": "pl_VEB8HM",
                                                "pct": 12.85
                                            }
                                        ]
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "model": {
                                            "ratings_as_of": "2026-09-30",
                                            "length_effect": {
                                                "baseline_race": 6,
                                                "gamma": 0,
                                                "verdict": "No length adjustment beat the rating alone, so every format gets the rating's own probability."
                                            },
                                            "log_loss": {
                                                "chosen": 0.58968,
                                                "rating_alone": 0.58968
                                            },
                                            "how": "The rating's probability, adjusted for the length of the format only as far as the archive shows length matters, then turned into a per-leg chance to give scores and legs."
                                        },
                                        "data_as_of": "2026-09-30T18:38:47Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/probability"
                }
            }
        },
        "/v1/matches/{match_id}/probability": {
            "get": {
                "operationId": "matchProbability",
                "summary": "Match probability",
                "description": "The same for a real fixture, with the format taken from the match and the market placed beside it.\n\nPlans: Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/match-probability",
                "tags": [
                    "Probability and props"
                ],
                "parameters": [
                    {
                        "name": "match_id",
                        "in": "path",
                        "required": true,
                        "description": "A match, as mt_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "match": {
                                            "match_id": "mt_1WPYX3K955Y1R2BZBNKP",
                                            "played_on": "2026-03-20",
                                            "round": "last_48",
                                            "winner": {
                                                "player_id": "pl_ZDYYD1",
                                                "name": "Boris Krčmar",
                                                "score": 6
                                            },
                                            "loser": {
                                                "player_id": "pl_X29RN1",
                                                "name": "Raymond van Barneveld",
                                                "score": 1
                                            },
                                            "event": {
                                                "event_id": "ev_MX0A6T",
                                                "competition_id": "cp_2YJ4TA",
                                                "name": "European Tour",
                                                "date": "2026-03-22",
                                                "tier": "european_tour"
                                            }
                                        },
                                        "priced_before": "2026-03-20",
                                        "format": {
                                            "format": "legs",
                                            "first_to_legs": 6,
                                            "label": "First to 6 legs",
                                            "read_from": "the winning score"
                                        },
                                        "ratings_before": {
                                            "pl_ZDYYD1": 1976.4,
                                            "pl_X29RN1": 1855
                                        },
                                        "match_win_pct": {
                                            "pl_ZDYYD1": 66.8,
                                            "pl_X29RN1": 33.2
                                        },
                                        "fair_odds": {
                                            "pl_ZDYYD1": 1.5,
                                            "pl_X29RN1": 3.01
                                        },
                                        "favourite": "pl_ZDYYD1",
                                        "favourite_won": true,
                                        "actual_score_pct": 8.4,
                                        "market": {
                                            "decimal": {
                                                "pl_ZDYYD1": 1.58,
                                                "pl_X29RN1": 2.58
                                            },
                                            "implied_pct": {
                                                "pl_ZDYYD1": 62.02,
                                                "pl_X29RN1": 37.98
                                            },
                                            "taken_at": "2026-03-20T17:17:59Z",
                                            "reading": "last_before_start",
                                            "note": "The best price across bookmakers at the last reading before the start, or the first reading after it where none came before. A best-of-market price: not one bookmaker's line and not a closing line."
                                        }
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "model": {
                                            "ratings_as_of": "2026-09-30",
                                            "length_effect": {
                                                "baseline_race": 6,
                                                "gamma": 0,
                                                "verdict": "No length adjustment beat the rating alone, so every format gets the rating's own probability."
                                            },
                                            "log_loss": {
                                                "chosen": 0.58968,
                                                "rating_alone": 0.58968
                                            },
                                            "how": "The rating's probability, adjusted for the length of the format only as far as the archive shows length matters, then turned into a per-leg chance to give scores and legs."
                                        },
                                        "data_as_of": "2026-09-30T18:38:47Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/match-probability"
                }
            }
        },
        "/v1/props/180s": {
            "get": {
                "operationId": "props180s",
                "summary": "180s",
                "description": "180s pricing.\n\nPlans: Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/props-180s",
                "tags": [
                    "Probability and props"
                ],
                "parameters": [
                    {
                        "name": "player_id",
                        "in": "query",
                        "required": false,
                        "description": "A player, as pl_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "opponent_id",
                        "in": "query",
                        "required": false,
                        "description": "The other player, as pl_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "format",
                        "in": "query",
                        "required": false,
                        "description": "legs or sets.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "line",
                        "in": "query",
                        "required": false,
                        "description": "The 180s line to price over and under.",
                        "schema": {
                            "type": "number"
                        }
                    },
                    {
                        "name": "legs",
                        "in": "query",
                        "required": false,
                        "description": "First to this many legs (in a sets match, legs per set).",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "sets",
                        "in": "query",
                        "required": false,
                        "description": "First to this many sets, for a sets match.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "format": {
                                            "format": "legs",
                                            "first_to_legs": 11,
                                            "label": "First to 11 legs"
                                        },
                                        "expected_legs": 18.2,
                                        "players": [
                                            {
                                                "player_id": "pl_VEB8HM",
                                                "name": "Luke Littler",
                                                "per_leg_180": 0.5071,
                                                "expected_180s": 9.21,
                                                "matches_counted": 134
                                            },
                                            {
                                                "player_id": "pl_PMAW5J",
                                                "name": "Luke Humphries",
                                                "per_leg_180": 0.3909,
                                                "expected_180s": 7.1,
                                                "matches_counted": 144
                                            }
                                        ],
                                        "total": {
                                            "expected": 16.31,
                                            "line": 6.5,
                                            "over_pct": 99.67,
                                            "under_pct": 0.33,
                                            "fair_odds": {
                                                "over": 1,
                                                "under": 305.83
                                            }
                                        },
                                        "most_180s": {
                                            "pl_VEB8HM": 65.47,
                                            "pl_PMAW5J": 25.81,
                                            "tie": 8.72
                                        }
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "figures_from": "2025-09-30 to 2026-09-30",
                                        "how": "Each player's 180s per leg over the last twelve months, times the legs this format is expected to run, counted as independent Poisson totals.",
                                        "model": {
                                            "ratings_as_of": "2026-09-30",
                                            "length_effect": {
                                                "baseline_race": 6,
                                                "gamma": 0,
                                                "verdict": "No length adjustment beat the rating alone, so every format gets the rating's own probability."
                                            },
                                            "log_loss": {
                                                "chosen": 0.58968,
                                                "rating_alone": 0.58968
                                            },
                                            "how": "The rating's probability, adjusted for the length of the format only as far as the archive shows length matters, then turned into a per-leg chance to give scores and legs."
                                        },
                                        "data_as_of": "2026-09-30T18:38:48Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/props-180s"
                }
            }
        },
        "/v1/props/finishing": {
            "get": {
                "operationId": "propsFinishing",
                "summary": "Finishing",
                "description": "Checkout and nine-darter pricing.\n\nPlans: Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/props-finishing",
                "tags": [
                    "Probability and props"
                ],
                "parameters": [
                    {
                        "name": "player_id",
                        "in": "query",
                        "required": false,
                        "description": "A player, as pl_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "opponent_id",
                        "in": "query",
                        "required": false,
                        "description": "The other player, as pl_ followed by six characters.",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-z]{2}_[A-Z0-9]{6}$"
                        }
                    },
                    {
                        "name": "format",
                        "in": "query",
                        "required": false,
                        "description": "legs or sets.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "legs",
                        "in": "query",
                        "required": false,
                        "description": "First to this many legs (in a sets match, legs per set).",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "sets",
                        "in": "query",
                        "required": false,
                        "description": "First to this many sets, for a sets match.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "format": {
                                            "format": "legs",
                                            "first_to_legs": 11,
                                            "label": "First to 11 legs"
                                        },
                                        "expected_legs": 18.2,
                                        "players": [
                                            {
                                                "player_id": "pl_VEB8HM",
                                                "name": "Luke Littler",
                                                "checkout_pct": 47.31,
                                                "best_checkout_12_months": 170,
                                                "checkout_at_least": {
                                                    "100_plus_pct": 72.32,
                                                    "120_plus_pct": 56.51,
                                                    "140_plus_pct": 35.63,
                                                    "170_plus_pct": 11.38
                                                },
                                                "matches_counted": 134
                                            },
                                            {
                                                "player_id": "pl_PMAW5J",
                                                "name": "Luke Humphries",
                                                "checkout_pct": 43.71,
                                                "best_checkout_12_months": 170,
                                                "checkout_at_least": {
                                                    "100_plus_pct": 74.65,
                                                    "120_plus_pct": 49.85,
                                                    "140_plus_pct": 23.52,
                                                    "170_plus_pct": 3.71
                                                },
                                                "matches_counted": 144
                                            }
                                        ],
                                        "either_player": {
                                            "100_plus_pct": 92.98,
                                            "120_plus_pct": 78.19,
                                            "140_plus_pct": 50.77,
                                            "170_plus_pct": 14.67
                                        }
                                    },
                                    "meta": {
                                        "plan": "analyst",
                                        "figures_from": "2025-09-30 to 2026-09-30",
                                        "how": "How often each player's best checkout in a match reached each mark over the last twelve months, turned into a per-leg chance and scaled to the legs this format is expected to run.",
                                        "model": {
                                            "ratings_as_of": "2026-09-30",
                                            "length_effect": {
                                                "baseline_race": 6,
                                                "gamma": 0,
                                                "verdict": "No length adjustment beat the rating alone, so every format gets the rating's own probability."
                                            },
                                            "log_loss": {
                                                "chosen": 0.58968,
                                                "rating_alone": 0.58968
                                            },
                                            "how": "The rating's probability, adjusted for the length of the format only as far as the archive shows length matters, then turned into a per-leg chance to give scores and legs."
                                        },
                                        "data_as_of": "2026-09-30T18:38:48Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/props-finishing"
                }
            }
        },
        "/v1/leaders": {
            "get": {
                "operationId": "leaders",
                "summary": "Leaders",
                "description": "Leaderboards.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/leaders",
                "tags": [
                    "Leaders, sync and usage"
                ],
                "parameters": [
                    {
                        "name": "metric",
                        "in": "query",
                        "required": false,
                        "description": "wins, matches, or any statistic by its key: three_dart_avg, count_180, checkout_pct and the rest.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "season",
                        "in": "query",
                        "required": false,
                        "description": "A calendar year, such as 2025.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "tier",
                        "in": "query",
                        "required": false,
                        "description": "Only this tier: majors, players_championship, european_tour, world_series, qualifiers, development_tour, challenge_tour, womens_series, junior, regional, wdf_platinum, wdf_gold, wdf_silver, wdf_bronze, and so on.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "How many to return. Default 50, at most 200.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": [
                                        {
                                            "position": 1,
                                            "player_id": "pl_VEB8HM",
                                            "name": "Luke Littler",
                                            "three_dart_avg": 101.06,
                                            "matches_counted": 176
                                        },
                                        {
                                            "position": 2,
                                            "player_id": "pl_PMAW5J",
                                            "name": "Luke Humphries",
                                            "three_dart_avg": 98.77,
                                            "matches_counted": 154
                                        }
                                    ],
                                    "meta": {
                                        "metric": "three_dart_avg",
                                        "combined": "mean",
                                        "season": "2025",
                                        "count": 3,
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "qualifying": "ten or more matches with the figure",
                                        "data_as_of": "2026-09-30T18:39:22Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/leaders"
                }
            }
        },
        "/v1/changes": {
            "get": {
                "operationId": "changes",
                "summary": "Changes",
                "description": "Everything added or changed since a cursor, so a customer can sync without polling every list.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/changes",
                "tags": [
                    "Leaders, sync and usage"
                ],
                "parameters": [
                    {
                        "name": "since",
                        "in": "query",
                        "required": false,
                        "description": "Carry on from here: pass back meta.next_cursor exactly as it came. Leave it out to start from a day ago.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "kind",
                        "in": "query",
                        "required": false,
                        "description": "Only one kind of change: match, player or event.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "How many to return. Default 100, at most 500.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": [
                                        {
                                            "kind": "match",
                                            "change": "updated",
                                            "id": "mt_168KK1Y1YTY9YT7SPXF8",
                                            "at": "2026-09-29T18:39:37Z",
                                            "record": {
                                                "match_id": "mt_168KK1Y1YTY9YT7SPXF8",
                                                "played_on": "2026-09-16",
                                                "round": "round_robin",
                                                "winner": {
                                                    "player_id": "pl_FSMTAQ",
                                                    "name": "Kyron Duggan",
                                                    "score": 2
                                                },
                                                "loser": {
                                                    "player_id": "pl_QSG9M3",
                                                    "name": "Ray Campbell",
                                                    "score": 0
                                                },
                                                "event": {
                                                    "event_id": "ev_NXH9HX",
                                                    "competition_id": "cp_G7BEPB",
                                                    "name": "Junior Volts Series 1 Week",
                                                    "date": "2026-09-14",
                                                    "tier": "junior"
                                                }
                                            }
                                        },
                                        {
                                            "kind": "match",
                                            "change": "updated",
                                            "id": "mt_03RBVC2T2FFARBE9B7E5",
                                            "at": "2026-09-29T18:39:37Z",
                                            "record": {
                                                "match_id": "mt_03RBVC2T2FFARBE9B7E5",
                                                "played_on": "2026-09-16",
                                                "round": "round_robin",
                                                "winner": {
                                                    "player_id": "pl_8J9TW6",
                                                    "name": "Aaron McBride",
                                                    "score": 2
                                                },
                                                "loser": {
                                                    "player_id": "pl_QSG9M3",
                                                    "name": "Ray Campbell",
                                                    "score": 0
                                                },
                                                "event": {
                                                    "event_id": "ev_NXH9HX",
                                                    "competition_id": "cp_G7BEPB",
                                                    "name": "Junior Volts Series 1 Week",
                                                    "date": "2026-09-14",
                                                    "tier": "junior"
                                                }
                                            }
                                        }
                                    ],
                                    "meta": {
                                        "count": 3,
                                        "has_more": true,
                                        "next_cursor": "c_A3PyDXicGpmoirKwNaxGVJ32k0k_fQ",
                                        "poll": "more waiting: call again straight away with next_cursor",
                                        "plan": "analyst",
                                        "window": "everything, including the model endpoints",
                                        "data_as_of": "2026-09-30T18:39:22Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/changes"
                }
            }
        },
        "/v1/usage": {
            "get": {
                "operationId": "usage",
                "summary": "Usage",
                "description": "Plan, window, limits and today's counters. Lab tools check this before doing any work.\n\nPlans: Free key, Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/usage",
                "tags": [
                    "Leaders, sync and usage"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                },
                                "example": {
                                    "data": {
                                        "account": "ac_EXAMPLE",
                                        "plan": {
                                            "key": "free",
                                            "name": "Free key",
                                            "endpoints": 10,
                                            "of": 41,
                                            "reach": "every free endpoint, on results at least seven days old"
                                        },
                                        "window": {
                                            "from": null,
                                            "to": "2026-09-23",
                                            "in_play": false
                                        },
                                        "rate": {
                                            "per_minute": 60,
                                            "used_this_minute": 1,
                                            "resets_in_s": 38
                                        },
                                        "allowance": {
                                            "period": "day",
                                            "limit": 500,
                                            "used": 1,
                                            "remaining": 499,
                                            "used_pct": 0.2,
                                            "resets_in_s": 19238,
                                            "resets_at": "2026-10-01T00:00:00Z"
                                        },
                                        "counted": "Every call that is authorised and understood counts, including this one. Refusals for plan or parameters do not.",
                                        "key": {
                                            "prefix": "da_live_3f9c",
                                            "last_used": "2026-09-30T18:39:22Z"
                                        }
                                    },
                                    "meta": {
                                        "plan": "free",
                                        "data_as_of": "2026-09-30T18:39:22Z"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Free key",
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/usage"
                }
            }
        },
        "/v1/history/world-championships": {
            "get": {
                "operationId": "historyChampionships",
                "summary": "World championships",
                "description": "The world championships the match archive does not hold, the BDO's from 1978 to 2020 and the WDF's of 2023 and 2024: champion, runner-up and what is held for each.\n\nPlans: Free key, Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/history-championships",
                "tags": [
                    "History"
                ],
                "parameters": [
                    {
                        "name": "draw",
                        "in": "query",
                        "required": false,
                        "description": "men (the default) or women: the women's world championships, the BDO's from 2001 to 2020 and the WDF's of 2023 and 2024.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Free key",
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/history-championships"
                }
            }
        },
        "/v1/history/world-championships/{year}": {
            "get": {
                "operationId": "historyChampionship",
                "summary": "A world championship",
                "description": "One of those championships in full: every round, both players, the sets each won and their averages where published.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/history-championship",
                "tags": [
                    "History"
                ],
                "parameters": [
                    {
                        "name": "year",
                        "in": "path",
                        "required": true,
                        "description": "The year it was played: 1978 to 2020 for the BDO, 2023 or 2024 for the WDF (with draw=women, 2001 to 2020 for the BDO).",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "draw",
                        "in": "query",
                        "required": false,
                        "description": "men (the default) or women: the women's world championships, the BDO's from 2001 to 2020 and the WDF's of 2023 and 2024.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/history-championship"
                }
            }
        },
        "/v1/order-of-merit": {
            "get": {
                "operationId": "oomTable",
                "summary": "oom_table",
                "description": "The PDC Order of Merit as it stood on a day: position, places moved, player and ranking prize money. Today's, or date= for another day held.\n\nPlans: Free key, Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/oom-table",
                "tags": [
                    "Rankings"
                ],
                "parameters": [
                    {
                        "name": "date",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Free key",
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/oom-table"
                }
            }
        },
        "/v1/order-of-merit/seasons": {
            "get": {
                "operationId": "oomSeasons",
                "summary": "oom_seasons",
                "description": "The seasons whose start-of-season Order of Merit is held (2017 on), with how many players each lists.\n\nPlans: Free key, Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/oom-seasons",
                "tags": [
                    "Rankings"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Free key",
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/oom-seasons"
                }
            }
        },
        "/v1/order-of-merit/seasons/{season}": {
            "get": {
                "operationId": "oomSeason",
                "summary": "oom_season",
                "description": "One season's start list in full: every Tour Card holder in order, country, ranking prize money and how the card was won.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/oom-season",
                "tags": [
                    "Rankings"
                ],
                "parameters": [
                    {
                        "name": "season",
                        "in": "path",
                        "required": true,
                        "description": "A calendar year, such as 2025.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/oom-season"
                }
            }
        },
        "/v1/order-of-merit/lists": {
            "get": {
                "operationId": "oomLists",
                "summary": "oom_lists",
                "description": "Every other ranking table held, with its seasons: the Order of Merit after each World Championship and year to date, the qualification races for the majors, the Players Championship and European Tour tables, the Challenge Tour, Development Tour, Women's Series, Asian Tour and Nordic & Baltic, from 2019.\n\nPlans: Free key, Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/oom-lists",
                "tags": [
                    "Rankings"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Free key",
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/oom-lists"
                }
            }
        },
        "/v1/order-of-merit/lists/{list}": {
            "get": {
                "operationId": "oomList",
                "summary": "oom_list",
                "description": "One ranking table in full for a season: position, player and ranking prize money (or points). season= for one season, the newest held without it.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/oom-list",
                "tags": [
                    "Rankings"
                ],
                "parameters": [
                    {
                        "name": "list",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "season",
                        "in": "query",
                        "required": false,
                        "description": "A calendar year, such as 2025.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/oom-list"
                }
            }
        },
        "/v1/history/majors": {
            "get": {
                "operationId": "historyMajors",
                "summary": "history_majors",
                "description": "The televised majors of 2004 to 2017 the match archive does not hold, from published draws: each event, its dates and how many matches are held. major= for one.\n\nPlans: Free key, Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/history-majors",
                "tags": [
                    "History"
                ],
                "parameters": [
                    {
                        "name": "major",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Free key",
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/history-majors"
                }
            }
        },
        "/v1/history/majors/{year}": {
            "get": {
                "operationId": "historyMajor",
                "summary": "history_major",
                "description": "Every major of that year the archive does not hold, in full: round, both players, the score and their averages where published. major= for one.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/history-major",
                "tags": [
                    "History"
                ],
                "parameters": [
                    {
                        "name": "year",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "major",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/history-major"
                }
            }
        },
        "/v1/major-editions": {
            "get": {
                "operationId": "majorEditions",
                "summary": "major_editions",
                "description": "Every edition of the main tournaments since 1994: dates, venue, town and country, organiser, sponsor, field size and prize pool, with our edition ids. major= for one.\n\nPlans: Free key, Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/major-editions",
                "tags": [
                    "Reference and coverage"
                ],
                "parameters": [
                    {
                        "name": "major",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Free key",
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/major-editions"
                }
            }
        },
        "/v1/major-editions/{year}": {
            "get": {
                "operationId": "majorEditionYear",
                "summary": "major_edition_year",
                "description": "Each edition of that year in full, with the prize for each stage reached (champion, runner-up, semi finals and on). major= for one.\n\nPlans: Live, Archive, Complete, Analyst.\n\nFull reference: https://dartsapi.com/documentation/endpoints/major-edition-year",
                "tags": [
                    "Reference and coverage"
                ],
                "parameters": [
                    {
                        "name": "year",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "major",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Envelope"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/Invalid"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooMany"
                    }
                },
                "x-plans": [
                    "Live",
                    "Archive",
                    "Complete",
                    "Analyst"
                ],
                "externalDocs": {
                    "url": "https://dartsapi.com/documentation/endpoints/major-edition-year"
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "bearer": {
                "type": "http",
                "scheme": "bearer",
                "description": "Your key, for example da_live_7f3a..."
            }
        },
        "schemas": {
            "Envelope": {
                "type": "object",
                "properties": {
                    "data": {
                        "description": "The rows, or one object for a single record."
                    },
                    "meta": {
                        "type": "object",
                        "description": "Paging, the window your plan reached, and how fresh the data is."
                    }
                },
                "additionalProperties": true
            },
            "Error": {
                "type": "object",
                "required": [
                    "error"
                ],
                "properties": {
                    "error": {
                        "type": "object",
                        "required": [
                            "code",
                            "message"
                        ],
                        "properties": {
                            "code": {
                                "type": "string"
                            },
                            "message": {
                                "type": "string"
                            },
                            "request_id": {
                                "type": "string"
                            }
                        },
                        "additionalProperties": true
                    }
                }
            }
        },
        "responses": {
            "Unauthorized": {
                "description": "No key, or a key that is not recognised.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "Forbidden": {
                "description": "The key's plan does not reach this endpoint or this date. The message names the plan that does.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "NotFound": {
                "description": "No such player, match, competition or edition.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "Invalid": {
                "description": "A parameter was missing, malformed or not one this endpoint takes. The error names it.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "TooMany": {
                "description": "The minute's rate or the day's or month's allowance is used up. The message says when it resets.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            }
        }
    }
}