GanheMaisBet API

Documentação da API

Todos os endpoints são GET, exigem uma chave de API e devolvem JSON com campos em camelCase e datas em ISO 8601.

Autenticação

Crie uma conta gratuita em /desenvolvedores/cadastro, entre no painel e gere sua chave. Envie a chave em todo request no header:

Authorization: Bearer gmb_live_...

A chave crua só é exibida uma vez, no momento em que é gerada — se perdê-la, gere uma nova (a antiga é invalidada na hora). Cada conta tem uma única chave ativa nesta versão.

Planos

PlanoCasasChamadas/horaEndpointsPreço
Gratuito2 (escolhidas, trocáveis 1x a cada 2h)30básicos + prévia de surebets, sem rankingGrátis, permanente
Completo5 (todas)300tudo, sem filtroUS$49/mês

O Gratuito é permanente, não um período de teste. No painel você escolhe quais casas ver dentre as disponíveis do seu plano — a troca é limitada a 1x a cada 2h, pra evitar que alguém contorne o limite de casas trocando aos poucos. Upgrade pro Completo é self-service: assinatura via Stripe Checkout direto pelo painel, sem precisar falar com ninguém.

Limites de uso

Cota por hora, por conta — 30 no Gratuito, 300 no Completo. Ultrapassar o limite devolve 429 com { "error": "rate_limit_exceeded" }.

Cada resposta traz os headers X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset pra você acompanhar seu consumo.

Atualização dos dados

Por padrão, os endpoints de odds devolvem o último dado que o GanheMaisBet já coletou — atualizado a cada 30 minutos perto do horário do jogo, ou a cada 24 horas fora dessa janela (mesmo pipeline que alimenta o site). Cada resposta de odds traz updatedAt pra você saber a idade do dado.

Pra dado buscado na hora, use /odds/live (veja abaixo) — só que com um limite bem mais apertado (100 chamadas/hora, compartilhado entre todos), já que isso consome cota real e finita de um provedor externo.

URL base

https://ganhemaisbet.com

Endpoints

GET/api/v1/matches

Lista de jogos.

Parâmetros: status (scheduled|live|finished), competition (id), from/to (ISO 8601), limit (padrão 50, máx 200)

curl -H "Authorization: Bearer $API_KEY" "https://ganhemaisbet.com/api/v1/matches?status=scheduled&limit=5"
{ "data": [ { "id": "...", "competitionId": "...", "homeTeamId": "...", "homeTeamName": "Fluminense", "awayTeamId": "...", "awayTeamName": "Bragantino", "kickoffAt": "2026-07-17T23:00:00.000Z", "status": "scheduled", "slug": "fluminense-...", "matchday": 17 } ] }
GET/api/v1/matches/{matchId}

Um jogo específico.

curl -H "Authorization: Bearer $API_KEY" "https://ganhemaisbet.com/api/v1/matches/id1000032566886838"
{ "data": { "id": "...", "homeTeamName": "Fluminense", "awayTeamName": "Bragantino", "status": "scheduled", ... } }
GET/api/v1/matches/{matchId}/best-odds

Melhor odd por mercado/seleção — a mesma comparação exibida no site. No plano Gratuito, é a melhor odd só entre as casas da sua seleção (veja "Planos" acima), não entre todas.

curl -H "Authorization: Bearer $API_KEY" "https://ganhemaisbet.com/api/v1/matches/id1000032566886838/best-odds"
{ "data": { "matchId": "...", "markets": { "1x2": { "home": { "odd_value": 2.0, "bookmaker_id": "kto" }, ... } }, "updatedAt": "..." } }
GET/api/v1/matches/{matchId}/odds

Odd de CADA casa por mercado/seleção — não só a vencedora. No plano Gratuito, só as casas da sua seleção aparecem.

curl -H "Authorization: Bearer $API_KEY" "https://ganhemaisbet.com/api/v1/matches/id1000032566886838/odds"
{ "data": { "matchId": "...", "markets": { "1x2": { "home": { "kto": 2.0, "betnacional": 1.9, "stake": 1.92 } } }, "updatedAt": "..." } }
GET/api/v1/matches/{matchId}/odds/live

Igual à rota acima, mas busca na fonte em vez de ler o último dado já calculado pela ingestão agendada — sujeito a um limite próprio e bem mais apertado de 100 chamadas por hora, compartilhado entre todos os consumidores da API. Todo pedido desconta dessa cota, mesmo quando a resposta vem de um cache interno de 60s por jogo — "cached": true no retorno indica isso. O cache não poupa a sua cota; ele poupa nosso servidor e o número de chamadas reais feitas à Odds-API.io quando o mesmo jogo é pedido várias vezes seguidas. Use a rota sem "/live" pro uso normal; use esta só quando o timing importar de verdade.

curl -H "Authorization: Bearer $API_KEY" "https://ganhemaisbet.com/api/v1/matches/id1000032566886838/odds/live"
{ "data": { "matchId": "...", "eventStatus": "pending", "markets": { "1x2": { "home": { "kto": 2.0 } } }, "fetchedAt": "...", "cached": false } }
GET/api/v1/surebets

