Integre dados esportivos em minutos.
A SportsAPI oferece uma interface REST para consultar jogos, placares, horários, ligas e transmissões de diferentes fontes em um único formato.
1. Crie uma chave
No dashboard da sua conta.
2. Faça a chamada
Envie a chave no header.
3. Use os dados
Receba JSON normalizado.
Documentação completa para o seu agente de IA
Baixe (ou copie) toda a referência da API — autenticação, endpoints, campos de resposta, imagens, erros e boas práticas — em um único arquivo Markdown. Cole no prompt do Claude Code, Cursor, Copilot ou qualquer outro agente e deixe ele implementar a integração sozinho, sem precisar navegar pelo site.
Autenticação
Envie sua API key no header X-API-Key. Mantenha a chave somente no servidor e nunca publique em código do navegador.
X-API-Key: sapi_xxxxxxxxxxxxUse chaves separadas para desenvolvimento e produção. Se uma chave for exposta, revogue-a imediatamente no dashboard.
Primeira requisição
Consulte os jogos de futebol ao vivo com uma chamada GET. A referência completa está em /docs (OpenAPI).
curl "https://api.sportsapi.com/api/v1/games?sport=football&status=live&limit=20" \
-H "X-API-Key: sapi_xxxx"Resposta 200 OK
A resposta inclui partidas paginadas (`matches`, `total`, `limit`, `offset`) e se os dados vieram do cache.
curl "https://api.sportsapi.com/api/v1/account" \
-H "X-API-Key: sapi_xxxx"Consultar jogos
Monte uma consulta e copie o código para sua linguagem.
Parâmetros
/api/v1/games?sport=football&status=live&limit=20curl "https://api.sportsapi.com/api/v1/games?sport=football&status=live&limit=20" \
-H "X-API-Key: sapi_xxxx"Parâmetros disponíveis
Combine filtros para reduzir o payload retornado.
sportstringModalidade (football, basketball, tennis...). Padrão: football. Veja a lista completa liberada no seu plano em GET /sports.
Exemplo: football
dateYYYY-MM-DDData inicial. Inclui os 7 dias seguintes. Padrão: hoje (Brasil).
Exemplo: 2026-07-17
statusstringFiltra por live, scheduled ou finished. A resposta ainda pode trazer jogos postponed/cancelled, mas esses dois não podem ser usados como filtro.
Exemplo: live
leaguestringFiltra partidas pelo nome da liga (substring, sem diferenciar maiúsculas).
Exemplo: Brasileirão
limitnumberItens por página (1–100). Padrão: 50.
Exemplo: 20
offsetnumberDeslocamento para paginação. Padrão: 0.
Exemplo: 0
Formato da resposta
Todo dado é normalizado para o mesmo contrato. Nem todo campo aparece em toda partida — eles variam por esporte, então sempre trate campos ausentes como opcionais em vez de assumir que estarão sempre presentes.
{
"matches": [
{
"id": "a3f9c1e6b2d84f70",
"sport": "football",
"homeTeam": {
"id": "5981",
"name": "Flamengo",
"logo": "/api/v1/images/media/team/5981",
"color": "#D2122E"
},
"awayTeam": {
"id": "1963",
"name": "Palmeiras",
"logo": "/api/v1/images/media/team/1963"
},
"homeScore": 2,
"awayScore": 1,
"status": "live",
"startTime": 1784311200000,
"league": {
"id": "325",
"name": "Brasileirão Série A",
"country": "Brazil",
"logo": "/api/v1/images/media/tournament/325"
},
"gameTimeDisplay": "74'",
"period": "Segundo tempo",
"roundName": "Rodada",
"roundNum": 15,
"venue": {
"name": "Maracanã",
"capacity": 78838
},
"officials": [
"Anderson Daronco"
],
"tvNetworks": [
{
"id": 42,
"name": "ESPN",
"logo": "/api/v1/images/media/tv-channel/42"
}
]
}
],
"total": 1,
"limit": 50,
"offset": 0,
"cached": false,
"timestamp": 1784315678123
}Referência completa de campos
idstringId único e opaco da partida.
sportstringModalidade da partida.
statusstringscheduled · live · finished · postponed · cancelled.
startTimenumberHorário de início em epoch ms (UTC).
homeScore / awayScorenumber | nullPlacar atual. null antes do jogo começar.
gameTimeDisplaystring (opcional)Cronômetro legível, ex.: "74'" ou "Q3 08:12".
periodstring (opcional)Tempo/quarto/set atual, quando informado.
roundName / stageNamestring (opcional)Fase do torneio, ex.: "Quarterfinal", "Grupo A". Em automobilismo, roundName é a sessão do fim de semana ("Treino Livre 1", "Classificação", "Corrida") — cada sessão vem como uma partida separada.
roundNumnumber (opcional)Número da rodada dentro da fase atual, quando a competição usa esse formato.
homeTeam.id / awayTeam.idstringId do time.
homeTeam.name / awayTeam.namestringNome do time.
homeTeam.logo / awayTeam.logostring (opcional)Caminho relativo — veja a seção "Imagens" abaixo antes de usar.
homeTeam.color / awayColorstring (opcional)Cor do time em hex, quando disponível.
league.id / league.name / league.countrystringDados da competição.
league.logostring (opcional)Caminho relativo — veja a seção "Imagens" abaixo.
venue.name / venue.capacitystring / number (opcional)Local da partida — populado para a maioria dos jogos, mesmo sem transmissão.
venue.city / venue.country / venue.courtstring (opcional)Detalhes adicionais do local, quando disponíveis (court é a quadra específica, comum em tênis).
officials[]string[] (opcional)Árbitro(s)/oficiais da partida, quando reportado.
tvNetworks[].name / tvNetworks[].logostring (opcional)Canais de transmissão — cobertura naturalmente esparsa fora dos jogos de maior perfil.
stages[]array (opcional)Parciais por set/quarto/tempo extra — comum em tênis, vôlei, basquete.
events[]array (opcional)Linha do tempo de lances (gols, cartões, etc.), quando reportado.
standings[]array (opcional)Classificação completa para golfe (todos os jogadores) e automobilismo (todos os pilotos da sessão) — essas modalidades não são "A vs B"; homeTeam/awayTeam trazem só os 2 primeiros, standings[] traz o campo inteiro (position, name, logo, isWinner, score).
Esportes disponíveis
Chame /api/v1/sports para descobrir, em tempo real, quais esportes o seu plano libera — em vez de fixar essa lista no seu código. O resultado muda automaticamente se você fizer upgrade de plano.
curl "https://api.sportsapi.com/api/v1/sports" \
-H "X-API-Key: sapi_xxxx"{
"sports": [
{
"slug": "football",
"sport": "football",
"label": "Futebol"
},
{
"slug": "basketball",
"sport": "basketball",
"label": "Basquete"
},
{
"slug": "tennis",
"sport": "tennis",
"label": "Tênis"
}
],
"total": 3
}Imagens (logos e ícones)
Todo campo logo (time, liga, canal de TV) já vem como um caminho relativo, servido pelo nosso próprio proxy de imagens — nunca uma URL absoluta de terceiros.
Basta concatenar o caminho recebido com a URL base da API para exibir a imagem:https://api.sportsapi.com + match.homeTeam.logo
Esses endpoints de imagem são públicos (não exigem X-API-Key) e ficam por trás de um limite de requisições próprio, separado da sua cota de dados — então usá-los para renderizar logos não consome sua franquia mensal.
/api/v1/images/proxy?url=Proxy genérico para uma URL https já conhecida, de um host permitido.
/api/v1/images/media/team/:idLogo de um time, a partir do id numérico.
/api/v1/images/media/tournament/:idLogo de um torneio.
/api/v1/images/media/tv-channel/:idLogo de um canal de TV.
/api/v1/images/media/league?uniqueId=Logo de competição/categoria (aceita uniqueId, tournamentId ou categoryId).
Erros
400Requisição inválidaRevise os parâmetros enviados.401Não autorizadoAPI key ausente, inválida ou revogada.402Assinatura necessáriaTrial expirado ou cota mensal esgotada.403Plano insuficienteEsporte não incluso no seu plano.404Não encontradoO recurso solicitado não existe.429Limite excedidoAguarde a janela indicada nos headers RateLimit-*.500Erro internoTente novamente e contate o suporte se persistir.