# BoxingAPI complete reference

The whole boxing data API in one file: every endpoint, parameter, error, sample answer and guide.

- Base URL: https://api.boxingapi.net/v1
- Authentication: `Authorization: Bearer YOUR_KEY` or `X-API-Key: YOUR_KEY`
- Site: https://boxingapi.net
- Endpoints: 61
- Generated: 2026-10-30 06:08 UTC (the newest change to its sources)
- This file: https://boxingapi.net/documentation/manual.md

## Before anything else

- Factual data only: results, records, rankings, cards, prices and statistics. No predictions or tips on any endpoint; our BXR rating and BXP points are tables built from results, not forecasts.
- Not held on any plan: punch statistics, round-by-round scoring, live in-fight data.
- Every answer is one envelope: `data` (the records) and `meta` (paging, your plan, `held_back` for fields a higher plan opens, and `generated_at`).

## Plans

| Plan | Price | Calls a day | Calls a minute | History |
| --- | --- | --- | --- | --- |
| Free key | free | 50 | 10 | yesterday on |
| Live | $29 a month | 5,000 | 60 | last 12 months |
| Archive | $79 a month | 20,000 | 120 | all |
| Complete | $149 a month | 100,000 | 300 | all |

## Endpoints

### Fights to come

The cards ahead, with the best price on each side.

#### `GET /v1/fights/upcoming`

Scheduled bouts in the coming days, soonest first, with the best price on each side and the chance it implies. Prices are on Live and above.

Plans: Free key and above. Page: https://boxingapi.net/documentation/fights-upcoming. MCP tool: `upcoming_fights`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `days` | query | integer | no | How many days ahead; 1 to 30; default 7 |

