Sports data for a startup, from prototype to scale
Founders and small teams building a sports product.
One key covers 29 leagues and every endpoint. Prototype for free, start a paid plan with a 7-day trial when you launch, and change plans from the dashboard as usage grows. No minimum term.
Updated 2026-11-04. Data is aggregated from public sources and is typically 20-30 seconds behind live play (about 1 second after our source). There is no SLA.
Prototype for free
The Free plan has every data endpoint, a WebSocket preview and no card: 1,000 calls in the first 30 days, then 125 a month. Use the OpenAPI spec, the Postman collection or the MCP server to explore from your editor.
First call
curl -H "Authorization: Bearer $RSA_API_KEY" \
"https://www.realtimesportsapi.com/api/v1/sports/basketball/leagues/nba/events"Launch and grow
Paid plans start with a 7-day trial. Upgrade in place from the dashboard; the price difference is prorated. Monthly plans can opt in to overage at $2 per 1,000 beyond the plan, capped at $25 a month by default (you can change the cap), so a viral day does not take your app down. Annual billing gives two months free.
Every response carries X-RateLimit-* headers, and from 80% of your pool X-Usage-Warning and meta.usageNotice tell your code before you hit the limit. Over the limit, requests return 429 with Retry-After and an upgrade link.
Watch your quota from code
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.RSA_API_KEY}` } });
const warn = res.headers.get('X-Usage-Warning');
if (warn) alertOps(`Sports API usage: ${warn}`); // time to upgrade before users notice
if (res.status === 429) await sleep(Number(res.headers.get('Retry-After') || 1) * 1000);Design for cost from day one
Call the API from your backend, cache scoreboards for 30-60 seconds, and use webhooks or WebSocket instead of polling for live changes. Your usage then grows with the number of games you follow, not the number of users you have.
Know the limits before you build
Data is typically 20-30 seconds behind live, there is no SLA, and coverage differs by league (for example, no NHL box scores). Check the support matrix and status page before you commit a feature to a league.
Endpoints used
GET /sports/{sport}/leagues/{league}/eventsPOST /webhooksPOST /websocket/auth
Full reference: docs · OpenAPI · what each endpoint returns, by league
Plans
| Plan | Price | Calls | Rate | WebSocket | Webhooks |
|---|---|---|---|---|---|
| Free | $0 | 125/mo (1,000 first 30 days) | 1/s | 500 msgs/mo | No |
| Starter | $29/mo ($290/yr) | 10,000/mo | 5/s | Shares monthly pool | Shares monthly pool |
| Growth | $49/mo ($490/yr) | 25,000/mo | 10/s | Shares monthly pool | Shares monthly pool |
| Pro | $99/mo ($990/yr) | 50,000/mo | 20/s | 100,000 msgs/mo | 25,000/mo |
| Business | $179/mo ($1,790/yr) | 150,000/mo | 40/s | 300,000 msgs/mo | 75,000/mo |
| Scale | $299/mo ($2,990/yr) | 500,000/mo | 100/s | 500,000 msgs/mo | 100,000/mo |
Every successful REST call counts as one call. Over the limit you get HTTP 429 with a Retry-After header. No SLA. Full pricing.
FAQ
- Is there a contract or minimum term?
- No. Plans are monthly or annual and you can change or cancel from the dashboard.
- What happens if we go over our plan?
- Without overage, requests return HTTP 429 with Retry-After until the next calendar month (UTC). With overage on a monthly plan, extra calls cost $2 per 1,000 up to your cap.
- Is there an SLA?
- No. Status and per-league polling lag are public on the status page.
- What is the largest plan?
- Scale: 500,000 calls a month, 100 requests per second and 25 WebSocket connections. Larger volumes are a conversation by email.