Resposta · Movimento de linha · Chart
API de movimento de linha Pinnacle
Resposta: o PinnFeed dá três peças: o stream live (delta no WebSocket Builder), quedas recentes (GET /v1/drops) e o preço de fecho (GET /v1/closing, Builder). Não há endpoint de histórico tick-a-tick: para um gráfico completo registe os deltas desde a assinatura.
Record deltas (Python, Builder)#
# pip install websockets
import asyncio, json, os, sqlite3, time, websockets
db = sqlite3.connect("moves.db")
db.execute("create table if not exists moves(ts real, market_id text, event_id int, type text, line real, outcome text, decimal real)")
async def main():
url = "wss://pinnfeed.io/v1/stream"
async with websockets.connect(url, additional_headers={"x-api-key": os.environ["PINNFEED_KEY"]}, max_size=None) as ws:
await ws.send(json.dumps({"type": "subscribe", "sports": ["soccer"], "markets": ["moneyline", "total"], "main": True}))
async for raw in ws:
msg = json.loads(raw)
if msg["type"] == "ping":
await ws.send(json.dumps({"type": "pong"}))
elif msg["type"] == "delta":
for ch in msg["changes"]:
if ch["kind"] == "market" and ch["op"] == "upsert":
m = ch["market"]
for o in m["outcomes"]:
db.execute("insert into moves values(?,?,?,?,?,?,?)",
(time.time(), m["id"], m["eventId"], m["type"], m.get("line"), o["name"], o["decimal"]))
db.commit()
asyncio.run(main())
CTA#
Builder (€99/mês). Teste de 3 dias; cartão obrigatório. REST grátis: signup. Related: dropping odds, closing/CLV.
Perguntas frequentes#
Há histórico tick-a-tick?#
Não. Registe os deltas você mesmo.
Conteúdo educativo para adultos?#
Sí (18+).
Conteúdo educativo para maiores de 18 anos. Sem palpites nem lucro garantido. No Brasil, aposte apenas em operadores autorizados pela SPA/MF.