# Tennis Live API
> Live ATP & WTA tennis data as an API — clean JSON, no key. Get the official player rankings for both tours, with ranking points and week-to-week movement; pull the tournament scoreboard with live matches, scores and set-by-set line scores; open a player's profile (age, height, country, plays right/left-handed, turned pro); search players by name; and read the latest news. Live data sourced continuously from ESPN. Tennis is a global, year-round sport with a huge betting and fantasy following around the Grand Slams — ideal for score apps, ranking widgets, betting and fantasy tools, dashboards and Discord bots. 5 data endpoints. Authenticated with an x-oanor-key; fair-use rate limits per plan.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/tennislive-api/..."
```

## Pricing
- **Free** (Free) — 4,900 calls/Mo, 5 req/s
- **Starter** ($7/Mo) — 52,500 calls/Mo, 15 req/s
- **Pro** ($30/Mo) — 282,000 calls/Mo, 30 req/s
- **Mega** ($96/Mo) — 1,210,000 calls/Mo, 80 req/s

## Endpoints

### Rankings

#### `GET /v1/rankings` — Player rankings

**Parameters:**
- `tour` (query, optional, string) — atp or wta Example: `atp`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tennislive-api/v1/rankings?tour=atp"
```

**Response:**
```json
{
    "data": {
        "tour": "atp",
        "count": 150,
        "players": [
            {
                "id": "3623",
                "rank": 1,
                "trend": "-",
                "player": "Jannik Sinner",
                "points": 14750,
                "previous": 1
            },
            {
                "id": "3782",
                "rank": 2,
                "trend": "-",
                "player": "Carlos Alcaraz",
                "points": 11960,
                "previous": 2
            },
            {
                "id": "2375",
                "rank": 3,
                "trend": "-",
                "player": "Alexander Zverev",
                "points": 5705,
                "previous": 3
            },
            {
                "id": "296",
                "rank": 4,
                "trend": "-",
                "player": "Novak Djokovic",
                "points": 4460,
                "previous": 4
            },
            {
                "id": "9250",
                "rank": 5,
                "trend": "+1",
                "player": "Ben Shelton",
                "points": 4070,
                "previous": 6
            },
            {
                "id": "3209",
                "rank": 6,
                "trend": "-1",
                "player": "Felix Auger-Aliassime",
                "points": 4050,
                "previous": 5
            },
            {
                "id": "2651",
                "rank": 7,
       
…(truncated, see openapi.json for full schema)
```

### Matches

#### `GET /v1/scoreboard` — Tournaments & live matches

**Parameters:**
- `tour` (query, optional, string) — atp or wta Example: `atp`
- `dates` (query, optional, string) — Date range YYYYMMDD-YYYYMMDD

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tennislive-api/v1/scoreboard?tour=atp"
```

**Response:**
```json
{
    "data": {
        "tour": "atp",
        "count": 3,
        "tournaments": [
            {
                "id": "172-2026",
                "date": "2026-05-18T04:00Z",
                "name": "Roland Garros",
                "status": "Final",
                "matches": [],
                "match_count": 0
            },
            {
                "id": "49-2026",
                "date": "2026-06-06T04:00Z",
                "name": "Boss Open",
                "status": "Final",
                "matches": [],
                "match_count": 0
            },
            {
                "id": "415-2026",
                "date": "2026-06-06T04:00Z",
                "name": "Libéma Open",
                "status": "Final",
                "matches": [],
                "match_count": 0
            }
        ]
    },
    "meta": {
        "timestamp": "2026-06-08T01:20:05.071Z",
        "request_id": "bfb0e9aa-b98d-4a73-80d4-f14a6a2b5abf"
    },
    "status": "ok",
    "message": "Scoreboard retrieved successfully",
    "success": true
}
```

### Players

#### `GET /v1/player` — Player profile

**Parameters:**
- `tour` (query, optional, string) — atp or wta Example: `atp`
- `id` (query, required, string) — Player id Example: `3623`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tennislive-api/v1/player?tour=atp&id=3623"
```

**Response:**
```json
{
    "data": {
        "player": {
            "id": "3623",
            "age": 24,
            "hand": {
                "type": "RIGHT",
                "abbreviation": "R",
                "displayValue": "Right"
            },
            "name": "Jannik Sinner",
            "height": "6' 3\"",
            "weight": "170 lbs",
            "last_name": "Sinner",
            "first_name": "Jannik",
            "date_of_birth": "16/8/2001"
        }
    },
    "meta": {
        "timestamp": "2026-06-08T01:20:05.571Z",
        "request_id": "83bc494d-5db5-4b57-86bd-97b2767cbbd2"
    },
    "status": "ok",
    "message": "Player retrieved successfully",
    "success": true
}
```

