Documentation de l'API football
Tout ce dont vous avez besoin pour intégrer des données football dans votre application : un démarrage rapide, chaque endpoint avec du code en cURL, Python, JavaScript et PHP, un spéc OpenAPI 3.1 et une collection Postman.
Démarrage rapide
Passez de zéro à des données football en direct en trois étapes. L'offre Free vous donne 2 000 requêtes par jour (14 000 par mois) sans carte bancaire.
- Créez un compte sur sportapi.ai (par e-mail ou Google).
- Copiez votre clé API depuis la page Clés API. Les clés commencent par
sk_live_. - Faites votre première requête. Le programme ci-dessous affiche les matchs du jour avec les scores en direct. Remplacez
YOUR_API_KEYet lancez-le.
curl "https://sportapi.ai/api/fixtures/date/2026-10-20" \
-H "X-Api-Key: YOUR_API_KEY"Résultat attendu : une ligne par match, par exemple Premier League: Arsenal 2-1 Leeds United (FT). Ensuite : consultez les événements, compositions et statistiques d'un match, le classement, ou recevez les scores en direct via le WebSocket.
Authentification
Chaque endpoint de données (matchs, équipes, classements, ligues, joueurs) nécessite votre clé API dans l'en-tête X-Api-Key. Créez une clé dans votre tableau de bord.
X-Api-Key: your_api_keycurl -H "X-Api-Key: your_api_key" https://sportapi.ai/api/fixtures/date/2026-10-10Les endpoints de compte (/api/auth/me, /api/profile) utilisent le jeton de connexion à la place : Authorization: Bearer your_token. Obtenez-en un depuis /api/auth/login ou la connexion Google.
Sans clé, « Essayez » sur les endpoints de données utilise l'accès limité en débit du site, afin que vous puissiez explorer avant de vous inscrire.
URL de base
https://sportapi.ai/apiTous les endpoints sont relatifs à cette URL de base. Une spécification OpenAPI 3.1 lisible par machine est disponible pour les générateurs de code et des outils comme Postman.
Réponses et limites
Les réponses sont au format JSON avec un indicateur success. Les erreurs incluent un statut HTTP et un message error : 401 clé manquante ou invalide, 404 non trouvé, 429 limite journalière ou mensuelle atteinte.
Limites de requêtes
Chaque offre a une limite de requêtes par jour qui se réinitialise à 00:00 UTC. L'offre Free a aussi une limite mensuelle de 14 000 requêtes par mois civil (UTC), à partir du 1er novembre 2026 ; les offres payantes n'ont pas de plafond mensuel. Chaque réponse vous indique où vous en êtes :
X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 9876
X-RateLimit-Reset: 1791763200 (Unix time of the next reset)
# Free plan, from 1 November 2026:
X-RateLimit-Month-Limit: 14000
X-RateLimit-Month-Remaining: 9120
X-RateLimit-Month-Reset: 1793491200 (00:00 UTC on the 1st of next month)Au-delà de la limite, vous recevez 429 avec un en-tête Retry-After (secondes jusqu'à la réinitialisation). Le corps JSON contient scope : day ou month, pour identifier quelle limite est atteinte.
Mise en cache avec ETag
Les réponses GET réussies incluent un ETag. Renvoyez-le dans If-None-Match et, si les données n'ont pas changé, vous obtenez un 304 Not Modified vide au lieu du corps complet — idéal pour le polling des matchs et des classements.
curl -H "X-Api-Key: your_api_key" -H 'If-None-Match: "d1c0f0ad5808c8d8a0f13108edd63278"' https://sportapi.ai/api/leagues/24Dates et heures
kickoff_utc et updated_at sont en UTC (ISO 8601). date et datetime sont en heure d'Europe centrale (CET/CEST), le fuseau horaire utilisé pour le calendrier des matchs.
Spécification OpenAPI & collection Postman
Ces deux fichiers décrivent chaque endpoint de données avec des paramètres, des schémas de réponse et de vrais exemples de réponses, et ils sont générés à partir de la même source, donc ils correspondent toujours à cette page.
apiKey sur la collection. Chaque requête a un exemple de réponse.pip install openapi-python-client
openapi-python-client generate --url https://sportapi.ai/api/openapi.jsonMatchs
Récupérez les données des matchs incluant les scores en direct, les événements et les résultats historiques.
status est l'un de Scheduled, LIVE, FT, AET, PENS, Postponed, Cancelled, Suspended ; pendant qu'un match est en direct, minute contient l'horloge ("HT" à la mi-temps). result est 1 victoire domicile, 0 match nul, -1 victoire extérieur (null jusqu'à la fin), et winner indique la même chose en mots, en tenant compte d'une séance de tirs au but (penalty_home/penalty_away).
Récupérer tous les matchs pour une date spécifique.
datestringDate au format AAAA-MM-JJcurl "https://sportapi.ai/api/fixtures/date/2026-10-20" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"date": "2026-10-10",
"data": [
{
"id": 13596176,
"home_id": 311,
"away_id": 352,
"date": "2026-10-10",
"datetime": "2026-10-10 13:30:00",
"kickoff_utc": "2026-10-10T11:30:00Z",
"updated_at": "2026-10-11T01:43:09Z",
"home_score": 2,
"away_score": 1,
"result": 1,
"status": "FT",
"minute": null,
"stage": "",
"league_id": 24,
"league_name": "Premier League",
"league_geo": "GB-ENG",
"league_zone": "England",
"home_team": "Arsenal",
"home_short": "Arsenal",
"home_logo": "espn-359.png",
"home_geo": "",
"away_team": "Leeds United",
"away_short": "Leeds",
"away_logo": "espn-357.png",
"away_geo": "",
"penalty_home": null,
"penalty_away": null,
"winner": "home"
}
]
}Récupérer les informations détaillées sur un match spécifique, y compris les événements du match.
idintegerID du matchcurl "https://sportapi.ai/api/fixtures/13596176" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"fixture": {
"id": 13596176,
"home_id": 311,
"away_id": 352,
"date": "2026-10-10",
"datetime": "2026-10-10 13:30:00",
"kickoff_utc": "2026-10-10T11:30:00Z",
"updated_at": "2026-10-11T01:43:09Z",
"home_score": 2,
"away_score": 1,
"ht_home": 0,
"ht_away": 0,
"result": 1,
"status": "FT",
"minute": null,
"stage": "",
"league_id": 24,
"league_name": "Premier League",
"league_geo": "GB-ENG",
"league_zone": "England",
"home_team": "Arsenal",
"home_short": "Arsenal",
"home_logo": "espn-359.png",
"home_geo": "",
"home_stadium": "Emirates Stadium",
"home_city": "London",
"home_coach": "Mikel Arteta",
"home_founded": 1886,
"away_team": "Leeds United",
"away_short": "Leeds",
"away_logo": "espn-357.png",
"away_geo": "",
"away_stadium": "Elland Road",
"away_city": "Leeds",
"away_coach": "Daniel Farke",
"away_founded": 1919,
"penalty_home": null,
"penalty_away": null,
"winner": "home",
"events": [
{
"event_type": "goal",
"team_side": "away",
"player_name": "J. Justin",
"minute": "55'",
"extra_info": "Goal"
},
{
"event_type": "yellow_card",
"team_side": "away",
"player_name": "A. Tanaka",
"minute": "36'",
"extra_info": null
}
]
}
}Récupérer uniquement les événements pour un match spécifique (buts, cartons, remplacements).
idintegerID du matchcurl "https://sportapi.ai/api/fixtures/13596176/events" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"fixture_id": 13596176,
"data": [
{
"id": 19194470,
"event_type": "goal",
"team_side": "away",
"player_name": "J. Justin",
"player_urn": "urn:bbc:sportsdata:football:player:s-6icypdqtfk2k81ax0i49j5xpl",
"minute": "55'",
"extra_info": "Goal"
},
{
"id": 18933975,
"event_type": "yellow_card",
"team_side": "away",
"player_name": "A. Tanaka",
"player_urn": "urn:bbc:sportsdata:football:player:s-28ucbvor6b0yxreoieehudfc9",
"minute": "36'",
"extra_info": null
}
]
}Récupérer les statistiques du match pour un match : tirs, passes, fautes, tacles, arrêts et cartons jaunes par équipe.
idintegerID du matchcurl "https://sportapi.ai/api/fixtures/13596176/stats" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"fixture_id": 13596176,
"available": true,
"data": {
"home": {
"shots": 13,
"shots_on_target": 6,
"shots_off_target": 7,
"fouls": 12,
"total_passes": 512,
"pass_accuracy": 85.3,
"tackles": 12,
"tackle_success": 66.7,
"saves": 4,
"yellow_cards": 1
},
"away": {
"shots": 11,
"shots_on_target": 5,
"shots_off_target": 6,
"fouls": 20,
"total_passes": 356,
"pass_accuracy": 78.9,
"tackles": 10,
"tackle_success": 60,
"saves": 4,
"yellow_cards": 4
}
}
}Récupérer les compositions de match, y compris les onze titains et les remplaçants des deux équipes.
idintegerID du matchcurl "https://sportapi.ai/api/fixtures/13596176/lineups" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"fixture_id": 13596176,
"available": true,
"data": {
"home": {
"starters": [
{
"name": "David Raya",
"position": "Goalkeeper",
"shirt": 1,
"is_captain": false,
"mins_played": 90
},
{
"name": "B. White",
"position": "Defender",
"shirt": 4,
"is_captain": false,
"mins_played": 63
}
],
"subs": [
{
"name": "P. Hincapié",
"position": "Substitute",
"shirt": 5,
"is_captain": false,
"mins_played": 8
}
]
},
"away": {
"starters": [
{
"name": "J. Trafford",
"position": "Goalkeeper",
"shirt": 1,
"is_captain": false,
"mins_played": 90
},
{
"name": "J. Bogle",
"position": "Midfielder",
"shirt": 2,
"is_captain": false,
"mins_played": 86
}
],
"subs": [
{
"name": "S. Longstaff",
"position": "Substitute",
"shirt": 8,
"is_captain": false,
"mins_played": 0
}
]
}
}
}Équipes
Accédez aux informations sur les équipes incluant les détails, l'effectif, les matchs et l'historique des trophées.
Récupérer les informations sur l'équipe avec les matchs récents et les ligues.
idintegerID de l'équipecurl "https://sportapi.ai/api/teams/311" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"team": {
"id": 311,
"name": "Arsenal",
"short_name": "Arsenal",
"league_id": 24,
"geo": "GB-ENG",
"country": "England",
"city": "London",
"coach_name": "Mikel Arteta",
"stadium_name": "Emirates Stadium",
"founded_year": 1886,
"logo_file": "espn-359.png"
},
"matches": [
{
"id": 16096707,
"home_id": 311,
"away_id": 10165,
"date": "2026-11-07",
"home_score": null,
"away_score": null,
"result": null,
"status": "Scheduled",
"league_id": 24,
"league_name": "Premier League",
"home_team": "Arsenal",
"away_team": "Hull City"
},
{
"id": 15868670,
"home_id": 162,
"away_id": 311,
"date": "2026-11-04",
"home_score": null,
"away_score": null,
"result": null,
"status": "Scheduled",
"league_id": 18,
"league_name": "UEFA Champions League",
"home_team": "Slavia Prague",
"away_team": "Arsenal"
}
],
"leagues": [
{
"id": 24,
"name": "Premier League"
},
{
"id": 18,
"name": "UEFA Champions League"
}
]
}Récupérer l'image du logo de l'équipe. Retourne PNG/SVG ou un bouclier par défaut.
idintegerID de l'équipecurl "https://sportapi.ai/api/teams/311/logo" \
-H "X-Api-Key: YOUR_API_KEY" \
-o logo.pngContent-Type: image/png
Binary image dataRécupérer une équipe par son slug URL, avec sa ligue, ses derniers résultats, ses matchs à venir et son effectif.
slugstringSlug de l'équipecurl "https://sportapi.ai/api/teams/slug/arsenal" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"team": {
"id": 311,
"name": "Arsenal",
"short_name": "Arsenal",
"slug": "arsenal",
"country": "England",
"city": "London",
"geo": "GB-ENG",
"founded_year": 1886,
"coach_name": "Mikel Arteta",
"stadium_name": "Emirates Stadium",
"logo_file": "espn-359.png",
"league": {
"id": 24,
"name": "Premier League",
"slug": "premier-league"
}
},
"results": [
{
"id": 13596176,
"date": "2026-10-10",
"home_score": 2,
"away_score": 1,
"status": "FT",
"result": 1,
"home_team": "Arsenal",
"home_slug": "arsenal",
"away_team": "Leeds United",
"away_slug": "leeds-united",
"league_name": "Premier League",
"league_slug": "premier-league"
}
],
"upcoming": [
{
"id": 13596702,
"date": "2026-10-13",
"datetime": "2026-10-13 21:00:00",
"status": "Scheduled",
"home_team": "Arsenal",
"home_slug": "arsenal",
"away_team": "Lille",
"away_slug": "lille",
"league_name": "UEFA Champions League"
}
],
"squad": [
{
"full_name": "David Raya",
"position": "Goalkeeper",
"jersey_number": 1,
"nationality": "ES",
"slug": "david-raya"
},
{
"full_name": "Kepa Arrizabalaga",
"position": "Goalkeeper",
"jersey_number": 13,
"nationality": "ES",
"slug": "kepa-arrizabalaga"
}
]
}Récupérer l'effectif des joueurs de l'équipe organisé par poste.
idintegerID de l'équipecurl "https://sportapi.ai/api/teams/311/squad" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"squad": [
{
"id": 4904,
"full_name": "David Raya",
"position": "Goalkeeper",
"jersey_number": 1,
"nationality": "ES",
"date_of_birth": "1995-09-15",
"height": null,
"weight": null
},
{
"id": 4903,
"full_name": "Kepa Arrizabalaga",
"position": "Goalkeeper",
"jersey_number": 13,
"nationality": "ES",
"date_of_birth": "1994-10-03",
"height": null,
"weight": null
}
]
}Récupérer l'historique des trophées et championnats de l'équipe.
idintegerID de l'équipecurl "https://sportapi.ai/api/teams/311/trophies" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"trophies": [
{
"year": 1994,
"position": 1,
"tournament_id": 26,
"name": "1994 UEFA Cup Winners' Cup Final",
"short_name": null,
"type": "domestic_league",
"country": null
},
{
"year": 1993,
"position": 1,
"tournament_id": 24,
"name": "1987 Football League Cup Final",
"short_name": null,
"type": "domestic_league",
"country": null
}
]
}Classements
Obtenez les tableaux des ligues et les données de forme des équipes.
Récupérer la liste de toutes les ligues disponibles avec les données de classement.
curl "https://sportapi.ai/api/standings/leagues" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"data": [
{
"id": 24,
"name": "Premier League",
"slug": "premier-league",
"zone": "England",
"geo": "GB-ENG"
},
{
"id": 1,
"name": "Spanish La Liga",
"slug": "spanish-la-liga",
"zone": "Spain",
"geo": "ES"
}
]
}Récupérer le tableau actuel de la ligue. La forme liste les 6 derniers matchs, du plus ancien au plus récent. Vous pouvez également passer le slug de la ligue (par exemple /api/standings/premier-league) ; la réponse inclut alors la ligue.
leagueIdintegerID de la ligue (ou slug)curl "https://sportapi.ai/api/standings/24" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"data": [
{
"position": 1,
"team": {
"id": 324,
"name": "Manchester City",
"short_name": "Man City",
"slug": "manchester-city",
"logo": "espn-382.png"
},
"played": 5,
"won": 5,
"draw": 0,
"lost": 0,
"goals_for": 13,
"goals_against": 5,
"goal_difference": 8,
"points": 15,
"form": [
{
"result": "W",
"date": "2026-09-13",
"home_team": "Manchester United",
"away_team": "Manchester City",
"home_score": 0,
"away_score": 1,
"is_home": false
},
{
"result": "W",
"date": "2026-09-20",
"home_team": "Manchester City",
"away_team": "Sunderland",
"home_score": 5,
"away_score": 3,
"is_home": true
}
]
},
{
"position": 2,
"team": {
"id": 311,
"name": "Arsenal",
"short_name": "Arsenal",
"slug": "arsenal",
"logo": "espn-359.png"
},
"played": 6,
"won": 5,
"draw": 0,
"lost": 1,
"goals_for": 10,
"goals_against": 5,
"goal_difference": 5,
"points": 15,
"form": [
{
"result": "L",
"date": "2026-09-19",
"home_team": "Brighton & Hove Albion",
"away_team": "Arsenal",
"home_score": 3,
"away_score": 0,
"is_home": false
},
{
"result": "W",
"date": "2026-10-10",
"home_team": "Arsenal",
"away_team": "Leeds United",
"home_score": 2,
"away_score": 1,
"is_home": true
}
]
}
]
}Ligues
Accédez aux informations sur les ligues incluant les meilleurs buteurs, les passes décisives, les cartons et l'historique des confrontations.
Récupérer toutes les ligues groupées par pays avec les informations de couverture des données.
curl "https://sportapi.ai/api/leagues" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"data": [
{
"country": "England",
"geo": "GB-ENG",
"leagues": [
{
"id": 53,
"name": "Championship",
"geo": "GB-ENG",
"domestic": 1,
"has_standings": true,
"has_fixtures": true,
"fixtures_count": 737,
"teams_count": 24
},
{
"id": 26,
"name": "English Community Shield",
"geo": "GB-ENG",
"domestic": 1,
"has_standings": true,
"has_fixtures": true,
"fixtures_count": 2,
"teams_count": 0
}
]
}
]
}Récupérer les détails de la ligue avec les équipes, les matchs à venir et les résultats récents.
idintegerID de la liguecurl "https://sportapi.ai/api/leagues/24" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"id": 24,
"name": "Premier League",
"geo": "GB-ENG",
"country": "England",
"domestic": 1,
"teams": [
{
"id": 370,
"name": "AFC Bournemouth",
"logo_file": "espn-349.png"
},
{
"id": 311,
"name": "Arsenal",
"logo_file": "espn-359.png"
}
],
"upcoming_fixtures": [
{
"id": 13596518,
"date": "2026-10-11",
"datetime": "2026-10-11 15:00:00",
"home_team": "Crystal Palace",
"away_team": "Nottingham Forest"
}
],
"recent_results": [
{
"id": 13596181,
"date": "2026-10-10",
"home_team": "Manchester United",
"away_team": "Tottenham Hotspur",
"home_score": 1,
"away_score": 1
}
]
}Récupérer les meilleurs buteurs pour une ligue spécifique. Saison en cours par défaut.
idintegerID de la liguelimitintegerLignes à retourner, 1-100 (par défaut 20)seasonstringall = toutes les saisons au lieu de la saison en courscurl "https://sportapi.ai/api/leagues/24/topscorers?limit=20" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"season_from": "2026-08-21",
"data": [
{
"rank": 1,
"player_name": "E. Haaland",
"player_urn": "urn:bbc:sportsdata:football:player:s-atzboo800gv7gic2rgvgo0kq1",
"team_id": 324,
"team_name": "Manchester City",
"goals": 5,
"penalties": 0
},
{
"rank": 1,
"player_name": "João Pedro",
"player_urn": "urn:bbc:sportsdata:football:player:s-eaqqezw2ed1u0tt3zc128mr1m",
"team_id": 322,
"team_name": "Chelsea",
"goals": 5,
"penalties": 0
}
]
}Récupérer les meilleurs passeurs pour une ligue spécifique. Saison en cours par défaut.
idintegerID de la liguelimitintegerLignes à retourner, 1-100 (par défaut 20)seasonstringall = toutes les saisons au lieu de la saison en courscurl "https://sportapi.ai/api/leagues/24/topassists?limit=20" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"season_from": "2026-08-21",
"data": [
{
"rank": 1,
"player_name": "A. Semenyo",
"player_urn": "",
"team_id": 324,
"team_name": "Manchester City",
"assists": 3
},
{
"rank": 1,
"player_name": "C. Palmer",
"player_urn": "",
"team_id": 322,
"team_name": "Chelsea",
"assists": 3
}
]
}Récupérer les joueurs avec le plus de cartons (jaunes/rouges) dans une ligue. Saison en cours par défaut.
idintegerID de la liguelimitintegerLignes à retourner, 1-100 (par défaut 20)seasonstringall = toutes les saisons au lieu de la saison en courscurl "https://sportapi.ai/api/leagues/24/topcards?limit=20" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"season_from": "2026-08-21",
"data": [
{
"rank": 1,
"player_name": "A. Fatawu",
"player_urn": "urn:bbc:sportsdata:football:player:s-6cx5c6bzp1hq6c1vui53mxzx0",
"team_id": 10158,
"team_name": "Ipswich Town",
"yellow_cards": 3,
"red_cards": 1,
"total_cards": 4
},
{
"rank": 1,
"player_name": "V. Janelt",
"player_urn": "urn:bbc:sportsdata:football:player:s-9k8gysrsy1a261nhcszo4aoyx",
"team_id": 366,
"team_name": "Brentford",
"yellow_cards": 4,
"red_cards": 0,
"total_cards": 4
}
]
}Récupérer l'historique des confrontations directes entre deux équipes.
team1integerPremier ID d'équipeteam2integerDeuxième ID d'équipecurl "https://sportapi.ai/api/fixtures/h2h/311/312" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"team1": 311,
"team2": 312,
"data": [
{
"id": 604,
"home_id": 311,
"away_id": 312,
"date": "2026-01-08",
"home_score": 0,
"away_score": 0,
"result": 0,
"status": "FT",
"home_team": "Arsenal",
"away_team": "Liverpool",
"league_name": "Premier League"
},
{
"id": 577,
"home_id": 312,
"away_id": 311,
"date": "2025-08-31",
"home_score": 1,
"away_score": 0,
"result": 1,
"status": "FT",
"home_team": "Liverpool",
"away_team": "Arsenal",
"league_name": "Premier League"
}
]
}Joueurs
Accédez aux statistiques des joueurs et aux données de performance par match.
Récupérer un profil joueur : bio, équipe et ligue actuelles, statistiques de carrière et de la saison en cours, matchs récents et prochain match.
slugstringSlug du joueurcurl "https://sportapi.ai/api/players/bukayo-saka" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"player": {
"id": 4928,
"full_name": "Bukayo Saka",
"slug": "bukayo-saka",
"position": "Forward",
"nationality": "GB-ENG",
"date_of_birth": "2001-09-05",
"height": null,
"weight": null,
"photo_url": null,
"jersey_number": 7,
"team_id": 311
},
"team": {
"id": 311,
"full_name": "Arsenal",
"slug": "arsenal",
"country": "England",
"geo": "GB-ENG",
"league_id": 24
},
"league": {
"id": 24,
"name": "Premier League",
"slug": "premier-league"
},
"linked": false,
"career": null,
"season": null,
"rank": null,
"matches": [],
"recent": [],
"next_match": {
"date": "2026-10-13",
"datetime": "2026-10-13 21:00:00",
"home_team": "Arsenal",
"home_slug": "arsenal",
"away_team": "Lille",
"away_slug": "lille",
"league_name": "UEFA Champions League"
},
"squad": [
{
"full_name": "David Raya",
"slug": "david-raya",
"position": "Goalkeeper",
"jersey_number": 1
}
]
}Récupérer les statistiques par match et les totaux de carrière d'un joueur. Recherche par nom de joueur et ID d'équipe.
namestringNom complet du joueurteam_idintegerID de l'équipe à laquelle appartient le joueurshirt_numberintegerFacultatif — aide à dissocier les joueurs aux noms similairescurl "https://sportapi.ai/api/players/stats?name=Bukayo%20Saka&team_id=311&shirt_number=7" \
-H "X-Api-Key: YOUR_API_KEY"{
"success": true,
"player": {
"shirt_number": 7,
"position": "Forward",
"nationality": "GB-ENG",
"team": {
"id": 311,
"name": "Arsenal"
}
},
"totals": {
"appearances": 46,
"goals": 12,
"assists": 6,
"mins_played": 2775,
"shots_total": 96,
"total_passes": 957,
"tackles": 42,
"saves": 0
},
"matches": [
{
"goals": 0,
"assists": 0,
"mins_played": 90,
"shots_total": 2,
"total_passes": 34,
"tackles": 1,
"saves": 0,
"position": "Attacking Midfielder",
"shirt_number": 7,
"is_starter": 1,
"date": "2026-10-10",
"home_score": 2,
"away_score": 1,
"home_id": 311,
"away_id": 352,
"home_team": "Arsenal",
"away_team": "Leeds United",
"league_name": "Premier League"
}
]
}Endpoints d'authentification
Endpoints d'inscription et de connexion.
Enregistrer un nouveau compte utilisateur.
emailstringEmail utilisateur (obligatoire)passwordstringMot de passe utilisateur (obligatoire)namestringNom d'affichage (optionnel)curl -X POST "https://sportapi.ai/api/auth/register" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","password":"YOUR_PASSWORD","name":"John Doe"}'{
"success": true,
"token": "eyJhbGciOiJIUzI1NiIs...",
"user": { "id": 1, "email": "[email protected]" }
}Connexion avec email et mot de passe.
emailstringEmail utilisateur (obligatoire)passwordstringMot de passe utilisateur (obligatoire)curl -X POST "https://sportapi.ai/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","password":"YOUR_PASSWORD"}'{
"success": true,
"token": "eyJhbGciOiJIUzI1NiIs...",
"user": { "id": 1, "email": "[email protected]" }
}Récupérer l'utilisateur authentifié actuel.
curl "https://sportapi.ai/api/auth/me" \
-H "Authorization: Bearer YOUR_LOGIN_TOKEN"{
"success": true,
"user": { "id": 1, "email": "[email protected]", "name": "John" }
}Récupurer l'URL d'autorisation Google OAuth.
curl "https://sportapi.ai/api/auth/google"{
"success": true,
"url": "https://accounts.google.com/o/oauth2/v2/auth?..."
}Endpoints utilisateur
Endpoints du profil et du contact utilisateur.
Récupérer le profil de l'utilisateur actuel.
curl "https://sportapi.ai/api/profile" \
-H "Authorization: Bearer YOUR_LOGIN_TOKEN"{
"success": true,
"user": { "id": 1, "email": "[email protected]", "name": "John" }
}Mettre à jour le profil utilisateur.
namestringNouveau nom d'affichagecurl -X POST "https://sportapi.ai/api/profile" \
-H "Authorization: Bearer YOUR_LOGIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"New Name"}'{
"success": true,
"message": "Profile updated successfully"
}Soumettre une demande via le formulaire de contact.
namestringVotre nom (obligatoire)emailstringVotre email (obligatoire)subjectstringObjet (optionnel)messagestringVotre message (obligatoire)curl -X POST "https://sportapi.ai/api/contact" \
-H "Content-Type: application/json" \
-d '{"name":"John Doe","email":"[email protected]","subject":"API Question","message":"Your message..."}'{
"success": true,
"message": "Contact request submitted successfully"
}WebSocket
Connectez-vous au serveur WebSocket SportAPI pour recevoir les mises à jour des scores en direct poussées vers votre client en temps réel — sans polling.
Connexion
wss://sportapi.ai/ws?key=YOUR_API_KEYAuthentifiez-vous en transmettant votre clé API en tant que paramètre de requête. La connexion sera rejetée avec un message d'erreur si la clé est absente ou invalide.
Latence de mise à jour
Les mises à jour des scores sont poussées environ 30 à 60 secondes après qu'un but ait été marqué. Cela reflète notre intervalle de rafraîchissement de la source de données en direct.
Messages client
Après la connexion, envoyez des messages JSON pour vous abonner aux matchs :
{ "action": "subscribe_all" }{ "action": "subscribe", "fixture_id": 12345 }{ "action": "unsubscribe", "fixture_id": 12345 }{ "action": "ping" }Messages serveur
{
"type": "score_update",
"fixture_id": 12345,
"home_score": 2,
"away_score": 1,
"home_pen": null,
"away_pen": null,
"status": "LIVE",
"minute": "67'"
}status valeurs : Scheduled, LIVE, FT, AET, PENS, Postponed, Cancelled, Suspended. À la mi-temps, le statut reste LIVE et minute est "HT". home_pen/away_pen contiennent le score aux tirs au but s'il y en a un (les endpoints REST les appellent penalty_home/penalty_away).
Exemple JavaScript
const ws = new WebSocket('wss://sportapi.ai/ws?key=YOUR_API_KEY')
ws.onopen = () => {
// Subscribe to all live matches
ws.send(JSON.stringify({ action: 'subscribe_all' }))
// Or subscribe to a specific fixture
ws.send(JSON.stringify({ action: 'subscribe', fixture_id: 12345 }))
}
ws.onmessage = (event) => {
const msg = JSON.parse(event.data)
if (msg.type === 'score_update') {
console.log(`Fixture ${msg.fixture_id}: ${msg.home_score}–${msg.away_score} (${msg.status})`)
}
}
ws.onclose = () => console.log('Disconnected')
ws.onerror = (err) => console.error('WebSocket error', err)