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
| Plano | Casas | Chamadas/hora | Endpoints | Preço |
|---|---|---|---|---|
| Gratuito | 2 (escolhidas, trocáveis 1x a cada 2h) | 30 | básicos + prévia de surebets, sem ranking | Grátis, permanente |
| Completo | 5 (todas) | 300 | tudo, sem filtro | US$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.comEndpoints
/api/v1/matchesLista 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 } ] }/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", ... } }/api/v1/matches/{matchId}/best-oddsMelhor 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": "..." } }/api/v1/matches/{matchId}/oddsOdd 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": "..." } }/api/v1/matches/{matchId}/odds/liveIgual à 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 } }/api/v1/surebetsOportunidades 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": "..." } }/api/v1/rankingRanking 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 } ] } }/api/v1/bookmakersCasas 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 } ] }/api/v1/competitionsCampeonatos 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 } ] }/api/v1/teamsTimes 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 } ] }/api/v1/marketsLista 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.
1x2 — Resultado Finalbtts — Ambas Marcamover_under_2_5 — Mais/Menos 2.5 Golsdupla_chance — Dupla Chanceescanteios — Escanteios (9,5)cartoes — Cartões (3,5)anytime_goalscorer — Marcar a qualquer momentochutes — Chuteschutes_a_gol — Chutes a goldefesas — Defesas do goleiro12 — Casa ou Forahome — Casadraw — Empateaway — Forayes — Simno — Nãoover — Mais de 2.5under — Menos de 2.51x — Casa ou Empatex2 — Empate ou ForaFormato 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).