API de Esportes (v1)

URL base:

https://sportdataapi.cyou/api/v1

Introdução

Ligas, campeonatos, jogos ao vivo, placares e odds em tempo real. Os dados são atualizados em segundos durante os jogos, e as odds mostram oddsSuspended: true quando estão bloqueadas para atualização. Todas as respostas são JSON no formato { ok, data } ou { ok: false, error }.

Autenticação

Envie sua chave no cabeçalho x-api-key. Pegue a chave no seu painel, em API Keys. Nunca exponha a chave em código público.

Proteção por domínio: se você cadastrar domínios no painel, só as requisições vindas desses domínios (cabeçalho Origin/Referer) serão aceitas. Chamadas de servidor sem Origin funcionam normalmente enquanto nenhum domínio estiver cadastrado.

Endpoints

Parâmetros — GET /events

league*stringID da liga (de /leagues)

Acréscimos (addedTime)

Em /events e /live, o campo addedTime vem null enquanto o acréscimo não foi anunciado. Quando o 4º árbitro mostra a placa, o campo passa a trazer os minutos exatos de cada tempo. Basta checar addedTime.announced a cada atualização. Se o acréscimo não for publicado, o campo continua null e o jogo segue normalmente pelo clock (ex.: 90'+3').

"clock": "90'+2'",
"addedTime": {
  "firstHalf": 2,     // minutos de acréscimo do 1º tempo (null se não anunciado)
  "secondHalf": 5,    // minutos de acréscimo do 2º tempo (null se não anunciado)
  "announced": true
}

Apostas e liquidação automática

Registre a aposta do seu usuário com POST /bets. Nós acompanhamos o placar e marcamos win assim que a condição for cumprida (mesmo com o jogo em andamento) ou loss quando ela não puder mais acontecer ou o jogo terminar. Linhas exatas (ex.: 2.0 com 2 gols) ficam void. Consulte o resultado em GET /bets.

  • Pênaltis (penalty_awarded, penalty_awarded_h1, penalty_awarded_h2, first_penalty_goal): contam pênaltis marcados (convertidos ou perdidos). Se a fonte do jogo não informar pênaltis, a aposta é anulada (void).
  • Primeiro a N escanteios no 1º tempo (corners_race_h1): aberto antes do jogo e até os 20 minutos do 1º tempo. Cartões no 1º tempo: cards_totals_h1 (amarelo = 1, vermelho = 2).
  • Jogo suspenso: suspended: true e oddsSuspended: true; o status continua live até o jogo voltar ou ser encerrado.
  • Ligas pelo LiveScore: Copa do Brasil, Copa do Brasil Feminina, LigaPro (Equador) e Liga FUTVE (Venezuela), com odds próprias (CloudFut). Placar, tempo, lances e estatísticas também usam o LiveScore quando a ESPN não reconhece o jogo.

Mercados disponíveis

A lista de jogos (/events, /live) traz os mercados principais que estiverem disponíveis. Os mercados adicionais — escanteios, cartões, períodos e jogadores — vêm em /events/{eventId}, no campo markets, já agrupados por category e com a melhor odd de cada opção. Cada casa oferece mercados diferentes; mostre apenas os que vierem na resposta. Nos mercados por time, a API substitui `home` e `away` pelo nome real do jogo: por exemplo, `Flamengo|over` ou `Palmeiras|over`. O campo `name` também vem como `Escanteios do time — Flamengo`, nunca como um time genérico.

Mercados para Futebol

A disponibilidade varia por liga e momento do jogo. Em partidas futuras, alguns mercados só aparecem quando as linhas são abertas. O endpoint /events/{eventId} devolve somente os mercados abertos daquele evento.

MercadoselectionAposta
h2hMoneyline / vencedor · Resultadohome | away | draw (quando aplicável)Sim
spreadsHandicap / spread · Handicaphome | away (+ point)Sim
totalsTotal (mais/menos) · Totaisover | under (+ point)Sim
alternate_spreadsHandicaps alternativos · Handicaphome | away (+ point)Só odds
alternate_totalsTotais alternativos · Totaisover | under (+ point)Só odds
team_totalsTotais por equipe · Totaisteam|over | team|under (+ point)Só odds
bttsAmbos marcam · Golsyes | noSim
double_chanceDupla chance · Resultadohome/draw | home/away | draw/awaySim
draw_no_betEmpate anula · Resultadohome | awaySim
h2h_3_wayResultado 1X2 com empate · Resultadohome | draw | awaySó odds
correct_scorePlacar exato · GolsplacarSim
halftime_fulltimeIntervalo / final · Períodosresultado no intervalo + finalSó odds
player_goal_scorer_anytimeJogador marca a qualquer momento · Jogadoresdescription = jogadorSó odds
player_to_receive_cardJogador recebe cartão · Jogadoresdescription = jogadorSó odds
player_to_receive_red_cardJogador recebe cartão vermelho · Jogadoresdescription = jogadorSó odds
player_shots_on_targetChutes no gol do jogador · Jogadoresover | under (+ point)Só odds
player_shotsChutes do jogador · Jogadoresover | under (+ point)Só odds

