Mercuriobet, Vai de Bet, Pix.bet, SofaScore, Parlay e ESPN normalizados no mesmo JSON. Ao vivo com minuto, placar por período, escanteios, cartões e guia de liquidação — sem expor chaves e sem cara de template.
Cada provedor entra como fonte. A API escolhe, agrega e, quando possível, enriquece cruzando fontes.
Escanteios, cartões, períodos, odds em tempo real. Fonte mais rica para liquidação.
source: mercuriobetBoa cobertura de ligas BR e europeias. Cruzável com Mercuriobet para estatísticas.
source: vaidebetGrade nacional forte, boa para pré-jogo e ligas regionais.
source: pixbetMiolo de dados global, ligas e eventos. Fallback sólido.
source: sofascoreWebSocket e SSE de odds/lance-a-lance. Latência baixa.
source: parlay — WS / SSEScores e estatísticas oficiais. Sem odds.
source: espn — até 48hTrês estados. Um contrato. Seu front decide o que mostrar — a API garante o que liquidar.
not_started — `schedule.start_time_br` e `kickoff_br` em Brasília. Odds de abertura quando a fonte enviar.
in_progress — `score.period.minute` + `score.period.description`. Polling 20s no servidor + cache 12s. Parlay via WS/SSE em ~50ms.
finished — `completed: true`, `final_score` e `finished_at`. 1T em `score.first_half` quando `completed`.
GET /api/football/live?source=vaidebet GET /api/football/today?source=mercuriobet GET /api/football/events/:id?source=vaidebet GET /api/football/compare?mode=live
GET /api/results?status=finished&limit=50 GET /api/football/history?status=finished&limit=50 GET /api/football/unified/:id # guia de liquidação
Troque `source` e pronto. Sem chave. CORS liberado.
# ao vivo (Vai de Bet) curl "https://apitestefb.evolutisistemas.com/api/football/live?source=vaidebet" # histórico paginado (SQLite/MySQL) curl "https://apitestefb.evolutisistemas.com/api/football/history?status=finished&limit=20&page=1" # evento master (unified) curl "https://apitestefb.evolutisistemas.com/api/football/unified/2719..."
const base = "https://apitestefb.evolutisistemas.com";
const live = await fetch(`${base}/api/football/live?source=vaidebet`).then(r=>r.json());
const done = await fetch(`${base}/api/results?status=finished&limit=20`).then(r=>r.json());
const one = await fetch(`${base}/api/football/unified/${id}`).then(r=>r.json());
import requests
BASE="https://apitestefb.evolutisistemas.com"
live=requests.get(f"{BASE}/api/football/live", params={"source":"vaidebet"}).json()
done=requests.get(f"{BASE}/api/results", params={"status":"finished","limit":20}).json()
one =requests.get(f"{BASE}/api/football/unified/{id}").json()
Tempo ao vivo: snapshot a cada ~20s (poll) + 12s de cache. Tempo real mesmo só na Parlay via wss://…/ws/odds e /api/parlay/sports/:sport/live/sse.