Pagination and limits
These endpoints take limit and offset and return a paginated
envelope with data, pagination and plan. The rest
return their result directly.
| Paginated | Not paginated |
|---|---|
|
teams, everything addressed by an id, plus head to head, last five games and lineups. |
The envelope
A paginated response wraps its results in data and adds two objects.
dataobject[]requiredThe results themselves. The shape depends on the endpoint.
paginationPaginationResponserequiredHow many results exist and where this page sits.3 fields
totalCountnumberrequiredResults matching your query, not the number returned on this page.
offsetnumberrequiredThe offset this page was fetched at.
limitnumberrequiredThe page size used.
planPlanResponserequiredYour current API subscription tier, and a message explaining it.2 fields
tierstringrequiredYour current API subscription tier.
messagestringrequiredExplanation message regarding your current tier.
Example response
{
"data": [
"..."
],
"pagination": {
"totalCount": 490,
"offset": 20,
"limit": 100
},
"plan": {
"tier": "BASIC",
"message": "Some results might be hidden with FREE tier. Check your API coverage for more information: https://rapidapi.com/highlightly-api-highlightly-api-default/api/sport-highlights-api/details"
}
}
Paging through results
limit sets the page size and offset skips that many results.
Page by holding limit steady and advancing offset until you
have covered totalCount.
const key = process.env.HIGHLIGHTLY_API_KEY
const limit = 40
const all = []
let offset = 0
let total = Infinity
while (offset < total) {
const url = `https://nhl.highlightly.net/highlights?leagueName=NHL&limit=${limit}&offset=${offset}`
const response = await fetch(url, {
headers: { 'x-rapidapi-key': key }
})
if (!response.ok) {
throw new Error(`Highlightly responded ${response.status}`)
}
const { data, pagination } = await response.json()
all.push(...data)
total = pagination.totalCount
offset += limit
}
totalCount is the number of results matching your query, not the number on
the current page, so it is the value to page against.
Your plan
Every paginated response carries a plan object. plan.tier is
your current API subscription tier, and plan.message explains it. With
tier set to BASIC, the message looks like the example below.
Some results might be hidden with FREE tier. Check your API coverage for more information.
The full message ends with a link to your coverage details.
Three endpoints are affected on the Basic and Free plans. Highlights might have certain restrictions, and odds and geo restrictions are not available at all. The same restrictions apply with an All Sports API subscription.
Plans and their limits are listed on the NHL API page and the All Sports API page.
Rate limits
Two response headers track your quota.
| Header | Meaning |
|---|---|
x-ratelimit-requests-limit |
Requests your plan allows. Static. |
x-ratelimit-requests-remaining |
Requests left. At zero, requests fail until the daily quota resets. |
Paging a large result set spends quota quickly, since each page is one request. Use the
largest limit each endpoint allows, and cache results whose refresh
interval is measured in hours rather than minutes.
| Endpoint | Maximum limit | Default |
|---|---|---|
| matches | 100 | 100 |
| highlights | 40 | 40 |
| players | 1000 | 1000 |
| odds | 5 | 5 |
| bookmakers | 100 | 20 |
| standings | 10 | 10 |
On an All Sports API subscription, one quota covers every sport. NHL and college hockey requests draw on the same allowance as requests to any other sport, so paging a large result set here also reduces what is left for the rest.