Resultado

MercadoselectionAposta
h2hResultado final (1X2)home | away | drawSim · Pelo placar
double_chanceDupla chancehome/draw | home/away | draw/awaySim · Pelo placar
draw_no_betEmpate anulahome | away (empate = void)Sim · Pelo placar

Gols

MercadoselectionAposta
spreadsHandicap de golshome | away (+ point)Sim · Pelo placar
totalsTotal de gols (mais/menos)over | under (+ point)Sim · Pelo placar
alternate_totalsTotal de gols (linhas alternativas)over | under (+ point)Sim · Pelo placar
team_totalsGols do time (mais/menos)home|over | away|under (+ point)Sim · Pelo placar
bttsAmbos marcamyes | noSim · Pelo placar
penalty_awardedHaverá pênalti no jogo?yes | noSim ·
penalty_awarded_h2Haverá pênalti no 2º tempo?yes | noSim ·
first_penalty_goalPrimeira equipe a marcar de pênaltihome | away | none (point = 1)Sim ·
goals_racePrimeiro time a marcar N golshome | away | none (point = N)Sim ·

1º tempo

MercadoselectionAposta
penalty_awarded_h1Haverá pênalti no 1º tempo?yes | noSim ·
h2h_3_way_h1Vencedor do 1º tempohome | away | drawSim ·
h2h_3_way_h2Vencedor do 2º tempohome | away | drawSim ·
double_chance_h1Dupla chance do 1º tempohome/draw | home/away | draw/awaySim ·
totals_h1Gols no 1º tempo (mais/menos)over | under (+ point)Sim ·
btts_h1Ambos marcam no 1º tempoyes | noSim ·

Escanteios

MercadoselectionAposta
alternate_totals_cornersTotal de escanteios (mais/menos)over | under (+ point)Sim · Pelos escanteios do jogo
alternate_team_totals_cornersEscanteios do time (mais/menos)home|over | away|under (+ point)Sim · Pelos escanteios do jogo
alternate_spreads_cornersHandicap de escanteioshome | away (+ point)Sim · Pelos escanteios do jogo
corners_1x2Mais escanteios (1X2)home | away | drawSim · Pelos escanteios do jogo
corners_totals_h1Escanteios no 1º tempo (mais/menos)over | under (+ point)Sim ·
corners_race_h1Primeiro a N escanteios no 1º tempohome | away | none (point = N)Sim ·
corners_racePrimeiro a N escanteioshome | away | none (point = N)Sim ·

Cartões

MercadoselectionAposta
alternate_totals_cardsTotal de cartões (mais/menos)over | under (+ point)Sim · Pelos cartões (amarelos + vermelhos)
alternate_spreads_cardsHandicap de cartõeshome | away (+ point)Sim · Pelos cartões (amarelos + vermelhos)
cards_totals_h1Cartões no 1º tempo (mais/menos)over | under (+ point)Sim ·
red_cardHaverá cartão vermelho?yes | noSim ·

Finalizações

MercadoselectionAposta
total_shotsTotal de finalizações (mais/menos)over | under (+ point)Sim ·
team_shotsFinalizações do time (mais/menos)home|over | away|under (+ point)Sim ·
total_shots_h1Finalizações no 1º tempo (mais/menos)over | under (+ point)Sim ·
team_shots_h1Finalizações do time no 1º tempohome|over | away|under (+ point)Sim ·
shots_racePrimeiro a N finalizaçõeshome | away | none (point = N)Sim ·
shots_race_h1Primeiro a N finalizações no 1º tempohome | away | none (point = N)Sim ·
total_shots_on_targetFinalizações no gol (mais/menos)over | under (+ point)Sim ·
team_shots_on_targetFinalizações no gol do timehome|over | away|under (+ point)Sim ·

Jogadores