Errors: 400 bad_request, 401 unauthorized, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/fights/upcoming?per_page=3`

```json
{
    "data": [
        {
            "id": "fx_ncafy6jj",
            "date": "2026-10-31",
            "start_time_utc": "16:00",
            "a": {
                "id": "fi_mjz2nrm2",
                "name": "Erick Jahir Urvina Villegas",
                "best_price": 1150,
                "best_price_decimal": 12.5,
                "win_chance": 0.0775
            },
            "b": {
                "id": "fi_kfh2nc05",
                "name": "Sultan Almohammed",
                "best_price": -2000,
                "best_price_decimal": 1.05,
                "win_chance": 0.9225
            },
            "books": 3,
            "props": 0,
            "prices_read_at": "2026-10-30T14:35:06Z"
        },
        {
            "id": "fx_djg43xfx",
            "date": "2026-10-31",
            "start_time_utc": "16:00",
            "a": {
                "id": "fi_kr3e1m67",
                "name": "Emiliano Rojo Vazquez",
                "best_price": -2000,
                "best_price_decimal": 1.05,
                "win_chance": 0.9225
            },
            "b": {
                "id": "fi_21v15cjm",
                "name": "Flavius Biea",
                "best_price": 1150,
                "best_price_decimal": 12.5,
                "win_chance": 0.0775
            },
            "books": 3,
            "props": 1,
            "prices_read_at": "2026-10-30T14:35:06Z"
        },
        {
            "id": "fx_k2tqp0jp",
            "date": "2026-10-31",
            "start_time_utc": "16:00",
            "a": {
                "id": "fi_21rtsf63",
                "name": "Brayan Leon",
                "best_price": -1408,
                "best_price_decimal": 1.071,
                "win_chance": 0.9074
            },
            "b": {
                "id": "fi_031gfvvg",
                "name": "Hector Aguirre",
                "best_price": 950,
                "best_price_decimal": 10.5,
                "win_chance": 0.0926
            },
            "books": 3,
            "props": 1,
            "prices_read_at": "2026-10-30T14:35:06Z"
        }
    ],
    "meta": {
        "plan": "Complete",
        "from": "2026-10-30",
        "to": "2026-11-06",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 10,
        "total_pages": 4,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/fights/{id}`

One scheduled bout with the best price on each side and every prop market priced for it. Prices are on Live and above.

Plans: Free key and above. Page: https://boxingapi.net/documentation/fight

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting fx_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/fights/fx_4a5y6z21`

```json
{
    "data": {
        "id": "fx_4a5y6z21",
        "date": "2026-10-31",
        "start_time_utc": "22:00",
        "date_set": true,
        "a": {
            "id": "fi_2mzs7cks",
            "name": "Christian Mbilli",
            "best_price": 285,
            "win_chance": 0.2616
        },
        "b": {
            "id": "fi_8khg81tz",
            "name": "Saul Alvarez",
            "best_price": -275,
            "win_chance": 0.7384
        },
        "books": 6,
        "props": [
            {
                "market": "Over 5½ rounds",
                "best_price": -3335,
                "books": 1
            },
            {
                "market": "Under 5½ rounds",
                "best_price": 900,
                "books": 1
            },
            {
                "market": "Over 6½ rounds",
                "best_price": -1667,
                "books": 1
            },
            {
                "market": "Under 6½ rounds",
                "best_price": 650,
                "books": 1
            },
            {
                "market": "Over 7½ rounds",
                "best_price": -1115,
                "books": 1
            },
            {
                "market": "Under 7½ rounds",
                "best_price": 550,
                "books": 1
            },
            {
                "market": "Over 8½ rounds",
                "best_price": -770,
                "books": 1
            },
            {
                "market": "Under 8½ rounds",
                "best_price": 440,
                "books": 1
            },
            {
                "market": "Over 9½ rounds",
                "best_price": -500,
                "books": 3
            },
            {
                "market": "Under 9½ rounds",
                "best_price": 360,
                "books": 3
            },
            {
                "market": "Over 10½ rounds",
                "best_price": -450,
                "books": 2
            },
            {
                "market": "Under 10½ rounds",
                "best_price": 310,
                "books": 2
            },
            {
                "market": "Over 11½ rounds",
                "best_price": -370,
                "books": 1
            },
            {
                "market": "Under 11½ rounds",
                "best_price": 250,
                "books": 1
            },
            {
                "market": "Fight goes to decision",
                "best_price": -340,
                "books": 4
            },
            {
                "market": "Fight doesn't go to decision",
                "best_price": 255,
                "books": 4
            },
            {
                "market": "Mbilli wins by TKO/KO or DQ",
                "best_price": 1050,
                "books": 3
            },
            {
                "market": "Alvarez wins by TKO/KO or DQ",
                "best_price": 360,
                "books": 3
            },
            {
                "market": "Mbilli wins by decision",
                "best_price": 440,
                "books": 3
            },
            {
                "market": "Alvarez wins by decision",
                "best_price": -138,
                "books": 3
            },
            {
                "market": "Fight is a draw",
                "best_price": 1800,
                "books": 4
            },
            {
                "market": "Mbilli wins in round 1",
                "best_price": 10000,
                "books": 2
            },
            {
                "market": "Alvarez wins in round 1",
                "best_price": 10000,
                "books": 2
            },
            {
                "market": "Mbilli wins in round 2",
                "best_price": 10000,
                "books": 2
            },
            {
                "market": "Alvarez wins in round 2",
                "best_price": 8000,
                "books": 2
            },
            {
                "market": "Mbilli wins in round 3",
                "best_price": 10000,
                "books": 2
            },
            {
                "market": "Alvarez wins in round 3",
                "best_price": 6600,
                "books": 2
            },
            {
                "market": "Mbilli wins in round 4",
                "best_price": 8000,
                "books": 2
            },
            {
                "market": "Alvarez wins in round 4",
                "best_price": 4500,
                "books": 2
            },
            {
                "market": "Mbilli wins in round 5",
                "best_price": 6600,
                "books": 2
            },
            {
                "market": "Alvarez wins in round 5",
                "best_price": 4000,
                "books": 2
            },
            {
                "market": "Mbilli wins in round 6",
                "best_price": 5500,
                "books": 2
            },
            {
                "market": "Alvarez wins in round 6",
                "best_price": 2800,
                "books": 2
            },
            {
                "market": "Mbilli wins in round 7",
                "best_price": 5500,
                "books": 2
            },
            {
                "market": "Alvarez wins in round 7",
                "best_price": 2800,
                "books": 2
            },
            {
                "market": "Mbilli wins in round 8",
                "best_price": 5500,
                "books": 2
            },
            {
                "market": "Alvarez wins in round 8",
                "best_price": 2200,
                "books": 2
            },
            {
                "market": "Mbilli wins in round 9",
                "best_price": 5500,
                "books": 2
            },
            {
                "market": "Alvarez wins in round 9",
                "best_price": 2200,
                "books": 2
            },
            {
                "market": "Mbilli wins in round 10",
                "best_price": 5500,
                "books": 2
            },
            {
                "market": "Alvarez wins in round 10",
                "best_price": 2200,
                "books": 2
            },
            {
                "market": "Mbilli wins in round 11",
                "best_price": 6600,
                "books": 2
            },
            {
                "market": "Alvarez wins in round 11",
                "best_price": 2500,
                "books": 2
            },
            {
                "market": "Mbilli wins in round 12",
                "best_price": 7500,
                "books": 2
            },
            {
                "market": "Alvarez wins in round 12",
                "best_price": 2800,
                "books": 2
            },
            {
                "market": "Mbilli wins in round 1-3",
                "best_price": 5500,
                "books": 1
            },
            {
                "market": "Alvarez wins in round 1-3",
                "best_price": 4000,
                "books": 1
            },
            {
                "market": "Mbilli wins in round 4-6",
                "best_price": 3400,
                "books": 1
            },
            {
                "market": "Alvarez wins in round 4-6",
                "best_price": 1400,
                "books": 1
            },
            {
                "market": "Mbilli wins in round 7-9",
                "best_price": 2400,
                "books": 1
            },
            {
                "market": "Alvarez wins in round 7-9",
                "best_price": 950,
                "books": 1
            },
            {
                "market": "Mbilli wins in round 10-12",
                "best_price": 2500,
                "books": 1
            },
            {
                "market": "Alvarez wins in round 10-12",
                "best_price": 950,
                "books": 1
            },
            {
                "market": "Mbilli wins in round 1-6",
                "best_price": 2200,
                "books": 1
            },
            {
                "market": "Alvarez wins in round 1-6",
                "best_price": 900,
                "books": 1
            },
            {
                "market": "Mbilli wins in round 7-12",
                "best_price": 1300,
                "books": 1
            },
            {
                "market": "Alvarez wins in round 7-12",
                "best_price": 430,
                "books": 1
            },
            {
                "market": "Fight ends in round 1",
                "best_price": 5000,
                "books": 1
            },
            {
                "market": "Fight ends in round 2",
                "best_price": 5000,
                "books": 1
            },
            {
                "market": "Fight ends in round 3",
                "best_price": 4500,
                "books": 1
            },
            {
                "market": "Fight ends in round 4",
                "best_price": 4000,
                "books": 1
            },
            {
                "market": "Fight ends in round 5",
                "best_price": 3000,
                "books": 1
            },
            {
                "market": "Fight ends in round 6",
                "best_price": 2700,
                "books": 1
            },
            {
                "market": "Fight ends in round 7",
                "best_price": 2200,
                "books": 1
            },
            {
                "market": "Fight ends in round 8",
                "best_price": 2000,
                "books": 1
            },
            {
                "market": "Fight ends in round 9",
                "best_price": 2200,
                "books": 1
            },
            {
                "market": "Fight ends in round 10",
                "best_price": 2500,
                "books": 1
            },
            {
                "market": "Fight ends in round 11",
                "best_price": 3000,
                "books": 1
            },
            {
                "market": "Fight ends in round 12",
                "best_price": 3500,
                "books": 1
            },
            {
                "market": "Fight ends in round 1-3",
                "best_price": 2200,
                "books": 1
            },
            {
                "market": "Fight ends in round 1-3",
                "best_price": 4500,
                "books": 1
            },
            {
                "market": "Fight ends in round 1-3",
                "best_price": 2800,
                "books": 1
            },
            {
                "market": "Fight ends in round 4-6",
                "best_price": 1200,
                "books": 1
            },
            {
                "market": "Fight ends in round 4-6",
                "best_price": 2800,
                "books": 1
            },
            {
                "market": "Fight ends in round 4-6",
                "best_price": 1200,
                "books": 1
            },
            {
                "market": "Fight ends in round 7-9",
                "best_price": 700,
                "books": 1
            },
            {
                "market": "Fight ends in round 7-9",
                "best_price": 2000,
                "books": 1
            },
            {
                "market": "Fight ends in round 7-9",
                "best_price": 700,
                "books": 1
            },
            {
                "market": "Fight ends in round 10-12",
                "best_price": 1100,
                "books": 1
            },
            {
                "market": "Fight ends in round 10-12",
                "best_price": 2400,
                "books": 1
            },
            {
                "market": "Fight ends in round 10-12",
                "best_price": 850,
                "books": 1
            },
            {
                "market": "Fight ends in round 1-6",
                "best_price": 2400,
                "books": 1
            },
            {
                "market": "Fight ends in round 1-6",
                "best_price": 1200,
                "books": 1
            },
            {
                "market": "Fight ends in round 7-12",
                "best_price": 1200,
                "books": 1
            },
            {
                "market": "Fight ends in round 7-12",
                "best_price": 550,
                "books": 1
            },
            {
                "market": "Mbilli wins in round 1-2",
                "best_price": 5500,
                "books": 1
            },
            {
                "market": "Alvarez wins in round 1-2",
                "best_price": 5000,
                "books": 1
            },
            {
                "market": "Mbilli wins in round 3-4",
                "best_price": 5000,
                "books": 1
            },
            {
                "market": "Alvarez wins in round 3-4",
                "best_price": 2800,
                "books": 1
            },
            {
                "market": "Mbilli wins in round 5-6",
                "best_price": 4000,
                "books": 1
            },
            {
                "market": "Alvarez wins in round 5-6",
                "best_price": 1700,
                "books": 1
            },
            {
                "market": "Mbilli wins in round 7-8",
                "best_price": 3000,
                "books": 1
            },
            {
                "market": "Alvarez wins in round 7-8",
                "best_price": 1400,
                "books": 1
            },
            {
                "market": "Mbilli wins in round 9-10",
                "best_price": 3400,
                "books": 1
            },
            {
                "market": "Alvarez wins in round 9-10",
                "best_price": 1400,
                "books": 1
            },
            {
                "market": "Mbilli wins in round 11-12",
                "best_price": 3500,
                "books": 1
            },
            {
                "market": "Alvarez wins in round 11-12",
                "best_price": 1600,
                "books": 1
            },
            {
                "market": "Mbilli wins after being knocked down",
                "best_price": 2700,
                "books": 1
            },
            {
                "market": "Alvarez wins after being knocked down",
                "best_price": 1800,
                "books": 1
            },
            {
                "market": "Mbilli wins in 0:01-1:00 of round 1",
                "best_price": 20000,
                "books": 1
            },
            {
                "market": "Alvarez wins in 0:01-1:00 of round 1",
                "best_price": 15000,
                "books": 1
            },
            {
                "market": "Mbilli is knocked down",
                "best_price": 215,
                "books": 1
            },
            {
                "market": "Alvarez is knocked down",
                "best_price": 440,
                "books": 1
            },
            {
                "market": "Both fighters are knocked down",
                "best_price": 1600,
                "books": 1
            }
        ],
        "prices_read_at": "2026-10-30T14:35:06Z"
    },
    "meta": {
        "plan": "Complete",
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

### Results and bouts

Every bout of every kind, with results, methods and cards.

#### `GET /v1/results/yesterday`

Every bout decided yesterday (UTC), professional first.

Plans: Free key and above. Page: https://boxingapi.net/documentation/results-yesterday. MCP tool: `yesterdays_results`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `kind` | query | string | no | The kind of bout One of: professional, amateur, olympic, exhibition, bare-knuckle, influencer. |

Errors: 400 bad_request, 401 unauthorized, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/results/yesterday?per_page=3`

```json
{
    "data": [
        {
            "id": "bt_j3g9ajpf",
            "date": "2026-10-29",
            "start_time_utc": null,
            "kind": "professional",
            "women": false,
            "outcome": "win",
            "status": "completed",
            "winner": {
                "id": "fi_4ef2t11v",
                "name": "Yuta Sakai"
            },
            "a": {
                "id": "fi_4ef2t11v",
                "name": "Yuta Sakai"
            },
            "b": {
                "id": "fi_5mdc094e",
                "name": "Petch Sor Chitpattana"
            },
            "method": "KO",
            "round": 4,
            "time": "2:00",
            "rounds_scheduled": 8,
            "weight": null,
            "titles": null,
            "venue": "Korakuen Hall, Tokyo, Japan",
            "event": null,
            "promoter": null,
            "stage": null,
            "referee": null,
            "cards": null,
            "records_agreeing": 2,
            "disputed": false
        }
    ],
    "meta": {
        "plan": "Complete",
        "date": "2026-10-29",
        "count": 1,
        "next_cursor": null,
        "page": 1,
        "per_page": 3,
        "total": 1,
        "total_pages": 1,
        "next_page": null,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/results/today`

Every bout decided so far today (UTC), professional first. A card still being boxed fills in as it goes.

Plans: Free key and above. Page: https://boxingapi.net/documentation/results-today. MCP tool: `todays_results`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `kind` | query | string | no | The kind of bout One of: professional, amateur, olympic, exhibition, bare-knuckle, influencer. |

Errors: 400 bad_request, 401 unauthorized, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/results/today?per_page=3`

```json
{
    "data": [],
    "meta": {
        "plan": "Complete",
        "date": "2026-10-30",
        "note": "Results land within the hour; a card still being boxed fills in as it goes.",
        "count": 0,
        "next_cursor": null,
        "page": 1,
        "per_page": 3,
        "total": 0,
        "total_pages": 1,
        "next_page": null,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/title-fights`

Professional bouts with a title at stake, newest first. q matches words in the title line (wbc heavyweight); filter by dates, fighter and women's bouts. Your plan sets how far back the list reaches.

Plans: Live and above. Page: https://boxingapi.net/documentation/title-fights. MCP tool: `title_fights`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `q` | query | string | no | Part of a name |
| `from` | query | date | no | From this day, YYYY-MM-DD |
| `to` | query | date | no | To this day, YYYY-MM-DD |
| `fighter` | query | string | no | A fighter id (fi_) |
| `women` | query | string | no | true for women's only, false for men's One of: true, false. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/title-fights?q=wbc&per_page=3`

```json
{
    "data": [
        {
            "id": "bt_tt63myz6",
            "date": "2026-10-24",
            "start_time_utc": null,
            "kind": "professional",
            "women": false,
            "outcome": "win",
            "status": "completed",
            "winner": {
                "id": "fi_krybw707",
                "name": "O'Shaquie Foster"
            },
            "a": {
                "id": "fi_krybw707",
                "name": "O'Shaquie Foster"
            },
            "b": {
                "id": "fi_5gr8528k",
                "name": "Emanuel Navarrete"
            },
            "method": "UD",
            "round": 12,
            "time": null,
            "rounds_scheduled": null,
            "weight": null,
            "titles": "NELSON 130 12 IBF NELSON 129.8 WBC,WBO",
            "venue": "Frost Bank Center, 1 Frost Bank Center DR.",
            "event": null,
            "promoter": "Top Rank",
            "stage": null,
            "referee": null,
            "cards": [
                {
                    "judge": "Sutherland",
                    "a": 118,
                    "b": 108
                },
                {
                    "judge": "Ross",
                    "a": 115,
                    "b": 111
                },
                {
                    "judge": "Ellis Johnson",
                    "a": 118,
                    "b": 108
                }
            ],
            "records_agreeing": 4,
            "disputed": false
        },
        {
            "id": "bt_2thfvmwx",
            "date": "2026-10-24",
            "start_time_utc": null,
            "kind": "professional",
            "women": false,
            "outcome": "win",
            "status": "completed",
            "winner": {
                "id": "fi_b03mv9b3",
                "name": "Giorgio Visioli"
            },
            "a": {
                "id": "fi_b03mv9b3",
                "name": "Giorgio Visioli"
            },
            "b": {
                "id": "fi_wxf5aqw6",
                "name": "Maxi Hughes"
            },
            "method": "MD",
            "round": 10,
            "time": null,
            "rounds_scheduled": null,
            "weight": "Lightweight",
            "titles": "Won vacant WBC International Silver lightweight title",
            "venue": "Utilita Arena, Sheffield, England",
            "event": null,
            "promoter": null,
            "stage": null,
            "referee": null,
            "cards": null,
            "records_agreeing": 3,
            "disputed": false
        },
        {
            "id": "bt_70d5aa5t",
            "date": "2026-10-24",
            "start_time_utc": null,
            "kind": "professional",
            "women": false,
            "outcome": "win",
            "status": "completed",
            "winner": {
                "id": "fi_3jkwy165",
                "name": "Dalton Smith"
            },
            "a": {
                "id": "fi_3jkwy165",
                "name": "Dalton Smith"
            },
            "b": {
                "id": "fi_493wjm7s",
                "name": "Alberto Puello"
            },
            "method": "SD",
            "round": 12,
            "time": null,
            "rounds_scheduled": null,
            "weight": "Super Lightweight",
            "titles": "Retained WBC light-welterweight title",
            "venue": "Sheffield Arena, Sheffield, England",
            "event": null,
            "promoter": null,
            "stage": null,
            "referee": null,
            "cards": null,
            "records_agreeing": 3,
            "disputed": false
        }
    ],
    "meta": {
        "plan": "Complete",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 6213,
        "total_pages": 2071,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/bouts`

Bouts, newest first, by date or a date range, kind, fighter, women's or men's, method, promoter (part of the name), and disputed (the records we hold split evenly on the result). Your plan sets how far back the list reaches.

Plans: Free key and above. Page: https://boxingapi.net/documentation/bouts. MCP tool: `find_bouts`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `date` | query | date | no | One day, YYYY-MM-DD |
| `from` | query | date | no | From this day, YYYY-MM-DD |
| `to` | query | date | no | To this day, YYYY-MM-DD |
| `kind` | query | string | no | The kind of bout One of: professional, amateur, olympic, exhibition, bare-knuckle, influencer. |
| `fighter` | query | string | no | A fighter id (fi_) |
| `women` | query | string | no | true for women's only, false for men's One of: true, false. |
| `method` | query | string | no | How it ended One of: KO, TKO, RTD, DQ, UD, SD, MD, PTS, TD, NC, DRAW. |
| `disputed` | query | string | no | true for results the records split on One of: true, false. |
| `promoter` | query | string | no | Part of the promoter's name |

Errors: 400 bad_request, 401 unauthorized, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/bouts?kind=professional&per_page=3`

```json
{
    "data": [
        {
            "id": "bt_j3g9ajpf",
            "date": "2026-10-29",
            "start_time_utc": null,
            "kind": "professional",
            "women": false,
            "outcome": "win",
            "status": "completed",
            "winner": {
                "id": "fi_4ef2t11v",
                "name": "Yuta Sakai"
            },
            "a": {
                "id": "fi_4ef2t11v",
                "name": "Yuta Sakai"
            },
            "b": {
                "id": "fi_5mdc094e",
                "name": "Petch Sor Chitpattana"
            },
            "method": "KO",
            "round": 4,
            "time": "2:00",
            "rounds_scheduled": 8,
            "weight": null,
            "titles": null,
            "venue": "Korakuen Hall, Tokyo, Japan",
            "event": null,
            "promoter": null,
            "stage": null,
            "referee": null,
            "cards": null,
            "records_agreeing": 2,
            "disputed": false
        },
        {
            "id": "bt_m9hftg6s",
            "date": "2026-10-24",
            "start_time_utc": null,
            "kind": "professional",
            "women": false,
            "outcome": "win",
            "status": "completed",
            "winner": {
                "id": "fi_z2w5jpmw",
                "name": "Jalique Holden"
            },
            "a": {
                "id": "fi_z2w5jpmw",
                "name": "Jalique Holden"
            },
            "b": {
                "id": "fi_etswhcj9",
                "name": "Joshua Draughter"
            },
            "method": "SD",
            "round": 8,
            "time": null,
            "rounds_scheduled": 8,
            "weight": "Super Featherweight (weigh-in 126.4 lb)",
            "titles": null,
            "venue": "PAL Center - Wilmington, Pennsylvania",
            "event": null,
            "promoter": "Greg Pritchett",
            "stage": null,
            "referee": null,
            "cards": null,
            "records_agreeing": 1,
            "disputed": false
        },
        {
            "id": "bt_cddyqt5a",
            "date": "2026-10-24",
            "start_time_utc": null,
            "kind": "professional",
            "women": false,
            "outcome": "win",
            "status": "completed",
            "winner": {
                "id": "fi_7de4rp4r",
                "name": "Sedreana Leonard"
            },
            "a": {
                "id": "fi_7de4rp4r",
                "name": "Sedreana Leonard"
            },
            "b": {
                "id": "fi_y7kjf1rz",
                "name": "Nicole Fisher"
            },
            "method": "UD",
            "round": 4,
            "time": null,
            "rounds_scheduled": 4,
            "weight": "Super Welterweight (weigh-in 153 lb)",
            "titles": null,
            "venue": "PAL Center - Wilmington, Pennsylvania",
            "event": null,
            "promoter": "Greg Pritchett",
            "stage": null,
            "referee": null,
            "cards": null,
            "records_agreeing": 1,
            "disputed": false
        }
    ],
    "meta": {
        "plan": "Complete",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 133008,
        "total_pages": 44336,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/bouts/{id}`

One bout in full: both fighters, the result, method, round, titles, venue, referee, each judge's card and, on Complete, the opening and closing prices.

Plans: Free key and above. Page: https://boxingapi.net/documentation/bout. MCP tool: `get_bout`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting bt_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/bouts/bt_tt63myz6`

```json
{
    "data": {
        "id": "bt_tt63myz6",
        "date": "2026-10-24",
        "start_time_utc": null,
        "kind": "professional",
        "women": false,
        "outcome": "win",
        "status": "completed",
        "winner": {
            "id": "fi_krybw707",
            "name": "O'Shaquie Foster"
        },
        "a": {
            "id": "fi_krybw707",
            "name": "O'Shaquie Foster"
        },
        "b": {
            "id": "fi_5gr8528k",
            "name": "Emanuel Navarrete"
        },
        "method": "UD",
        "round": 12,
        "time": null,
        "rounds_scheduled": null,
        "weight": null,
        "titles": "NELSON 130 12 IBF NELSON 129.8 WBC,WBO",
        "venue": "Frost Bank Center, 1 Frost Bank Center DR.",
        "event": null,
        "promoter": "Top Rank",
        "stage": null,
        "referee": null,
        "cards": [
            {
                "judge": "Sutherland",
                "a": 118,
                "b": 108
            },
            {
                "judge": "Ross",
                "a": 115,
                "b": 111
            },
            {
                "judge": "Ellis Johnson",
                "a": 118,
                "b": 108
            }
        ],
        "records_agreeing": 4,
        "disputed": false,
        "closing_odds": {
            "a": {
                "open": -205,
                "close": -10679,
                "close_high": -140
            },
            "b": {
                "open": 158,
                "close": 110,
                "close_high": 9226
            },
            "format": "american"
        }
    },
    "meta": {
        "plan": "Complete",
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

### Fighters

Fighters, their records and everything joined to them.

#### `GET /v1/fighters`

Fighters whose name matches, the busiest first.

Plans: Live and above. Page: https://boxingapi.net/documentation/fighters. MCP tool: `find_fighter`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `q` | query | string | yes | Part of a name |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/fighters?q=inoue&per_page=3`

```json
{
    "data": [
        {
            "id": "fi_8fsb2rv6",
            "name": "Naoya Inoue",
            "nickname": null,
            "sex": "male",
            "born": "1993-04-10",
            "birth_place": "Zama",
            "country": "Japan",
            "height_cm": 163,
            "record": {
                "wins": 33,
                "losses": 0,
                "draws": 0
            },
            "bouts": 39,
            "first_bout": "2012-07-10",
            "last_bout": "2026-05-02",
            "kinds": [
                "professional",
                "exhibition"
            ],
            "rating": null
        },
        {
            "id": "fi_nanq84rf",
            "name": "Takuma Inoue",
            "nickname": null,
            "sex": "male",
            "born": "1995-12-26",
            "birth_place": "Zama",
            "country": "Japan",
            "height_cm": null,
            "record": {
                "wins": 24,
                "losses": 2,
                "draws": 0
            },
            "bouts": 26,
            "first_bout": "2013-12-06",
            "last_bout": "2026-09-27",
            "kinds": [
                "professional"
            ],
            "rating": null
        },
        {
            "id": "fi_0r840sh0",
            "name": "Takeshi Inoue",
            "nickname": null,
            "sex": "male",
            "born": "1989-12-01",
            "birth_place": null,
            "country": "Japan",
            "height_cm": null,
            "record": {
                "wins": 18,
                "losses": 2,
                "draws": 3
            },
            "bouts": 23,
            "first_bout": "2014-08-02",
            "last_bout": "2024-03-18",
            "kinds": [
                "professional"
            ],
            "rating": null
        }
    ],
    "meta": {
        "plan": "Complete",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 13,
        "total_pages": 5,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/fighters/{id}`

A fighter's profile, professional record, wins inside the distance, our rating and points, and any commission suspension still in force.

Plans: Live and above. Page: https://boxingapi.net/documentation/fighter. MCP tool: `get_fighter`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting fi_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/fighters/fi_8fsb2rv6`

```json
{
    "data": {
        "id": "fi_8fsb2rv6",
        "name": "Naoya Inoue",
        "nickname": null,
        "sex": "male",
        "born": "1993-04-10",
        "birth_place": "Zama",
        "country": "Japan",
        "height_cm": 163,
        "record": {
            "wins": 33,
            "losses": 0,
            "draws": 0,
            "wins_inside_distance": 27
        },
        "bouts": 39,
        "first_bout": "2012-07-10",
        "last_bout": "2026-05-02",
        "kinds": [
            "professional",
            "exhibition"
        ],
        "rating": {
            "bxr": 2022,
            "bxr_peak": 2022,
            "bxr_peak_date": "2026-05-02",
            "bxp": 456.9,
            "division": "Super Bantamweight"
        },
        "suspension": null
    },
    "meta": {
        "plan": "Complete",
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/fighters/{id}/bouts`

Every bout of one fighter, newest first, as far back as your plan reaches.

Plans: Live and above. Page: https://boxingapi.net/documentation/fighter-bouts

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting fi_, as another call returns it |
| `kind` | query | string | no | The kind of bout One of: professional, amateur, olympic, exhibition, bare-knuckle, influencer. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/fighters/fi_8fsb2rv6/bouts?per_page=3`

```json
{
    "data": [
        {
            "id": "bt_n8ej0z1h",
            "date": "2026-05-02",
            "start_time_utc": null,
            "kind": "professional",
            "women": false,
            "outcome": "win",
            "status": "completed",
            "winner": {
                "id": "fi_8fsb2rv6",
                "name": "Naoya Inoue"
            },
            "a": {
                "id": "fi_8fsb2rv6",
                "name": "Naoya Inoue"
            },
            "b": {
                "id": "fi_xv2rweg2",
                "name": "Junto Nakatani"
            },
            "method": "UD",
            "round": 12,
            "time": null,
            "rounds_scheduled": null,
            "weight": "Super Bantamweight",
            "titles": "Retained WBA (Super), WBC, IBF, WBO, and The Ring super bantamweight titles",
            "venue": "Tokyo Dome, Tokyo, Japan",
            "event": null,
            "promoter": null,
            "stage": null,
            "referee": null,
            "cards": null,
            "records_agreeing": 1,
            "disputed": false
        },
        {
            "id": "bt_271pj8dj",
            "date": "2025-12-27",
            "start_time_utc": null,
            "kind": "professional",
            "women": false,
            "outcome": "win",
            "status": "completed",
            "winner": {
                "id": "fi_8fsb2rv6",
                "name": "Naoya Inoue"
            },
            "a": {
                "id": "fi_8fsb2rv6",
                "name": "Naoya Inoue"
            },
            "b": {
                "id": "fi_vmdhf5br",
                "name": "David Picasso"
            },
            "method": "UD",
            "round": 12,
            "time": null,
            "rounds_scheduled": null,
            "weight": "Super Bantamweight",
            "titles": "For WBA (Super), WBC, IBF, WBO and The Ring super bantamweight titles",
            "venue": "Mohammed Abdo Arena, Riyadh, Saudi Arabia",
            "event": null,
            "promoter": null,
            "stage": null,
            "referee": null,
            "cards": null,
            "records_agreeing": 2,
            "disputed": false
        },
        {
            "id": "bt_6rac73pc",
            "date": "2025-09-14",
            "start_time_utc": null,
            "kind": "professional",
            "women": false,
            "outcome": "win",
            "status": "completed",
            "winner": {
                "id": "fi_8fsb2rv6",
                "name": "Naoya Inoue"
            },
            "a": {
                "id": "fi_8fsb2rv6",
                "name": "Naoya Inoue"
            },
            "b": {
                "id": "fi_rhc8kxdk",
                "name": "Murodjon Akhmadaliev"
            },
            "method": "UD",
            "round": 12,
            "time": null,
            "rounds_scheduled": null,
            "weight": "Super Bantamweight",
            "titles": "For WBA (Super), WBC, IBF, WBO and The Ring super bantamweight titles",
            "venue": "IG Arena, Nagoya, Japan",
            "event": null,
            "promoter": null,
            "stage": null,
            "referee": null,
            "cards": null,
            "records_agreeing": 2,
            "disputed": false
        }
    ],
    "meta": {
        "plan": "Complete",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 39,
        "total_pages": 13,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/fighters/{id}/next`

The fights to come for one fighter, soonest first, with the opponent and the best price on each side. An empty list means nothing is booked that we hold.

Plans: Live and above. Page: https://boxingapi.net/documentation/fighter-next. MCP tool: `fighter_next_fights`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting fi_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/fighters/fi_2mzs7cks/next`

```json
{
    "data": [
        {
            "id": "fx_4a5y6z21",
            "date": "2026-10-31",
            "date_set": true,
            "start_time_utc": "22:00",
            "opponent": {
                "id": "fi_8khg81tz",
                "name": "Saul Alvarez",
                "best_price": -275,
                "win_chance": 0.7384
            },
            "fighter": {
                "id": "fi_2mzs7cks",
                "name": "Christian Mbilli",
                "best_price": 285,
                "win_chance": 0.2616
            },
            "books": 6,
            "prices_read_at": "2026-10-30T14:35:06Z"
        }
    ],
    "meta": {
        "plan": "Complete",
        "fighter": {
            "id": "fi_2mzs7cks",
            "name": "Christian Mbilli"
        },
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/fighters/{id}/rankings`

Every current list a fighter is champion of or ranked in, across the bodies, the board and our own tables.

Plans: Live and above. Page: https://boxingapi.net/documentation/fighter-rankings. MCP tool: `fighter_rankings`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting fi_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/fighters/fi_8fsb2rv6/rankings`

```json
{
    "data": [
        {
            "body": "ibf",
            "division": "Jr. Featherweight",
            "month": "2026-09",
            "rank": null,
            "champion": true
        },
        {
            "body": "wba",
            "division": "Super Bantamweight",
            "month": "2026-09",
            "rank": null,
            "champion": true
        },
        {
            "body": "wbc",
            "division": "Super Bantamweight",
            "month": "2026-10",
            "rank": null,
            "champion": true
        }
    ],
    "meta": {
        "plan": "Complete",
        "fighter": {
            "id": "fi_8fsb2rv6",
            "name": "Naoya Inoue"
        },
        "example_note": "The first 3 of 10 shown here.",
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/fighters/{id}/ratings`

Month by month, our rating (BXR) and points (BXP) for one fighter with the ranks they held, back to 1960.

Plans: Archive and above. Page: https://boxingapi.net/documentation/fighter-ratings

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting fi_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/fighters/fi_8fsb2rv6/ratings`

```json
{
    "data": [
        {
            "month": "2013-12",
            "bxr": null,
            "bxr_rank_p4p": null,
            "bxr_division": null,
            "bxr_rank_division": null,
            "bxp": null,
            "bxp_rank_p4p": null
        },
        {
            "month": "2014-01",
            "bxr": null,
            "bxr_rank_p4p": null,
            "bxr_division": null,
            "bxr_rank_division": null,
            "bxp": null,
            "bxp_rank_p4p": null
        },
        {
            "month": "2014-02",
            "bxr": null,
            "bxr_rank_p4p": null,
            "bxr_division": null,
            "bxr_rank_division": null,
            "bxp": null,
            "bxp_rank_p4p": null
        }
    ],
    "meta": {
        "plan": "Complete",
        "fighter": {
            "id": "fi_8fsb2rv6",
            "name": "Naoya Inoue"
        },
        "note": "Months in which the fighter was inside one of our ranked lists.",
        "example_note": "The first 3 of 154 shown here.",
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/fighters/{id}/vs/{other}`

Every meeting of two fighters, of any kind, in order, with the tally of wins, draws and no contests.

Plans: Archive and above. Page: https://boxingapi.net/documentation/head-to-head. MCP tool: `head_to_head`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting fi_, as another call returns it |
| `other` | path | string | yes | An id starting fi_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/fighters/fi_8fsb2rv6/vs/fi_xv2rweg2`

```json
{
    "data": {
        "first": {
            "id": "fi_8fsb2rv6",
            "name": "Naoya Inoue"
        },
        "second": {
            "id": "fi_xv2rweg2",
            "name": "Junto Nakatani"
        },
        "meetings": 1,
        "first_wins": 1,
        "second_wins": 0,
        "draws": 0,
        "no_contests": 0,
        "bouts": [
            {
                "id": "bt_n8ej0z1h",
                "date": "2026-05-02",
                "start_time_utc": null,
                "kind": "professional",
                "women": false,
                "outcome": "win",
                "status": "completed",
                "winner": {
                    "id": "fi_8fsb2rv6",
                    "name": "Naoya Inoue"
                },
                "a": {
                    "id": "fi_8fsb2rv6",
                    "name": "Naoya Inoue"
                },
                "b": {
                    "id": "fi_xv2rweg2",
                    "name": "Junto Nakatani"
                },
                "method": "UD",
                "round": 12,
                "time": null,
                "rounds_scheduled": null,
                "weight": "Super Bantamweight",
                "titles": "Retained WBA (Super), WBC, IBF, WBO, and The Ring super bantamweight titles",
                "venue": "Tokyo Dome, Tokyo, Japan",
                "event": null,
                "promoter": null,
                "stage": null,
                "referee": null,
                "cards": null,
                "records_agreeing": 1,
                "disputed": false
            }
        ]
    },
    "meta": {
        "plan": "Complete",
        "generated_at": "2026-10-30T15:48:10Z"
    }
}
```

### Rankings

The bodies' monthly lists, the board and our own two tables.

#### `GET /v1/rankings`

The latest ranking lists of the four bodies (wbc, wba, ibf, wbo), the independent board (board) and our own rating (bxr) and points (bxp) tables, with champions. Past months are on Archive.

Plans: Free key and above. Page: https://boxingapi.net/documentation/rankings. MCP tool: `get_rankings`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `body` | query | string | no | Which list One of: wbc, wba, ibf, wbo, board, bxr, bxp. |
| `division` | query | string | no | A division, as heavyweight or super-middleweight |
| `women` | query | string | no | true for women's only, false for men's One of: true, false. |
| `month` | query | string | no | A past month, YYYY-MM (Archive) |

Errors: 400 bad_request, 401 unauthorized, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/rankings?body=wbc&division=heavyweight&per_page=3`

```json
{
    "data": [
        {
            "body": "wbc",
            "division": "Heavyweight",
            "women": false,
            "month": "2026-10",
            "champion": {
                "name": "Agit Kabayel",
                "id": "fi_29drj7qn"
            },
            "interim": null,
            "entries": [
                {
                    "rank": 1,
                    "name": "Tyson Fury",
                    "id": "fi_e51pxf01",
                    "country": null
                },
                {
                    "rank": 2,
                    "name": "Anthony Joshua",
                    "id": "fi_3tpnq9qz",
                    "country": null
                },
                {
                    "rank": 3,
                    "name": "Frank Sanchez",
                    "id": "fi_9yw83373",
                    "country": null
                },
                {
                    "rank": 4,
                    "name": "Deontay Wilder",
                    "id": "fi_yw5cth3k",
                    "country": null
                },
                {
                    "rank": 5,
                    "name": "Moses Itauma",
                    "id": "fi_qvkjn5rh",
                    "country": null
                },
                {
                    "rank": 6,
                    "name": "Efe Ajagba",
                    "id": "fi_qwwy96j1",
                    "country": null
                },
                {
                    "rank": 7,
                    "name": "Joseph Parker",
                    "id": "fi_bv3yxd2b",
                    "country": null
                },
                {
                    "rank": 8,
                    "name": "Rico Verhoeven",
                    "id": "fi_41n74e4r",
                    "country": null
                },
                {
                    "rank": 9,
                    "name": "Richard Riakporhe",
                    "id": "fi_1qgqmhnw",
                    "country": null
                },
                {
                    "rank": 10,
                    "name": "Andrii Novitskyi",
                    "id": null,
                    "country": null
                },
                {
                    "rank": 11,
                    "name": "Bakhodir Jalolov",
                    "id": "fi_5v1a392c",
                    "country": null
                },
                {
                    "rank": 12,
                    "name": "Justis Huni",
                    "id": "fi_dyj4bxk8",
                    "country": null
                },
                {
                    "rank": 13,
                    "name": "Labinot Xhoxhaj",
                    "id": "fi_fbhcwb3p",
                    "country": null
                },
                {
                    "rank": 14,
                    "name": "Kingsley Ibeh",
                    "id": null,
                    "country": null
                },
                {
                    "rank": 15,
                    "name": "Mourad Aliev",
                    "id": "fi_fm5phe02",
                    "country": null
                },
                {
                    "rank": 16,
                    "name": "Kacper Meyna",
                    "id": "fi_c1a2qgdh",
                    "country": null
                },
                {
                    "rank": 17,
                    "name": "Umut Camkiran",
                    "id": "fi_d1ykcejt",
                    "country": null
                },
                {
                    "rank": 18,
                    "name": "Nelson Hysa",
                    "id": "fi_zccd3erw",
                    "country": null
                },
                {
                    "rank": 19,
                    "name": "Damian Knyba",
                    "id": "fi_w8sw4cys",
                    "country": null
                },
                {
                    "rank": 20,
                    "name": "Arslanbek Makhmudov",
                    "id": "fi_rse8xwb6",
                    "country": null
                },
                {
                    "rank": 21,
                    "name": "Guido Vianello",
                    "id": null,
                    "country": null
                },
                {
                    "rank": 22,
                    "name": "Richard Torrez Jr",
                    "id": null,
                    "country": null
                },
                {
                    "rank": 23,
                    "name": "Lenier Pero",
                    "id": null,
                    "country": null
                },
                {
                    "rank": 24,
                    "name": "Ahmed Krnjic",
                    "id": "fi_nkg3e9pm",
                    "country": null
                },
                {
                    "rank": 25,
                    "name": "Lazibek Mullojonov",
                    "id": null,
                    "country": null
                },
                {
                    "rank": 26,
                    "name": "Peter Milas",
                    "id": null,
                    "country": null
                },
                {
                    "rank": 27,
                    "name": "Vladyslav Sirenko",
                    "id": "fi_a3xa0mjz",
                    "country": null
                },
                {
                    "rank": 28,
                    "name": "Pryce Taylor",
                    "id": "fi_kremhmyc",
                    "country": null
                },
                {
                    "rank": 29,
                    "name": "Yoandy Toirac",
                    "id": "fi_3yqynqjj",
                    "country": null
                },
                {
                    "rank": 30,
                    "name": "Davlat Boltaev",
                    "id": "fi_rs9qjt7a",
                    "country": null
                },
                {
                    "rank": 31,
                    "name": "Brandon Moore",
                    "id": "fi_h20ze4n7",
                    "country": null
                },
                {
                    "rank": 32,
                    "name": "Teremoana Teremoana",
                    "id": "fi_8pfrx5rd",
                    "country": null
                },
                {
                    "rank": 33,
                    "name": "Kristian Prenga",
                    "id": "fi_5j2w4kvf",
                    "country": null
                },
                {
                    "rank": 34,
                    "name": "Jose Kadima",
                    "id": null,
                    "country": null
                },
                {
                    "rank": 35,
                    "name": "Frazer Clarke",
                    "id": "fi_a2wsbwmr",
                    "country": null
                },
                {
                    "rank": 36,
                    "name": "Jeamie Tshikeva",
                    "id": "fi_65e5ffjg",
                    "country": null
                },
                {
                    "rank": 38,
                    "name": "Tsotne Rogava",
                    "id": "fi_89rgzxfj",
                    "country": null
                },
                {
                    "rank": 39,
                    "name": "Gustavo Trujillo",
                    "id": "fi_x6hgyqjt",
                    "country": null
                },
                {
                    "rank": 40,
                    "name": "Dainer Pero",
                    "id": null,
                    "country": null
                }
            ]
        }
    ],
    "meta": {
        "plan": "Complete",
        "count": 1,
        "next_cursor": null,
        "page": 1,
        "per_page": 3,
        "total": 1,
        "total_pages": 1,
        "next_page": null,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/rankings/divisions`

Every list we hold: body, division, men or women, the latest month and how far back it goes.

Plans: Free key and above. Page: https://boxingapi.net/documentation/rankings-divisions

Errors: 400 bad_request, 401 unauthorized, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/rankings/divisions`

```json
{
    "data": [
        {
            "body": "bxp",
            "division": "Atomweight",
            "women": true,
            "latest_month": "2026-10",
            "first_month": "2009-05",
            "months": 197
        },
        {
            "body": "bxp",
            "division": "Bantamweight",
            "women": false,
            "latest_month": "2026-10",
            "first_month": "1960-01",
            "months": 802
        },
        {
            "body": "bxp",
            "division": "Bantamweight",
            "women": true,
            "latest_month": "2026-10",
            "first_month": "1997-11",
            "months": 339
        }
    ],
    "meta": {
        "plan": "Complete",
        "example_note": "The first 3 of 214 shown here.",
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

### Cards and officials

Each judge's card by name, and the officials' records.

#### `GET /v1/bouts/{id}/cards`

Each judge's card for one bout, with the judge named and linked to their record.

Plans: Live and above. Page: https://boxingapi.net/documentation/bout-cards

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting bt_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/bouts/bt_tt63myz6/cards`

```json
{
    "data": [
        {
            "judge": "Sutherland",
            "judge_id": "jd_b95jqw8z",
            "a": 118,
            "b": 108
        },
        {
            "judge": "Ross",
            "judge_id": "jd_aykg38ry",
            "a": 115,
            "b": 111
        },
        {
            "judge": "Ellis Johnson",
            "judge_id": "jd_yg6q52n3",
            "a": 118,
            "b": 108
        }
    ],
    "meta": {
        "plan": "Complete",
        "bout": {
            "id": "bt_tt63myz6",
            "date": "2026-10-24",
            "a": {
                "id": "fi_krybw707",
                "name": "O'Shaquie Foster"
            },
            "b": {
                "id": "fi_5gr8528k",
                "name": "Emanuel Navarrete"
            }
        },
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/judges`

Judges by cards held, with how often their card went against the winner. Filter by name, activity and cards held.

Plans: Archive and above. Page: https://boxingapi.net/documentation/judges

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `q` | query | string | no | Part of a name |
| `active` | query | string | no | true for those active in the last 2 years One of: true, false. |
| `min_cards` | query | integer | no | At least this many cards; 1 to 1000; default 1 |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/judges?active=true&min_cards=50&per_page=3`

```json
{
    "data": [
        {
            "id": "jd_6zqhtk42",
            "name": "Moretti",
            "cards": 191,
            "against_winner": 3,
            "against_winner_share": 0.0157,
            "first_card": "2000-06-18",
            "last_card": "2025-01-25"
        },
        {
            "id": "jd_k8e2kdzz",
            "name": "Giampa",
            "cards": 173,
            "against_winner": 10,
            "against_winner_share": 0.0578,
            "first_card": "2000-07-16",
            "last_card": "2026-08-01"
        },
        {
            "id": "jd_74dtavvd",
            "name": "Byrd",
            "cards": 128,
            "against_winner": 7,
            "against_winner_share": 0.0547,
            "first_card": "2001-09-22",
            "last_card": "2026-05-23"
        }
    ],
    "meta": {
        "plan": "Complete",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 31,
        "total_pages": 11,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/judges/{id}`

One judge's record: cards, cards against the winner, first and last card.

Plans: Archive and above. Page: https://boxingapi.net/documentation/judge

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting jd_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/judges/jd_6zqhtk42`

```json
{
    "data": {
        "id": "jd_6zqhtk42",
        "name": "Moretti",
        "cards": 191,
        "against_winner": 3,
        "against_winner_share": 0.0157,
        "first_card": "2000-06-18",
        "last_card": "2025-01-25"
    },
    "meta": {
        "plan": "Complete",
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/judges/{id}/cards`

Every card one judge turned in, newest first, with the bout and whether the card went against the winner.

Plans: Archive and above. Page: https://boxingapi.net/documentation/judge-cards

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting jd_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/judges/jd_6zqhtk42/cards?per_page=3`

```json
{
    "data": [
        {
            "bout": "bt_cs1c1a3y",
            "date": "2025-01-25",
            "a": {
                "id": "fi_h7fdn3dp",
                "name": "Andy Cruz"
            },
            "b": {
                "id": "fi_55k61q2p",
                "name": "Omar Alfredo Salcido Gamez"
            },
            "outcome": "win",
            "method": "UD",
            "card": {
                "a": 98,
                "b": 92
            },
            "against_winner": false
        },
        {
            "bout": "bt_74hgdhbx",
            "date": "2025-01-25",
            "a": {
                "id": "fi_acjvjxky",
                "name": "Leonardo Rubalcava"
            },
            "b": {
                "id": "fi_drxsd1ry",
                "name": "Israel De Jesus Mercado"
            },
            "outcome": "draw",
            "method": "MD",
            "card": {
                "a": 75,
                "b": 75
            },
            "against_winner": false
        },
        {
            "bout": "bt_q4ygj5qe",
            "date": "2024-11-02",
            "a": {
                "id": "fi_965d84sx",
                "name": "Bektemir Melikuziev"
            },
            "b": {
                "id": "fi_jx3q1nvk",
                "name": "David Stevens"
            },
            "outcome": "win",
            "method": "SD",
            "card": {
                "a": 118,
                "b": 110
            },
            "against_winner": false
        }
    ],
    "meta": {
        "plan": "Complete",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 191,
        "total_pages": 64,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/referees`

Referees by professional bouts handled, with the share that ended in a stoppage.

Plans: Archive and above. Page: https://boxingapi.net/documentation/referees

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `q` | query | string | no | Part of a name |
| `min_bouts` | query | integer | no | At least this many bouts; 1 to 1000; default 1 |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/referees?per_page=3`

```json
{
    "data": [
        {
            "id": "rf_728mrjv8",
            "name": "Jay Nady",
            "bouts": 430,
            "stoppages": 187,
            "stoppage_share": 0.4349,
            "first_bout": "2000-02-18",
            "last_bout": "2020-09-05"
        },
        {
            "id": "rf_6zdrmsmc",
            "name": "Tony Weeks",
            "bouts": 393,
            "stoppages": 183,
            "stoppage_share": 0.4656,
            "first_bout": "2000-02-29",
            "last_bout": "2026-08-01"
        },
        {
            "id": "rf_hr33wzgr",
            "name": "Kenny Bayless",
            "bouts": 353,
            "stoppages": 161,
            "stoppage_share": 0.4561,
            "first_bout": "2000-02-19",
            "last_bout": "2023-07-27"
        }
    ],
    "meta": {
        "plan": "Complete",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 358,
        "total_pages": 120,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/referees/{id}`

One referee's record: professional bouts handled, stoppages and their share, first and last bout.

Plans: Archive and above. Page: https://boxingapi.net/documentation/referee

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting rf_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/referees/rf_728mrjv8`

```json
{
    "data": {
        "id": "rf_728mrjv8",
        "name": "Jay Nady",
        "bouts": 430,
        "stoppages": 187,
        "stoppage_share": 0.4349,
        "first_bout": "2000-02-18",
        "last_bout": "2020-09-05"
    },
    "meta": {
        "plan": "Complete",
        "generated_at": "2026-10-30T15:48:08Z"
    }
}
```

#### `GET /v1/referees/{id}/bouts`

Every professional bout one referee handled, newest first, as far back as your plan reaches.

Plans: Archive and above. Page: https://boxingapi.net/documentation/referee-bouts

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting rf_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/referees/rf_728mrjv8/bouts?per_page=3`

```json
{
    "data": [
        {
            "id": "bt_48jfetjt",
            "date": "2020-09-05",
            "start_time_utc": null,
            "kind": "professional",
            "women": false,
            "outcome": "win",
            "status": "completed",
            "winner": {
                "id": "fi_gyqnhfnc",
                "name": "Bejamin Whitaker"
            },
            "a": {
                "id": "fi_gyqnhfnc",
                "name": "Bejamin Whitaker"
            },
            "b": {
                "id": "fi_1ceb96dh",
                "name": "----- vs. ----- D'Andre Cervantes Smith"
            },
            "method": "UD",
            "round": 6,
            "time": null,
            "rounds_scheduled": 6,
            "weight": "Super Welterweight (weigh-in 149.8 lb)",
            "titles": null,
            "venue": "MGM Conference Center, Las Vegas",
            "event": null,
            "promoter": "Top Rank",
            "stage": null,
            "referee": "Jay Nady",
            "cards": [
                {
                    "judge": "A.Byrd",
                    "a": 60,
                    "b": 54
                },
                {
                    "judge": "L. Giampa",
                    "a": 60,
                    "b": 54
                },
                {
                    "judge": "P.M. Jarman",
                    "a": 59,
                    "b": 55
                }
            ],
            "records_agreeing": 1,
            "disputed": false
        },
        {
            "id": "bt_by8gasvv",
            "date": "2020-09-05",
            "start_time_utc": null,
            "kind": "professional",
            "women": false,
            "outcome": "win",
            "status": "completed",
            "winner": {
                "id": "fi_wfbatczv",
                "name": "Steven Nelson"
            },
            "a": {
                "id": "fi_wfbatczv",
                "name": "Steven Nelson"
            },
            "b": {
                "id": "fi_46rchah4",
                "name": "Deandre Ware"
            },
            "method": "TKO",
            "round": 6,
            "time": "2:44",
            "rounds_scheduled": 10,
            "weight": "Super Middleweight",
            "titles": "Nelson retains NABO Super Middleweight Title",
            "venue": "MGM Grand Conference Center, Paradise, Nevada, U.S.",
            "event": null,
            "promoter": "Top Rank",
            "stage": null,
            "referee": "Jay Nady",
            "cards": null,
            "records_agreeing": 3,
            "disputed": false
        },
        {
            "id": "bt_76g0a969",
            "date": "2020-08-22",
            "start_time_utc": null,
            "kind": "professional",
            "women": false,
            "outcome": "win",
            "status": "completed",
            "winner": {
                "id": "fi_w626pjb6",
                "name": "Israel De Jesus Mercado Hernandez"
            },
            "a": {
                "id": "fi_w626pjb6",
                "name": "Israel De Jesus Mercado Hernandez"
            },
            "b": {
                "id": "fi_vbvx2zw9",
                "name": "Adrian Ruben Valdovinos"
            },
            "method": "UD",
            "round": 6,
            "time": null,
            "rounds_scheduled": 6,
            "weight": "Super Lightweight (weigh-in 137.2 lb)",
            "titles": null,
            "venue": "MGM Conference Center, Las Vegas",
            "event": null,
            "promoter": "Top Rank, Inc. & Star Boxing",
            "stage": null,
            "referee": "Jay Nady",
            "cards": [
                {
                    "judge": "L. Giampa - D. Moretti - G. Trowbridge",
                    "a": 60,
                    "b": 54
                },
                {
                    "judge": null,
                    "a": 59,
                    "b": 55
                },
                {
                    "judge": null,
                    "a": 60,
                    "b": 54
                }
            ],
            "records_agreeing": 1,
            "disputed": false
        }
    ],
    "meta": {
        "plan": "Complete",
        "referee": {
            "id": "rf_728mrjv8",
            "name": "Jay Nady"
        },
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 430,
        "total_pages": 144,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

### Odds and upsets

Opening and closing prices, and the underdogs who beat them.

#### `GET /v1/odds/{id}`

Opening and closing prices for both sides of one bout, the best and worst on the night, how many books priced it, and the closing chance with the margin taken out.

Plans: Complete. Page: https://boxingapi.net/documentation/odds

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting bt_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/odds/bt_3kksx52b`

```json
{
    "data": {
        "bout": "bt_3kksx52b",
        "date": "2018-08-04",
        "outcome": "win",
        "winner": "fi_sj2pd95k",
        "a": {
            "id": "fi_sj2pd95k",
            "name": "Viviane Obenauf",
            "prices": {
                "opening": 1800,
                "closing": 2750,
                "closing_high": 2750,
                "movement_pct": 33.3,
                "best_on_the_night": null,
                "worst_on_the_night": null,
                "books": 0
            }
        },
        "b": {
            "id": "fi_tq8sraqv",
            "name": "Natasha Jonas",
            "prices": {
                "opening": -5400,
                "closing": -6000,
                "closing_high": -6000,
                "movement_pct": -0.2,
                "best_on_the_night": null,
                "worst_on_the_night": null,
                "books": 0
            }
        },
        "closing_chance": {
            "a": 0.0344,
            "b": 0.9656
        },
        "format": "american"
    },
    "meta": {
        "plan": "Complete",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/upsets`

Underdog wins ranked by the winner's closing price. Filter by year, minimum price, title fights and women's bouts; sort by price or date.

Plans: Complete. Page: https://boxingapi.net/documentation/upsets. MCP tool: `get_upsets`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `year` | query | integer | no | One year; 1990 to 2100 |
| `min_odds` | query | integer | no | The winner's closing price at least, American; 100 to 100000; default 300 |
| `title` | query | string | no | true for title fights only One of: true, false. |
| `women` | query | string | no | true for women's only, false for men's One of: true, false. |
| `sort` | query | string | no | The order; default price One of: price, date. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/upsets?min_odds=1000&per_page=3`

```json
{
    "data": [
        {
            "bout": "bt_3kksx52b",
            "date": "2018-08-04",
            "winner": {
                "id": "fi_sj2pd95k",
                "name": "Viviane Obenauf"
            },
            "loser": {
                "id": "fi_tq8sraqv",
                "name": "Natasha Jonas"
            },
            "method": "TKO",
            "round": 4,
            "titles": "Lost WBA International female super-featherweight title",
            "women": true,
            "winner_closing_price": 2750,
            "winner_opening_price": 1800,
            "winner_chance": 0.0344
        },
        {
            "bout": "bt_bkr45bjy",
            "date": "2018-09-08",
            "winner": {
                "id": "fi_d4qcgzh5",
                "name": "Hassan Mwakinyo"
            },
            "loser": {
                "id": "fi_sff2c1gc",
                "name": "Sam Eggington"
            },
            "method": "TKO",
            "round": 2,
            "titles": null,
            "women": false,
            "winner_closing_price": 2500,
            "winner_opening_price": 1750,
            "winner_chance": 0.0377
        },
        {
            "bout": "bt_tf8w4an9",
            "date": "2017-12-09",
            "winner": {
                "id": "fi_53g10tb4",
                "name": "Caleb Truax"
            },
            "loser": {
                "id": "fi_12en89wc",
                "name": "James DeGale"
            },
            "method": "MD",
            "round": 12,
            "titles": "Won IBF super middleweight title",
            "women": false,
            "winner_closing_price": 2500,
            "winner_opening_price": 1500,
            "winner_chance": 0.0373
        }
    ],
    "meta": {
        "plan": "Complete",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 26,
        "total_pages": 9,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/upsets/years`

Per year: priced bouts, underdog wins, their share, and wins at +300 or more.

Plans: Complete. Page: https://boxingapi.net/documentation/upsets-years

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/upsets/years`

```json
{
    "data": [
        {
            "year": 2016,
            "priced_bouts": 462,
            "underdog_wins": 49,
            "underdog_share": 0.1061,
            "wins_at_300_or_more": 20
        },
        {
            "year": 2017,
            "priced_bouts": 443,
            "underdog_wins": 50,
            "underdog_share": 0.1129,
            "wins_at_300_or_more": 23
        },
        {
            "year": 2018,
            "priced_bouts": 451,
            "underdog_wins": 56,
            "underdog_share": 0.1242,
            "wins_at_300_or_more": 24
        }
    ],
    "meta": {
        "plan": "Complete",
        "example_note": "The first 3 of 11 shown here.",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

### Statistics

Ready-made views across the whole record.

#### `GET /v1/stats/favourites`

How often the favourite won, by how strong a favourite the closing prices made them.

Plans: Complete. Page: https://boxingapi.net/documentation/stats-favourites

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/favourites`

```json
{
    "data": [
        {
            "favourite_chance_from": 0.5,
            "favourite_chance_to": 0.6,
            "bouts": 370,
            "favourite_wins": 200,
            "favourite_win_share": 0.5405
        },
        {
            "favourite_chance_from": 0.6,
            "favourite_chance_to": 0.7,
            "bouts": 532,
            "favourite_wins": 359,
            "favourite_win_share": 0.6748
        },
        {
            "favourite_chance_from": 0.7,
            "favourite_chance_to": 0.8,
            "bouts": 784,
            "favourite_wins": 631,
            "favourite_win_share": 0.8048
        }
    ],
    "meta": {
        "plan": "Complete",
        "note": "Professional bouts with closing prices on both sides; the favourite's chance has the bookmakers' margin taken out.",
        "example_note": "The first 3 of 5 shown here.",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/methods`

Per year: knockouts, stoppages, retirements, disqualifications, unanimous, split and majority decisions, draws and no contests, and the stoppage share.

Plans: Archive and above. Page: https://boxingapi.net/documentation/stats-methods

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `kind` | query | string | no | The kind of bout; default professional One of: professional, amateur, olympic, exhibition, bare-knuckle, influencer. |
| `from_year` | query | integer | no | From this year; 1800 to 2100 |
| `to_year` | query | integer | no | To this year; 1800 to 2100 |
| `women` | query | string | no | true for women's only, false for men's One of: true, false. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/methods?from_year=2024`

```json
{
    "data": [
        {
            "year": 2024,
            "bouts": 2236,
            "ko": 315,
            "tko": 700,
            "rtd": 86,
            "dq": 5,
            "ud": 758,
            "sd": 122,
            "md": 88,
            "points": 127,
            "td": 15,
            "draw": 7,
            "no_contest": 8,
            "other": 5,
            "stoppage_share": 0.4924
        },
        {
            "year": 2025,
            "bouts": 1951,
            "ko": 260,
            "tko": 636,
            "rtd": 61,
            "dq": 3,
            "ud": 664,
            "sd": 104,
            "md": 89,
            "points": 83,
            "td": 11,
            "draw": 21,
            "no_contest": 13,
            "other": 6,
            "stoppage_share": 0.4905
        },
        {
            "year": 2026,
            "bouts": 1201,
            "ko": 131,
            "tko": 368,
            "rtd": 34,
            "dq": 2,
            "ud": 444,
            "sd": 70,
            "md": 63,
            "points": 49,
            "td": 6,
            "draw": 19,
            "no_contest": 13,
            "other": 2,
            "stoppage_share": 0.4438
        }
    ],
    "meta": {
        "plan": "Complete",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/rounds`

Professional stoppages by the round they came in, with knockouts, stoppages and retirements apart, each round's share and the running share. Filter by years, scheduled rounds, title fights and women's bouts.

Plans: Archive and above. Page: https://boxingapi.net/documentation/stats-rounds

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `from_year` | query | integer | no | From this year; 1800 to 2100 |
| `to_year` | query | integer | no | To this year; 1800 to 2100 |
| `scheduled` | query | integer | no | Scheduled rounds; 1 to 20 |
| `title` | query | string | no | true for title fights only One of: true, false. |
| `women` | query | string | no | true for women's only, false for men's One of: true, false. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/rounds?from_year=2024`

```json
{
    "data": [
        {
            "round": 1,
            "stoppages": 576,
            "ko": 215,
            "tko": 343,
            "rtd": 18,
            "share": 0.2278,
            "cumulative_share": 0.2278
        },
        {
            "round": 2,
            "stoppages": 518,
            "ko": 158,
            "tko": 339,
            "rtd": 21,
            "share": 0.2049,
            "cumulative_share": 0.4328
        },
        {
            "round": 3,
            "stoppages": 389,
            "ko": 103,
            "tko": 262,
            "rtd": 24,
            "share": 0.1539,
            "cumulative_share": 0.5866
        }
    ],
    "meta": {
        "plan": "Complete",
        "from_year": 2024,
        "to_year": 2026,
        "stoppages": 2528,
        "example_note": "The first 3 of 12 shown here.",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/kinds`

Per year and kind (professional, amateur, Olympic, exhibition, bare-knuckle, influencer): bouts decided, women's bouts and their share, and bouts ending inside the distance.

Plans: Archive and above. Page: https://boxingapi.net/documentation/stats-kinds

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `from_year` | query | integer | no | From this year; 1800 to 2100 |
| `to_year` | query | integer | no | To this year; 1800 to 2100 |
| `kind` | query | string | no | The kind of bout One of: professional, amateur, olympic, exhibition, bare-knuckle, influencer. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/kinds?from_year=2024`

```json
{
    "data": [
        {
            "year": 2024,
            "kind": "amateur",
            "bouts": 48,
            "women_bouts": 0,
            "women_share": 0,
            "inside_distance": 16,
            "inside_distance_share": 0.3333
        },
        {
            "year": 2024,
            "kind": "bare-knuckle",
            "bouts": 329,
            "women_bouts": 23,
            "women_share": 0.0699,
            "inside_distance": 237,
            "inside_distance_share": 0.7204
        },
        {
            "year": 2024,
            "kind": "exhibition",
            "bouts": 17,
            "women_bouts": 1,
            "women_share": 0.0588,
            "inside_distance": 4,
            "inside_distance_share": 0.2353
        }
    ],
    "meta": {
        "plan": "Complete",
        "example_note": "The first 3 of 16 shown here.",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/countries`

Per country boxed for: fighters with a professional record, how many are active, women, and their combined record.

Plans: Archive and above. Page: https://boxingapi.net/documentation/stats-countries

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `q` | query | string | no | Part of a name |
| `min_fighters` | query | integer | no | At least this many fighters; 1 to 100000; default 1 |
| `sort` | query | string | no | The order; default fighters One of: fighters, active, wins. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/countries?per_page=3`

```json
{
    "data": [
        {
            "country": "United States",
            "fighters": 1668,
            "active_fighters": 166,
            "women": 107,
            "record": {
                "wins": 28825,
                "losses": 8733,
                "draws": 1346
            },
            "win_share": 0.7675
        },
        {
            "country": "United Kingdom",
            "fighters": 539,
            "active_fighters": 80,
            "women": 18,
            "record": {
                "wins": 7266,
                "losses": 2303,
                "draws": 237
            },
            "win_share": 0.7593
        },
        {
            "country": "Mexico",
            "fighters": 462,
            "active_fighters": 59,
            "women": 26,
            "record": {
                "wins": 9631,
                "losses": 2950,
                "draws": 369
            },
            "win_share": 0.7655
        }
    ],
    "meta": {
        "plan": "Complete",
        "note": "Fighters with a professional record, by the country they box for. Active means a bout in the last 2 years.",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 154,
        "total_pages": 52,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/unbeaten`

Professional fighters with no loss, the most wins first. Active (a bout in the last 2 years) unless active=false.

Plans: Live and above. Page: https://boxingapi.net/documentation/stats-unbeaten

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `min_wins` | query | integer | no | At least this many wins; 1 to 200; default 10 |
| `active` | query | string | no | true for those active in the last 2 years One of: true, false. |
| `women` | query | string | no | true for women's only, false for men's One of: true, false. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/unbeaten?min_wins=25&per_page=3`

```json
{
    "data": [
        {
            "id": "fi_xyeh3zj8",
            "name": "Terence Crawford",
            "nickname": null,
            "sex": "male",
            "born": "1987-09-28",
            "birth_place": "Hinesville",
            "country": "United States",
            "height_cm": 173,
            "record": {
                "wins": 42,
                "losses": 0,
                "draws": 0
            },
            "bouts": 47,
            "first_bout": "2006-04-25",
            "last_bout": "2025-09-13",
            "kinds": [
                "professional",
                "amateur"
            ],
            "rating": null
        },
        {
            "id": "fi_nksq89t4",
            "name": "Jaron Ennis",
            "nickname": null,
            "sex": "male",
            "born": "1997-06-26",
            "birth_place": "Philadelphia",
            "country": "United States",
            "height_cm": 178,
            "record": {
                "wins": 36,
                "losses": 0,
                "draws": 0
            },
            "bouts": 37,
            "first_bout": "2016-04-30",
            "last_bout": "2026-06-27",
            "kinds": [
                "professional"
            ],
            "rating": null
        },
        {
            "id": "fi_541fawjt",
            "name": "Jermall Charlo",
            "nickname": null,
            "sex": "male",
            "born": "1990-05-19",
            "birth_place": "Richmond",
            "country": "United States",
            "height_cm": 183,
            "record": {
                "wins": 35,
                "losses": 0,
                "draws": 0
            },
            "bouts": 35,
            "first_bout": "2008-08-12",
            "last_bout": "2025-05-31",
            "kinds": [
                "professional"
            ],
            "rating": null
        }
    ],
    "meta": {
        "plan": "Complete",
        "note": "Professional records with no loss. Active means a bout in the last 2 years; pass active=false for every unbeaten record.",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 21,
        "total_pages": 7,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/streaks`

Current runs of professional wins (or losses with losing=true), the longest first, with each fighter's best winning run. Active fighters unless active=false.

Plans: Live and above. Page: https://boxingapi.net/documentation/stats-streaks. MCP tool: `win_streaks`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `min` | query | integer | no | A run of at least this many; 1 to 200; default 5 |
| `losing` | query | string | no | true for losing runs One of: true, false. |
| `active` | query | string | no | true for those active in the last 2 years One of: true, false. |
| `women` | query | string | no | true for women's only, false for men's One of: true, false. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/streaks?min=15&per_page=3`

```json
{
    "data": [
        {
            "fighter": {
                "id": "fi_xyeh3zj8",
                "name": "Terence Crawford"
            },
            "run": 42,
            "run_of": "wins",
            "since": "2008-03-14",
            "best_winning_run": 42,
            "best_run_ended": "2025-09-13",
            "record": {
                "wins": 42,
                "losses": 0,
                "draws": 0
            },
            "last_bout": "2025-09-13"
        },
        {
            "fighter": {
                "id": "fi_nksq89t4",
                "name": "Jaron Ennis"
            },
            "run": 36,
            "run_of": "wins",
            "since": "2016-04-30",
            "best_winning_run": 36,
            "best_run_ended": "2026-06-27",
            "record": {
                "wins": 36,
                "losses": 0,
                "draws": 0
            },
            "last_bout": "2026-06-27"
        },
        {
            "fighter": {
                "id": "fi_541fawjt",
                "name": "Jermall Charlo"
            },
            "run": 35,
            "run_of": "wins",
            "since": "2008-08-12",
            "best_winning_run": 35,
            "best_run_ended": "2025-05-31",
            "record": {
                "wins": 35,
                "losses": 0,
                "draws": 0
            },
            "last_bout": "2025-05-31"
        }
    ],
    "meta": {
        "plan": "Complete",
        "note": "Professional bouts in order; a draw ends a run, a no contest does not. Active means a bout in the last 2 years.",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 88,
        "total_pages": 30,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/finishers`

Professionals by the share of their wins that came inside the distance (or by the count, with sort=count), with knockouts apart.

Plans: Live and above. Page: https://boxingapi.net/documentation/stats-finishers

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `min_wins` | query | integer | no | At least this many wins; 10 to 200; default 15 |
| `active` | query | string | no | true for those active in the last 2 years One of: true, false. |
| `women` | query | string | no | true for women's only, false for men's One of: true, false. |
| `sort` | query | string | no | The order; default share One of: share, count. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/finishers?per_page=3`

```json
{
    "data": [
        {
            "fighter": {
                "id": "fi_j02bhx9w",
                "name": "Edwin Valero"
            },
            "wins": 27,
            "wins_inside_distance": 27,
            "knockouts": 6,
            "inside_distance_share": 1,
            "last_bout": "2010-02-06"
        },
        {
            "fighter": {
                "id": "fi_thpqmq23",
                "name": "Ali Raymi"
            },
            "wins": 26,
            "wins_inside_distance": 26,
            "knockouts": 20,
            "inside_distance_share": 1,
            "last_bout": "2015-04-29"
        },
        {
            "fighter": {
                "id": "fi_2wbdze59",
                "name": "Diyab Simon Dabschah"
            },
            "wins": 20,
            "wins_inside_distance": 20,
            "knockouts": 2,
            "inside_distance_share": 1,
            "last_bout": "2023-02-25"
        }
    ],
    "meta": {
        "plan": "Complete",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 2928,
        "total_pages": 976,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/busiest`

Who has boxed most in the last days (365 unless days is set), with their wins. Professional unless kind is set.

Plans: Live and above. Page: https://boxingapi.net/documentation/stats-busiest

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `days` | query | integer | no | How many days ahead; 7 to 365; default 365 |
| `kind` | query | string | no | The kind of bout; default professional One of: professional, amateur, olympic, exhibition, bare-knuckle, influencer. |
| `min_bouts` | query | integer | no | At least this many bouts; 1 to 100; default 2 |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/busiest?per_page=3`

```json
{
    "data": [
        {
            "fighter": {
                "id": "fi_8r6487p6",
                "name": "Leo Atang"
            },
            "bouts": 7,
            "wins": 7
        },
        {
            "fighter": {
                "id": "fi_nfq453g6",
                "name": "Laura Akram"
            },
            "bouts": 6,
            "wins": 6
        },
        {
            "fighter": {
                "id": "fi_4ss0s39v",
                "name": "Jon Thomas"
            },
            "bouts": 6,
            "wins": 4
        }
    ],
    "meta": {
        "plan": "Complete",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 586,
        "total_pages": 196,
        "next_page": 2,
        "prev_page": null,
        "from": "2025-10-30",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/rematches`

Pairs who met two times or more as professionals (three unless min_meetings is set), with each side's wins, the most meetings first. Filter by fighter.

Plans: Archive and above. Page: https://boxingapi.net/documentation/stats-rematches

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `min_meetings` | query | integer | no | Met at least this many times; 2 to 50; default 3 |
| `fighter` | query | string | no | A fighter id (fi_) |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/rematches?per_page=3`

```json
{
    "data": [
        {
            "a": {
                "id": "fi_dqsfb0c4",
                "name": "Herbert Lewis Hardwick"
            },
            "b": {
                "id": "fi_133vjf3f",
                "name": "Holman Williams"
            },
            "meetings": 13,
            "a_wins": 8,
            "b_wins": 3,
            "draws_or_no_contests": 2,
            "first_meeting": "1936-03-13",
            "last_meeting": "1945-05-14"
        },
        {
            "a": {
                "id": "fi_ra1p8rj9",
                "name": "Juan Zurita"
            },
            "b": {
                "id": "fi_cm951fs2",
                "name": "Joe Conde"
            },
            "meetings": 12,
            "a_wins": 11,
            "b_wins": 1,
            "draws_or_no_contests": 0,
            "first_meeting": "1934-02-03",
            "last_meeting": "1939-11-26"
        },
        {
            "a": {
                "id": "fi_769rmxmw",
                "name": "Morris Grant"
            },
            "b": {
                "id": "fi_zvxb9x35",
                "name": "Charles Hadley"
            },
            "meetings": 12,
            "a_wins": 1,
            "b_wins": 9,
            "draws_or_no_contests": 2,
            "first_meeting": "1881-01-14",
            "last_meeting": "1883-12-08"
        }
    ],
    "meta": {
        "plan": "Complete",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 1798,
        "total_pages": 600,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/careers`

Fighters by the years between their first and last bout, with their professional record. Filter by bouts boxed and activity.

Plans: Archive and above. Page: https://boxingapi.net/documentation/stats-careers

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `min_bouts` | query | integer | no | At least this many bouts; 1 to 500; default 20 |
| `active` | query | string | no | true for those active in the last 2 years One of: true, false. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/careers?per_page=3`

```json
{
    "data": [
        {
            "id": "fi_kmfxb3jb",
            "name": "Jose Rodriguez",
            "nickname": null,
            "sex": null,
            "born": "1993-03-03",
            "birth_place": null,
            "country": null,
            "height_cm": null,
            "record": {
                "wins": 3,
                "losses": 20,
                "draws": 0
            },
            "bouts": 45,
            "first_bout": "1929-08-15",
            "last_bout": "2021-12-11",
            "kinds": [
                "professional",
                "amateur"
            ],
            "rating": null,
            "career_years": 92.3
        },
        {
            "id": "fi_06mcrpqb",
            "name": "Carlos González",
            "nickname": null,
            "sex": "male",
            "born": "1972-06-15",
            "birth_place": "Xochimilco",
            "country": "Mexico",
            "height_cm": null,
            "record": {
                "wins": 56,
                "losses": 8,
                "draws": 1
            },
            "bouts": 89,
            "first_bout": "1935-03-21",
            "last_bout": "2024-12-21",
            "kinds": [
                "professional",
                "olympic",
                "amateur"
            ],
            "rating": null,
            "career_years": 89.8
        },
        {
            "id": "fi_s66130af",
            "name": "Billy Smith",
            "nickname": null,
            "sex": null,
            "born": null,
            "birth_place": null,
            "country": null,
            "height_cm": null,
            "record": {
                "wins": 1,
                "losses": 29,
                "draws": 1
            },
            "bouts": 32,
            "first_bout": "1929-01-26",
            "last_bout": "2013-07-06",
            "kinds": [
                "professional"
            ],
            "rating": null,
            "career_years": 84.4
        }
    ],
    "meta": {
        "plan": "Complete",
        "note": "From the first bout we hold of any kind to the last; the record counts professional bouts.",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 2846,
        "total_pages": 949,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/debuts`

Per year: how many fighters had their first professional bout, women apart.

Plans: Archive and above. Page: https://boxingapi.net/documentation/stats-debuts

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `from_year` | query | integer | no | From this year; 1800 to 2100 |
| `to_year` | query | integer | no | To this year; 1800 to 2100 |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/debuts?from_year=2024`

```json
{
    "data": [
        {
            "year": 2024,
            "debuts": 1270,
            "women": 7
        },
        {
            "year": 2025,
            "debuts": 1129,
            "women": 8
        },
        {
            "year": 2026,
            "debuts": 649,
            "women": 3
        }
    ],
    "meta": {
        "plan": "Complete",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/titles`

Per year: professional title bouts, how many ended inside the distance, decisions and split decisions, draws and no contests.

Plans: Archive and above. Page: https://boxingapi.net/documentation/stats-titles

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `from_year` | query | integer | no | From this year; 1800 to 2100 |
| `to_year` | query | integer | no | To this year; 1800 to 2100 |
| `women` | query | string | no | true for women's only, false for men's One of: true, false. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/titles?from_year=2024`

```json
{
    "data": [
        {
            "year": 2024,
            "title_bouts": 635,
            "stoppages": 263,
            "decisions": 364,
            "split_decisions": 62,
            "draws": 15,
            "no_contests": 4,
            "stoppage_share": 0.4142
        },
        {
            "year": 2025,
            "title_bouts": 524,
            "stoppages": 235,
            "decisions": 281,
            "split_decisions": 37,
            "draws": 19,
            "no_contests": 4,
            "stoppage_share": 0.4485
        },
        {
            "year": 2026,
            "title_bouts": 347,
            "stoppages": 151,
            "decisions": 196,
            "split_decisions": 27,
            "draws": 4,
            "no_contests": 2,
            "stoppage_share": 0.4352
        }
    ],
    "meta": {
        "plan": "Complete",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/judges/agreement`

Per year, for bouts with three cards: all three judges for the same side, two against one, and cards scored level.

Plans: Archive and above. Page: https://boxingapi.net/documentation/stats-judges-agreement

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `from_year` | query | integer | no | From this year; 1800 to 2100 |
| `to_year` | query | integer | no | To this year; 1800 to 2100 |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/judges/agreement`

```json
{
    "data": [
        {
            "year": 2000,
            "bouts": 60,
            "all_agree": 47,
            "two_to_one": 5,
            "with_a_level_card": 8,
            "all_agree_share": 0.7833
        },
        {
            "year": 2001,
            "bouts": 48,
            "all_agree": 36,
            "two_to_one": 5,
            "with_a_level_card": 7,
            "all_agree_share": 0.75
        },
        {
            "year": 2002,
            "bouts": 51,
            "all_agree": 36,
            "two_to_one": 5,
            "with_a_level_card": 10,
            "all_agree_share": 0.7059
        }
    ],
    "meta": {
        "plan": "Complete",
        "note": "Bouts with three judges' cards: all three for the same side, two against one, or at least one card level.",
        "example_note": "The first 3 of 27 shown here.",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/judges/margins`

Judges' cards by the points between the two sides, with how many of each margin went against the winner.

Plans: Archive and above. Page: https://boxingapi.net/documentation/stats-judges-margins

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `from_year` | query | integer | no | From this year; 1800 to 2100 |
| `to_year` | query | integer | no | To this year; 1800 to 2100 |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/judges/margins`

```json
{
    "data": [
        {
            "margin": 0,
            "cards": 764,
            "share": 0.0624,
            "against_winner": 0
        },
        {
            "margin": 1,
            "cards": 1884,
            "share": 0.1538,
            "against_winner": 370
        },
        {
            "margin": 2,
            "cards": 2128,
            "share": 0.1738,
            "against_winner": 145
        }
    ],
    "meta": {
        "plan": "Complete",
        "cards": 12246,
        "example_note": "The first 3 of 21 shown here.",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/ages`

How often the younger fighter won, by the age gap between the two in bands of years.

Plans: Archive and above. Page: https://boxingapi.net/documentation/stats-ages

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/ages`

```json
{
    "data": [
        {
            "gap_from": 0,
            "gap_to": 2,
            "unit": "years",
            "bouts": 6107,
            "younger_won": 3236,
            "younger_won_share": 0.5299
        },
        {
            "gap_from": 2,
            "gap_to": 5,
            "unit": "years",
            "bouts": 8014,
            "younger_won": 4905,
            "younger_won_share": 0.6121
        },
        {
            "gap_from": 5,
            "gap_to": 8,
            "unit": "years",
            "bouts": 5336,
            "younger_won": 3638,
            "younger_won_share": 0.6818
        }
    ],
    "meta": {
        "plan": "Complete",
        "note": "Professional bouts with a winner where both fighters' full dates of birth are known, by the gap between them in years.",
        "example_note": "The first 3 of 5 shown here.",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/heights`

How often the taller fighter won, by the height gap between the two in bands of centimetres.

Plans: Archive and above. Page: https://boxingapi.net/documentation/stats-heights

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/heights`

```json
{
    "data": [
        {
            "gap_from": 1,
            "gap_to": 3,
            "unit": "cm",
            "bouts": 824,
            "taller_won": 415,
            "taller_won_share": 0.5036
        },
        {
            "gap_from": 3,
            "gap_to": 6,
            "unit": "cm",
            "bouts": 1125,
            "taller_won": 594,
            "taller_won_share": 0.528
        },
        {
            "gap_from": 6,
            "gap_to": 10,
            "unit": "cm",
            "bouts": 803,
            "taller_won": 431,
            "taller_won_share": 0.5367
        }
    ],
    "meta": {
        "plan": "Complete",
        "note": "Professional bouts with a winner where both fighters' heights are known, by the gap between them in cm.",
        "example_note": "The first 3 of 5 shown here.",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/champions`

Fighters by professional title fights won, with their whole title-fight record and their first and last title bout. Filter by wins, women's bouts and activity.

Plans: Archive and above. Page: https://boxingapi.net/documentation/stats-champions

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `min_wins` | query | integer | no | At least this many wins; 1 to 100; default 3 |
| `women` | query | string | no | true for women's only, false for men's One of: true, false. |
| `active` | query | string | no | true for those active in the last 2 years One of: true, false. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/champions?min_wins=10&per_page=3`

```json
{
    "data": [
        {
            "fighter": {
                "id": "fi_7hhe2sq2",
                "name": "Denkaosan Kaovichit"
            },
            "title_bouts": 59,
            "title_wins": 53,
            "title_losses": 5,
            "title_draws": 1,
            "first_title_bout": "1996-11-28",
            "last_title_bout": "2015-10-03"
        },
        {
            "fighter": {
                "id": "fi_vy8tp12j",
                "name": "Regina Halmich"
            },
            "title_bouts": 47,
            "title_wins": 45,
            "title_losses": 1,
            "title_draws": 1,
            "first_title_bout": "1995-04-20",
            "last_title_bout": "2007-11-30"
        },
        {
            "fighter": {
                "id": "fi_ys3hj3h7",
                "name": "Chonlatarn Piriyapinyo"
            },
            "title_bouts": 49,
            "title_wins": 42,
            "title_losses": 7,
            "title_draws": 0,
            "first_title_bout": "2004-07-09",
            "last_title_bout": "2021-03-27"
        }
    ],
    "meta": {
        "plan": "Complete",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 779,
        "total_pages": 260,
        "next_page": 2,
        "prev_page": null,
        "note": "Professional bouts with a title at stake, of any body or level, as each record names it.",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/venues`

The places that held the most professional bouts in the years asked (the last ten unless set), with title bouts and the stoppage share. q matches the place.

Plans: Archive and above. Page: https://boxingapi.net/documentation/stats-venues

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `from_year` | query | integer | no | From this year; 1800 to 2100 |
| `to_year` | query | integer | no | To this year; 1800 to 2100 |
| `q` | query | string | no | Part of a name |
| `min_bouts` | query | integer | no | At least this many bouts; 1 to 10000; default 10 |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/venues?per_page=3`

```json
{
    "data": [
        {
            "venue": "Korakuen Hall, Tokyo, Japan",
            "bouts": 554,
            "title_bouts": 226,
            "stoppages": 346,
            "stoppage_share": 0.6245,
            "first_bout": "2017-01-14",
            "last_bout": "2026-10-29"
        },
        {
            "venue": "York Hall, London, England",
            "bouts": 340,
            "title_bouts": 111,
            "stoppages": 170,
            "stoppage_share": 0.5,
            "first_bout": "2017-02-11",
            "last_bout": "2026-05-03"
        },
        {
            "venue": "The O2 Arena, London, England",
            "bouts": 183,
            "title_bouts": 85,
            "stoppages": 106,
            "stoppage_share": 0.5792,
            "first_bout": "2017-03-04",
            "last_bout": "2026-10-17"
        }
    ],
    "meta": {
        "plan": "Complete",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 376,
        "total_pages": 126,
        "next_page": 2,
        "prev_page": null,
        "from": "2017-01-01",
        "to": "2027-01-01",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/women`

Per year: women's professional bouts, title bouts, stoppages and their share, and debuts. From 1990 unless from_year is set.

Plans: Archive and above. Page: https://boxingapi.net/documentation/stats-women

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `from_year` | query | integer | no | From this year; 1800 to 2100 |
| `to_year` | query | integer | no | To this year; 1800 to 2100 |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/women?from_year=2024`

```json
{
    "data": [
        {
            "year": 2024,
            "bouts": 524,
            "title_bouts": 126,
            "stoppages": 130,
            "stoppage_share": 0.2481,
            "debuts": 7
        },
        {
            "year": 2025,
            "bouts": 343,
            "title_bouts": 97,
            "stoppages": 109,
            "stoppage_share": 0.3178,
            "debuts": 8
        },
        {
            "year": 2026,
            "bouts": 97,
            "title_bouts": 60,
            "stoppages": 24,
            "stoppage_share": 0.2474,
            "debuts": 3
        }
    ],
    "meta": {
        "plan": "Complete",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/movers`

Our rating (BXR) division lists, this month against last: who rose most, or fell most with falling=true, with the rating and rank before and after.

Plans: Live and above. Page: https://boxingapi.net/documentation/stats-movers

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `falling` | query | string | no | true for the biggest fallers One of: true, false. |
| `women` | query | string | no | true for women's only, false for men's One of: true, false. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/movers`

```json
{
    "data": [
        {
            "fighter": {
                "id": "fi_krybw707",
                "name": "O'Shaquie Foster"
            },
            "division": "Super Featherweight",
            "rating": 1816,
            "rating_before": 1796,
            "change": 20,
            "rank": 3,
            "rank_before": 5
        },
        {
            "fighter": {
                "id": "fi_341s0pjc",
                "name": "Sergio Mendoza"
            },
            "division": "Flyweight",
            "rating": 1768,
            "rating_before": 1749,
            "change": 19,
            "rank": 4,
            "rank_before": null
        },
        {
            "fighter": {
                "id": "fi_7phtv4kt",
                "name": "Daniel Dubois"
            },
            "division": "Heavyweight",
            "rating": 1881,
            "rating_before": 1865,
            "change": 16,
            "rank": 7,
            "rank_before": 8
        }
    ],
    "meta": {
        "plan": "Complete",
        "month": "2026-10",
        "compared_with": "2026-09",
        "count": 9,
        "total": 9,
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/activity`

Per year: active professionals, bouts per fighter, how many boxed once and how many four times or more. From 2000 unless from_year is set.

Plans: Archive and above. Page: https://boxingapi.net/documentation/stats-activity

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `from_year` | query | integer | no | From this year; 1800 to 2100 |
| `to_year` | query | integer | no | To this year; 1800 to 2100 |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/activity?from_year=2024`

```json
{
    "data": [
        {
            "year": 2024,
            "active_fighters": 3222,
            "bouts_per_fighter": 1.39,
            "boxed_once": 2381,
            "boxed_once_share": 0.739,
            "boxed_four_times_or_more": 75
        },
        {
            "year": 2025,
            "active_fighters": 2858,
            "bouts_per_fighter": 1.37,
            "boxed_once": 2096,
            "boxed_once_share": 0.7334,
            "boxed_four_times_or_more": 61
        },
        {
            "year": 2026,
            "active_fighters": 1886,
            "bouts_per_fighter": 1.27,
            "boxed_once": 1467,
            "boxed_once_share": 0.7778,
            "boxed_four_times_or_more": 13
        }
    ],
    "meta": {
        "plan": "Complete",
        "generated_at": "2026-10-30T15:48:09Z"
    }
}
```

#### `GET /v1/stats/quality`

Field by field: how often two independent records agree on a bout's date, method, round, venue, referee, title and more, and how full each field is across professional results. Counted every hour.

Plans: Free key and above. Page: https://boxingapi.net/documentation/stats-quality. MCP tool: `record_quality`

Errors: 400 bad_request, 401 unauthorized, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/stats/quality`

```json
{
    "data": [
        {
            "field": "date",
            "compared": 23630,
            "agreed": 22183,
            "agree_share": 0.9388,
            "record_pairs": 47,
            "filled_share": 1
        },
        {
            "field": "method",
            "compared": 16977,
            "agreed": 16366,
            "agree_share": 0.964,
            "record_pairs": 35,
            "filled_share": 0.9916
        },
        {
            "field": "venue",
            "compared": 15790,
            "agreed": 14904,
            "agree_share": 0.9439,
            "record_pairs": 33,
            "filled_share": 0.9981
        }
    ],
    "meta": {
        "plan": "Complete",
        "checked_at": "2026-10-30T14:55:37Z",
        "professional_results": 133008,
        "note": "agree_share: of the values two independent records give for the same bout, the share that match. filled_share: professional results with the field.",
        "example_note": "The first 3 of 12 shown here.",
        "generated_at": "2026-10-30T15:48:10Z"
    }
}
```

### Events

Named events outside the professional record.

#### `GET /v1/events`

Named events outside the professional record: amateur tournaments, Olympic events, exhibition, bare-knuckle and influencer cards, newest first. Filter by kind, year, name and women's bouts.

Plans: Live and above. Page: https://boxingapi.net/documentation/events. MCP tool: `find_events`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `kind` | query | string | no | The kind of bout One of: amateur, olympic, exhibition, bare-knuckle, influencer. |
| `year` | query | integer | no | One year; 1800 to 2100 |
| `q` | query | string | no | Part of a name |
| `women` | query | string | no | true for women's only, false for men's One of: true, false. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/events?kind=amateur&per_page=3`

```json
{
    "data": [
        {
            "id": "ev_wba3mj0m",
            "kind": "amateur",
            "name": "Dual Match Cuba",
            "year": 2026,
            "venue": "Jordan 14:2",
            "first_date": "2026-01-20",
            "last_date": "2026-01-24",
            "bouts": 14,
            "women_bouts": 0
        },
        {
            "id": "ev_q3syw5eb",
            "kind": "amateur",
            "name": "International Meeting",
            "year": 2025,
            "venue": null,
            "first_date": "2025-05-09",
            "last_date": "2025-05-09",
            "bouts": 6,
            "women_bouts": 0
        },
        {
            "id": "ev_d1vtfesk",
            "kind": "amateur",
            "name": "Teofilo Stevenson Memorial Meeting",
            "year": 2025,
            "venue": null,
            "first_date": "2025-03-29",
            "last_date": "2025-03-29",
            "bouts": 6,
            "women_bouts": 0
        }
    ],
    "meta": {
        "plan": "Complete",
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 3378,
        "total_pages": 1126,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:10Z"
    }
}
```

#### `GET /v1/events/{id}`

One event: its kind, name, year, venue, dates and how many bouts we hold.

Plans: Live and above. Page: https://boxingapi.net/documentation/event

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting ev_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/events/ev_wba3mj0m`

```json
{
    "data": {
        "id": "ev_wba3mj0m",
        "kind": "amateur",
        "name": "Dual Match Cuba",
        "year": 2026,
        "venue": "Jordan 14:2",
        "first_date": "2026-01-20",
        "last_date": "2026-01-24",
        "bouts": 14,
        "women_bouts": 0
    },
    "meta": {
        "plan": "Complete",
        "generated_at": "2026-10-30T15:48:10Z"
    }
}
```

#### `GET /v1/events/{id}/bouts`

Every bout of one event in order, as far back as your plan reaches.

Plans: Live and above. Page: https://boxingapi.net/documentation/event-bouts. MCP tool: `event_bouts`

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting ev_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/events/ev_wba3mj0m/bouts?per_page=3`

```json
{
    "data": [
        {
            "id": "bt_hce0jffn",
            "date": "2026-01-20",
            "start_time_utc": null,
            "kind": "amateur",
            "women": false,
            "outcome": "win",
            "status": "completed",
            "winner": {
                "id": "fi_d7egw4kq",
                "name": "Deivis Abreus"
            },
            "a": {
                "id": "fi_d7egw4kq",
                "name": "Deivis Abreus"
            },
            "b": {
                "id": "fi_ymb0yg3z",
                "name": "Huthaifa Eshish"
            },
            "method": "PTS",
            "round": null,
            "time": null,
            "rounds_scheduled": null,
            "weight": "50kg",
            "titles": null,
            "venue": "Jordan 14:2",
            "event": "Dual Match Cuba",
            "promoter": null,
            "stage": null,
            "referee": null,
            "cards": null,
            "records_agreeing": 1,
            "disputed": false
        },
        {
            "id": "bt_0r5pv00y",
            "date": "2026-01-20",
            "start_time_utc": null,
            "kind": "amateur",
            "women": false,
            "outcome": "win",
            "status": "completed",
            "winner": {
                "id": "fi_h92wwtxj",
                "name": "Yusiel Bes"
            },
            "a": {
                "id": "fi_h92wwtxj",
                "name": "Yusiel Bes"
            },
            "b": {
                "id": "fi_tytz11ye",
                "name": "Mahdi Al-Mashaleh"
            },
            "method": "PTS",
            "round": null,
            "time": null,
            "rounds_scheduled": null,
            "weight": "55kg",
            "titles": null,
            "venue": "Jordan 14:2",
            "event": "Dual Match Cuba",
            "promoter": null,
            "stage": null,
            "referee": null,
            "cards": null,
            "records_agreeing": 1,
            "disputed": false
        },
        {
            "id": "bt_30hbz63a",
            "date": "2026-01-20",
            "start_time_utc": null,
            "kind": "amateur",
            "women": false,
            "outcome": "win",
            "status": "completed",
            "winner": {
                "id": "fi_4msxqhyf",
                "name": "Luis Enrique Vinent"
            },
            "a": {
                "id": "fi_4msxqhyf",
                "name": "Luis Enrique Vinent"
            },
            "b": {
                "id": "fi_ghkckjaj",
                "name": "Mohammad Abu Jajeh"
            },
            "method": "PTS",
            "round": null,
            "time": null,
            "rounds_scheduled": null,
            "weight": "60kg",
            "titles": null,
            "venue": "Jordan 14:2",
            "event": "Dual Match Cuba",
            "promoter": null,
            "stage": null,
            "referee": null,
            "cards": null,
            "records_agreeing": 1,
            "disputed": false
        }
    ],
    "meta": {
        "plan": "Complete",
        "event": {
            "id": "ev_wba3mj0m",
            "kind": "amateur",
            "name": "Dual Match Cuba",
            "year": 2026,
            "venue": "Jordan 14:2",
            "first_date": "2026-01-20",
            "last_date": "2026-01-24",
            "bouts": 14,
            "women_bouts": 0
        },
        "count": 3,
        "next_cursor": "eyJvIjozLCJwIjozfQ",
        "page": 1,
        "per_page": 3,
        "total": 14,
        "total_pages": 5,
        "next_page": 2,
        "prev_page": null,
        "generated_at": "2026-10-30T15:48:10Z"
    }
}
```

### Olympic Games

Every Games, its medal table and medallists.

#### `GET /v1/olympics`

Every Games with boxing, newest first: dates, bouts, events, events with a final, women's bouts and nations. The Youth Olympic Games are included and marked youth: true.

Plans: Live and above. Page: https://boxingapi.net/documentation/olympics

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `youth` | query | string | no | true for the Youth Olympic Games only, false to leave them out One of: true, false. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/olympics`

```json
{
    "data": [
        {
            "year": 2024,
            "games": "Olympic Games",
            "youth": false,
            "first_date": "2024-07-27",
            "last_date": "2024-08-10",
            "bouts": 235,
            "events": 13,
            "events_with_a_final": 13,
            "women_bouts": 118,
            "nations": 69
        },
        {
            "year": 2021,
            "games": "Youth Olympic Games",
            "youth": true,
            "first_date": "2021-07-24",
            "last_date": "2021-08-08",
            "bouts": 276,
            "events": 13,
            "events_with_a_final": 13,
            "women_bouts": 97,
            "nations": 81
        },
        {
            "year": 2018,
            "games": "Youth Olympic Games",
            "youth": true,
            "first_date": "2018-10-14",
            "last_date": "2018-10-18",
            "bouts": 109,
            "events": 13,
            "events_with_a_final": 13,
            "women_bouts": 21,
            "nations": 38
        }
    ],
    "meta": {
        "plan": "Complete",
        "note": "The Youth Olympic Games (boxers aged 17 and 18) are listed with youth: true; leave them out with youth=false.",
        "example_note": "The first 3 of 30 shown here.",
        "generated_at": "2026-10-30T15:48:10Z"
    }
}
```

#### `GET /v1/olympics/{year}/medals`

The boxing medal table of one Games by nation: gold, silver, bronze and total. meta.games says whether it was the Olympic or the Youth Olympic Games.

Plans: Archive and above. Page: https://boxingapi.net/documentation/olympic-medals

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `year` | path | integer | yes | One year |
| `women` | query | string | no | true for women's only, false for men's One of: true, false. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/olympics/2024/medals`

```json
{
    "data": [
        {
            "nation": "UZB",
            "gold": 5,
            "silver": 0,
            "bronze": 0,
            "total": 5
        },
        {
            "nation": "CHN",
            "gold": 3,
            "silver": 2,
            "bronze": 0,
            "total": 5
        },
        {
            "nation": "TPE",
            "gold": 1,
            "silver": 0,
            "bronze": 2,
            "total": 3
        }
    ],
    "meta": {
        "plan": "Complete",
        "year": 2024,
        "games": "Olympic Games",
        "youth": false,
        "note": "Gold and silver from each final, bronze to each beaten semi-finalist (or the winner of a bronze bout, where one was boxed).",
        "example_note": "The first 3 of 32 shown here.",
        "generated_at": "2026-10-30T15:48:10Z"
    }
}
```

#### `GET /v1/olympics/{year}/podiums`

Each event of one Games with its gold, silver and bronze medallists and their nations. meta.games says whether it was the Olympic or the Youth Olympic Games.

Plans: Archive and above. Page: https://boxingapi.net/documentation/olympic-podiums

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `year` | path | integer | yes | One year |
| `women` | query | string | no | true for women's only, false for men's One of: true, false. |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

Example: `https://api.boxingapi.net/v1/olympics/2024/podiums`

```json
{
    "data": [
        {
            "event": "Bantamweight (50-54 kilograms), Women",
            "women": true,
            "gold": {
                "id": "fi_hq7pjcdx",
                "name": "Chang Yuan",
                "nation": "CHN"
            },
            "silver": {
                "id": "fi_7wkfpym9",
                "name": "Hatice Akbaş",
                "nation": "TUR"
            },
            "bronze": [
                {
                    "id": "fi_vpsz9x76",
                    "name": "Im Ae-Ji",
                    "nation": "KOR"
                },
                {
                    "id": "fi_bf83qzm6",
                    "name": "Pang Chol-Mi",
                    "nation": "PRK"
                }
            ]
        },
        {
            "event": "Featherweight (51-57 kilograms), Men",
            "women": false,
            "gold": {
                "id": "fi_qjhdhevn",
                "name": "Abdumalik Khalokov",
                "nation": "UZB"
            },
            "silver": {
                "id": "fi_jgy5myrw",
                "name": "Munarbek Seitbek Uulu",
                "nation": "KGZ"
            },
            "bronze": [
                {
                    "id": "fi_20005d0h",
                    "name": "Charlie Senior",
                    "nation": "AUS"
                },
                {
                    "id": "fi_kde8bgsb",
                    "name": "Javier Ibáñez",
                    "nation": "BUL"
                }
            ]
        },
        {
            "event": "Featherweight (54-57 kilograms), Women",
            "women": true,
            "gold": {
                "id": "fi_ae914c6n",
                "name": "Lin Yu-Ting",
                "nation": "TPE"
            },
            "silver": {
                "id": "fi_y6kfq3kx",
                "name": "Julia Szeremeta",
                "nation": "POL"
            },
            "bronze": [
                {
                    "id": "fi_72gr2k84",
                    "name": "Esra Yıldız",
                    "nation": "TUR"
                },
                {
                    "id": "fi_ggh7g6s9",
                    "name": "Nesthy Petecio",
                    "nation": "PHI"
                }
            ]
        }
    ],
    "meta": {
        "plan": "Complete",
        "year": 2024,
        "games": "Olympic Games",
        "youth": false,
        "example_note": "The first 3 of 13 shown here.",
        "generated_at": "2026-10-30T15:48:10Z"
    }
}
```

### Webhooks

Events posted to your own address.

#### `GET /v1/webhooks`

The webhooks on your account (up to 10), with the events each takes: result.received, fight.added, fight.removed, rankings.updated.

Plans: Live and above. Page: https://boxingapi.net/documentation/webhooks-list

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

#### `POST /v1/webhooks`

Add an https address to post events to; events defaults to all of them. The answer holds the signing secret, shown this once.

Plans: Live and above. Page: https://boxingapi.net/documentation/webhook-add

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `url` | body | string | yes | An https address on a public host |
| `events` | body | string | no | Comma-separated: result.received, fight.added, fight.removed, rankings.updated |
| `description` | body | string | no | A note for you |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 422 unknown_parameter, 429 rate_limited

#### `DELETE /v1/webhooks/{id}`

Stop posting to one webhook; deliveries still waiting are dropped.

Plans: Live and above. Page: https://boxingapi.net/documentation/webhook-delete

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting wh_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

#### `POST /v1/webhooks/{id}/test`

Post a signed ping event to one webhook now and say what its address answered.

Plans: Live and above. Page: https://boxingapi.net/documentation/webhook-test

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting wh_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

#### `GET /v1/webhooks/{id}/deliveries`

Every delivery to one webhook, newest first: the event, what the address answered, attempts and the next retry.

Plans: Live and above. Page: https://boxingapi.net/documentation/webhook-deliveries

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | An id starting wh_, as another call returns it |

Errors: 400 bad_request, 401 unauthorized, 403 upgrade_required, 404 not_found, 422 unknown_parameter, 429 rate_limited

### Account

Your plan and your calls.

#### `GET /v1/usage`

Your plan, calls today and this month, your limits, when they reset and how far back your plan reaches. Never counts against your quota.

Plans: Free key and above. Page: https://boxingapi.net/documentation/usage. MCP tool: `my_usage`

Errors: 400 bad_request, 401 unauthorized, 422 unknown_parameter, 429 rate_limited

## MCP server

`https://api.boxingapi.net/mcp`, 18 tools: `my_usage`, `yesterdays_results`, `todays_results`, `title_fights`, `upcoming_fights`, `find_bouts`, `get_bout`, `find_fighter`, `get_fighter`, `fighter_next_fights`, `get_rankings`, `fighter_rankings`, `get_upsets`, `win_streaks`, `record_quality`, `head_to_head`, `find_events`, `event_bouts`. Every tool is on https://boxingapi.net/documentation/mcp-tools.

## Guides

### Quick start

A key, the first call, the answer. (https://boxingapi.net/documentation/quick-start)

Three steps from nothing to boxing data.

#### 1. Get a key

Sign in at [boxingapi.net/login](https://boxingapi.net/login) with Google. Your free key is ready at once and shown on your account page. It fills in on every documentation page by itself, so Try it works with no pasting.

#### 2. Make the first call

The fights in the next seven days:

```
curl https://api.boxingapi.net/v1/fights/upcoming?days=7 \
  -H "Authorization: Bearer YOUR_KEY"
```

#### 3. Read the answer

Every answer is one envelope: `data` holds the records, `meta` holds the paging, your plan, anything held back for a higher plan and when the answer was generated.

```
{
  "data": [ { "id": "fx_...", "date": "2026-10-31", "a": { "name": "...", "best_price": null }, "b": { ... } } ],
  "meta": { "plan": "Free key", "held_back": { "prices": "Live" }, "count": 15, "generated_at": "2026-10-29T05:00:00Z" }
}
```

On the free key the prices come back as `null` with `meta.held_back` naming the plan that opens them, so your code keeps working when you upgrade.

#### Where next

- [Fighters](https://boxingapi.net/documentation/fighters-guide): find a fighter and read their record.
- [Results and bouts](https://boxingapi.net/documentation/results-guide): every bout, filtered.
- [MCP](https://boxingapi.net/documentation/mcp): let an assistant answer from the data.

### Authentication

Your key, the two ways to send it, and rotating it. (https://boxingapi.net/documentation/authentication)

Every call carries your key. Send it in one of two headers:

```
Authorization: Bearer YOUR_KEY
X-API-Key: YOUR_KEY
```

A key in the address (`?api_key=` or `?key=`) is refused with a `400`: addresses end up in logs and browser history.

#### What a key looks like

Keys start `bx_live_`. We keep only a fingerprint of a key, so the full key is shown once, when it is made. Your account page shows its first characters afterwards.

#### Rotating a key

On your account page, Rotate makes a new key and keeps the old one working for 24 hours, so nothing breaks while you swap it. Revoke stops a key at once.

#### Assistants

A Claude or ChatGPT connector signs in through your account and gets a key of its own, listed on your account under the assistant's name. Revoking it cuts that assistant off without touching your own key.

### Plans and limits

What each plan reads, its limits, and the headers that count them. (https://boxingapi.net/documentation/plans-and-limits)

| Plan | Reads | Calls a day | Calls a minute | Price |
| --- | --- | --- | --- | --- |
| Free key | Yesterday's results, the fights ahead with prices held back, current rankings | 50 | 10 | free |
| Live | Prices, fighters, the last 12 months, cards, webhooks | 5,000 | 60 | $29 a month, $290 a year |
| Archive | All of history, judges and referees, most statistics, past ranking lists | 20,000 | 120 | $79 a month, $790 a year |
| Complete | Odds history, upsets and every statistic | 100,000 | 300 | $149 a month, $1,490 a year |

#### The window

The free key reads yesterday and the days ahead; Live reads the last 12 months; Archive and Complete read all of history. A bout older than your plan reaches answers `403 upgrade_required`, naming the plan that opens it.

#### Held-back fields

Where a plan reads a record but not every field (prices on the free key, judges' cards older than Live reaches), the field comes back as `null` and `meta.held_back` names the plan that opens it. Fields are never missing.

#### The headers

- `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`: this minute.
- `X-Quota-Remaining`: today, reset at 00:00 UTC.

Over the minute's limit answers `429 rate_limited` with `Retry-After`; over the day's answers `429 quota_exceeded`. `/v1/usage` never counts.

### Pagination

Pages with totals, or a cursor for long walks. (https://boxingapi.net/documentation/pagination)

Lists answer 50 records by default and up to 200 with `per_page`.

#### By page

`?page=2` answers with `meta.total`, `total_pages`, `next_page` and `prev_page`.

#### By cursor

Every page also carries `meta.next_cursor`. Pass it back as `?cursor=` to walk a long list without the cost of counting it: cursor pages skip the total. The last page has `next_cursor: null`.

```
curl "https://api.boxingapi.net/v1/bouts?kind=professional&per_page=200" -H "Authorization: Bearer YOUR_KEY"
curl "https://api.boxingapi.net/v1/bouts?cursor=eyJvIjoyMDAsInAiOjIwMH0" -H "Authorization: Bearer YOUR_KEY"
```

### Errors

One shape for every error, and what to do about each. (https://boxingapi.net/documentation/errors)

Every error is one envelope:

```
{ "error": { "code": "upgrade_required", "message": "Upsets is on the Complete plan and above.", "plan": "Complete", "pricing": "https://boxingapi.net/pricing", "docs": "https://boxingapi.net/documentation/errors" } }
```

| Status | Code | What to do |
| --- | --- | --- |
| 400 | bad_request | A parameter is malformed (a date, an id, a value not in its list) or the key was sent in the address. The message names it. |
| 401 | unauthorized | No key, or a key that is not valid. Send it in a header; your current key is on your account page. |
| 403 | upgrade_required | The endpoint, or the date asked for, is on a higher plan. `plan` names it. |
| 404 | not_found | No such endpoint, or nothing with that id. |
| 422 | unknown_parameter | A parameter this endpoint does not take. The message lists the ones it does. |
| 429 | rate_limited | Too many calls this minute. Wait for `Retry-After` seconds. |
| 429 | quota_exceeded | Today's calls are used up; they start again at 00:00 UTC. |
| 500 | server_error | Ours, and logged. Try again in a moment. |

### Webhooks

Events posted to your address, signed and retried. (https://boxingapi.net/documentation/webhooks)

On Live and above, up to 10 webhooks per account. Add them on your account page or with `POST /v1/webhooks`.

#### Events

- `result.received`: a bout we hold gets its result.
- `fight.added` and `fight.removed`: the cards ahead change.
- `rankings.updated`: a new month of a world list.
- `ping`: the test.

#### Checking the signature

Each delivery is a POST of JSON with `X-BoxingAPI-Signature: t=1793250000,v1=...`. Make an HMAC-SHA256 of the time, a dot and the raw body, with your webhook's secret, and compare it with `v1`. Refuse a time more than five minutes old.

```
$expected = hash_hmac('sha256', $t . '.' . $body, $secret);
hash_equals($expected, $v1) or exit;
```

#### Retries

An answer other than 2xx is tried again after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours, then marked failed. Every delivery is listed with `GET /v1/webhooks/{id}/deliveries`.

### MCP

Connecting an assistant to the data. (https://boxingapi.net/documentation/mcp)

The MCP server gives an assistant 18 tools over the same data and limits as your key. It is at:

```
https://api.boxingapi.net/mcp
```

#### Claude and ChatGPT

Add a custom connector with that address. The connector signs you in here, you allow it, and it gets a key of its own, listed on your account under its name.

#### Cursor, Claude Code and clients that take a header

```
claude mcp add --transport http boxingapi https://api.boxingapi.net/mcp --header "X-API-Key: YOUR_KEY"
```

#### A worked example

Asked "who pulled off the biggest upset of 2025?", an assistant calls `get_upsets` with `{ "year": 2025 }` and answers from the first row: the winner, the loser, the date, the method and the closing price. Asked about a fighter, it calls `find_fighter` first and passes the id it returns to `get_fighter` or `head_to_head`.

A tool your plan does not open comes back as an error the assistant can read, naming the plan. Every tool is listed on [MCP tools](https://boxingapi.net/documentation/mcp-tools).

### Agent skill

One file that teaches an agent to use the API. (https://boxingapi.net/documentation/agent-skill)

[/skill.md](https://boxingapi.net/skill.md) is a SKILL.md for Claude, Cursor, Codex and other agents: what the API is for, how to get a key, the calls that answer the common questions, the limits, the errors and a typical workflow.

#### Adding it

- Claude Code: save it as `~/.claude/skills/boxingapi/SKILL.md`.
- Claude: upload it as a skill in Claude's settings.
- Discovery: agents find it at `/.well-known/agent-skills/index.json`.

### Changelog

What changed, newest first. (https://boxingapi.net/documentation/changelog)

- 29 Oct 2026: `/v1/stats/quality`, free: how often independent records agree on each field of a bout, and how full each field is.

- 29 Oct 2026: bouts gain the promoter; a weight class on far more professional bouts, from the title and the official weigh-in; more official cards with each judge's score; more fighter profiles.

- 29 Oct 2026: ten more endpoints: today's results, title fights, a fighter's next fights, one referee and their bouts, and five statistics (title-fight winners, venues, women's boxing by year, rating movers, how often fighters box).

- 29 Oct 2026: connector sign-in for Claude and ChatGPT, through your account.

- 29 Oct 2026: webhooks for results, fights added and taken off, and ranking lists.

- 29 Oct 2026: twelve more statistics, from winning runs and rematches to who wins by age and height; head to head.

- 29 Oct 2026: events outside the professional record, the Olympic Games with medal tables and medallists.

- 28 Oct 2026: the MCP server, with 14 tools.

- 28 Oct 2026: rankings, our BXR rating and BXP points, judges and referees, odds and upsets.

- 27 Oct 2026: the API opens: fights to come, results, bouts and fighters.

### Fights to come

The cards ahead, priced, and how a fight becomes a result. (https://boxingapi.net/documentation/fights-guide)

Every scheduled bout we hold a price for, with the best price on each side (American odds and decimal), the chance it implies with the bookmakers' margin taken out, how many books price it and how many prop markets it has. Prices are read every hour through fight week; `prices_read_at` says when.

#### Common jobs

- This week's card: `GET /v1/fights/upcoming?days=7`.
- One fight and its props: `GET /v1/fights/{id}`.
- The fighters: each side carries a fighter id where we have matched them; pass it to `/v1/fighters/{id}`.

Fight ids start `fx_`. Once a fight has happened its result is a bout (`bt_`) in [Results and bouts](https://boxingapi.net/documentation/results-guide), and the `result.received` webhook says so.

### Results and bouts

Every bout of every kind, and how to filter them. (https://boxingapi.net/documentation/results-guide)

A bout is one meeting of two fighters: professional, amateur, Olympic, exhibition, bare-knuckle or influencer, women's apart. Each carries the result, method, round and time, the scheduled rounds, the weight, titles, venue, event, stage, referee, each judge's card where the commission published them, and `records_agreeing`: how many records we hold agree on it.

#### Disputed results

When the records split evenly on who won, the bout carries `disputed: true`. `GET /v1/bouts?disputed=true` lists them.

#### Common jobs

- Last night's results: `GET /v1/results/yesterday`; today's so far: `/v1/results/today`.
- A day or a range: `GET /v1/bouts?from=2026-10-01&to=2026-10-31&kind=professional`.
- A fighter's bouts: `GET /v1/bouts?fighter=fi_...`.
- Every split decision: `GET /v1/bouts?method=SD`.
- Title fights: `GET /v1/title-fights?q=wbc+heavyweight`.

### Fighters

Finding a fighter, their record and everything joined to them. (https://boxingapi.net/documentation/fighters-guide)

Records are built from the bouts themselves: the professional record counts professional bouts, and `kinds` says what else a fighter has boxed. Profile details (born, height, country, nickname) are there where known.

#### Common jobs

- Find the fighter: `GET /v1/fighters?q=inoue`. Ids start `fi_` and never change.
- Their profile and record: `GET /v1/fighters/{id}`.
- Every bout: `GET /v1/fighters/{id}/bouts`; the fights booked: `/next`.
- Where they are ranked: `GET /v1/fighters/{id}/rankings`; our rating month by month: `/ratings`.
- Against one opponent: `GET /v1/fighters/{id}/vs/{other}`.

### Rankings and ratings

The bodies' lists, the board, and our own two tables. (https://boxingapi.net/documentation/rankings-guide)

The latest monthly list of each body (`wbc`, `wba`, `ibf`, `wbo`), the independent board (`board`) and our own two tables, men and women apart, with champions and interim champions.

#### Our two tables

- `bxr`, the rating: who is best. Every professional result since 1960 moves both fighters, weighted by how the fight was won, titles and scheduled length.
- `bxp`, the points: who is on the best run. Wins over strong opposition earn points that fade after a year and drop off after two.

#### Common jobs

- A division: `GET /v1/rankings?body=wbc&division=heavyweight`.
- Pound for pound: `GET /v1/rankings?body=bxr&division=pound-for-pound`.
- A past month (Archive): `&month=2019-06`.
- Every list held: `GET /v1/rankings/divisions`.

### Judges and referees

Each judge's card by name, and the officials' records. (https://boxingapi.net/documentation/officials-guide)

Where a commission published the cards, each bout carries every judge's card by name. Each judge has an id (`jd_`) and a record: cards held, cards against the winner and the share.

#### Common jobs

- A bout's cards: `GET /v1/bouts/{id}/cards`.
- Active judges with 50 cards or more: `GET /v1/judges?active=true&min_cards=50`.
- Every card one judge turned in: `GET /v1/judges/{id}/cards`.
- Referees by stoppage share: `GET /v1/referees`; one referee and every bout they handled: `GET /v1/referees/{id}`, `/bouts`.

### Odds and upsets

Opening and closing prices, and the underdogs who beat them. (https://boxingapi.net/documentation/odds-guide)

For the bouts we priced: the opening and closing prices on both sides, the best and worst on the night, how many books priced it, the movement, and the closing chance with the margin taken out. Every underdog win is ranked by the price the market gave it.

#### Common jobs

- A bout's prices: `GET /v1/odds/{bout id}`.
- The biggest upsets: `GET /v1/upsets?min_odds=1000`; in title fights: `&title=true`.
- Upsets by year: `GET /v1/upsets/years`.
- How often favourites win, by price: `GET /v1/stats/favourites`.

### Statistics

Ready-made views across the whole record. (https://boxingapi.net/documentation/statistics-guide)

Twenty-three views built from the record every hour, so a question that would take thousands of calls is one. Professional bouts unless said otherwise.

- How fights end: `/v1/stats/methods`, `/rounds`, `/titles`, `/kinds`, `/venues`, `/women`, `/activity`.
- Fighters: `/unbeaten`, `/streaks`, `/finishers`, `/busiest`, `/careers`, `/debuts`, `/rematches`, `/countries`, `/champions`, `/movers`.
- The record itself: `/quality`, how often independent records agree, field by field.
- Judges: `/judges/agreement`, `/judges/margins`.
- What wins: `/ages`, `/heights`, `/favourites`.

### Events and the Olympics

Amateur tournaments, the Games and the cards outside the pro record. (https://boxingapi.net/documentation/events-guide)

Named events outside the professional record, each with an id (`ev_`): amateur tournaments, Olympic boxing, bare-knuckle, exhibition and influencer cards. The Olympic Games have their own view: every Games, its medal table and each weight class's medallists. The Youth Olympic Games (2010, 2014, 2018, boxers aged 17 and 18) are in it too, marked `youth: true` with `games: "Youth Olympic Games"`; `GET /v1/olympics?youth=false` leaves them out.

#### Common jobs

- Amateur tournaments this year: `GET /v1/events?kind=amateur&year=2026`.
- An event's bouts: `GET /v1/events/{id}/bouts`.
- Every Games: `GET /v1/olympics`; a medal table: `GET /v1/olympics/2024/medals`; the medallists: `/podiums`.

## Errors

Every error is `{"error": {"code", "message", "docs"}}`; a plan refusal adds `plan` and `pricing`. The full list: https://boxingapi.net/documentation/errors

## About this document

Generated from the API's registry, its guides and its plans; the date at the top changes only when they do, so it tells a stale copy. Also: https://boxingapi.net/openapi.json, https://boxingapi.net/llms.txt, https://api.boxingapi.net/mcp and https://boxingapi.net/skill.md.
