TheRundown
  1. Home
  2. Blog
  3. API buying guide

API buying guide

Size an odds API plan with measured data points

Use the X-Datapoints header to estimate sports odds API usage, check daily and monthly limits, and choose the delivery and display rights your project needs.

· 3 min read

Start with a measurement, then choose your freshness and display rights. A provider’s request count and TheRundown’s data points are different units. This worked example shows the arithmetic without presenting it as customer usage or a promise about your future bill.

Measure a narrow request

Follow the quickstart with a Free key and select an upcoming date. Free supports five-minute-delayed pre-match main lines from DraftKings, BetMGM and FanDuel; its limits are 20,000 points per UTC day and 200,000 per UTC calendar month.

Save response headers with the JSON. Use a server-side environment variable for your key; do not put it in browser code or URLs.

# Choose a date with upcoming NFL regular-season events.
EVENT_DATE=2026-10-18
curl --fail-with-body --silent --show-error \
  --header "X-TheRundown-Key: $THERUNDOWN_API_KEY" \
  --dump-header response-headers.txt \
  --output events.json \
  "https://therundown.io/api/v2/sports/2/events/$EVENT_DATE?market_ids=1,2,3&affiliate_ids=19,22,23&main_line=true&hide_closed=true"

The date is an example, not a guaranteed slate. Check the status and response before continuing. Read X-Datapoints from that response; a missing header is unknown usage, not zero. Event responses include non-odds rows as well as returned price rows. An expanded prop or alternate-line request can return a different count.

A reproducible 30-day example

Suppose a measured response reports 200 data points and your application makes 96 comparable requests per day. That is 19,200 points per day and 576,000 over 30 days. The daily figure fits Free, but the 30-day figure exceeds its monthly allowance.

This Python script reads your saved header and performs the calculation locally. Change the request frequency and projection length to match your workload. It makes no network calls and prints no API key.

from pathlib import Path

headers = Path("response-headers.txt").read_text()
values = [
    line.split(":", 1)[1].strip()
    for line in headers.splitlines()
    if line.lower().startswith("x-datapoints:")
]
if not values or not values[-1].isascii() or not values[-1].isdigit():
    raise SystemExit("A numeric X-Datapoints header is required")

points_per_response = int(values[-1])
requests_per_day = 96
projection_days = 30
per_day = points_per_response * requests_per_day
print(f"Daily projection: {per_day:,} data points")
print(f"{projection_days}-day projection: {per_day * projection_days:,} data points")

For the example header X-Datapoints: 200, the output is:

Daily projection: 19,200 data points
30-day projection: 576,000 data points

Actual UTC calendar months have 28–31 days. Missing prices, changing event counts, retries, additional endpoints and live updates change consumption. Measure several representative responses across the workload and include those differences. The snapshot usage estimator lets you explore explicit assumptions; actual response headers and account meters remain authoritative.

Choose features and rights as well as volume

Your requirement Starting monthly plan Important boundary
Delayed pre-match main lines from three books, within both caps Free, $0 Five-minute delay; internal or personal use
More published sources, props or in-play REST for internal or personal use Starter, $49 60-second delay; 25 million monthly points; no WebSocket
Commercial end-user display or opening and closing lines Pro, $149 30-second delay; 125 million monthly points; no WebSocket
Real-time REST or WebSocket delivery Ultra, $399 500 million monthly points; one connection and three subscriptions

A quota fit does not establish feature eligibility, source coverage or permission to display data to your customers. Check your required sources, sport, market and event scope on actual responses. Additional volume and concurrent connections are available on Super, Mega and Max; Enterprise is contact-sales.

Monthly and annual self-serve paid plans start hard-capped; optional overage requires opt-in. Weekly plans have separate metered-overage terms. Narrowing requests conserves included points but does not reduce the subscription’s fixed fee. See the current plans and usage rules.

Validate the integration before switching

Compare event identity, market period, participant, signed line, price format, open/closed state and effective data delay. Preserve closed_at as the closure signal; an old update timestamp alone does not close a price. A REST snapshot estimate cannot be reused as a WebSocket update estimate.

Use the existing migration guides for The Odds API, OpticOdds and SportsGameOdds, then compare the same bounded scope before cutting over. No customer benchmark, equal-coverage claim or universal credit conversion is implied by this worked example.

Questions

How do I estimate sports odds API usage?
Measure the actual X-Datapoints header on representative requests, multiply by how often each request runs, and check both the daily and monthly allowance. A sample snapshot is not a prediction of every future response.
Does the smallest plan that fits my usage include every feature?
No. Free and Starter are for internal or personal use. Commercial end-user display and opening/closing lines start on Pro. Real-time REST and WebSocket require Ultra or above. Coverage and volume must also fit.
Can I estimate WebSocket usage from REST snapshot frequency?
No. Repeated REST snapshots bill their returned rows, while streaming usage depends on delivered updates. Measure the transport and scope you will actually run.

Choose the plan that fits your application.

Starter provides 60-second delayed REST for internal or personal use. Pro adds commercial display and opening/closing lines. Ultra adds real-time REST and WebSocket. Free stays $0, no card required.