MercadoselectionAposta
player_to_receive_cardJogador recebe cartãodescription = jogadorSó odds
player_to_receive_red_cardJogador recebe cartão vermelhodescription = jogadorSó odds
player_goal_scorer_anytimeJogador marca a qualquer momentodescription = jogadorSó odds
player_shots_on_targetChutes no gol do jogadorover | under (+ point)Só odds
player_shotsChutes do jogadorover | under (+ point)Só odds
O catálogo abaixo detalha os mercados liquidados automaticamente pela plataforma. Todos os esportes usam o mesmo formato de bookmaker/market/outcomes.
Cartão vermelho: não existe o mercado "vai ter vermelho no jogo (sim/não)". Use player_to_receive_red_card (odds por jogador) e os contadores ao vivo em stats.home.redCards / stats.away.redCards. Apostas de escanteios e cartões são liquidadas pelas estatísticas oficiais da partida; se o jogo não tiver estatísticas, a aposta fica void.

Pagamentos e webhooks

Pagamentos de assinatura via Pix são gerados pelo gateway configurado no painel Bank. 1. POST /api/me/action com action=purchase gera uma cobrança. 2. O sistema recebe QR Code e copia-e-cola. 3. O gateway chama /api/webhooks/vibepay com x-signature. 4. Ao receber PAID/APPROVED/CONFIRMED, o pagamento vira approved e a assinatura é liberada automaticamente. 5. O endpoint /api/me/action com action=getPaymentStatus também consulta o status para o painel. No seu cliente/API de apostas, o fluxo é separado: POST /bets cria o bilhete e o webhook cadastrado em webhook_url recebe bet.settled com WIN, LOSS ou VOID.

Limites

Cada plano tem um limite de requisições por dia. Ao atingir o limite, a API responde 429 até o próximo dia. Acompanhe pelos cabeçalhos:

  • X-RateLimit-Limit
  • X-RateLimit-Remaining
  • X-Plan

Erros

401missing_api_key / invalid_api_keyChave ausente, inválida ou revogada
403domain_not_allowedA requisição veio de um domínio diferente do cadastrado
403league_not_in_planA liga não está incluída no seu plano
403sport_not_in_planO esporte não está incluído no seu plano
409odds_suspendedOdds bloqueadas (atualizando) — tente de novo em instantes
409odds_changedA odd mudou; o erro retorna a odd máxima atual
409market_decided / event_finishedMercado já decidido ou jogo encerrado
429daily_limit_reachedLimite diário do plano atingido (zera 00:00 UTC)
429rate_limitedMuitas requisições por minuto
Criar conta grátis

Exemplo — GET /events

curl --request GET \
  --url 'https://sportdataapi.cyou/api/v1/events?league=soccer_brazil_campeonato' \
  --header 'x-api-key: SUA_API_KEY'

Resposta

{
  "ok": true,
  "data": [
    {
      "id": "a1b2c3d4e5f6",
      "league": "soccer_brazil_campeonato",
      "homeTeam": "Flamengo",
      "awayTeam": "Palmeiras",
      "homeLogo": "https://sua-api.com/api/img/team/819",
      "awayLogo": "https://sua-api.com/api/img/team/2029",
      "commenceTime": "2026-10-02T22:00:00Z",
      "status": "live",
      "minute": 67,
      "period": 2,
      "halftime": false,
      "clock": "67'",
      "addedTime": null, // vira { "firstHalf": 2, "secondHalf": 5, "announced": true } quando anunciado
      "score": { "home": 1, "away": 0 },
      "halftimeScore": { "home": 1, "away": 0 },
      "incidents": [
        { "type": "goal", "team": "home", "minute": "23'", "player": "Pedro" },
        { "type": "yellow_card", "team": "away", "minute": "41'", "player": "Gómez" }
      ],
      "stats": {
        "home": { "possession": 58, "shots": 11, "shotsOnTarget": 5, "corners": 6, "yellowCards": 1, "redCards": 0, "fouls": 9, "offsides": 2 },
        "away": { "possession": 42, "shots": 7, "shotsOnTarget": 2, "corners": 3, "yellowCards": 2, "redCards": 0, "fouls": 12, "offsides": 1 }
      },
      "updatedAt": "2026-10-02T23:14:05Z",
      "statusDetail": "67'", // texto da fonte: "HT", "FT", "Susp", "Int."...
      "suspended": false, // true com o jogo suspenso/interrompido: status segue "live" e oddsSuspended vira true
      "oddsSuspended": false,
      "bookmakers": [
        {
          "key": "pinnacle",
          "markets": [
            {
              "key": "h2h",
              "outcomes": [
                { "name": "Flamengo", "price": 1.85 },
                { "name": "Draw", "price": 3.4 },
                { "name": "Palmeiras", "price": 4.2 }
              ]
            },
            {
              "key": "totals",
              "outcomes": [
                { "name": "Over", "price": 1.7, "point": 2.5 },
                { "name": "Under", "price": 2.1, "point": 2.5 }
              ]
            }
          ]
        }
      ]
    }
  ]
}