Skip to main content
Skip to content
Sport on PropSportsSelf-serve checkoutTennis

PropSports Tennis API

689K stored matches, head-to-head, Tennis DNA and live scores.

25Tennis routes in production (live)
2keyless routes

Overview

Tennis across ITF, WTA, ATP and the Slams: 689,427 stored matches, head-to-head, Tennis DNA and Matchup DNA, venues and live scores, with per-response freshness metadata.

Archive689,427 matches across ITF, WTA, ATP and the Slams.
Head-to-headPlayer vs player history.
DNATennis DNA and Matchup DNA.
LiveLive matches across every tour and event type.

Coverage & limits

Tennis on the shared PropSports contract.

  • Women dense from 2000; men from 2007
  • No ATP Challenger
  • ATP live is game-level only (no point score or server)
  • Point-by-point currently AO 2026 only
Single Sport · Tennis
Every tennis route on one key.
$29/mo
50,000 requests / day
  • All tennis routes
  • 50,000 requests / day
Developer
Pick any one to three sports.
$79/mo
100,000 requests / day
  • Choose 1-3 sports at checkout
  • 100,000 requests / day
POPULAR
All Sports
All eight sports on one key.
$149/mo
200,000 requests / day
  • All 8 sports
  • 200,000 requests / day
Pro
Production volume across every sport.
$299/mo
500,000 requests / day
  • All 8 sports
  • 500,000 requests / day
PlanMonthlyRequestsSports
Single Sport · Tennis$2950,000 requests / dayTennis
Developer$79100,000 requests / dayAny 1–3
All Sports$149200,000 requests / dayAll 8
Pro$299500,000 requests / dayAll 8

API explorer

Endpoints, code and real responses

curl "https://propsports.proptechusa.ai/v1/tennis/live"
Keyless production route · real response
Example response200captured from production 2026-10-28 · arrays and long strings trimmed
{
  "data_source": "PropSports",
  "ok": true,
  "data": [
    {
      "id": "79828453-fb8c-5ff3-9014-628eab8f5926",
      "event_type": "WS",
      "round": "M-1",
      "format": "BO3_TB7",
      "status": "in_progress",
      "winner_side": null,
      "end_reason": null,
      "score": "0-6 6-6",
      "duration_s": 5180,
      "scheduled_at": null,
      "court": null,
      "schedule_note": null,
      "schedule_basis": null,
      "time_confidence": null,
      "schedule_day": {
        "day": "2026-10-28",
        "utc_offset": "+02:00",
        "source": "wta_order_of_play",
        "raw": {
          "field": "MatchTimeStamp",
          "value": "2026-10-28T12:00+02:00",
          "corroborated_by": "{…}"
        }
      },
      "live": {
        "point": {
          "A": "2",
          "B": "1"
        },
        "server": "B"
      },
      "sets": [
        {
          "A": 0,
          "B": 6,
          "tb": null,
          "match_tiebreak": false,
          "winner": "B"
        },
        {
          "A": 6,
          "B": 6,
          "tb": null,
          "match_tiebreak": false,
          "winner": null
        }
      ],
      "sides": {
        "A": {
          "participant_key": "S:2efe17fb-eda1-58fb-9022-7905403ce83e",
          "seed": null,
          "entry_type": null,
          "players": [
            "{…}"
          ]
        },
        "B": {
          "participant_key": "S:fde5fd92-7ab9-5674-a72c-b45dac1fd9af",
          "seed": 5,
          "entry_type": null,
          "players": [
            "{…}"
          ]
        }
      },
      "…": "5 more fields"
    },
    {
      "id": "9bd3a756-871b-58ca-b667-6817566bb47a",
      "event_type": "WS",
      "round": "M-1",
      "format": "BO3_TB7",
      "status": "in_progress",
      "winner_side": null,
      "end_reason": null,
      "score": "6-7(2) 1-2",
      "duration_s": 5269,
      "scheduled_at": null,
      "court": null,
      "schedule_note": null,
      "schedule_basis": null,
      "time_confidence": null,
      "schedule_day": {
        "day": "2026-10-28",
        "utc_offset": "+02:00",
        "source": "wta_order_of_play",
        "raw": {
          "field": "MatchTimeStamp",
          "value": "2026-10-28T12:00+02:00",
          "corroborated_by": "{…}"
        }
      },
      "live": {
        "point": {
          "A": "0",
          "B": "15"
        },
        "server": "A"
      },
      "sets": [
        {
          "A": 6,
          "B": 7,
          "tb": "{…}",
          "match_tiebreak": false,
          "winner": "B"
        },
        {
          "A": 1,
          "B": 2,
          "tb": null,
          "match_tiebreak": false,
          "winner": null
        }
      ],
      "sides": {
        "B": {
          "participant_key": "S:2018244e-7010-5883-906a-0491899815ca",
          "seed": null,
          "entry_type": null,
          "players": [
            "{…}"
          ]
        },
        "A": {
          "participant_key": "S:3ca46be5-ea36-580a-8a6e-67298ff000cc",
          "seed": null,
          "entry_type": "Q",
          "players": [
            "{…}"
          ]
        }
      },
      "…": "5 more fields"
    },
    "… 2 more"
  ],
  "meta": {
    "data_source": "PropSports",
    "fetched_at": "2026-10-28T12:34:32.817Z",
    "source_updated_at": "2026-10-28T12:34:18.662+00:00",
    "age_s": 14,
    "freshness": "CURRENT",
    "degraded": [],
    "deprecated": {
      "meta.source": "upstream source families, compatibility only; use meta.data_source. Removed in a future versioned contract.",
      "data.external_ids": "upstream crosswalk ids, compatibility only; use data.id / data.slug (PropSports canonical). Removed in a future versioned contract."
    }
  }
}

All 25 Tennis routes

Read live from the production route catalog.

/v1/tennis/today
/v1/tennis/live
/v1/tennis/matches/:id
/v1/tennis/tournaments
/v1/tennis/tournaments/:slug/:year
/v1/tennis/players
/v1/tennis/players/:slug
/v1/tennis/players/:slug/dna
/v1/tennis/rankings
/v1/tennis/h2h/:a/:b
/v1/tennis/schedule
/v1/tennis/sources
/v1/tennis/men
/v1/tennis/men/players
/v1/tennis/slams
/v1/tennis/pbecast/:id
/v1/tennis/matchups
/v1/tennis/matchups/:id
/v1/tennis/players-to-watch
/v1/tennis/dna/leaders
/v1/tennis/players/:slug/profile
/v1/tennis/search
/v1/tennis/venues/:slug
/v1/tennis/matches/:id/broadcast
/v1/tennis/coverage

Live status

What production reports right now

The gateway check proves the shared PropSports gateway answered; it does not prove this sport’s feeds are fresh. Feed and source checks read this sport’s own freshness metadata or source canary.