---
title: "Returns the archived match statistics for one completed tennis match: serve, return, break point and point totals for both players."
method: GET
path: "/api/v1/history/tennis-stats"
tags: ["Historical data"]
---

# Returns the archived match statistics for one completed tennis match: serve, return, break point and point totals for both players.

`GET /api/v1/history/tennis-stats`

## Request

- Base URL: `https://api.owlsinsight.com`
- URL: `https://api.owlsinsight.com/api/v1/history/tennis-stats`
- Auth: HTTP bearer

Returns the archived match statistics for one completed tennis match: serve, return, break point and point totals for both players.

Historical endpoints share a per-key in-flight limit that is lower than the general concurrent-request limit. A request beyond it returns 429 with a Retry-After header giving the delay in seconds; wait that long and resend.

503 with a Retry-After header means the archive could not serve that request: the query was too expensive to run in one request, or the archive read path was busy. Wait the indicated seconds before resending; if it repeats, narrow the request with the filters this endpoint accepts.

Pass the event's eventId field, the {sport}:{away}@{home}-{YYYYMMDD} form. The numeric id field beside it is the sportsbook's own and returns 400 here rather than an empty result. The date in eventId is the UTC start date, except for MLB games starting from 2026-10-11T10:00Z, which carry the US Eastern date; earlier MLB games keep the UTC date. Before that change, an MLB game starting at 8 PM ET or later and the next day's game between the same teams could share one eventId. NBA and NHL stay UTC-dated. NBA has about one pair of games a season sharing an eventId. NHL has about one pair a season of the same teams on one date, home and away swapped: two eventIds, but the /api/v1/history endpoints match both orderings, so each id returns both games' rows.

## Query parameters

- `eventId` string, required

## Response `200`

OK

- TennisStatsResponse
  - `data` object
    - `count` number, double
    - `eventId` string
    - `stats` TennisMatchStats[]
      - `aces` TennisStatLine
        - `away` number, double
        - `home` number, double
      - `breakPointsConverted` TennisStatLine
        - `away` number, double
        - `home` number, double
      - `breakPointsSaved` TennisStatLine
        - `away` number, double
        - `home` number, double
      - `doubleFaults` TennisStatLine
        - `away` number, double
        - `home` number, double
      - `firstServePercent` TennisStatLine
        - `away` number, double
        - `home` number, double
      - `firstServePointsWon` TennisStatLine
        - `away` number, double
        - `home` number, double
      - `recordedAt` string
      - `scope` string
      - `secondServePointsWon` TennisStatLine
        - `away` number, double
        - `home` number, double
      - `totalPointsWon` TennisStatLine
        - `away` number, double
        - `home` number, double
      - `unforcedErrors` TennisStatLine
        - `away` number, double
        - `home` number, double
      - `winners` TennisStatLine
        - `away` number, double
        - `home` number, double
  - `success` boolean

---

[API](https://skmtc.dev/owlsinsight/apis/owls-insight-api.md) · [All operations](https://skmtc.dev/owlsinsight/apis/owls-insight-api/llms.txt) · [OpenAPI document](https://skmtc.dev/owlsinsight/apis/owls-insight-api/revisions/76c1ea016ff1?raw)
