Documentação da API de futebol
Tudo o que você precisa para integrar dados de futebol no seu app: início rápido, todos os endpoints com código em cURL, Python, JavaScript e PHP, especificação OpenAPI 3.1 e coleção Postman.
Início rápido
De zero a dados de futebol ao vivo em três passos. O plano Free oferece 2.000 requisições por dia (14.000 por mês) sem cartão.
- Crie uma conta em sportapi.ai (email ou Google).
- Copie sua chave de API na página chaves de API. As chaves começam com
sk_live_. - Faça sua primeira requisição. O programa abaixo exibe as partidas de hoje com placares ao vivo. Substitua
YOUR_API_KEYe execute.
curl "https://sportapi.ai/api/fixtures/date/2026-10-20" \
-H "X-Api-Key: YOUR_API_KEY"Saída esperada: uma linha por partida, por exemplo Premier League: Arsenal 2-1 Leeds United (FT). A seguir: consulte eventos, escalações e estatísticas de uma partida, tabela de classificação ou receba placares via WebSocket.
Autenticação
Todos os endpoints de dados (partidas, times, classificação, ligas, jogadores) exigem sua chave de API no cabeçalho X-Api-Key. Crie uma chave no seu painel.
X-Api-Key: your_api_keycurl -H "X-Api-Key: your_api_key" https://sportapi.ai/api/fixtures/date/2026-10-10Endpoints de conta (/api/auth/me, /api/profile) usam o token de login: Authorization: Bearer your_token. Obtenha-o em /api/auth/login ou login Google.
Sem chave, o "Teste" nos endpoints de dados usa o acesso limitado do site, permitindo explorar antes de se cadastrar.
URL base
https://sportapi.ai/apiTodos os endpoints são relativos a esta URL base. Uma especificação OpenAPI 3.1 legível por máquina está disponível para geradores de código e ferramentas como Postman.
Respostas e limites
As respostas são JSON com flag success. Erros incluem código HTTP e mensagem error: 401 chave inválida, 404 não encontrado, 429 limite diário ou mensal atingido.
Limites de requisições
Cada plano tem limite diário de requisições, que zera às 00:00 UTC. O plano Free também tem limite mensal de 14.000 requisições por mês calendário (UTC), a partir de 1º de novembro de 2026; planos pagos não têm limite mensal. Cada resposta indica seu status:
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)Ao ultrapassar o limite, receba 429 com cabeçalho Retry-After (segundos até o reset). O corpo JSON tem scope: day ou month, indicando qual limite foi atingido.
Cache com ETag
Respostas GET bem-sucedidas trazem ETag. Envie-o em If-None-Match e, se os dados não mudaram, receba 304 Not Modified vazio — ideal para polling de partidas e classificações.
curl -H "X-Api-Key: your_api_key" -H 'If-None-Match: "d1c0f0ad5808c8d8a0f13108edd63278"' https://sportapi.ai/api/leagues/24Datas e horas
kickoff_utc e updated_at estão em UTC (ISO 8601). date e datetime estão em horário central europeu (CET/CEST), fuso do calendário de partidas.
Especificação OpenAPI e coleção Postman
Ambos os arquivos descrevem todos os endpoints com parâmetros, schemas de resposta e exemplos reais, gerados da mesma fonte, mantendo consistência com esta página.
apiKey na coleção. Cada requisição tem resposta de exemplo.pip install openapi-python-client
openapi-python-client generate --url https://sportapi.ai/api/openapi.jsonPartidas
Recupere dados de partidas, incluindo placares ao vivo, eventos e resultados históricos.
status é Scheduled, LIVE, FT, AET, PENS, Postponed, Cancelled, Suspended; durante a partida, minute mostra o relógio ("HT" no intervalo). result é 1 vitória casa, 0 empate, -1 vitória fora (null até o fim), e winner informa o mesmo por extenso, considerando pênaltis (penalty_home/penalty_away).
Obter todas as partidas para uma data específica.
datestringData no formato YYYY-MM-DDcurl "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"
}
]
}Obter informações detalhadas sobre uma partida específica, incluindo eventos da partida.
idintegerID da partidacurl "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
}
]
}
}Obter apenas os eventos de uma partida específica (gols, cartões, substituições).
idintegerID da partidacurl "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
}
]
}Obter estatísticas da partida para uma partida: chutes, passes, faltas, desarmes, defesas e cartões amarelos por time.
idintegerID da partidacurl "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
}
}
}Obter escalações da partida, incluindo titular e reservas de ambos os times.
idintegerID da partidacurl "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
}
]
}
}
}Times
Acesse informações dos times, incluindo detalhes, elenco, partidas e histórico de troféus.
Obter informações do time com partidas recentes e ligas.
idintegerID do timecurl "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"
}
]
}Obter imagem do logotipo do time. Retorna PNG/SVG ou escudo de placeholder.
idintegerID do timecurl "https://sportapi.ai/api/teams/311/logo" \
-H "X-Api-Key: YOUR_API_KEY" \
-o logo.pngContent-Type: image/png
Binary image dataObter um time pelo slug da URL, com sua liga, últimos resultados, próximas partidas e elenco.
slugstringSlug do timecurl "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"
}
]
}Obter o elenco de jogadores do time organizado por posição.
idintegerID do timecurl "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
}
]
}Obter histórico de troféus e campeonatos do time.
idintegerID do timecurl "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
}
]
}Classificação
Obtenha tabelas de classificação e forma dos times.
Obter lista de todas as ligas disponíveis com dados de classificação.
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"
}
]
}Obter a tabela atual da liga. A lista de forma lista as últimas 6 partidas, mais antigas primeiro. Você também pode passar o slug da liga (ex: /api/standings/premier-league); a resposta então inclui a liga.
leagueIdintegerID da liga (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
}
]
}
]
}Ligas
Acesse informações das ligas, incluindo artilheiros, assistências, cartões e histórico de confrontos.
Obter todas as ligas agrupadas por país com informações de cobertura de dados.
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
}
]
}
]
}Obter detalhes da liga com times, partidas futuras e resultados recentes.
idintegerID da ligacurl "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
}
]
}Obter os artilheiros de uma liga específica. Temporada atual por padrão.
idintegerID da ligalimitintegerLinhas para retornar, 1-100 (padrão 20)seasonstringall = todas as temporadas em vez da temporada atualcurl "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
}
]
}Obter os maiores assistentes de uma liga específica. Temporada atual por padrão.
idintegerID da ligalimitintegerLinhas para retornar, 1-100 (padrão 20)seasonstringall = todas as temporadas em vez da temporada atualcurl "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
}
]
}Obter jogadores com mais cartões (amarelos/vermelhos) em uma liga. Temporada atual por padrão.
idintegerID da ligalimitintegerLinhas para retornar, 1-100 (padrão 20)seasonstringall = todas as temporadas em vez da temporada atualcurl "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
}
]
}Obter histórico de confrontos diretos entre dois times.
team1integerID do primeiro timeteam2integerID do segundo timecurl "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"
}
]
}Jogadores
Acesse estatísticas dos jogadores e desempenho por partida.
Obter perfil do jogador: biografia, time e liga atuais, estatísticas de carreira e temporada atual, partidas recentes e a próxima partida.
slugstringSlug do jogadorcurl "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
}
]
}Obter estatísticas por partida e totais de carreira de um jogador. Busca por nome do jogador e ID do time.
namestringNome completo do jogadorteam_idintegerID do time do qual o jogador faz parteshirt_numberintegerOpcional — ajuda a desambiguar jogadores com nomes semelhantescurl "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 de autenticação
Endpoints para registro e login de usuários.
Registrar uma nova conta de usuário.
emailstringE-mail do usuário (obrigatório)passwordstringSenha do usuário (obrigatório)namestringNome de exibição (opcional)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]" }
}Fazer login com e-mail e senha.
emailstringE-mail do usuário (obrigatório)passwordstringSenha do usuário (obrigatório)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]" }
}Obter usuário autenticado atual.
curl "https://sportapi.ai/api/auth/me" \
-H "Authorization: Bearer YOUR_LOGIN_TOKEN"{
"success": true,
"user": { "id": 1, "email": "[email protected]", "name": "John" }
}Obter URL de autorização do Google OAuth.
curl "https://sportapi.ai/api/auth/google"{
"success": true,
"url": "https://accounts.google.com/o/oauth2/v2/auth?..."
}Endpoints de usuário
Endpoints para perfil e contato do usuário.
Obter o perfil do usuário atual.
curl "https://sportapi.ai/api/profile" \
-H "Authorization: Bearer YOUR_LOGIN_TOKEN"{
"success": true,
"user": { "id": 1, "email": "[email protected]", "name": "John" }
}Atualizar perfil do usuário.
namestringNovo nome de exibiçãocurl -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"
}Enviar solicitação de formulário de contato.
namestringSeu nome (obrigatório)emailstringSeu e-mail (obrigatório)subjectstringAssunto (opcional)messagestringSua mensagem (obrigatório)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
Conecte-se ao servidor WebSocket da SportAPI para receber atualizações de placares ao vivo enviadas ao seu cliente em tempo real — sem necessidade de polling.
Conexão
wss://sportapi.ai/ws?key=YOUR_API_KEYAutentique-se passando sua chave de API como parâmetro de consulta. A conexão será rejeitada com uma mensagem de erro se a chave estiver ausente ou inválida.
Latência da atualização
As atualizações de placar são enviadas em aproximadamente 30–60 segundos após um gol. Isso reflete o intervalo de atualização da nossa fonte de dados ao vivo.
Mensagens do cliente
Após a conexão, envie mensagens JSON para se inscrever em partidas:
{ "action": "subscribe_all" }{ "action": "subscribe", "fixture_id": 12345 }{ "action": "unsubscribe", "fixture_id": 12345 }{ "action": "ping" }Mensagens do servidor
{
"type": "score_update",
"fixture_id": 12345,
"home_score": 2,
"away_score": 1,
"home_pen": null,
"away_pen": null,
"status": "LIVE",
"minute": "67'"
}Valores status: Scheduled, LIVE, FT, AET, PENS, Postponed, Cancelled, Suspended. No intervalo, o status permanece LIVE e minute é "HT". home_pen/away_pen armazenam o placar de pênaltis quando houver (os endpoints REST chamam de penalty_home/penalty_away).
Exemplo em 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)