Oportunidades de arbitragem detectadas. No plano Completo, lista completa com as casas/odds de cada perna. No Gratuito, uma prévia: contagem e margem das oportunidades ativas + um histórico recente resumido, sem as casas/odds que compõem cada uma (isso fica no Completo). No Gratuito os parâmetros status/limit são ignorados — a resposta é sempre esse retrato atual, só market/minMargin filtram o que entra na prévia.

Parâmetros: status (active, padrão | expired), minMargin (número, só afeta active), market, limit (padrão 50, máx 200) — status/limit ignorados no Gratuito

curl -H "Authorization: Bearer $API_KEY" "https://ganhemaisbet.com/api/v1/surebets?minMargin=2"
Completo: { "data": [ { "id": "...", "matchId": "...", "market": "1x2", "profitMarginPct": 3.42, "combo": { "home": { "odd_value": 2.1, "bookmaker_id": "kto" }, ... }, "detectedAt": "...", "expiredAt": null, "explanation": "..." } ] }
Gratuito: { "data": { "activeCount": 7, "maxMarginPct": 4.8, "avgMarginPct": 2.1, "recentlyDetected": [ { "matchId": "...", "market": "1x2", "profitMarginPct": 3.42, "detectedAt": "...", "expiredAt": null } ] }, "meta": { "tier": "gratuito", "note": "..." } }
GET/api/v1/ranking

Ranking de casas por margem média e precisão. Um período só (o mais recente calculado) — sem histórico por mês nesta versão. Disponível só no plano Completo — no Gratuito devolve 403 plan_required.

curl -H "Authorization: Bearer $API_KEY" "https://ganhemaisbet.com/api/v1/ranking"
{ "data": { "period": "2026-07", "summaryText": "...", "bookmakers": [ { "bookmakerId": "kto", "bookmakerName": "KTO", "avgMarginPct": 4.8, "sampleSize": 42, "accuracyScore": 0.61, "lowSample": false } ] } }
GET/api/v1/bookmakers

Casas de apostas comparadas.

Parâmetros: active (true, opcional)

curl -H "Authorization: Bearer $API_KEY" "https://ganhemaisbet.com/api/v1/bookmakers?active=true"
{ "data": [ { "id": "kto", "name": "KTO", "slug": "kto", "isActive": true, "licenseStatus": "licensed", "affiliateLink": null } ] }
GET/api/v1/competitions

Campeonatos cobertos.

Parâmetros: active (true, opcional)

curl -H "Authorization: Bearer $API_KEY" "https://ganhemaisbet.com/api/v1/competitions"
{ "data": [ { "id": "brasileirao-serie-a", "slug": "brasileirao", "name": "Brasileirão Série A", "shortLabel": "Brasileirão", "isActive": true, "isTemporary": false } ] }
GET/api/v1/teams

Times cadastrados.

Parâmetros: competition (id, opcional)

curl -H "Authorization: Bearer $API_KEY" "https://ganhemaisbet.com/api/v1/teams?competition=brasileirao-serie-a"
{ "data": [ { "id": "...", "name": "Fluminense", "shortName": "FLU", "competitionId": "brasileirao-serie-a", "logoUrl": null } ] }
GET/api/v1/markets

Lista estática de mercados e seleções, com rótulos em português.

curl -H "Authorization: Bearer $API_KEY" "https://ganhemaisbet.com/api/v1/markets"
{ "markets": [ { "key": "1x2", "label": "Resultado Final" }, ... ], "selections": [ { "key": "home", "label": "Casa" }, ... ] }

Mercados e seleções

Chaves e rótulos completos também disponíveis em /api/v1/markets. Uma observação: os mercados de linha (escanteios, cartões) reaproveitam as chaves genéricas over/under — o número da linha (ex: 9,5 escanteios, 3,5 cartões) não vem embutido no rótulo desta lista estática, só no nome do mercado.

Mercados
1x2Resultado Final
bttsAmbas Marcam
over_under_2_5Mais/Menos 2.5 Gols
dupla_chanceDupla Chance
escanteiosEscanteios (9,5)
cartoesCartões (3,5)
anytime_goalscorerMarcar a qualquer momento
chutesChutes
chutes_a_golChutes a gol
defesasDefesas do goleiro
Seleções
12Casa ou Fora
homeCasa
drawEmpate
awayFora
yesSim
noNão
overMais de 2.5
underMenos de 2.5
1xCasa ou Empate
x2Empate ou Fora

Formato de erros

{ "error": "invalid_api_key" }

Códigos usados: missing_api_key, invalid_api_key (401), plan_required (403, endpoint fora do seu plano), rate_limit_exceeded, live_quota_exceeded (429), cooldown_active (409, troca de casas antes da hora), not_found (404), invalid_params (400), live_odds_unavailable (409/503, só em /odds/live).

Fora de escopo nesta versão

  • Verificação de e-mail no cadastro.
  • Múltiplas chaves por conta — gerar uma nova invalida a anterior.
  • Paginação por cursor — só o parâmetro limit.
  • Planos com mais de 5 casas (10/15) — roadmap futuro, condicionado a mais casas rastreadas pelo produto.
  • Webhooks/notificação de eventos (ex: nova surebet detectada).