sportsapi.dev Get an API key

Getting started

The API is available through two base URLs. Pick one, add your key, and every endpoint works the same way.

Base URLs

Where you subscribeBase URLBest for
RapidAPIhttps://Teams that already use RapidAPI billing and its key management
NosyAPI directDirect contract and invoicing with the provider

Append an endpoint path to the base URL, for example /sports-tv/matches. Responses are identical on both.

Authentication

RapidAPI

Send two headers with every request. Your key is on the RapidAPI endpoint page after you subscribe.

X-RapidAPI-Key: YOUR_RAPIDAPI_KEY
X-RapidAPI-Host: sports-tv-guide-api.p.rapidapi.com

NosyAPI direct

Send the key from your NosyAPI account panel with each request, as shown in the code examples when you choose "NosyAPI direct".

Keep your key on your server. If a browser or mobile app needs the data, call the API from your backend and pass the result on, so the key never reaches the client.

First request

Today's matches on UK television, with times in London:

Conventions

TopicRule
TimesstartUtc is always UTC (ISO 8601). date and time use the timezone you send; the default is Europe/Istanbul.
Daysdate sets the first day and days (1 to 8) how many days to return.
Statusscheduled, live or finished.
ScoresOnly for finished matches; otherwise null.
Country codesChannel countries are three uppercase letters, such as GBR. Parameters are case-insensitive.
League country vs broadcast countrycountry=England filters by the league's country. channelCountry=GBR filters by where the match is shown.
Logos and linksMay be null.
Languagelang=en (default) or lang=tr for team and sport names.

Pagination

List endpoints return pagination and data. Use page and perPage (default 50, maximum 100).

{
  "pagination": { "total": 214, "per_page": 50, "current_page": 1, "last_page": 5, "from": 1, "to": 50 },
  "data": [ ... ]
}

Errors

An invalid parameter returns a failure status with a message that names the parameter. Errors and empty results are not charged.

CauseMessage
Unknown langInvalid lang parameter (en, tr).
Unknown timezoneInvalid timezone (e.g. Europe/Istanbul).
Malformed dateInvalid date (YYYY-MM-DD).
days outside 1 to 8days must be between 1 and 8.
Unknown statusInvalid status (scheduled, live, finished).
Non-numeric IDInvalid leagueID / teamID / channelID / detailsID.
Short or missing searchSearch must be at least 2 characters.

FAQ

How often is the data refreshed?

Today's matches are refreshed several times an hour. Later days are refreshed less often, since their schedules change less.

Why does a match have no channels for my country?

It is not broadcast there, or no broadcaster has been announced yet. Listings are added as match day approaches.

How do I get a team's or league's ID?

Search with /sports-tv/teams?search= or /sports-tv/leagues?search=, then pass the ID to /sports-tv/matches.

Which timezone should I send?

Your users' timezone, such as Europe/London or America/New_York. It decides which matches count as today.

Can I call the API from a browser?

Call it from your server instead, so your key stays private. Cache responses for a minute or two to save requests.