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

  1. Busque um snapshot primeiro e persista o token resume\ com o estado do evento em cache.
  2. Conecte-se a /stream\ com Server-Sent Events ou /ws\ com WebSockets. Use os mesmos filtros do snapshot.
  3. Trate delta\ aplicando alterações de forma idempotente. Armazene o resume\ mais recente após cada mensagem aceita.
  4. Trate heartbeat\ como um sinal de atividade. Se nenhum heartbeat ou dado chegar dentro do seu timeout, reconecte.
  5. Ao desconectar, reconecte com since=<last\_resume\>\ e catchup=true\ usando backoff exponencial com jitter.
  6. 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ícieIntervalo inicialNotas de produção
Esportes, ligas, casas de apostas6-24 horasA cobertura muda lentamente. Atualize diariamente, a menos que esteja sincronizando uma nova visão de catálogo.
Listas de eventos esportivos5-15 minutosUse consultas mais apertadas de 1-5 minutos apenas para ligas ativas ou janelas próximas ao início.
Listas de eventos de corrida1-5 minutosOs cronogramas de corrida mudam mais perto da largada. Mantenha a janela de tempo estreita.
Snapshots de odds60-120 segundosUse 15-30 segundos apenas para eventos prioritários quando streams não estiverem disponíveis.
Snapshots de oportunidades de apostas30-120 segundosConsulte mais rápido apenas para produtos de alerta com controles rígidos de cota.
Resultados1-5 minutos após o inícioApó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\ e X-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âmetro cursor\ da próxima requisição.
  • Pare quando next\_cursor\ estiver ausente, nulo, vazio ou 0\.
  • 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\ e to\_ts\ para consultas de histórico limitadas.
  • Use bookmakers\, market\_group\_id\, price\_type\ e limit\_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"
}