curl --request GET \
--url https://api.apinn.io/api/updated \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.apinn.io/api/updated"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.apinn.io/api/updated', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apinn.io/api/updated",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.apinn.io/api/updated"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.apinn.io/api/updated")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apinn.io/api/updated")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"snapshot": false,
"token": "2026-07-24T15:37:12",
"since": "2026-07-24T15:36:48",
"server_time": "2026-07-24T15:37:13",
"window_seconds": 25,
"count": 168,
"odds": [
{
"event_id": 1632814492,
"period": 0,
"market": "moneyline",
"line": null,
"odds1": 2.53,
"odds0": null,
"odds2": 1.5464,
"line_id": "1632814492:ml0",
"status": "open",
"timestamp": "2026-07-24T15:36:53"
}
]
}Cotes modifiées depuis un curseur (delta)
Renvoie uniquement les lignes changées depuis le curseur. Le curseur est soit un horodatage, soit un token délivré par /api/snapshot qui transporte le périmètre. Sans since, répond 400 : pour obtenir un état complet, utilisez /api/snapshot.
Les todds sont recalculées depuis les cotes brutes selon le modèle sélectionné. Le token ne conserve pas le modèle : répéter model à chaque appel updated. Après un changement de modèle, reprendre un snapshot complet.
curl --request GET \
--url https://api.apinn.io/api/updated \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.apinn.io/api/updated"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.apinn.io/api/updated', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apinn.io/api/updated",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.apinn.io/api/updated"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.apinn.io/api/updated")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apinn.io/api/updated")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"snapshot": false,
"token": "2026-07-24T15:37:12",
"since": "2026-07-24T15:36:48",
"server_time": "2026-07-24T15:37:13",
"window_seconds": 25,
"count": 168,
"odds": [
{
"event_id": 1632814492,
"period": 0,
"market": "moneyline",
"line": null,
"odds1": 2.53,
"odds0": null,
"odds2": 1.5464,
"line_id": "1632814492:ml0",
"status": "open",
"timestamp": "2026-07-24T15:36:53"
}
]
}Autorisations
Paramètres de requête
Horodatage UTC (2026-07-27T02:30:00) ou token renvoyé par /api/snapshot.
Ignoré si le token porte déjà un périmètre.
Ignoré si le token porte déjà un périmètre.
Ignoré si le token porte déjà un périmètre.
Liste séparée par des virgules. Ignoré si le token porte déjà un périmètre.
Liste séparée par des virgules. Ignoré si le token porte déjà un périmètre.
Modèle de retrait de marge, insensible à la casse. MPTO = Margin Proportional To Odds (alias additive, margin_proportional_to_odds) ; EM = Equal Margin (multiplicative, equal_margin) ; LOG = Logarithmic / Buchdahl (power, logarithmic) ; SHIN = Shin ; OR = Odds Ratio (odds_ratio, oddsratio). Priorité : modèle valide demandé > préférence valide du compte > MPTO. Une valeur inconnue utilise la préférence ou le défaut. Voir /concepts/true-odds pour les formules.
Réponse
Delta des cotes.