Odds API MCP
Leia eventos esportivos e de corridas, odds de casas de apostas, resultados e movimentação de linhas por meio de 32 ferramentas MCP somente leitura.
Documentação
Documentação da API Odds
Faça uma requisição no servidor primeiro. Depois, avance pela cobertura, eventos, atualizações em streaming, limites, cache e grupos de endpoints conforme necessário.
Etapa 1
Escolha um plano
Escolha um plano mensal em USD para acesso à API e volume de produção.
Etapa 2
Obtenha sua chave de API
Use sua chave na documentação ou em suas próprias requisições.
Etapa 3
Chame a API
Comece com meta, eventos, odds, apostas e resultados.
curl -H "X-API-Key: $ODDS_API_KEY" \
"https://api.odds-api.net/v1/events?sport=basketball&league=NBA&limit=25"
Como usar esta documentação
Use as páginas de guia para decisões de integração. Use as páginas de endpoints para parâmetros ao vivo, códigos de resposta, exemplos de corpo de resposta, formatos de streaming e exemplos de requisição gerados a partir do esquema OpenAPI atual.
Explore a API global de odds de apostas esportivas Construa um pipeline de modelo pandas validado Compare os livros de ofertas da Kalshi e da Polymarket Construa um produto NBA com todos os mercados disponíveis Construa um produto AFL com jogos, resultados e odds Construa um produto NRL com jogos, resultados e odds
Cobertura
Descubra o que existe antes de solicitar odds.
Construa filtros a partir de endpoints de cobertura e metadados. Isso mantém os filtros da interface honestos e evita que trabalhos em segundo plano consultem combinações não suportadas.
/v1/coverage
Visão geral da cobertura
Use isso para visualizações de cobertura voltadas ao comprador ou internas em casas de apostas, esportes, ligas e mercados.
/v1/sports and /v1/leagues
Filtros de esporte e liga
Carregue-os antes das requisições de eventos para que sua interface e seus trabalhos solicitem apenas competições suportadas.
/v1/bookmakers
Filtros de casa de apostas
Inspecione chaves de casas de apostas, nomes de exibição, países e disponibilidade antes de solicitar odds.
Guias regionais da API
Use os guias por país para chaves regionais de casas de apostas, exemplos de mercado e caminhos de requisição.
Eventos e odds
Pagine listas de eventos e depois carregue snapshots de odds.
Mantenha janelas de eventos estreitas, processe a paginação de forma idempotente e armazene campos de atualização dos snapshots de odds para que preços desatualizados fiquem visíveis.
Nossa janela de coleta de odds de casas de apostas pré-jogo cobre eventos agendados até 7 dias à frente. Um jogo pode aparecer antes de as odds estarem disponíveis; verifique o snapshot de odds para ver os mercados atuais.
/v1/events
Próximos eventos esportivos
Use filtros de esporte, liga, horário de início, status, limite e cursor. Mantenha janelas estreitas em produção.
/v1/racing/events
Eventos de corrida
Use a lista de eventos atual como fonte da verdade. A cobertura geral de casas de apostas no Reino Unido, Irlanda ou outra região não garante cobertura de corridas lá.
/v1/events/{event_id}/odds/snapshot
Estado inicial das odds
Comece toda visualização de evento quente com um snapshot antes de consultar deltas ou abrir um stream.
Descubra corridas atuais primeiro
Não reutilize um ID de evento ou filtro de casa de apostas de um exemplo. Liste corridas atuais, copie um event_id, carregue o snapshot de odds sem filtro e reconecte com o token de retomada do snapshot.
GET /v1/racing/events?status=fetching&limit=25
GET /v1/racing/events/$RACE_EVENT_ID/odds
GET /v1/racing/events/$RACE_EVENT_ID/odds/stream?since=$RACE_RESUME_TOKEN&catchup=true
1
Autentique no servidor
Envie X-API-Key do seu backend. Não exponha chaves em código visível no navegador.
2
Descubra a cobertura
Construa filtros a partir de rotas de cobertura, esportes, ligas, casas de apostas e países de casas de apostas.
3
Pagine eventos
Chame rotas de eventos com uma janela de tempo estreita, limite e cursor até que next_cursor esteja vazio.
4
Carregue snapshots de odds
Busque um snapshot de odds de evento para o estado inicial e armazene as_of_ts_ms, ttl_seconds, next_cursor e resume.
5
Transmita atualizações quentes
Para produtos em tempo real, conecte-se a streams SSE ou WebSocket após o snapshot e retome com since na reconexão.
6
Consulte histórico e resultados
Use endpoints de histórico para movimentação de linhas e rotas de resultados após o término dos eventos. Recue quando os dados estiverem liquidados.
SSE e WebSocket
Use streams após o snapshot inicial.
Streams são melhores para visualizações de odds quentes e produtos de alerta. Faça o snapshot primeiro, aplique deltas e ressincronize quando o stream informar que o token de retomada não está mais disponível.
GET /v1/events/{event_id}/odds/snapshot
GET /v1/events/{event_id}/odds/stream?since=<resume>&catchup=true
GET /v1/events/{event_id}/odds/ws?since=<resume>&catchup=true
Compare entrega REST, SSE e WebSocket Construa um feed de mercado de previsão esportiva
- Busque um snapshot primeiro e persista o token
resume\com o estado do evento em cache. - Conecte-se a
/stream\com Server-Sent Events ou/ws\com WebSockets. Use os mesmos filtros do snapshot. - Trate
delta\aplicando alterações de forma idempotente. Armazene oresume\mais recente após cada mensagem aceita. - Trate
heartbeat\como um sinal de atividade. Se nenhum heartbeat ou dado chegar dentro do seu timeout, reconecte. - Ao desconectar, reconecte com
since=<last\_resume\>\ecatchup=true\usando backoff exponencial com jitter. - Em
resync\, recarregue o snapshot porque o token de retomada não está mais disponível.
Limites de taxa
Consulte mais devagar por padrão e trate 429s como um sinal de controle.
Prefira streams para odds em tempo real. Quando a consulta for necessária, mantenha filtros estreitos e deixe os cabeçalhos de limite de taxa moldarem o comportamento do trabalhador.
| Superfície | Intervalo inicial | Notas de produção |
|---|---|---|
| Esportes, ligas, casas de apostas | 6-24 horas | A cobertura muda lentamente. Atualize diariamente, a menos que esteja sincronizando uma nova visão de catálogo. |
| Listas de eventos esportivos | 5-15 minutos | Use consultas mais apertadas de 1-5 minutos apenas para ligas ativas ou janelas próximas ao início. |
| Listas de eventos de corrida | 1-5 minutos | Os cronogramas de corrida mudam mais perto da largada. Mantenha a janela de tempo estreita. |
| Snapshots de odds | 60-120 segundos | Use 15-30 segundos apenas para eventos prioritários quando streams não estiverem disponíveis. |
| Snapshots de oportunidades de apostas | 30-120 segundos | Consulte mais rápido apenas para produtos de alerta com controles rígidos de cota. |
| Resultados | 1-5 minutos após o início | Após o status final aparecer, pare a consulta quente ou mude para uma atualização de retenção longa. |
Leia o estudo de timing de sete dias da fonte ao ingestão
Backoff de 429
- Em HTTP 429, aguarde
Retry-After\quando presente antes de enviar outra requisição para essa rota/chave. - Quando
Retry-After\estiver ausente, comece em cerca de 2 segundos e dobre até cerca de 60 segundos com jitter aleatório. - Use
X-RateLimit-Limit\,X-RateLimit-Remaining\eX-RateLimit-Bucket\quando presentes para ajustar os chamadores. - Se
/usage\mostrar que a cota mensal de créditos da API está esgotada, pare os loops de repetição e alerte o proprietário da conta. - Reduza primeiro a amplitude da consulta: ligas mais estreitas, menos eventos, menos casas de apostas e tamanhos de página menores.
Cache e páginas
Armazene em cache pela forma da requisição e torne cursores duráveis.
Use odds conhecidas como boas com carimbos de data/hora para superfícies de interface e avance apenas os pontos de verificação de paginação após uma página ser processada com sucesso.
Estratégia de cache
Cache de chaves pela forma da requisição
Inclua o caminho do endpoint, ID do evento, filtros normalizados, cursor da página e contexto do produto da API na chave do cache.
Respeite campos de atualização
Use ttl\_seconds\ quando presente. Sempre exiba ou armazene as\_of\_ts\_ms\ para que odds desatualizadas fiquem óbvias.
Use streams para atualizar caches quentes
Aplique deltas do stream ao snapshot em cache, mas recorra a um snapshot novo após resync\ ou falha de análise.
Prefira stale-while-revalidate para a interface
Mostre o último snapshot bom com um carimbo de data/hora visível enquanto atualiza em segundo plano.
Paginação
- Passe
limit\dentro dos limites de resposta de/limits\. - Mantenha todos os filtros idênticos entre páginas.
- Passe
next\_cursor\para o parâmetrocursor\da próxima requisição. - Pare quando
next\_cursor\estiver ausente, nulo, vazio ou0\. - Persista o último cursor concluído apenas após a página ser processada com sucesso.
Histórico e erros
Separe a análise histórica das odds atuais.
A movimentação de linhas é útil para auditoria e backtesting. As odds atuais ainda podem estar desatualizadas, suspensas, limitadas ou indisponíveis.
Consultas de histórico
- Habilite History Lite ou History Pro antes de chamar endpoints de histórico em chaves de API precificadas na v2.
- Comece de um snapshot de odds atual e copie o
selection\_key\exato para a linha que deseja gráfico. - Use janelas ISO8601 UTC de
from\_ts\eto\_ts\para consultas de histórico limitadas. - Use
bookmakers\,market\_group\_id\,price\_type\elimit\_points\_per\_bookmaker\para manter as respostas pequenas. - Armazene o histórico separadamente dos caches ao vivo porque é uma visão de auditoria/backtesting, não o preço negociável atual. Planeje uma integração de odds históricas →
Modos de falha
400 Corrija filtros, cursores, carimbos de data/hora ou a forma da requisição inválidos.
401 A chave da API está ausente ou inválida. Gire ou reconfigure a chave.
403 A chave é válida, mas não tem acesso ao plano, produto, casa de apostas, stream, corrida ou estratégia.
404 O evento, corrida, resultado ou seleção não está disponível na superfície pública atual.
429 Recue, honre Retry-After\, verifique /usage\ e reduza o volume de requisições.
5xx Repita com backoff e mantenha os últimos dados bons em cache marcados com seu carimbo de data/hora.
Stream close Reconecte com since\; recarregue o snapshot se o stream enviar resync\.
Empty or stale data Mostre estado indisponível/desatualizado em vez de tratar odds ausentes como preços válidos.
Grupo de endpoints
Comece aqui
Identidade da API, URL base, autenticação e links de referência.
URL base https://api.odds-api.net/v1 Versão 1.0.0 Fonte OpenAPI ao vivo
GET Metadados da API /v1/
Retorna o nome da API, versão, URL do documento OpenAPI e URL de referência hospedada.
Endpoint público Trate HTTP 429 com backoff e evite loops de consulta apertados.
Exemplo de requisição
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/"
Respostas
200 Resposta bem-sucedida
application/json · objeto
Amostra gerada
{
"name": "Odds API",
"version": "1.0.0",
"openapi": "/v1/openapi.json",
"reference": "/v1/reference"
}
400 Parâmetros de requisição ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos para aguardar antes de repetir quando fornecido pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de requisições para o bucket do limitador ativo quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de requisições restantes no bucket do limitador ativo quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Status
Disponibilidade da API voltada ao comprador, latência, saúde do stream e saúde do limite de taxa.
URL base https://api.odds-api.net/v1 Versão 1.0.0 Fonte OpenAPI ao vivo
GET Resumo público de saúde /v1/status
Retorna um resumo público de status sanitizado para páginas voltadas ao comprador. A resposta inclui disponibilidade recente de componentes, percentis de latência, taxa de erro 5xx, saúde do stream e saúde do limite de taxa sem expor nomes internos de serviços, métricas de infraestrutura, detalhes de casas de apostas, volume bruto de tráfego ou histórico de incidentes.
Endpoint público Trate HTTP 429 com backoff e evite loops de consulta apertados.
Exemplo de requisição
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/status"
Respostas
200 Resposta bem-sucedida
application/json · objeto
Status da API: Resumo público de saúde
{
"status": "operational",
"as_of": "2026-04-29T10:25:00Z",
"window_seconds": 300,
"components": [
{
"id": "rest_api",
"name": "REST API",
"status": "operational",
"metrics": {
"uptime_pct": 100.0,
"p50_ms": 24.0,
"p95_ms": 410.0,
"p99_ms": 846.0,
"error_rate_pct": 0.02
}
}
],
"rate_limits": {
"status": "operational",
"throttled_pct": 0.4
},
"source": {
"fresh": true,
"age_seconds": 18
}
}
400 Parâmetros de requisição ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de requisições para o bucket ativo do limitador, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de requisições restantes no bucket ativo do limitador, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Conta
Identidade atual da API, contadores de uso e limites do contrato.
URL base https://api.odds-api.net/v1 Versão 1.0.0 Fonte OpenAPI ao vivo
GET Identidade atual /v1/me
Retorna a identidade da API autenticada e os recursos de produto habilitados para a chave fornecida.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de requisição
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/me"
Respostas
200 Resposta bem-sucedida
application/json · objeto
Amostra gerada
{
"method": "api_key",
"client_id": "string",
"capabilities": {},
"membership_tier": 123
}
400 Parâmetros de requisição ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de requisições para o bucket ativo do limitador, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de requisições restantes no bucket ativo do limitador, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Uso /v1/usage
Retorna cota e contadores de uso para a chave de API fornecida. O novo preço do odds-api.net usa créditos de API em vez de contagens brutas de requisições. Clientes de produção devem verificar este endpoint quando respostas 429 persistirem, para que a exaustão da cota não se torne um loop infinito de tentativas.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de requisição
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/usage"
Respostas
200 Resposta bem-sucedida
application/json · objeto
Conta: Uso
{
"period_start_utc": "2026-05-01T00:00:00Z",
"period_end_utc": "2026-06-01T00:00:00Z",
"plan": "live",
"pricing_model": "odds_api_net_v2",
"api_credits_used": 18420,
"api_credits_limit": 20000000,
"stream_hours_used": 438.25,
"stream_hours_limit": 6000,
"stream_logical_bytes_used": 187654321,
"stream_logical_bytes_limit": 536870912000,
"stream_concurrent_units_used": 7,
"stream_concurrent_units_limit": 25,
"exceeded": false
}
400 Parâmetros de requisição ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de requisições para o bucket ativo do limitador, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de requisições restantes no bucket ativo do limitador, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Limites /v1/limits
Retorna limites de créditos de API, requisições, streams, complementos e respostas do contrato que os clientes devem respeitar. Use isso para limitar tamanhos de página, tamanhos de snapshots, configurações de heartbeat de streams e tamanhos de lote de streams antes de iniciar trabalhos de alto volume.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de requisição
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/limits"
Respostas
200 Resposta bem-sucedida
application/json · objeto
Conta: Limites
{
"responses": {
"events_limit_max": 1000,
"odds_snapshot_limit_max": 25000,
"bets_snapshot_limit_max": 20000
},
"sse": {
"heartbeat_sec_min": 5,
"heartbeat_sec_max": 120,
"max_batch_default": 500
},
"streams": {
"metering": "all authenticated API-key SSE and WebSocket connections",
"formula": "stream_units * open_seconds / 3600",
"enforcement_interval_seconds": 5
}
}
400 Parâmetros de requisição ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de requisições para o bucket ativo do limitador, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de requisições restantes no bucket ativo do limitador, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Catálogo
Esportes, ligas, casas de apostas e cobertura aproximada de mercados suportados.
URL base https://api.odds-api.net/v1 Versão 1.0.0 Fonte OpenAPI ao vivo
GET Esportes /v1/sports
Lista esportes com cobertura de eventos e odds.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de requisição
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/sports"
Respostas
200 Resposta bem-sucedida
application/json · objeto
Amostra gerada
{
"items": [
"string"
]
}
400 Parâmetros de requisição ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de requisições para o bucket ativo do limitador, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de requisições restantes no bucket ativo do limitador, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Ligas /v1/leagues
Lista ligas disponíveis. Passe sport\ para restringir a resposta.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de requisição
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/leagues?sport=basketball"
Parâmetros
Consulta
sport
string
Filtro de esporte. Use /sports\ para descobrir valores suportados.
Respostas
200 Resposta bem-sucedida
application/json · objeto
Amostra gerada
{
"items": [
"string"
]
}
400 Parâmetros de requisição ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de requisições para o bucket ativo do limitador, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de requisições restantes no bucket ativo do limitador, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Casas de apostas /v1/bookmakers
Lista casas de apostas ativas aceitas pelos filtros de casa de apostas nos endpoints de odds e apostas. Cada item inclui os códigos de país onde essa casa de apostas está disponível. Passe country\_code=AU\ ou country\_code=AU,UK\ para filtrar o catálogo.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de requisição
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/bookmakers"
Parâmetros
Consulta
country_code
string
Filtro de código de país separado por vírgulas, por exemplo AU\ ou AU,UK\.
Respostas
200 Resposta bem-sucedida
application/json · objeto
Catálogo: Casas de apostas
{
"items": [
{
"bookmaker": "bet365",
"country_codes": [
"AU",
"UK"
]
},
{
"bookmaker": "pinnacle",
"country_codes": [
"US"
]
}
]
}
400 Parâmetros de requisição ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de requisições para o bucket ativo do limitador, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de requisições restantes no bucket ativo do limitador, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Países de casas de apostas /v1/bookmakers/countries
Lista códigos de país representados no catálogo ativo de casas de apostas e as casas de apostas disponíveis em cada país.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de requisição
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/bookmakers/countries"
Respostas
200 Resposta bem-sucedida
application/json · objeto
Catálogo: Países de casas de apostas
{
"items": [
{
"country_code": "AU",
"country": "Australia",
"bookmakers": [
"bet365",
"sportsbet"
]
},
{
"country_code": "UK",
"country": "United Kingdom",
"bookmakers": [
"bet365"
]
}
]
}
400 Parâmetros de requisição ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de requisições para o bucket ativo do limitador, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de requisições restantes no bucket ativo do limitador, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Cobertura /v1/coverage
Retorna a cobertura pública de casas de apostas, esportes, ligas e mercados observados recentemente. Os registros de mercado são aproximados e baseados em linhas de odds normalizadas vistas na janela de retrospectiva configurada, não uma garantia de que todo mercado está disponível para todo evento no momento da solicitação.
Endpoint público. Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/coverage?sport=basketball&league=NBA"
Parâmetros
Query
bookmaker
string
Filtro canônico de casa de apostas. Use /bookmakers\ ou /coverage\ para descobrir chaves suportadas.
sport
string
Filtro de esporte. Use /sports\ para descobrir valores suportados.
league
string
Filtro de liga. Use /leagues?sport=...\ para descobrir valores suportados.
country_code
string
Filtro de código de país separado por vírgulas, por exemplo AU\ ou AU,UK\.
lookback_days
integer
Número de dias de cobertura aproximada de mercado observada recentemente a incluir. O máximo é 90.
Respostas
200 Resposta bem-sucedida
application/json · objeto
Catálogo: Cobertura
{
"as_of": "2026-04-29T10:25:00Z",
"bookmakers": [
{
"bookmaker": "bet365",
"country_codes": [
"AU",
"UK"
]
},
{
"bookmaker": "sportsbet",
"country_codes": [
"AU"
]
}
],
"sports": [
"basketball",
"rugby league"
],
"leagues": [
{
"sport": "basketball",
"league": "NBA"
},
{
"sport": "rugby league",
"league": "NRL"
}
],
"markets": [
{
"bookmaker": "bet365",
"sport": "basketball",
"league": "NBA",
"bet_type": "moneyline",
"last_seen_at": "2026-04-29T10:20:00Z",
"sample_event_id": "3704597661"
},
{
"bookmaker": "sportsbet",
"sport": "rugby league",
"league": "NRL",
"bet_type": "total",
"metric": "tries",
"last_seen_at": "2026-04-29T10:18:00Z",
"sample_event_id": "3704597662"
}
],
"source": {
"markets_are_approximate": true,
"lookback_days": 30
}
}
400 Parâmetros ou corpo de solicitação inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
integer
Segundos a aguardar antes de tentar novamente, quando fornecido pelo limitador.
X-RateLimit-Limit
integer
Capacidade do bucket de solicitações para o bucket ativo do limitador, quando fornecida.
X-RateLimit-Remaining
integer
Aproximadamente as solicitações restantes no bucket ativo do limitador, quando fornecidas.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Widgets
Feeds de widgets incorporáveis e seguros para clientes de API aprovados.
URL base https://api.odds-api.net/v1 Versão 1.0.0 Fonte OpenAPI ao vivo
GET Ticker de odds /v1/widgets/odds-ticker
Retorna um payload pequeno de ticker de odds seguro para um widget de site incorporável. A resposta é projetada a partir das mesmas odds esportivas de linha principal com suporte a Redis usadas pela API, mas omite IDs de eventos, payloads brutos, metadados de fonte, links, preços sem vig, odds justas, IDs de depuração e metadados de logotipo de equipe. Chaves de API marcadas como widgets\_only=true\ podem acessar esta rota e também rotas de conta.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/widgets/odds-ticker?league=NBA&bookmakers=bet365&widget_id=string&limit=25"
Parâmetros
Query
league obrigatório
string
Filtro de liga. Use /leagues?sport=...\ para descobrir valores suportados.
bookmakers obrigatório
string
Lista de permissão de casas de apostas separada por vírgulas. Use /bookmakers\ para descobrir chaves suportadas.
widget_id obrigatório
string
Identificador estável de widget configurado no registro do cliente da API.
markets
string
Lista de mercados de widget separada por vírgulas. Valores suportados são moneyline, handicap e total; aliases incluem h2h, 1x2, spread e over_under.
limit
integer
Máximo de itens a retornar. Respeite os limites retornados por /limits\.
window_hours
integer
Respostas
200 Resposta bem-sucedida
application/json · objeto
Widgets: Ticker de odds
{
"league": "EPL",
"widget_id": "homepage-ticker",
"last_updated": "2026-07-09T01:02:03Z",
"events": [
{
"league": "EPL",
"event_name": "Arsenal vs Chelsea",
"start_time": 1783558800,
"last_updated": "2026-07-09T01:02:03Z",
"markets": [
{
"market": "moneyline 3w",
"bookmakers": [
{
"label": "tab",
"selections": [
{
"selection": "home",
"price": 2.2
},
{
"selection": "away",
"price": 2.9
},
{
"selection": "draw",
"price": 3.4
}
]
}
]
}
]
}
]
}
400 Parâmetros ou corpo de solicitação inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
integer
Segundos a aguardar antes de tentar novamente, quando fornecido pelo limitador.
X-RateLimit-Limit
integer
Capacidade do bucket de solicitações para o bucket ativo do limitador, quando fornecida.
X-RateLimit-Remaining
integer
Aproximadamente as solicitações restantes no bucket ativo do limitador, quando fornecidas.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Eventos esportivos
Eventos esportivos futuros e ao vivo, além de metadados de eventos.
URL base https://api.odds-api.net/v1 Versão 1.0.0 Fonte OpenAPI ao vivo
GET Busca /v1/events
Busca eventos esportivos por esporte, liga, time, janela de tempo, status, cobertura de casas de apostas e cursor de paginação. Para polling de produção, use janelas de tempo limitadas, mantenha filtros estáveis entre páginas e passe next\_cursor\ de volta como cursor\ até não haver próximo cursor. Para descoberta ao vivo, comece com /v1/events/live\; event\_states=in\_play\ retorna apenas eventos com uma observação ao vivo recente e adiciona um hint\ quando eventos iniciados, mas não confirmados, foram excluídos. Cada item tem um live\_status\ simples.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events?sport=basketball&league=NBA&limit=25"
Parâmetros
Query
sport
string
Filtro de esporte. Use /sports\ para descobrir valores suportados.
league
string
Filtro de liga. Use /leagues?sport=...\ para descobrir valores suportados.
start_from
integer
Limite inferior em segundos Unix para o horário de início do evento. Use janelas limitadas em polling de produção.
start_to
integer
Limite superior em segundos Unix para o horário de início do evento. Mantenha janelas estreitas para trabalhos de sincronização ativa.
cursor
string
Cursor de paginação do next\_cursor\ anterior. Mantenha filtros idênticos entre páginas.
limit
integer
Máximo de itens a retornar. Respeite os limites retornados por /limits\.
include_bookmaker_ids
boolean
Quando verdadeiro, inclua IDs de casa de apostas para dados de odds e mapas de IDs de pré-visualização nas respostas de eventos.
include_source
boolean
Quando verdadeiro, inclua proveniência por linha/casa de apostas e metadados de captura. Campos de atualização de nível superior são sempre mantidos.
include_opportunity_counts
boolean
not_started_only
boolean
not_started_buffer_seconds
integer
event_states
string
Filtro de ciclo de vida. Solicitar in_play aplica automaticamente a janela de retrospectiva ao vivo.
live_candidates
boolean
Inclua eventos já iniciados que permanecem candidatos para jogo ao vivo; isso não é confirmação de jogo atual.
Respostas
200 Resposta bem-sucedida
application/json · objeto
Eventos esportivos: Busca
{
"items": [
{
"event_id": "3704597661",
"sport": "rugby-league",
"league": "NRL",
"start_time": 1760000000,
"home_team": "Home",
"away_team": "Away",
"bookmakers": {
"bet365": "odds-doc-id"
}
}
],
"next_cursor": null,
"count": 1
}
400 Parâmetros ou corpo de solicitação inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
integer
Segundos a aguardar antes de tentar novamente, quando fornecido pelo limitador.
X-RateLimit-Limit
integer
Capacidade do bucket de solicitações para o bucket ativo do limitador, quando fornecida.
X-RateLimit-Remaining
integer
Aproximadamente as solicitações restantes no bucket ativo do limitador, quando fornecidas.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Eventos ao vivo /v1/events/live
Operação pública da Odds API. Autentique com X-API-Key\. Verifique os carimbos de data/hora antes de exibir preços e trate mercados vazios, desatualizados ou suspensos.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/live?sport=basketball&league=NBA&limit=25"
Parâmetros
Query
sport
string
Filtro de esporte. Use /sports\ para descobrir valores suportados.
league
string
Filtro de liga. Use /leagues?sport=...\ para descobrir valores suportados.
cursor
string
Cursor de paginação do next\_cursor\ anterior. Mantenha filtros idênticos entre páginas.
limit
integer
Máximo de itens a retornar. Respeite os limites retornados por /limits\.
include_bookmaker_ids
boolean
Quando verdadeiro, inclua IDs de casa de apostas para dados de odds e mapas de IDs de pré-visualização nas respostas de eventos.
include_source
boolean
Quando verdadeiro, inclua proveniência por linha/casa de apostas e metadados de captura. Campos de atualização de nível superior são sempre mantidos.
include_opportunity_counts
boolean
confirmed
boolean
Apenas eventos com uma observação ao vivo recente (live_status=live); igual a /v1/events?event_states=in_play.
Respostas
200 Resposta bem-sucedida
application/json · objeto
Amostra gerada
{
"items": [
{
"event_id": "3704597661",
"sport": "basketball",
"league": "NBA",
"start_time": 123,
"home_team": "string",
"away_team": "string",
"event_state": "string",
"event_state_certainty": "string",
"event_state_source": "string",
"state_observed_at": 123
}
],
"next_cursor": "string",
"count": 123,
"hint": {
"code": "string",
"message": "string",
"count": 0,
"see": "string"
}
}
400 Parâmetros ou corpo de solicitação inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
integer
Segundos a aguardar antes de tentar novamente, quando fornecido pelo limitador.
X-RateLimit-Limit
integer
Capacidade do bucket de solicitações para o bucket ativo do limitador, quando fornecida.
X-RateLimit-Remaining
integer
Aproximadamente as solicitações restantes no bucket ativo do limitador, quando fornecidas.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Detalhes do evento /v1/events/{event_id}
Retorna o registro atual do evento para um ID de evento esportivo canônico.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661"
Parâmetros
Path
event_id obrigatório
string
Identificador canônico de evento ou corrida de uma resposta de lista de eventos.
Query
include_links
boolean
Quando verdadeiro, inclua campos de casa de apostas/links profundos, como links de partida e links de corrida.
include_raw_payload
boolean
Quando verdadeiro, inclua objetos de payload/dados brutos armazenados onde o endpoint os expõe.
include_source
boolean
Quando verdadeiro, inclua proveniência por linha/casa de apostas e metadados de captura. Campos de atualização de nível superior são sempre mantidos.
include_bookmaker_ids
boolean
Quando verdadeiro, inclua IDs de casa de apostas para dados de odds e mapas de IDs de pré-visualização nas respostas de eventos.
include_debug_ids
boolean
Quando verdadeiro, inclua IDs internos/subgrupo/opostos úteis para reconciliação.
Respostas
200 Resposta bem-sucedida
application/json · objeto
Amostra gerada
{
"event_id": "3704597661",
"data": {}
}
400 Parâmetros ou corpo de solicitação inválidos.
application/json · objeto Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem acesso a este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de requisições do bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de requisições restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que gerou a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Cobertura de casas de apostas /v1/events/{event_id}/bookmakers
Lista as casas de apostas atualmente vinculadas a um evento esportivo.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling intensivos.
Exemplo de requisição
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/bookmakers"
Parâmetros
Caminho
event_id obrigatório
string
Identificador canônico do evento ou corrida, obtido a partir de uma resposta de lista de eventos.
Respostas
200 Resposta bem-sucedida
application/json · objeto
Amostra gerada
{
"event_id": "3704597661",
"items": [
"string"
]
}
400 Parâmetros de requisição ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem acesso a este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de requisições do bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de requisições restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que gerou a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Odds esportivas
Snapshots de odds esportivas, movimento de linhas, Server-Sent Events e atualizações via WebSocket.
URL base https://api.odds-api.net/v1 Versão 1.0.0 Fonte OpenAPI ao vivo
GET Snapshot /v1/events/{event_id}/fair-odds
Operação pública da Odds API. Autentique com X-API-Key\. Verifique os timestamps antes de exibir preços e trate mercados vazios, desatualizados ou suspensos.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling intensivos.
Exemplo de requisição
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/fair-odds?limit=25"
Parâmetros
Caminho
event_id obrigatório
string
Identificador canônico do evento ou corrida, obtido a partir de uma resposta de lista de eventos.
Consulta
selection_id
string
selection_key
string
Identificador estável de seleção, obtido a partir de uma linha de snapshot de odds, usado para histórico e movimento de linhas.
market_group_id
string
Filtro opcional de agrupamento de mercado para consultas de histórico.
bet_type
string
metric
string
period
inteiro
period_str
string
line
string
player_name
string
team_subject
string
limit
inteiro
Número máximo de itens a retornar. Respeite os limites retornados por /limits\.
cursor
string
Cursor de paginação da chamada anterior de next\_cursor\. Mantenha os filtros idênticos entre as páginas.
Respostas
200 Resposta bem-sucedida
application/json · objeto
Amostra gerada
{
"event_id": "3704597661",
"schema_version": "fair-prices.v1",
"snapshot_id": "string",
"input_revision": 123,
"reference_policy": "all_eligible_reference_books",
"items": [
{
"selection_id": "string",
"bet_type": "string",
"market_family": "string",
"period": "0",
"period_str": "string",
"metric": "string",
"line": "string",
"player_name": "string",
"team_subject": "string",
"selection_keys": [
"string"
]
}
],
"next_cursor": "string",
"complete": true
}
400 Parâmetros de requisição ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem acesso a este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de requisições do bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de requisições restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que gerou a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Snapshot /v1/events/{event_id}/odds/snapshot
Retorna as linhas de odds atuais para um evento. Use filtros para restringir casas de apostas, tipos de mercado, chaves de mercado e períodos. Um filtro explícito de bookmakers\ retorna todas as linhas correspondentes dessas casas de apostas em uma única resposta, até o limite de segurança de 25.000 itens. Sem um filtro de casa de apostas, as páginas contêm casas de apostas inteiras, portanto os mercados correspondentes de uma casa nunca são divididos entre páginas. Siga o next\_cursor\ opaco até complete=true\. Faça cache por formato de requisição. as\_of\_ts\_ms\ é quando a API aceitou o snapshot de evento bem-sucedido mais recente ou o subconjunto autoritativo de casas de apostas; use bookmaker\_as\_of\_ts\_ms\ para verificar a atualização específica da casa de apostas e compare com target\_refresh\_interval\_seconds\ (mercados de previsão informam quando seus preços de contrato atuais foram aceitos). Respeite ttl\_seconds\ quando presente e persista resume\ se você planeja assinar atualizações. Passe price\_fields=odds,fair\ para incluir odds justas compostas anuláveis junto com as odds das casas de apostas. Orderbooks de exchanges são excluídos desta superfície de odds no estilo casa de apostas.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling intensivos.
Exemplo de requisição
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/odds/snapshot?limit=25&bookmakers=bet365&types=moneyline&market_keys=moneyline"
Parâmetros
Caminho
event_id obrigatório
string
Identificador canônico do evento ou corrida, obtido a partir de uma resposta de lista de eventos.
Consulta
limit
inteiro
Alvo suave de itens quando bookmakers\ é omitido. As páginas contêm casas de apostas inteiras e podem exceder este alvo. Com um filtro explícito de casa de apostas, todas as linhas correspondentes são retornadas até o limite de segurança de 25.000 itens.
cursor
string
Cursor opaco de paginação por casa de apostas, vindo da chamada anterior de next\_cursor\. Use apenas quando bookmakers\ for omitido e mantenha todos os filtros idênticos entre as páginas.
bookmakers
string
Lista de permissão de casas de apostas separada por vírgulas. Casas de apostas solicitadas explicitamente são retornadas completas em uma única resposta, até o limite de segurança de 25.000 itens. Use /bookmakers\ para descobrir chaves suportadas.
types
string
Lista de permissão de tipos de mercado separada por vírgulas para filtros de odds.
market_keys
string
Lista de permissão de chaves de mercado separada por vírgulas para filtros de odds.
periods
string
Lista de permissão de períodos separada por vírgulas para filtros de odds.
price_fields
string
odds\, odds,novig\, odds,fair\ ou all\. Clientes compactos usam odds\ por padrão; clientes existentes usam os campos completos de precificação atuais por padrão.
include_source
booleano
Quando verdadeiro, inclui metadados de proveniência e captura por linha/casa de apostas. Os campos de atualização de nível superior são sempre mantidos.
include_debug_ids
booleano
Quando verdadeiro, inclui IDs internos/subgrupo/opostos úteis para reconciliação.
include_unavailable
booleano
Quando verdadeiro, inclui linhas indisponíveis ou suspensas quando o endpoint as suporta.
Respostas
200 Resposta bem-sucedida
application/json · objeto
Odds do evento: Snapshot
{
"event_id": "3704597661",
"as_of_ts_ms": 1760000000000,
"snapshot_capture_ts_ms": 1759999999800,
"bookmaker_as_of_ts_ms": {
"bet365": 1760000000000
},
"oldest_bookmaker_as_of_ts_ms": 1760000000000,
"target_refresh_interval_seconds": 60,
"ttl_seconds": 1800,
"items": [
{
"id": "bet365::moneyline::moneyline::0::::home::",
"event_id": "3704597661",
"bookmaker": "bet365",
"market_key": "moneyline",
"bet_type": "moneyline",
"period": "full time",
"side": "home",
"selection_name": "Home",
"odds": 2.1,
"fair_odds": 1.98,
"is_available": true
}
],
"next_cursor": null,
"complete": true,
"bookmakers_included": [
"bet365"
],
"bookmaker_counts": {
"bet365": 1
},
"resume": "1760000000000-0"
}
400 Parâmetros de requisição ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem acesso a este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
413 O snapshot completo solicitado por casa de apostas excede o limite de segurança da resposta. 429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de requisições do bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de requisições restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que gerou a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (SSE) /v1/events/{event_id}/odds/stream
Feed de Server-Sent Events para alterações de odds em um evento. Assine após ler o snapshot e passe o valor de resume\ do snapshot como since\ para receber alterações de recuperação quando disponíveis. Trate lotes semânticos ordenados de delta\ de forma idempotente e persista o resume\ de cada lote; um heartbeat\ carrega a atualização atual mesmo quando os preços não mudaram. Recarregue o snapshot após resync\. Alterações de orderbook de exchanges são servidas apenas pelo stream de orderbook de exchanges.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling intensivos.
Exemplo de requisição
curl -N -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/odds/stream?bookmakers=bet365&types=moneyline&market_keys=moneyline&since=1760000000000-0"
Parâmetros
Caminho
event_id obrigatório
string
Identificador canônico do evento ou corrida, obtido a partir de uma resposta de lista de eventos.
Consulta
bookmakers
string
Lista de permissão de casas de apostas separada por vírgulas. Use /bookmakers\ para descobrir chaves suportadas.
types
string
Lista de permissão de tipos de mercado separada por vírgulas para filtros de odds.
market_keys
string
Lista de permissão de chaves de mercado separada por vírgulas para filtros de odds.
periods
string
Lista de permissão de períodos separada por vírgulas para filtros de odds.
price_fields
string
odds\, odds,novig\, odds,fair\ ou all\. Clientes compactos usam odds\ por padrão; clientes existentes usam os campos completos de precificação atuais por padrão.
include_source
booleano
Quando verdadeiro, inclui metadados de proveniência e captura por linha/casa de apostas. Os campos de atualização de nível superior são sempre mantidos.
include_debug_ids
booleano
Quando verdadeiro, inclui IDs internos/subgrupo/opostos úteis para reconciliação.
include_unavailable
booleano
Quando verdadeiro, inclui linhas indisponíveis ou suspensas quando o endpoint as suporta.
since
string
Token de retomada de um snapshot anterior ou mensagem de stream. Passe-o após reconectar.
catchup
booleano
Quando verdadeiro, retorna eventos de stream perdidos disponíveis após since\ antes de aguardar novos eventos.
heartbeat_sec
inteiro
Intervalo de heartbeat em segundos para verificação de atividade do stream. Intervalo válido: 5-120.
max_batch
inteiro
Número máximo de mensagens de stream a ler por lote. O padrão é 500; use lotes menores para clientes de baixa latência.
Respostas
200 Stream de Server-Sent Events. Cada mensagem tem um nome de evento e um payload de dados JSON.
text/event-stream · objeto
Mensagem delta decodificada
event: delta
data: {
"event_id": "3704597661",
"resume": "1760000000000-0",
"snapshot_id": "capture-123:3704597661",
"batch_index": 1,
"batch_count": 1,
"changes": []
}
Mensagem de heartbeat decodificada
event: heartbeat
data: {}
Mensagem de ressincronização decodificada
event: resync
data: {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
400 Parâmetros de solicitação ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem acesso a este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de solicitações restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que gerou a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (WebSocket) /v1/events/{event_id}/odds/ws
Feed WebSocket para mudanças de odds em um evento. As mensagens usam os mesmos payloads delta\, heartbeat\ e resync\ do stream SSE. Reconecte com backoff exponencial com jitter e since=<last\_resume\>\.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
wscat -c "wss://api.odds-api.net/v1/events/3704597661/odds/ws?bookmakers=bet365&types=moneyline&market_keys=moneyline&since=1760000000000-0&api_key=$ODDS_API_KEY"
Parâmetros
Caminho
event_id obrigatório
string
Identificador canônico de evento ou corrida a partir de uma resposta de lista de eventos.
Consulta
bookmakers
string
Lista de permissão de casas de apostas separada por vírgulas. Use /bookmakers\ para descobrir chaves suportadas.
types
string
Lista de permissão de tipos de mercado separada por vírgulas para filtros de odds.
market_keys
string
Lista de permissão de chaves de mercado separada por vírgulas para filtros de odds.
periods
string
Lista de permissão de períodos separada por vírgulas para filtros de odds.
price_fields
string
odds\, odds,novig\, odds,fair\ ou all\. Clientes compactos usam odds\ por padrão; clientes existentes usam os campos de precificação completos atuais por padrão.
include_source
booleano
Quando verdadeiro, inclui metadados de proveniência e captura por linha/casa de apostas. Campos de atualização de nível superior são sempre mantidos.
include_debug_ids
booleano
Quando verdadeiro, inclui IDs internos/de subgrupo/opostos úteis para reconciliação.
include_unavailable
booleano
Quando verdadeiro, inclui linhas indisponíveis ou suspensas onde o endpoint as suporta.
since
string
Token de retomada de um snapshot ou mensagem de stream anterior. Passe-o após reconectar.
catchup
booleano
Quando verdadeiro, retorna eventos de stream perdidos disponíveis após since\ antes de aguardar novos eventos.
heartbeat_sec
inteiro
Intervalo de heartbeat em segundos para verificação de atividade do stream. Intervalo válido: 5-120.
max_batch
inteiro
Número máximo de mensagens de stream para ler por lote. O padrão é 500; use lotes menores para clientes de baixa latência.
Respostas
101 Conexão WebSocket estabelecida. As mensagens são objetos JSON.
application/json · objeto
Mensagem delta
{
"event": "delta",
"data": {
"event_id": "3704597661",
"resume": "1760000000000-0",
"snapshot_id": "capture-123:3704597661",
"batch_index": 1,
"batch_count": 1,
"changes": []
}
}
Mensagem de heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensagem de ressincronização
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
200 Esquema de resposta de compatibilidade com ferramentas OpenAPI. Conexões WebSocket em tempo de execução fazem upgrade com 101.
application/json · objeto
Mensagem delta
{
"event": "delta",
"data": {
"event_id": "3704597661",
"resume": "1760000000000-0",
"snapshot_id": "capture-123:3704597661",
"batch_index": 1,
"batch_count": 1,
"changes": []
}
}
Mensagem de heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensagem de ressincronização
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
400 Parâmetros de solicitação ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem acesso a este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de solicitações restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que gerou a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Snapshot /v1/events/{event_id}/odds/history
Retorna o movimento de linha para uma única seleção entre casas de apostas e um intervalo de tempo. Use selection\_key\ de uma resposta de snapshot de odds, limite consultas com from\_ts\ e to\_ts\, e refine por casa de apostas ou mercado ao criar gráficos ou backtests.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/odds/history?selection_key=moneyline%3Ahome&bookmakers=bet365"
Parâmetros
Caminho
event_id obrigatório
string
Identificador canônico de evento ou corrida a partir de uma resposta de lista de eventos.
Consulta
selection_key obrigatório
string
Identificador estável de seleção a partir de uma linha de snapshot de odds, usado para histórico e movimento de linha.
market_group_id
string
Filtro opcional de agrupamento de mercado para consultas de histórico.
bookmakers
string
Lista de permissão de casas de apostas separada por vírgulas. Use /bookmakers\ para descobrir chaves suportadas.
from_ts
string
Timestamp de início UTC ISO8601 para uma consulta de histórico limitada.
to_ts
string
Timestamp de fim UTC ISO8601 para uma consulta de histórico limitada.
price_type
string
Tipo de preço de histórico a retornar, por exemplo, odds.
price_fields
string
odds\, odds,novig\, odds,fair\ ou all\. Clientes compactos usam odds\ por padrão; clientes existentes usam os campos de precificação completos atuais por padrão.
include_source
booleano
Quando verdadeiro, inclui metadados de proveniência e captura por linha/casa de apostas. Campos de atualização de nível superior são sempre mantidos.
include_debug_ids
booleano
Quando verdadeiro, inclui IDs internos/de subgrupo/opostos úteis para reconciliação.
include_unavailable
booleano
Quando verdadeiro, inclui linhas indisponíveis ou suspensas onde o endpoint as suporta.
limit_points_per_bookmaker
inteiro
Número máximo de pontos de histórico por casa de apostas. Use isso para manter os payloads de gráficos/backtests limitados.
Respostas
200 Resposta bem-sucedida
application/json · objeto
Histórico de odds do evento: Snapshot
{
"event_id": "3704597661",
"selection_key": "moneyline:home",
"price_type": "odds",
"series": [
{
"bookmaker_name": "bet365",
"points": [
{
"tick_ts": "2026-04-29T08:00:00Z",
"is_available": true,
"odds": 2.08
},
{
"tick_ts": "2026-04-29T08:05:00Z",
"is_available": true,
"odds": 2.1
}
]
}
],
"meta": {
"from_ts": "2026-04-29T08:00:00Z",
"to_ts": "2026-04-29T09:00:00Z",
"available_price_types": [
"odds",
"odds_no_vig",
"fair_odds"
]
}
}
400 Parâmetros de solicitação ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem acesso a este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de solicitações restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que gerou a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (SSE) /v1/events/{event_id}/odds/history/stream
Feed Server-Sent Events para movimento de linha em uma única seleção. Isso é útil para gráficos que devem ser atualizados enquanto um mercado de evento está em movimento.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
curl -N -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/odds/history/stream?selection_key=moneyline%3Ahome&bookmakers=bet365&since=1760000000000-0&catchup=true"
Parâmetros
Caminho
event_id obrigatório
string
Identificador canônico de evento ou corrida a partir de uma resposta de lista de eventos.
Consulta
selection_key obrigatório
string
Identificador estável de seleção a partir de uma linha de snapshot de odds, usado para histórico e movimento de linha.
market_group_id
string
Filtro opcional de agrupamento de mercado para consultas de histórico.
bookmakers
string
Lista de permissão de casas de apostas separada por vírgulas. Use /bookmakers\ para descobrir chaves suportadas.
price_type
string
Tipo de preço de histórico a retornar, por exemplo, odds.
price_fields
string
odds\, odds,novig\, odds,fair\ ou all\. Clientes compactos usam odds\ por padrão; clientes existentes usam os campos de precificação completos atuais por padrão.
include_source
booleano
Quando verdadeiro, inclui metadados de proveniência e captura por linha/casa de apostas. Campos de atualização de nível superior são sempre mantidos.
include_debug_ids
booleano
Quando verdadeiro, inclui IDs internos/de subgrupo/opostos úteis para reconciliação.
include_unavailable
booleano
Quando verdadeiro, inclui linhas indisponíveis ou suspensas onde o endpoint as suporta.
since
string
Token de retomada de um snapshot ou mensagem de stream anterior. Passe-o após reconectar.
catchup
booleano
Quando verdadeiro, retorna eventos de stream perdidos disponíveis após since\ antes de aguardar novos eventos.
heartbeat_sec
inteiro
Intervalo de heartbeat em segundos para verificação de atividade do stream. Intervalo válido: 5-120.
max_batch
inteiro
Número máximo de mensagens de stream para ler por lote. O padrão é 500; use lotes menores para clientes de baixa latência.
Respostas
200 Stream Server-Sent Events. Cada mensagem tem um nome de evento e payload de dados JSON.
text/event-stream · objeto
Mensagem delta decodificada
event: delta
data: {
"event_id": "3704597661",
"selection_key": "moneyline:home",
"resume": "1760000000000-0",
"points": []
}
Mensagem de heartbeat decodificada
event: heartbeat
data: {}
Mensagem de ressincronização decodificada
event: resync
data: {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
400 Parâmetros de solicitação ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem acesso a este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de solicitações restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que gerou a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (WebSocket) /v1/events/{event_id}/odds/history/ws
Feed WebSocket para movimento de linha em uma única seleção. As mensagens espelham os payloads do stream SSE de histórico.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
wscat -c "wss://api.odds-api.net/v1/events/3704597661/odds/history/ws?selection_key=moneyline%3Ahome&bookmakers=bet365&since=1760000000000-0&catchup=true&api_key=$ODDS_API_KEY"
Parâmetros
Caminho
event_id obrigatório
string
Identificador canônico de evento ou corrida a partir de uma resposta de lista de eventos.
Consulta
selection_key obrigatório
string
Identificador estável de seleção a partir de uma linha de snapshot de odds, usado para histórico e movimento de linha.
market_group_id
string
Filtro opcional de agrupamento de mercado para consultas de histórico.
bookmakers
string
Lista de permissão de casas de apostas separada por vírgulas. Use /bookmakers\ para descobrir chaves suportadas.
price_type
string Tipo de preço histórico a retornar, por exemplo, odds.
price_fields
string
odds\, odds,novig\, odds,fair\ ou all\. Clientes compactos usam odds\ por padrão; clientes existentes usam os campos de precificação completos atuais por padrão.
include_source
boolean
Quando verdadeiro, inclui proveniência por linha/por casa de apostas e metadados de captura. Campos de atualização de nível superior são sempre mantidos.
include_debug_ids
boolean
Quando verdadeiro, inclui IDs internos/de subgrupo/opostos úteis para reconciliação.
include_unavailable
boolean
Quando verdadeiro, inclui linhas indisponíveis ou suspensas onde o endpoint as suporta.
since
string
Token de retomada de um snapshot anterior ou mensagem de stream. Passe-o após reconectar.
catchup
boolean
Quando verdadeiro, retorna eventos de stream perdidos disponíveis após since\ antes de aguardar novos eventos.
heartbeat_sec
integer
Intervalo de heartbeat em segundos para verificação de atividade do stream. Intervalo válido: 5-120.
max_batch
integer
Número máximo de mensagens do stream a ler por lote. O padrão é 500; use lotes menores para clientes de baixa latência.
Respostas
101 Conexão WebSocket estabelecida. Mensagens são objetos JSON.
application/json · objeto
Mensagem delta
{
"event": "delta",
"data": {
"event_id": "3704597661",
"selection_key": "moneyline:home",
"resume": "1760000000000-0",
"points": []
}
}
Mensagem heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensagem de ressincronização
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
200 Esquema de resposta de compatibilidade com ferramentas OpenAPI. Conexões WebSocket em runtime fazem upgrade com 101.
application/json · objeto
Mensagem delta
{
"event": "delta",
"data": {
"event_id": "3704597661",
"selection_key": "moneyline:home",
"resume": "1760000000000-0",
"points": []
}
}
Mensagem heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensagem de ressincronização
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
400 Parâmetros ou corpo de requisição inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais válidas, mas sem permissão para este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
integer
Segundos a aguardar antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
integer
Capacidade do bucket de requisições do bucket limitador ativo, quando fornecida.
X-RateLimit-Remaining
integer
Aproximação de requisições restantes no bucket limitador ativo, quando fornecida.
X-RateLimit-Bucket
string
Nome do bucket limitador que gerou a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Bolsa de esportes
Livros de ofertas de bolsa de apostas esportivas com escadas back/lay, liquidez e atualizações em tempo real.
URL base https://api.odds-api.net/v1 Versão 1.0.0 Fonte OpenAPI ao vivo
GET Snapshot /v1/events/{event_id}/exchange/orderbook/snapshot
Retorna livros de ofertas de bolsa de apostas esportivas para um evento. Bolsas suportadas: betdaq, betfair, smarkets e matchbook. Cada seleção inclui níveis de preço back e lay com tamanho disponível, além de campos de resumo de topo de livro, como best_back_price e best_lay_price. Identidade do mercado, identidade do time, timestamps de origem e observação, moeda, total negociado, total disponível, volume negociado e volume negociado por preço são mantidos quando fornecidos pela fonte da bolsa. O volume da Smarkets é informado em GBP e inclui seu double_stake_volume nativo quando disponível. Use depth\ para limitar níveis de ladder executáveis e armazene em cache apenas brevemente, pois a liquidez da bolsa pode mudar rapidamente.
Auth: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de requisição
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/exchange/orderbook/snapshot?market_keys=moneyline"
Parâmetros
Caminho
event_id obrigatório
string
Identificador canônico de evento ou corrida de uma resposta de lista de eventos.
Consulta
exchanges
string
Lista de permissão de bolsas separada por vírgulas. Valores suportados: betdaq\, betfair\, smarkets\ e matchbook\.
market_keys
string
Lista de permissão de chaves de mercado separada por vírgulas para filtros de odds.
selection_keys
string
Identificadores estáveis de seleção separados por vírgulas de um livro de ofertas de bolsa ou snapshot de odds.
depth
integer
Número de níveis de preço da bolsa por lado back/lay. Use valores menores para menor latência e tamanho de payload.
include_source
boolean
Quando verdadeiro, inclui proveniência por linha/por casa de apostas e metadados de captura. Campos de atualização de nível superior são sempre mantidos.
include_unavailable
boolean
Quando verdadeiro, inclui linhas indisponíveis ou suspensas onde o endpoint as suporta.
refresh
boolean
Solicita coleta Betfair limitada e orientada por demanda antes de retornar.
refresh_timeout_seconds
number
Respostas
200 Resposta bem-sucedida
application/json · objeto
Livro de ofertas de bolsa do evento: Snapshot
{
"event_id": "3704597661",
"as_of_ts_ms": 1760000000000,
"ttl_seconds": 30,
"items": [
{
"id": "betfair::1.23456789::moneyline",
"event_id": "3704597661",
"exchange": "betfair",
"exchange_market_id": "1.23456789",
"market_key": "moneyline",
"market_name": "Match Odds",
"bet_type": "moneyline",
"period": "full time",
"home_team": "Home",
"away_team": "Away",
"status": "open",
"in_play": false,
"total_matched": 24567.12,
"total_available": 204.8,
"total_available_source": "displayed_ladders",
"currency": "AUD",
"observed_at": "2026-08-22T08:00:00Z",
"selections": [
{
"selection_key": "moneyline:home",
"exchange_selection_id": "12345",
"selection_name": "Home",
"last_traded_price": 2.08,
"traded_volume_by_price": [
{
"price": 2.08,
"size": 300.0
}
],
"available_to_back": [
{
"price": 2.08,
"size": 120.5
}
],
"available_to_lay": [
{
"price": 2.1,
"size": 84.3
}
],
"best_back_price": 2.08,
"best_back_size": 120.5,
"best_lay_price": 2.1,
"best_lay_size": 84.3
}
]
}
],
"next_cursor": null,
"resume": "1760000000000-0"
}
400 Parâmetros ou corpo de requisição inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais válidas, mas sem permissão para este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
integer
Segundos a aguardar antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
integer
Capacidade do bucket de requisições do bucket limitador ativo, quando fornecida.
X-RateLimit-Remaining
integer
Aproximação de requisições restantes no bucket limitador ativo, quando fornecida.
X-RateLimit-Bucket
string
Nome do bucket limitador que gerou a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (SSE) /v1/events/{event_id}/exchange/orderbook/stream
Feed de Server-Sent Events para alterações no livro de ofertas de bolsa esportiva em um evento. Assine após ler o snapshot e passe o valor resume\ do snapshot como since\ para receber alterações de atualização quando disponíveis. Trate delta\, heartbeat\ e resync\; recarregue o snapshot após resync\.
Auth: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de requisição
curl -N -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/exchange/orderbook/stream?market_keys=moneyline&since=1760000000000-0&catchup=true"
Parâmetros
Caminho
event_id obrigatório
string
Identificador canônico de evento ou corrida de uma resposta de lista de eventos.
Consulta
exchanges
string
Lista de permissão de bolsas separada por vírgulas. Valores suportados: betdaq\, betfair\, smarkets\ e matchbook\.
market_keys
string
Lista de permissão de chaves de mercado separada por vírgulas para filtros de odds.
selection_keys
string
Identificadores estáveis de seleção separados por vírgulas de um livro de ofertas de bolsa ou snapshot de odds.
depth
integer
Número de níveis de preço da bolsa por lado back/lay. Use valores menores para menor latência e tamanho de payload.
include_source
boolean
Quando verdadeiro, inclui proveniência por linha/por casa de apostas e metadados de captura. Campos de atualização de nível superior são sempre mantidos.
include_unavailable
boolean
Quando verdadeiro, inclui linhas indisponíveis ou suspensas onde o endpoint as suporta.
since
string
Token de retomada de um snapshot anterior ou mensagem de stream. Passe-o após reconectar.
catchup
boolean
Quando verdadeiro, retorna eventos de stream perdidos disponíveis após since\ antes de aguardar novos eventos.
heartbeat_sec
integer
Intervalo de heartbeat em segundos para verificação de atividade do stream. Intervalo válido: 5-120.
max_batch
integer
Número máximo de mensagens do stream a ler por lote. O padrão é 500; use lotes menores para clientes de baixa latência.
Respostas
200 Stream de Server-Sent Events. Cada mensagem tem um nome de evento e payload de dados JSON.
text/event-stream · objeto
Mensagem delta decodificada
event: delta
data: {
"event_id": "3704597661",
"resume": "1760000000000-0",
"changes": []
}
Mensagem heartbeat decodificada
event: heartbeat
data: {}
Mensagem de ressincronização decodificada
event: resync
data: {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
400 Parâmetros ou corpo de requisição inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais válidas, mas sem permissão para este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
integer
Segundos a aguardar antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
integer
Capacidade do bucket de requisições do bucket limitador ativo, quando fornecida.
X-RateLimit-Remaining
integer
Aproximação de requisições restantes no bucket limitador ativo, quando fornecida.
X-RateLimit-Bucket
string
Nome do bucket limitador que gerou a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (WebSocket) /v1/events/{event_id}/exchange/orderbook/ws
Feed WebSocket para alterações no livro de ofertas de bolsa esportiva em um evento. Mensagens espelham os payloads do stream SSE do livro de ofertas da bolsa.
Auth: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de requisição
wscat -c "wss://api.odds-api.net/v1/events/3704597661/exchange/orderbook/ws?market_keys=moneyline&since=1760000000000-0&catchup=true&api_key=$ODDS_API_KEY"
Parâmetros
Caminho
event_id obrigatório
string
Identificador canônico de evento ou corrida de uma resposta de lista de eventos.
Consulta
exchanges
string
Lista de permissão de bolsas separada por vírgulas. Valores suportados: betdaq\, betfair\, smarkets\ e matchbook\.
market_keys
string
Lista de permissão de chaves de mercado separada por vírgulas para filtros de odds.
selection_keys
string
Identificadores estáveis de seleção separados por vírgulas de um livro de ofertas de bolsa ou snapshot de odds.
depth
integer
Número de níveis de preço da bolsa por lado back/lay. Use valores menores para menor latência e tamanho de payload.
include_source
boolean
Quando verdadeiro, inclui proveniência por linha/por casa de apostas e metadados de captura. Campos de atualização de nível superior são sempre mantidos.
include_unavailable
boolean
Quando verdadeiro, inclui linhas indisponíveis ou suspensas onde o endpoint as suporta.
since
string
Token de retomada de um snapshot anterior ou mensagem de stream. Passe-o após reconectar.
catchup
boolean
Quando verdadeiro, retorna eventos de stream perdidos disponíveis após since\ antes de aguardar novos eventos.
heartbeat_sec
integer
Intervalo de heartbeat em segundos para verificação de atividade do stream. Intervalo válido: 5-120.
max_batch
integer
Número máximo de mensagens do stream a ler por lote. O padrão é 500; use lotes menores para clientes de baixa latência.
Respostas
101 Conexão WebSocket estabelecida. Mensagens são objetos JSON.
application/json · objeto
Mensagem delta
{
"event": "delta",
"data": {
"event_id": "3704597661",
"resume": "1760000000000-0",
"changes": []
}
}
Mensagem heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensagem de ressincronização
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
200 Esquema de resposta de compatibilidade com ferramentas OpenAPI. Conexões WebSocket em runtime fazem upgrade com 101.
application/json · objeto
Mensagem delta
{
"event": "delta",
"data": {
"event_id": "3704597661",
"resume": "1760000000000-0",
"changes": []
}
}
Mensagem heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensagem de ressincronização
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
400 Parâmetros ou corpo de requisição inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos para aguardar antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de solicitações restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Descobrir mercados /v1/events/{event_id}/exchange/markets
Lista os mercados Betfair disponíveis em vários esportes, incluindo futebol e críquete. Forneça um ID de evento WagerWise ou id_type=betfair com um ID de evento Betfair nativo. Filtre usando market_types; MATCH_ODDS é classificado primeiro. Use os valores opacos de market_id retornados com o WebSocket multiplexado; não envie nomes ou IDs de mercados Betfair.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling intensos.
Exemplo de solicitação
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/exchange/markets"
Parâmetros
Caminho
event_id obrigatório
string
Identificador canônico de evento ou corrida de uma resposta de lista de eventos.
Consulta
exchange
string
id_type
string
Namespace de event_id; IDs Betfair são IDs numéricos de eventos, não IDs de mercados.
market_types
string
Opcional: tipos de mercado Betfair separados por vírgula, ex.: MATCH_ODDS,OVER_UNDER_25.
refresh
booleano
Respostas
200 Resposta bem-sucedida
application/json · objeto
Exemplo gerado
{
"score_subscription": {
"websocket_url": "string",
"command": {},
"max_events_per_connection": 123
},
"event_id": "3704597661",
"exchange": "string",
"count": 123,
"available_market_types": [
"string"
],
"markets": [
{
"market_id": "string",
"event_id": "3704597661",
"wagerwise_event_id": "3704597661",
"betfair_event_id": "3704597661",
"exchange": "string",
"sport": "basketball",
"market_key": "moneyline",
"bet_type": "string",
"metric": "string",
"period": "0"
}
],
"subscription": {
"websocket_url": "string",
"command": {},
"max_markets_per_connection": 123
}
}
400 Parâmetros de solicitação ou corpo inválidos.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos para aguardar antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de solicitações restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Listar eventos Betfair ao vivo /v1/exchange/betfair/events
Lista todos os eventos que a Betfair reporta como ao vivo, incluindo eventos exclusivamente nativos fora da programação WagerWise. Cada item tem um match_odds_market_id opaco ao qual você pode se inscrever no WebSocket multiplexado sem uma chamada de descoberta; use markets_url para outros mercados. Filtre com sport e scheduled. Atualizado a cada 30 segundos aproximadamente; source_age_seconds e stale reportam a atualização.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling intensos.
Exemplo de solicitação
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/exchange/betfair/events?sport=basketball&limit=25"
Parâmetros
Consulta
in_play
booleano
Apenas true é suportado: eventos que a Betfair reporta como ao vivo agora.
sport
string
Filtro de esporte. Use /sports\ para descobrir valores suportados.
scheduled
booleano
true: apenas eventos na programação WagerWise; false: apenas eventos Betfair exclusivamente nativos.
offset
inteiro
limit
inteiro
Número máximo de itens a retornar. Respeite os limites retornados por /limits\.
Respostas
200 Resposta bem-sucedida
application/json · objeto
Exemplo gerado
{
"exchange": "betfair",
"items": [
{
"betfair_event_id": "3704597661",
"event_id": "3704597661",
"wagerwise_event_id": "3704597661",
"sport": "basketball",
"event_name": "string",
"competition_name": "string",
"start_time": "string",
"in_play": true,
"match_odds_market_id": "string",
"runners": [
"string"
]
}
],
"count": 123,
"total": 123,
"observed_at": 123,
"source_age_seconds": 123,
"stale": true,
"subscription": {
"websocket_url": "string",
"command": {},
"max_markets_per_connection": 123
}
}
400 Parâmetros de solicitação ou corpo inválidos.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos para aguardar antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de solicitações restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Descobrir por ID de evento Betfair /v1/exchange/betfair/events/{betfair_event_id}/markets
Operação pública da Odds API. Autentique com X-API-Key\. Verifique os carimbos de data/hora antes de exibir preços e trate mercados vazios, desatualizados ou suspensos.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling intensos.
Exemplo de solicitação
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/exchange/betfair/events/3704597661/markets"
Parâmetros
Caminho
betfair_event_id obrigatório
string
Consulta
market_types
string
refresh
booleano
Respostas
200 Resposta bem-sucedida
application/json · objeto
Exemplo gerado
{
"score_subscription": {
"websocket_url": "string",
"command": {},
"max_events_per_connection": 123
},
"event_id": "3704597661",
"exchange": "string",
"count": 123,
"available_market_types": [
"string"
],
"markets": [
{
"market_id": "string",
"event_id": "3704597661",
"wagerwise_event_id": "3704597661",
"betfair_event_id": "3704597661",
"exchange": "string",
"sport": "basketball",
"market_key": "moneyline",
"bet_type": "string",
"metric": "string",
"period": "0"
}
],
"subscription": {
"websocket_url": "string",
"command": {},
"max_markets_per_connection": 123
}
}
400 Parâmetros de solicitação ou corpo inválidos.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos para aguardar antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de solicitações restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET WebSocket multiplexado /v1/exchange/orderbooks/ws
Um WebSocket aprovado pelo suporte pode se inscrever e cancelar a inscrição dinamicamente em até cinco IDs de mercado opacos. Envie {op: subscribe, market_ids: [...], depth: 3}; o servidor confirma imediatamente, envia uma imagem em cache quando disponível e, em seguida, deltas e heartbeats. Todo livro de ofertas inclui in_play. O handshake usa um crédito de API; o tempo de conexão e os bytes lógicos usam as cotas de stream do plano.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling intensos.
Exemplo de solicitação
wscat -c "wss://api.odds-api.net/v1/exchange/orderbooks/ws?api_key=$ODDS_API_KEY"
Respostas
101 Conexão WebSocket estabelecida. Envie comandos JSON de subscribe/unsubscribe.
application/json · objeto
Exemplo gerado
{
"type": "subscribed",
"event_id": "3704597661",
"resume": "1760000000000-0",
"market_ids": [
"string"
],
"changes": [
{}
]
}
400 Parâmetros de solicitação ou corpo inválidos.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 As credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos para aguardar antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de solicitações restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET WebSocket multiplexado /v1/exchange/tennis/scores/ws
Requer X-API-Key com tennis_scores_enabled=true. Descubra primeiro os IDs de eventos de tênis usando a descoberta de mercados de exchange. Envie comandos de subscribe/unsubscribe com event_ids (máximo 10) ou ping. Abrir sozinho não inicia nenhuma coleta. O primeiro placar é uma imagem; o delta contém um placar substituto completo. Heartbeats de cinco segundos indicam apenas que o socket está ativo. Os placares são efêmeros: sem histórico ou replay. received_at é o nosso horário de recebimento; source_timestamp é null. Placar e preços são observações independentes e podem estar atrasados ou imprecisos. Campos anuláveis não são inferidos. Trate unknown_event_ids, event_limit_exceeded, warming_timeout, score_unavailable, stale e upstream_unavailable. A exaustão da cota fecha com 4429; autenticação e disponibilidade usam os códigos de fechamento de stream padrão. Reconecte e inscreva-se novamente após a desconexão; os números de sequência são limitados ao processo do roteador ativo.
Autenticação: X-API-Key Trate HTTP 429 com backoff e evite loops de polling intensos.
Exemplo de solicitação
wscat -c "wss://api.odds-api.net/v1/exchange/tennis/scores/ws?api_key=$ODDS_API_KEY"
Respostas
101 WebSocket estabelecido; inscreva-se nos IDs de eventos de tênis descobertos.
application/json · objeto
Exemplo gerado
{
"type": "image",
"event_id": "3704597661",
"stream_id": "string",
"sequence": 123,
"update_kind": "initial",
"score": {
"sport": "basketball",
"provider": "string",
"home": {
"name": "string",
"sets": 123,
"games": 123,
"points": "string",
"is_serving": true,
"game_sequence": [
123
]
},
"away": {
"name": "string",
"sets": 123,
"games": 123,
"points": "string",
"is_serving": true,
"game_sequence": [
123
]
},
"current_set": 123,
"current_game": 123,
"match_status": "string",
"tie_break": true,
"received_at": "string",
"source_timestamp": null
},
"freshness": {
"state": "live",
"age_ms": 123,
"poll_interval_ms": 123
}
}
400 Parâmetros de solicitação ou corpo inválidos.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Direito de acesso a placares de tênis necessário. 404 Recurso não encontrado.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos para aguardar antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de solicitações restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Exemplo gerado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Mercados de previsão
Livros de ofertas de mercados de previsão vinculados a eventos, com escadas de probabilidade, liquidez e atualizações ao vivo.
URL base https://api.odds-api.net/v1 Versão 1.0.0 Fonte OpenAPI ao vivo
GET Snapshot /v1/events/{event_id}/prediction-markets/orderbook/snapshot
Retorna os livros de ofertas da Polymarket e da Kalshi vinculados a um único evento esportivo canônico do WagerWise. Cada contrato contém escadas de probabilidade executáveis de compra e venda, probabilidade e tamanho no topo do livro, a probabilidade da negociação mais recente quando disponível, odds decimais brutas e ajustadas por taxas estimadas, metadados de liquidez e frescor da fonte. Use providers\, market\_keys\ e contract\_ids\ para restringir a resposta e depth\ para limitar cada escada. A disponibilidade de mercados é curada para a oferta esportiva suportada pelo WagerWise.
Auth: X-API-Key Lide com HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de requisição
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/prediction-markets/orderbook/snapshot?market_keys=moneyline"
Parâmetros
Path
event_id obrigatório
string
Identificador canônico de evento ou corrida de uma resposta de lista de eventos.
Query
providers
string
Lista de permissão de provedores de mercado de previsão separada por vírgulas: polymarket\, kalshi\.
market_keys
string
Lista de permissão de chaves de mercado separada por vírgulas para filtros de odds.
contract_ids
string
Lista de permissão de IDs de contrato separada por vírgulas de um snapshot de mercado de previsão.
depth
integer
Número de níveis de preço de probabilidade por lado de compra/venda. Use valores menores para menor latência e tamanho de payload.
include_source
boolean
Quando verdadeiro, inclui metadados de proveniência e captura por linha/por casa de apostas. Campos de frescor de nível superior são sempre mantidos.
include_unavailable
boolean
Quando verdadeiro, inclui linhas indisponíveis ou suspensas onde o endpoint as suporta.
Respostas
200 Resposta bem-sucedida
application/json · objeto
Livro de ofertas do mercado de previsão: Snapshot
{
"event_id": "3704597661",
"as_of_ts_ms": 1760000000000,
"ttl_seconds": 30,
"items": [
{
"id": "polymarket::nba-example::moneyline",
"event_id": "3704597661",
"provider": "polymarket",
"provider_market_id": "nba-example",
"market_key": "moneyline",
"market_name": "Home vs Away",
"bet_type": "moneyline",
"period": "full time",
"home_team": "Home",
"away_team": "Away",
"status": "open",
"currency": "USD",
"size_unit": "contracts",
"total_liquidity": 4200.0,
"fee_model": "polymarket_sports_taker",
"fee_estimated": true,
"observed_at": "2026-08-26T08:00:00Z",
"contracts": [
{
"contract_id": "home-contract",
"contract_name": "Home",
"outcome": "yes",
"side": "home",
"status": "open",
"probability_bids": [
{
"price": 0.51,
"size": 120.0
}
],
"probability_asks": [
{
"price": 0.52,
"size": 95.0
}
],
"best_bid_probability": 0.51,
"best_bid_size": 120.0,
"best_ask_probability": 0.52,
"best_ask_size": 95.0,
"gross_decimal_odds": 1.92307692,
"fee_adjusted_decimal_odds": 1.88,
"projection_eligible": true
}
]
}
],
"next_cursor": null,
"resume": "1760000000000-0"
}
400 Parâmetros de requisição ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
integer
Segundos para aguardar antes de tentar novamente quando fornecido pelo limitador.
X-RateLimit-Limit
integer
Capacidade do bucket de requisições para o bucket do limitador ativo quando fornecido.
X-RateLimit-Remaining
integer
Aproximadamente as requisições restantes no bucket do limitador ativo quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (SSE) /v1/events/{event_id}/prediction-markets/orderbook/stream
Feed de eventos enviados pelo servidor para mudanças no livro de ofertas do mercado de previsão em um evento. Leia o snapshot primeiro, depois reconecte com seu token resume\ como since\. Lide com delta\, heartbeat\ e resync\; recarregue o snapshot após resync\.
Auth: X-API-Key Lide com HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de requisição
curl -N -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/prediction-markets/orderbook/stream?market_keys=moneyline&since=1760000000000-0&catchup=true"
Parâmetros
Path
event_id obrigatório
string
Identificador canônico de evento ou corrida de uma resposta de lista de eventos.
Query
providers
string
Lista de permissão de provedores de mercado de previsão separada por vírgulas: polymarket\, kalshi\.
market_keys
string
Lista de permissão de chaves de mercado separada por vírgulas para filtros de odds.
contract_ids
string
Lista de permissão de IDs de contrato separada por vírgulas de um snapshot de mercado de previsão.
depth
integer
Número de níveis de preço de probabilidade por lado de compra/venda. Use valores menores para menor latência e tamanho de payload.
include_source
boolean
Quando verdadeiro, inclui metadados de proveniência e captura por linha/por casa de apostas. Campos de frescor de nível superior são sempre mantidos.
include_unavailable
boolean
Quando verdadeiro, inclui linhas indisponíveis ou suspensas onde o endpoint as suporta.
since
string
Token de retomada de um snapshot anterior ou mensagem de stream. Passe-o após reconectar.
catchup
boolean
Quando verdadeiro, retorna eventos de stream perdidos disponíveis após since\ antes de aguardar novos eventos.
heartbeat_sec
integer
Intervalo de heartbeat em segundos para vivacidade do stream. Faixa válida é 5-120.
max_batch
integer
Máximo de mensagens de stream para ler por lote. Padrão é 500; use lotes menores para clientes de baixa latência.
Respostas
200 Stream de eventos enviados pelo servidor. Cada mensagem tem um nome de evento e payload de dados JSON.
text/event-stream · objeto
Mensagem delta decodificada
event: delta
data: {
"event_id": "3704597661",
"resume": "1760000000000-0",
"changes": []
}
Mensagem de heartbeat decodificada
event: heartbeat
data: {}
Mensagem de ressincronização decodificada
event: resync
data: {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
400 Parâmetros de requisição ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
integer
Segundos para aguardar antes de tentar novamente quando fornecido pelo limitador.
X-RateLimit-Limit
integer
Capacidade do bucket de requisições para o bucket do limitador ativo quando fornecido.
X-RateLimit-Remaining
integer
Aproximadamente as requisições restantes no bucket do limitador ativo quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (WebSocket) /v1/events/{event_id}/prediction-markets/orderbook/ws
Feed WebSocket para mudanças no livro de ofertas do mercado de previsão em um evento. As mensagens espelham os payloads do stream SSE do mercado de previsão e usam os mesmos filtros e semântica de retomada.
Auth: X-API-Key Lide com HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de requisição
wscat -c "wss://api.odds-api.net/v1/events/3704597661/prediction-markets/orderbook/ws?market_keys=moneyline&since=1760000000000-0&catchup=true&api_key=$ODDS_API_KEY"
Parâmetros
Path
event_id obrigatório
string
Identificador canônico de evento ou corrida de uma resposta de lista de eventos.
Query
providers
string
Lista de permissão de provedores de mercado de previsão separada por vírgulas: polymarket\, kalshi\.
market_keys
string
Lista de permissão de chaves de mercado separada por vírgulas para filtros de odds.
contract_ids
string
Lista de permissão de IDs de contrato separada por vírgulas de um snapshot de mercado de previsão.
depth
integer
Número de níveis de preço de probabilidade por lado de compra/venda. Use valores menores para menor latência e tamanho de payload.
include_source
boolean
Quando verdadeiro, inclui metadados de proveniência e captura por linha/por casa de apostas. Campos de frescor de nível superior são sempre mantidos.
include_unavailable
boolean
Quando verdadeiro, inclui linhas indisponíveis ou suspensas onde o endpoint as suporta.
since
string
Token de retomada de um snapshot anterior ou mensagem de stream. Passe-o após reconectar.
catchup
boolean
Quando verdadeiro, retorna eventos de stream perdidos disponíveis após since\ antes de aguardar novos eventos.
heartbeat_sec
integer
Intervalo de heartbeat em segundos para vivacidade do stream. Faixa válida é 5-120.
max_batch
integer
Máximo de mensagens de stream para ler por lote. Padrão é 500; use lotes menores para clientes de baixa latência.
Respostas
101 Conexão WebSocket estabelecida. Mensagens são objetos JSON.
application/json · objeto
Mensagem delta
{
"event": "delta",
"data": {
"event_id": "3704597661",
"resume": "1760000000000-0",
"changes": []
}
}
Mensagem de heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensagem de ressincronização
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
200 Esquema de resposta de compatibilidade de ferramentas OpenAPI. Conexões WebSocket em tempo de execução fazem upgrade com 101.
application/json · objeto
Mensagem delta
{
"event": "delta",
"data": {
"event_id": "3704597661",
"resume": "1760000000000-0",
"changes": []
}
}
Mensagem de heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensagem de ressincronização
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
400 Parâmetros de requisição ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
integer
Segundos para aguardar antes de tentar novamente quando fornecido pelo limitador.
X-RateLimit-Limit
integer
Capacidade do bucket de requisições para o bucket do limitador ativo quando fornecido.
X-RateLimit-Remaining
integer
Aproximadamente as requisições restantes no bucket do limitador ativo quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Eventos de corrida
Descoberta de eventos de corrida e atualizações de eventos de corrida ao vivo.
URL base https://api.odds-api.net/v1 Versão 1.0.0 Fonte OpenAPI ao vivo
GET Search /v1/racing/events
Pesquisa eventos de corrida de cavalos, galgos e trote futuros e ao vivo na Austrália (AU\), Nova Zelândia (NZ\), Grã-Bretanha (GB\) e Irlanda (IE\). Use tipos de corrida canônicos horse-racing\, greyhound-racing\ e harness-racing\; abreviações legadas são normalizadas para compatibilidade retroativa. Combinações retornadas dependem do cronograma ao vivo. Polling de corridas deve usar janelas de tempo estreitas, cursores estáveis e intervalos mais curtos perto da largada. Omita status para descobrir corridas antecipadas: status=fetching exclui eventos ainda marcados como abertos, mesmo quando odds antecipadas existem. O status do ciclo de vida do evento é distinto do status de cada snapshot de odds da casa de apostas. Contagens de participantes preferem o campo completo da Betfair ciente de cancelamentos, recorrem a outra casa de apostas ou ao cronograma, e expõem metadados de fonte, timestamp e completude. Odds de corrida não são filtradas pela seleção de casas de apostas de oportunidade de apostas da chave de API.
Auth: X-API-Key Lide com HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de requisição
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/racing/events?status=fetching&limit=25"
Parâmetros
Query
race_type
string
Filtros de tipo de corrida canônicos separados por vírgulas: horse-racing\, greyhound-racing\ ou harness-racing\. Aliases legados como horse\, thoroughbred\, greyhound\, dog\, dogs\ e harness\ são normalizados para compatibilidade retroativa.
race_state
string
Filtros de estado de corrida separados por vírgulas.
race_country
string
Filtros de país de corrida separados por vírgulas: AU\, NZ\, GB\ ou IE\. Combinações retornadas dependem do cronograma de corridas ao vivo.
status
string
Status de ciclo de vida de eventos separados por vírgulas. Omita para descoberta antecipada: fetching sozinho exclui corridas abertas que podem já ter preços. Este não é o status de snapshot de odds da casa de apostas.
start_from
integer
Limite inferior em segundos Unix para o horário de início do evento. Use janelas limitadas em polling de produção.
start_to
integer
Limite superior em segundos Unix para o horário de início do evento. Mantenha janelas estreitas para trabalhos de sincronização intensos.
cursor
string
Cursor de paginação do next\_cursor\ anterior. Mantenha filtros idênticos entre páginas.
limit
integer
Máximo de itens a retornar. Respeite os limites retornados por /limits\.
include_links
booleano
Quando verdadeiro, inclua campos de bookmaker/links profundos, como links de partidas e links de corridas.
include_source
booleano
Quando verdadeiro, inclua proveniência por linha/bookmaker e metadados de captura. Campos de atualização de nível superior são sempre mantidos.
Respostas
200 Resposta bem-sucedida
application/json · objeto
Eventos de corridas: Busca
{
"items": [
{
"event_id": "race-1001",
"race_type": "horse-racing",
"race_country": "AU",
"race_state": "QLD",
"status": "open",
"race_start_time": 1760000000,
"race_venue": "Doomben",
"active_runners": 7,
"total_runners": 8,
"scratched_runners": 1,
"runner_count_source": "betfair",
"runner_count_updated_at_ts": 1759999700,
"runner_count_complete": true
}
],
"next_cursor": null,
"count": 1
}
400 Parâmetros de solicitação ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de solicitações restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (SSE) /v1/racing/events/stream
Feed Server-Sent Events para inserções, atualizações e remoções de eventos de corridas. Armazene tokens de retomada e recarregue a lista de eventos se um stream solicitar que o cliente ressincronize.
Auth: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
curl -N -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/racing/events/stream"
Parâmetros
Consulta
include_links
booleano
Quando verdadeiro, inclua campos de bookmaker/links profundos, como links de partidas e links de corridas.
include_raw_payload
booleano
Quando verdadeiro, inclua objetos de payload/dados armazenados brutos onde o endpoint os expõe.
include_source
booleano
Quando verdadeiro, inclua proveniência por linha/bookmaker e metadados de captura. Campos de atualização de nível superior são sempre mantidos.
since
string
Token de retomada de um snapshot anterior ou mensagem de stream. Passe-o após reconectar.
catchup
booleano
Quando verdadeiro, retorne eventos de stream perdidos disponíveis após since\ antes de aguardar novos eventos.
heartbeat_sec
inteiro
Intervalo de heartbeat em segundos para verificação de atividade do stream. Intervalo válido é de 5 a 120.
max_batch
inteiro
Máximo de mensagens de stream para ler por lote. O padrão é 500; use lotes menores para clientes de baixa latência.
Respostas
200 Stream Server-Sent Events. Cada mensagem tem um nome de evento e payload de dados JSON.
text/event-stream · objeto
Mensagem delta decodificada
event: delta
data: {
"resume": "1760000000000-0",
"changes": []
}
Mensagem de heartbeat decodificada
event: heartbeat
data: {}
Mensagem de ressincronização decodificada
event: resync
data: {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
400 Parâmetros de solicitação ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de solicitações restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (WebSocket) /v1/racing/events/ws
Feed WebSocket para inserções, atualizações e remoções de eventos de corridas. As mensagens espelham o feed SSE de eventos de corridas.
Auth: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
wscat -c "wss://api.odds-api.net/v1/racing/events/ws?api_key=$ODDS_API_KEY"
Parâmetros
Consulta
include_links
booleano
Quando verdadeiro, inclua campos de bookmaker/links profundos, como links de partidas e links de corridas.
include_raw_payload
booleano
Quando verdadeiro, inclua objetos de payload/dados armazenados brutos onde o endpoint os expõe.
include_source
booleano
Quando verdadeiro, inclua proveniência por linha/bookmaker e metadados de captura. Campos de atualização de nível superior são sempre mantidos.
since
string
Token de retomada de um snapshot anterior ou mensagem de stream. Passe-o após reconectar.
catchup
booleano
Quando verdadeiro, retorne eventos de stream perdidos disponíveis após since\ antes de aguardar novos eventos.
heartbeat_sec
inteiro
Intervalo de heartbeat em segundos para verificação de atividade do stream. Intervalo válido é de 5 a 120.
max_batch
inteiro
Máximo de mensagens de stream para ler por lote. O padrão é 500; use lotes menores para clientes de baixa latência.
Respostas
101 Conexão WebSocket estabelecida. As mensagens são objetos JSON.
application/json · objeto
Mensagem delta
{
"event": "delta",
"data": {
"resume": "1760000000000-0",
"changes": []
}
}
Mensagem de heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensagem de ressincronização
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
200 Esquema de resposta de compatibilidade de ferramentas OpenAPI. Conexões WebSocket em tempo de execução fazem upgrade com 101.
application/json · objeto
Mensagem delta
{
"event": "delta",
"data": {
"resume": "1760000000000-0",
"changes": []
}
}
Mensagem de heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensagem de ressincronização
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
400 Parâmetros de solicitação ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de solicitações restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Detalhes do evento /v1/racing/events/{event_id}
Retorna o registro atual do evento de corrida para um ID de corrida canônico.
Auth: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/racing/events/RACE_EVENT_ID"
Parâmetros
Caminho
event_id obrigatório
string
Identificador canônico de evento ou corrida de uma resposta de lista de eventos.
Consulta
include_links
booleano
Quando verdadeiro, inclua campos de bookmaker/links profundos, como links de partidas e links de corridas.
include_raw_payload
booleano
Quando verdadeiro, inclua objetos de payload/dados armazenados brutos onde o endpoint os expõe.
include_source
booleano
Quando verdadeiro, inclua proveniência por linha/bookmaker e metadados de captura. Campos de atualização de nível superior são sempre mantidos.
Respostas
200 Resposta bem-sucedida
application/json · objeto
Amostra gerada
{
"event_id": "3704597661",
"data": {}
}
400 Parâmetros de solicitação ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos de espera antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Número aproximado de solicitações restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Probabilidades de corridas
Snapshots de probabilidades de corridas, feeds de corridas domésticos, Server-Sent Events e atualizações WebSocket.
URL base https://api.odds-api.net/v1 Versão 1.0.0 Fonte OpenAPI ao vivo
GET Snapshot /v1/racing/events/{event_id}/odds
Retorna snapshots de probabilidades de bookmakers para um evento de corrida. Armazene em cache o último snapshot válido com seu timestamp e prefira streams para exibições em tempo real próximas à largada. Preços WIN compactos estão em items[].runners[].win_odds. O volume do mercado WIN da Exchange está em items[].total_matched e o volume negociado por corredor, quando fornecido, está em items[].runners[].traded_volume. Estes são valores acumulados negociados, não profundidade executável atual. Preços brutos da Sportsbet, quando solicitados, estão em items[].payload.horse_data[].odds. Status inicial ok e status fetching próximo à largada podem ambos conter preços válidos. active_runners, total_runners, scratched_runners, runner_count_source, runner_count_updated_at_ts e runner_count_complete de nível superior descrevem o melhor estado de campo disponível. A seleção de bookmaker de oportunidade de aposta da chave de API não filtra probabilidades de corridas. Solicite include_source=true para timestamps de snapshot e include_links=true para bookmaker_link, independentemente de include_raw_payload.
Auth: X-API-Key Trate HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/racing/events/RACE_EVENT_ID/odds"
Parâmetros
Caminho
event_id obrigatório
string
Identificador canônico de evento ou corrida de uma resposta de lista de eventos.
Consulta
bookmakers
string
Lista de permissão de bookmakers separada por vírgulas. Use /bookmakers\ para descobrir chaves suportadas.
include_links
booleano
Inclua bookmaker_link quando disponível, independentemente do payload bruto. Clientes compactos omitem links por padrão. false remove links, incluindo links brutos aninhados.
include_raw_payload
booleano
Inclua payload específico do bookmaker. Clientes compactos usam false por padrão e recebem runners[].win_odds; preços WIN brutos da Sportsbet são payload.horse_data[].odds.
include_source
booleano
Inclua metadados de origem, como updated_at_ts (segundos Unix). Clientes compactos os omitem por padrão.
include_unavailable
booleano
Inclua snapshots de bookmakers sem preços compactos de corredores WIN ou PLACE. Isso não restringe probabilidades ao status fetching; status inicial ok pode conter preços válidos.
Respostas
200 Resposta bem-sucedida
application/json · objeto
Probabilidades de corridas: Snapshot
{
"event_id": "race-1001",
"as_of_ts_ms": 1760000000000,
"active_runners": 7,
"total_runners": 8,
"scratched_runners": 1,
"runner_count_source": "betfair",
"runner_count_updated_at_ts": 1759999700,
"runner_count_complete": true,
"items": [
{
"bookmaker_name": "betfair",
"race_id": "race-1001",
"status": "ok",
"total_matched": 24567.12,
"runners": [
{
"runner_number": "1",
"runner_name": "Example Runner",
"win_odds": 3.4,
"place_odds": 1.65,
"traded_volume": 4100.0
}
]
}
],
"resume": "1760000000000-0"
}
400 Parâmetros de solicitação ou corpo inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto Am amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos para aguardar antes de tentar novamente, quando fornecido pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Aproximadamente as solicitações restantes no bucket do limitador ativo, quando fornecidas.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (SSE) /v1/racing/events/{event_id}/odds/stream
Feed de Eventos Enviados pelo Servidor para mudanças nas odds de corridas em um evento. Reconecte com since=<last\_resume\>\ e recarregue o snapshot após resync\. Cada changes[].snapshot usa os mesmos campos compactos de corredores, flags de link e significados de status de odds que o endpoint de snapshot de odds de corridas para clientes compactos. Clientes não compactos com include_raw_payload=true recebem dados brutos da casa de apostas diretamente no snapshot (Sportsbet: snapshot.horse_data[].odds), sem um wrapper de payload.
Autenticação: X-API-Key Lide com HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
curl -N -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/racing/events/RACE_EVENT_ID/odds/stream?since=RACE_RESUME_TOKEN&catchup=true"
Parâmetros
Caminho
event_id obrigatório
string
Identificador canônico de evento ou corrida de uma resposta de lista de eventos.
Consulta
include_links
booleano
Incluir bookmaker_link quando disponível, independentemente do payload bruto. Clientes compactos omitem links por padrão. false remove links, incluindo links brutos aninhados.
include_raw_payload
booleano
Incluir payload específico da casa de apostas. Clientes compactos usam false por padrão e recebem runners[].win_odds; preços WIN brutos da Sportsbet são payload.horse_data[].odds.
include_source
booleano
Incluir metadados de origem, como updated_at_ts (segundos Unix). Clientes compactos os omitem por padrão.
include_unavailable
booleano
Incluir snapshots da casa de apostas sem preços compactos de WIN ou PLACE dos corredores. Isso não restringe odds ao status de busca; status ok inicial pode conter preços válidos.
since
string
Token de retomada de um snapshot anterior ou mensagem de stream. Passe-o após reconectar.
catchup
booleano
Quando true, retorna eventos de stream perdidos disponíveis após since\ antes de aguardar novos eventos.
heartbeat_sec
inteiro
Intervalo de heartbeat em segundos para a atividade do stream. Intervalo válido é 5-120.
max_batch
inteiro
Máximo de mensagens de stream para ler por lote. O padrão é 500; use lotes menores para clientes de baixa latência.
Respostas
200 Stream de Eventos Enviados pelo Servidor. Cada mensagem tem um nome de evento e payload de dados JSON.
text/event-stream · objeto
Mensagem delta decodificada
event: delta
data: {
"event_id": "race-1001",
"resume": "1760000000000-0",
"changes": [
{
"op": "upsert",
"bookmaker_name": "sportsbet",
"snapshot": {
"bookmaker_name": "betfair",
"race_id": "race-1001",
"status": "ok",
"total_matched": 24567.12,
"runners": [
{
"runner_number": "1",
"runner_name": "Example Runner",
"win_odds": 3.4,
"place_odds": 1.65,
"traded_volume": 4100.0
}
]
}
}
]
}
Mensagem de heartbeat decodificada
event: heartbeat
data: {}
Mensagem de ressincronização decodificada
event: resync
data: {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
400 Parâmetros ou corpo de solicitação inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos para aguardar antes de tentar novamente, quando fornecido pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Aproximadamente as solicitações restantes no bucket do limitador ativo, quando fornecidas.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (WebSocket) /v1/racing/events/{event_id}/odds/ws
Feed WebSocket para mudanças nas odds de corridas em um evento. As mensagens espelham o feed SSE de odds de corridas.
Autenticação: X-API-Key Lide com HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
wscat -c "wss://api.odds-api.net/v1/racing/events/RACE_EVENT_ID/odds/ws?since=RACE_RESUME_TOKEN&catchup=true&api_key=$ODDS_API_KEY"
Parâmetros
Caminho
event_id obrigatório
string
Identificador canônico de evento ou corrida de uma resposta de lista de eventos.
Consulta
include_links
booleano
Incluir bookmaker_link quando disponível, independentemente do payload bruto. Clientes compactos omitem links por padrão. false remove links, incluindo links brutos aninhados.
include_raw_payload
booleano
Incluir payload específico da casa de apostas. Clientes compactos usam false por padrão e recebem runners[].win_odds; preços WIN brutos da Sportsbet são payload.horse_data[].odds.
include_source
booleano
Incluir metadados de origem, como updated_at_ts (segundos Unix). Clientes compactos os omitem por padrão.
include_unavailable
booleano
Incluir snapshots da casa de apostas sem preços compactos de WIN ou PLACE dos corredores. Isso não restringe odds ao status de busca; status ok inicial pode conter preços válidos.
since
string
Token de retomada de um snapshot anterior ou mensagem de stream. Passe-o após reconectar.
catchup
booleano
Quando true, retorna eventos de stream perdidos disponíveis após since\ antes de aguardar novos eventos.
heartbeat_sec
inteiro
Intervalo de heartbeat em segundos para a atividade do stream. Intervalo válido é 5-120.
max_batch
inteiro
Máximo de mensagens de stream para ler por lote. O padrão é 500; use lotes menores para clientes de baixa latência.
Respostas
101 Conexão WebSocket estabelecida. As mensagens são objetos JSON.
application/json · objeto
Mensagem delta
{
"event": "delta",
"data": {
"event_id": "race-1001",
"resume": "1760000000000-0",
"changes": [
{
"op": "upsert",
"bookmaker_name": "sportsbet",
"snapshot": {
"bookmaker_name": "betfair",
"race_id": "race-1001",
"status": "ok",
"total_matched": 24567.12,
"runners": [
{
"runner_number": "1",
"runner_name": "Example Runner",
"win_odds": 3.4,
"place_odds": 1.65,
"traded_volume": 4100.0
}
]
}
}
]
}
}
Mensagem de heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensagem de ressincronização
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
200 Esquema de resposta de compatibilidade de ferramentas OpenAPI. Conexões WebSocket em tempo de execução fazem upgrade com 101.
application/json · objeto
Mensagem delta
{
"event": "delta",
"data": {
"event_id": "race-1001",
"resume": "1760000000000-0",
"changes": [
{
"op": "upsert",
"bookmaker_name": "sportsbet",
"snapshot": {
"bookmaker_name": "betfair",
"race_id": "race-1001",
"status": "ok",
"total_matched": 24567.12,
"runners": [
{
"runner_number": "1",
"runner_name": "Example Runner",
"win_odds": 3.4,
"place_odds": 1.65,
"traded_volume": 4100.0
}
]
}
}
]
}
}
Mensagem de heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensagem de ressincronização
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
400 Parâmetros ou corpo de solicitação inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos para aguardar antes de tentar novamente, quando fornecido pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Aproximadamente as solicitações restantes no bucket do limitador ativo, quando fornecidas.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Oportunidades de apostas
Feeds de oportunidades de EV positivo, arbitragem, middle e bônus de aposta.
URL base https://api.odds-api.net/v1 Versão 1.0.0 Fonte OpenAPI ao vivo
GET Snapshot /v1/bets/snapshot
Retorna oportunidades de apostas atuais por estratégia. Use strategies\, limit\ e event\_id\ para manter o payload limitado ao que seu produto precisa. Faça polling em um intervalo limitado, armazene em cache a última resposta boa e mostre linguagem de risco de execução antes de qualquer ação de aposta visível ao usuário.
Autenticação: X-API-Key Lide com HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/bets/snapshot?strategies=pos_ev&limit=25"
Parâmetros
Consulta
strategies
string
Estratégias de apostas separadas por vírgula ou all\.
limit
inteiro
Máximo de itens para retornar. Respeite os limites retornados por /limits\.
event_id
string
Identificador canônico de evento ou corrida de uma resposta de lista de eventos.
source
string
Fonte de aposta ao vivo: ativa, legada ou híbrida somente para administração
price_fields
string
odds\, odds,novig\, odds,fair\ ou all\. Clientes compactos usam odds\ por padrão; clientes existentes usam os campos completos de preços atuais.
include_links
booleano
Quando true, inclui campos de casa de apostas/links profundos, como links de partidas e links de corridas.
include_raw_payload
booleano
Quando true, inclui objetos de payload/dados brutos armazenados onde o endpoint os expõe.
include_source
booleano
Quando true, inclui metadados de proveniência e captura por linha/por casa de apostas. Campos de atualização de nível superior são sempre mantidos.
include_debug_ids
booleano
Quando true, inclui IDs internos/de subgrupo/opostos úteis para reconciliação.
Respostas
200 Resposta bem-sucedida
application/json · objeto
Oportunidades de apostas: Snapshot
{
"items": [
{
"id": "example-positive-ev",
"strategy": "pos_ev",
"event_id": "3704597661",
"bookmaker_name": "Bet365",
"selection_key": "moneyline:home",
"odds": 2.1,
"ev": 7.7
}
],
"resume": "{\"pos_ev\":\"1760000000000-0\"}"
}
400 Parâmetros ou corpo de solicitação inválidos.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais são válidas, mas não permitem este recurso.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · valor
Retry-After
inteiro
Segundos para aguardar antes de tentar novamente, quando fornecido pelo limitador.
X-RateLimit-Limit
inteiro
Capacidade do bucket de solicitações para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
inteiro
Aproximadamente as solicitações restantes no bucket do limitador ativo, quando fornecidas.
X-RateLimit-Bucket
string
Nome do bucket do limitador que produziu a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · objeto
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (SSE) /v1/bets/stream
Feed de Eventos Enviados pelo Servidor para inserções, atualizações e remoções de oportunidades de apostas. Use isso para alertas em vez de polling de snapshot de alta frequência. Cabeçalhos de resposta de vinculação de origem identificam a fonte lógica de aposta ao vivo solicitada e as fontes efetivas por estratégia.
Autenticação: X-API-Key Lide com HTTP 429 com backoff e evite loops de polling apertados.
Exemplo de solicitação
curl -N -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/bets/stream?strategies=pos_ev&since=1760000000000-0&catchup=true"
Parâmetros
Consulta
strategies
string
Estratégias de apostas separadas por vírgula ou all\.
event_id
string
Identificador canônico de evento ou corrida de uma resposta de lista de eventos.
source
string
Fonte de aposta ao vivo: ativa, legada ou híbrida somente para administração
price_fields
string
odds\, odds,novig\, odds,fair\ ou all\. Clientes compactos usam odds\ por padrão; clientes existentes usam os campos completos de preços atuais.
include_links
booleano
Quando true, inclui campos de casa de apostas/links profundos, como links de partidas e links de corridas.
include_raw_payload
booleano
Quando true, inclui objetos de payload/dados brutos armazenados onde o endpoint os expõe.
include_source
booleano
Quando true, inclui metadados de proveniência e captura por linha/por casa de apostas. Campos de atualização de nível superior são sempre mantidos.
include_debug_ids
booleano
Quando true, inclui IDs internos/de subgrupo/opostos úteis para reconciliação.
since
string
Token de retomada de um snapshot anterior ou mensagem de stream. Passe-o após reconectar.
catchup
booleano
Quando verdadeiro, retorna eventos de stream perdidos disponíveis após since\ antes de aguardar novos eventos.
heartbeat_sec
integer
Intervalo de heartbeat em segundos para verificação de atividade do stream. Faixa válida: 5-120.
Respostas
200 Stream de Server-Sent Events. Cada mensagem possui um nome de evento e um payload de dados JSON.
text/event-stream · object
Mensagem delta decodificada
event: delta
data: {
"resume": "1760000000000-0",
"events": []
}
Mensagem de heartbeat decodificada
event: heartbeat
data: {}
Mensagem de ressincronização decodificada
event: resync
data: {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
400 Parâmetros ou corpo de requisição inválidos.
application/json · object
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · object
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais válidas, mas sem permissão para este recurso.
application/json · object
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · object
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · value
Retry-After
integer
Segundos para aguardar antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
integer
Capacidade do bucket de requisições para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
integer
Número aproximado de requisições restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que gerou a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · object
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (WebSocket) /v1/bets/ws
Feed WebSocket para inserções, atualizações e remoções de oportunidades de apostas. O handshake de aceitação inclui cabeçalhos de vinculação de origem correspondentes ao stream SSE.
Auth: X-API-Key Trate HTTP 429 com backoff e evite loops de polling intensos.
Exemplo de requisição
wscat -c "wss://api.odds-api.net/v1/bets/ws?strategies=pos_ev&since=1760000000000-0&catchup=true&api_key=$ODDS_API_KEY"
Parâmetros
Query
strategies
string
Estratégias de apostas separadas por vírgula ou all\.
event_id
string
Identificador canônico de evento ou corrida proveniente de uma resposta de lista de eventos.
source
string
Fonte de aposta ao vivo: active, legacy ou híbrido somente para administradores
price_fields
string
odds\, odds,novig\, odds,fair\ ou all\. Clientes compactos usam odds\ por padrão; clientes existentes usam os campos de precificação completos atuais por padrão.
include_links
boolean
Quando verdadeiro, inclui campos de bookmaker/links profundos, como links de partidas e corridas.
include_raw_payload
boolean
Quando verdadeiro, inclui objetos de payload/dados armazenados brutos onde o endpoint os expõe.
include_source
boolean
Quando verdadeiro, inclui metadados de proveniência e captura por linha/bookmaker. Campos de atualização de nível superior são sempre mantidos.
include_debug_ids
boolean
Quando verdadeiro, inclui IDs internos/de subgrupo/opostos úteis para reconciliação.
since
string
Token de retomada de um snapshot ou mensagem de stream anterior. Passe-o após reconectar.
catchup
boolean
Quando verdadeiro, retorna eventos de stream perdidos disponíveis após since\ antes de aguardar novos eventos.
heartbeat_sec
integer
Intervalo de heartbeat em segundos para verificação de atividade do stream. Faixa válida: 5-120.
Respostas
101 Conexão WebSocket estabelecida. Mensagens são objetos JSON.
application/json · object
Mensagem delta
{
"event": "delta",
"data": {
"resume": "1760000000000-0",
"events": []
}
}
Mensagem de heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensagem de ressincronização
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
200 Esquema de resposta de compatibilidade de ferramentas OpenAPI. Conexões WebSocket em tempo de execução fazem upgrade com 101.
application/json · object
Mensagem delta
{
"event": "delta",
"data": {
"resume": "1760000000000-0",
"events": []
}
}
Mensagem de heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensagem de ressincronização
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
400 Parâmetros ou corpo de requisição inválidos.
application/json · object
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · object
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais válidas, mas sem permissão para este recurso.
application/json · object
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · object
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · value
Retry-After
integer
Segundos para aguardar antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
integer
Capacidade do bucket de requisições para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
integer
Número aproximado de requisições restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que gerou a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · object
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Resultados
Consulta de resultados de eventos esportivos.
URL base https://api.odds-api.net/v1 Versão 1.0.0 Fonte OpenAPI ao vivo
GET Resultado do evento /v1/events/{event_id}/results
Retorna o resultado mais recente conhecido para um evento esportivo, ou pending\ até ser liquidado. Faça polling a cada 1-5 minutos após o início e, em seguida, reduza a frequência quando o evento for finalizado.
Auth: X-API-Key Trate HTTP 429 com backoff e evite loops de polling intensos.
Exemplo de requisição
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/results"
Parâmetros
Path
event_id obrigatório
string
Identificador canônico de evento ou corrida proveniente de uma resposta de lista de eventos.
Respostas
200 Resposta bem-sucedida
application/json · object
Resultados: Resultado do evento
{
"event_id": "3704597661",
"status": "final",
"result": {
"home_score": 24,
"away_score": 18
}
}
400 Parâmetros ou corpo de requisição inválidos.
application/json · object
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciais ausentes ou inválidas.
application/json · object
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Credenciais válidas, mas sem permissão para este recurso.
application/json · object
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso não encontrado.
application/json · object
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Limite de taxa excedido.
application/json · value
Retry-After
integer
Segundos para aguardar antes de tentar novamente, quando fornecidos pelo limitador.
X-RateLimit-Limit
integer
Capacidade do bucket de requisições para o bucket do limitador ativo, quando fornecida.
X-RateLimit-Remaining
integer
Número aproximado de requisições restantes no bucket do limitador ativo, quando fornecido.
X-RateLimit-Bucket
string
Nome do bucket do limitador que gerou a resposta, quando fornecido.
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Erro inesperado do servidor.
application/json · object
Amostra gerada
{
"detail": "string",
"code": "string",
"request_id": "string"
}