The homepage's featured games
using System.Net.Http.Headers;var client = new HttpClient();var request = new HttpRequestMessage{ Method = HttpMethod.Get, RequestUri = new Uri("https://oddslink.app/v1/public/featured"),};using (var response = await client.SendAsync(request)){ response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body);}package main
import ( "fmt" "net/http" "io")
func main() {
url := "https://oddslink.app/v1/public/featured"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(res) fmt.Println(string(body))
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder() .url("https://oddslink.app/v1/public/featured") .get() .build();
Response response = client.newCall(request).execute();const url = 'https://oddslink.app/v1/public/featured';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://oddslink.app/v1/public/featuredUp to three cards for the homepage: the busiest sports right now (fixtures times books), each with its next big upcoming game (never one in play), moneyline only, five books a card with the best price per side flagged. cards is empty when nothing qualifies. No API key; cached a few seconds; per-address rate limited.
Responses
Section titled “ Responses ”The featured cards, possibly none.
object
One homepage card. columns are the sides in display order: away then home, or for soccer home, Draw, away. Each row’s prices and best follow that order.
object
Short display title
Always “h2h” today.
object
Short header for the column.
object
A link to this fixture on the bookmaker’s own website. Present only when the bookmaker gives one; the field is absent otherwise, never empty or null. Some bookmakers link to the competition page rather than the single event. This is an event-page link; it does not select an outcome or populate a bet slip.
Example
{ "cards": [ { "rows": [ { "link": "https://sports.nj.betmgm.com/en/sports/events/carolina-panthers-at-atlanta-falcons-17042931" } ] } ]}Headers
Section titled “Headers”Requests used this billing period.
Requests remaining this billing period.
What this one call cost against the allowance (0 for a free call).
This plan’s speed limit, in requests per second.
Requests left in the current one-second window.
Seconds until the speed-limit window resets.
This request’s id, for support and for matching against error.request_id.
Too many board requests from this address.
object
object
Stored Unix-second choices on AMBIGUOUS_EVENT or INVALID_STORED_COMMENCE_TIME; independent of dateFormat.
Valid case-sensitive book keys on INVALID_BOOKMAKER.
403 only: the plan on the presented key.
403 only: the lowest plan that includes this request. For history, that depends on how long ago the fixture started as well as on the endpoint.
Example
{ "error": { "code": "SPEED_LIMIT", "message": "Too many board requests; try again in a few seconds", "docs_url": "https://oddslink.app/docs/errors/#speed-limit", "request_id": "req_01J8Z5Q2K9V3N7M4" }}Headers
Section titled “Headers”Requests used this billing period.
Requests remaining this billing period.
What this one call cost against the allowance (0 for a free call).
This plan’s speed limit, in requests per second.
Requests left in the current one-second window.
Seconds until the speed-limit window resets.
This request’s id, for support and for matching against error.request_id.
Seconds to wait before retrying on 429 SPEED_LIMIT or 503 ODDS_UNAVAILABLE.