pnclFEED Chave gratuita

api de odds da pinnacle / curl / jq / primeira requisição

API de odds da Pinnacle com curl e jq

GET/kit/v1/markets?sport_id=1

{ events, last }200 OK

A primeira requisição à API de odds da Pinnacle não precisa de nada além de um terminal. Uma chamada curl com a chave em um cabeçalho devolve o quadro inteiro de futebol em JSON, e o jq o transforma em uma linha por partida. O script roda como está assim que as duas variáveis do topo são definidas.

Criar uma chave gratuita

Leia o envelope antes dos preços

A resposta é um objeto, não uma lista: um array events e um cursor last. O primeiro filtro jq imprime os dois, que é a verificação mais rápida de que a chave funciona e o quadro está ativo. Cada evento guarda seus mercados sob períodos; num_0 é a partida completa, e seu money_line traz casa, empate e fora como odds decimais.

Envie last de volta como since e a próxima chamada devolve só os eventos que mudaram. A chave gratuita permite 20 chamadas por minuto e 100 por dia, então um loop que roda a cada 15 minutos cabe nela o dia inteiro; um 429 traz Retry-After, e a reação certa é esperar exatamente esse tempo.

curl.sh
# One request, then jq. The key
# and base URL come from your
# account and the docs.
export ODDS_API_KEY="your key"
export ODDS_BASE_URL="https://..."

URL="$ODDS_BASE_URL/kit/v1/markets"
H="x-portal-apikey: $ODDS_API_KEY"

# Soccer board: cursor and count.
curl -s -H "$H" "$URL?sport_id=1" \
  | jq '{last, n: (.events | length)}'

# One line per event: full-match
# money line (period 0).
curl -s -H "$H" "$URL?sport_id=1" \
  | jq -r '.events[]
    | [.home, .away,
       .periods.num_0.money_line.home,
       .periods.num_0.money_line.draw,
       .periods.num_0.money_line.away]
    | @tsv'

# Next call: only what changed.
LAST=$(curl -s -H "$H" \
  "$URL?sport_id=1" | jq .last)
curl -s -H "$H" \
  "$URL?sport_id=1&since=$LAST" \
  | jq '.events | length'

GET/api/drops?mode=live&min_drop_pct=5

{ total, drops }200 OK

Quedas recentes, sob demanda

O endpoint de quedas devolve os movimentos que o feed detectou nos últimos minutos como JSON simples, então um script de shell pode listar o que caiu sem manter um stream aberto. mode escolhe ao vivo ou pré-jogo, min_drop_pct o tamanho do movimento e max_age_sec a janela. Cada queda nomeia a partida, o mercado e o lado, traz o preço antes e depois, a porcentagem e o preço justo em nvp.

É a mesma detecção que alimenta o stream SSE, lida sob demanda em vez de enviada. Para um processo que deve reagir no momento em que um preço cai, a página de Python mantém o stream aberto.

drops.sh
# Drops of 5% or more in the last
# five minutes, live markets.
URL="$ODDS_BASE_URL/api/drops"
H="x-portal-apikey: $ODDS_API_KEY"

curl -s -H "$H" \
  "$URL?mode=live&min_drop_pct=5" \
  | jq -r '.drops[]
  | "\(.sport_name) \(.home) v \(.away)
\(.market) \(.side): \(.from) -> \(.to)
(\(.drop_pct)%) fair \(.nvp // "n/a")"'

GET/kit/v1/markets?sport_id=1

Retry-After: 2429

O que os outros status significam

O curl imprime o status com -w '%{http_code}'. Um 401 significa que o cabeçalho está faltando ou a chave está errada; um 403 significa que a chave está certa mas o plano não inclui o que você pediu; um 429 significa esperar o número de segundos em Retry-After. Nada mais vale a pena repetir mais do que umas duas vezes a partir de um shell.

Quando as chamadas funcionam à mão, o mesmo cabeçalho e cursor vão para qualquer linguagem que o projeto use; a página de Node.js é a versão em loop deste script. O runbook de erros no pnclENGINE cobre cada status a fundo.

Todos os planos, inclusive a chave gratuita.

PRÓXIMObash curl.sh

Duas variáveis, um script

A chave gratuita executa todas as requisições desta página. Quando um loop precisa de mais de 100 chamadas por dia, a página de preços mostra o plano que eleva o limite para 10 por segundo.