#### `GET /v1/search` — Search players

**Parameters:**
- `query` (query, required, string) — Player name Example: `djokovic`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tennislive-api/v1/search?query=djokovic"
```

**Response:**
```json
{
    "data": {
        "count": 12,
        "query": "djokovic",
        "players": [
            {
                "id": "4a27bb1c-2422-55c3-208b-9e9d8c1f30af",
                "name": "Novak Djokovic",
                "image": "https://a.espncdn.com/i/headshots/tennis/players/full/296.png"
            },
            {
                "id": "050a7454-6819-35d3-bac5-a76f208518a3",
                "name": "Lazar Djokovic",
                "image": "https://a.espncdn.com/i/headshots/mens-college-basketball/players/full/5175368.png",
                "subtitle": "VCU Rams"
            },
            {
                "id": "0ea47a77-6590-a2b4-d1b4-daa9e8679e3c",
                "name": "Aleksandar Djokovic",
                "subtitle": "Otelul Galati"
            },
            {
                "id": "440f15ef-7fb7-b056-4025-e9abcd5cd2f9",
                "name": "Nikola Djokovic",
                "subtitle": "Northwest University Eagles"
            },
            {
                "id": "64fba509-cd48-31c6-9526-2ba2da358b89",
                "name": "Adriana Djokovic",
                "subtitle": "West Alabama Tigers"
            },
            {
                "id": "6bbeb064-7d54-3086-93a3-3642a8f63e18",
                "name": "Adriana Djokovic",
                "image": "https://a.espncdn.com/i/headshots/womens-college-basketball/players/full/5108003.png",
                "subtitle": "Sam Houston Bearkats"
            },
            {
                "id": "a1fe1a8f-6990
…(truncated, see openapi.json for full schema)
```

### News

#### `GET /v1/news` — Tennis news

**Parameters:**
- `tour` (query, optional, string) — atp or wta Example: `atp`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tennislive-api/v1/news?tour=atp"
```

**Response:**
```json
{
    "data": {
        "tour": "atp",
        "count": 6,
        "articles": [
            {
                "link": "https://www.espn.com/video/clip/_/id/48994638/zverev-wins-first-grand-slam-title-five-set-thriller",
                "image": "https://a.espncdn.com/media/motion/2026/0607/dm_260607_Tennis_Highlight_Zverev_wins_his_first_Grand_Slam_title_in_five_set_thriller_20260608_AUS_ONLY/dm_260607_Tennis_Highlight_Zverev_wins_his_first_Grand_Slam_title_in_five_set_thriller_20260608_AUS_ONLY.jpg",
                "headline": "Zverev wins his first Grand Slam title in five-set thriller",
                "published": "2026-06-07T21:51:57Z",
                "description": "Alexander Zverev defeats Flavio Cobolli in the 2026 Roland-Garros men's final to claim his maiden Grand Slam championship."
            },
            {
                "link": "https://www.espn.com/video/clip/_/id/48994311/alexander-zverev-reflects-winning-french-open",
                "image": "https://a.espncdn.com/media/motion/2026/0607/dm_260607_Alexander_Zverev_reflects_after_winning_French_Open/dm_260607_Alexander_Zverev_reflects_after_winning_French_Open.jpg",
                "headline": "Alexander Zverev reflects after winning French Open",
                "published": "2026-06-07T21:08:37Z",
                "description": "Alexander Zverev reflects after winning French Open"
            },
            {
                "link": "https://www.espn.com/tennis/story/_/id/48992839/french-open-champion
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Spec

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tennislive-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "service": "tennislive-api",
        "endpoints": {
            "GET /v1/meta": "This document.",
            "GET /v1/news": "Tennis news (tour=).",
            "GET /v1/player": "Player profile by id (tour=, id=).",
            "GET /v1/search": "Search players by name.",
            "GET /v1/rankings": "Player rankings (tour=atp|wta).",
            "GET /v1/scoreboard": "Tournaments & live matches (tour=, dates=)."
        },
        "description": "Tennis (ATP & WTA) live data: player rankings with points, the tournament scoreboard with live matches, player profiles, player search and news. Real live data, no key."
    },
    "meta": {
        "timestamp": "2026-06-08T01:20:06.085Z",
        "request_id": "e61b2ef8-1c4f-459f-af4f-2441f6dd9346"
    },
    "status": "ok",
    "message": "Meta",
    "success": true
}
```


---
Marketplace page: https://www.oanor.com/api/tennislive-api
OpenAPI spec: https://www.oanor.com/api/tennislive-api/openapi.json
