# PinnFeed — API de cuotas de Pinnacle en tiempo real (español)
> PinnFeed (https://pinnfeed.io) es una API para desarrolladores con las cuotas de apuestas deportivas de Pinnacle en tiempo real: un WebSocket normalizado con filtros en el servidor y actualizaciones delta, snapshots REST, cuotas justas sin margen (fair, fairProb, margin) en cada mercado, historial de cuotas de cierre y un servidor MCP alojado para asistentes de IA. 13 deportes. PinnFeed (pinnfeed.io, con doble n) es una API de cuotas de Pinnacle, no la app de Pinterest PinFeed. Servicio independiente, no afiliado a Pinnacle. Contenido educativo para mayores de 18 años.
Datos clave:
- Planes (EUR, IVA incluido cuando corresponde, mensual): Free 0 € (REST, 30 s de retraso, 1 req/s, 1.000 peticiones/día, 2 deportes); Hobby 29 €/mes (REST en tiempo real, sin WebSocket, 2 req/s, 3 deportes); Builder 99 €/mes (el plan WebSocket: 3 conexiones, REST 10 req/s, los 13 deportes, todos los mercados y props, cuotas de cierre); Pro 199 €/mes (10 conexiones WebSocket, 30 req/s, frames en bruto); Enterprise 50 conexiones (más bajo petición).
- Prueba gratis de 3 días en Hobby, Builder y Pro; tarjeta obligatoria, se cobra después del día 3 salvo que se cancele. Pago con tarjeta (Stripe) o cripto.
- Las claves Free y Hobby reciben `403 plan_lacks_ws` en /v1/stream.
- Afirmación de precio, formulada con precisión: a 9 de noviembre de 2026, PinnFeed Builder a 99 €/mes (IVA incluido) era el precio publicado más bajo con facturación mensual o anual que encontramos para un WebSocket en tiempo real que transmite cuotas de Pinnacle en vivo y prepartido. Hay un WebSocket solo prepartido publicado por menos (oddssea Prematch, 59 $/mes). En mensual, odds-api.io Solo + WS está a 118 €/mes (EUR, sin impuestos). Su anual ≈ 98,33 €/mes (1.180 €/año), aún por encima del anual de Builder (≈ 82,50 €/mes IVA incl.). Fuentes: https://pinnfeed.io/es/compare
- WebSocket: wss://pinnfeed.io/v1/stream — snapshot primero, después deltas; ping/pong cada 20 s.
- REST: https://pinnfeed.io/v1 (sports, events, odds, drops, closing). Autenticación: cabecera x-api-key.
- MCP: https://pinnfeed.io/mcp (Streamable HTTP).
- La documentación técnica está en inglés: https://pinnfeed.io/docs
## Páginas
- [API de cuotas de Pinnacle en tiempo real, por WebSocket](https://pinnfeed.io/es/): WebSocket y REST de cuotas Pinnacle: deltas en vivo y prepartido, cuotas justas sin margen, líneas de cierre, 13 deportes y MCP. Builder 99 €/mes.
- [Precios de la API de cuotas de Pinnacle](https://pinnfeed.io/es/pricing): Planes PinnFeed en EUR (IVA incl. cuando corresponde): Free 0 €, Hobby 29 € REST, Builder 99 € WebSocket, Pro 199 €. Prueba 3 días; tarjeta o crypto.
- [El precio publicado más bajo con facturación mensual para un WebSocket de cuotas de Pinnacle en vivo y prepartido](https://pinnfeed.io/es/cheapest-pinnacle-odds-websocket): A 9 nov. 2026, Builder a 99 €/mes (IVA incl.) era el precio publicado más bajo con facturación mensual para un WebSocket Pinnacle en vivo + prepartido.
- [Comparativa de APIs de cuotas de Pinnacle: quién transmite los precios y cuánto cuesta](https://pinnfeed.io/es/compare): Compara WebSocket vs polling y precios publicados de APIs de cuotas Pinnacle (9 nov. 2026): PinnFeed, oddssea, odds-api.io, oddspush, pinnwire y más.
- [Preguntas frecuentes sobre PinnFeed](https://pinnfeed.io/es/faq): Preguntas frecuentes: planes, WebSocket Builder 99 €/mes, REST, cuotas justas, líneas de cierre, MCP, prueba de 3 días y facturación. Respuestas directas.
- [Alternativas a la API de cuotas de Pinnacle: qué proveedor encaja en cada caso](https://pinnfeed.io/es/alternatives): 10 proveedores de cuotas Pinnacle comparados (9 nov. 2026): WebSocket, precios publicados y cuándo encaja cada uno frente a PinnFeed Builder 99 €/mes.
- [Precio de una API de cuotas: por petición o tarifa plana](https://pinnfeed.io/es/answers/odds-api-pricing-per-request-vs-flat): Cómo cobran las APIs de cuotas según lo publicado el 9 nov 2026: bonos de créditos, cuotas por hora o tarifa plana con límite y push por WebSocket. Con cálculo.
- [API de cuotas Pinnacle para el MVP de tu startup](https://pinnfeed.io/es/answers/pinnacle-odds-api-startup-mvp): Monta un MVP de datos de apuestas con precios de Pinnacle sin hablar con ventas: clave gratis para prototipar, WebSocket de Builder al lanzar y reparto propio.
- [Cómo obtener cuotas de Pinnacle en Python (REST)](https://pinnfeed.io/es/answers/pinnacle-odds-python-rest): Obtén cuotas de Pinnacle en Python con requests contra la API REST de PinnFeed. Funciona en el plan Free (30 s de retraso); Builder añade el cliente WebSocket.
- [WebSocket de cuotas Pinnacle en Node.js con reconexión](https://pinnfeed.io/es/answers/pinnacle-odds-websocket-nodejs-reconnect): Cliente WebSocket en Node.js para PinnFeed que responde a los ping, rehace el libro desde los snapshots y reconecta con backoff exponencial y jitter.
- [API de cuotas Pinnacle para Google Sheets y Excel](https://pinnfeed.io/es/answers/pinnacle-odds-api-google-sheets-excel): Lleva cuotas de Pinnacle a Google Sheets con Apps Script o a Excel con Power Query o Python, contra la API REST de PinnFeed. El plan Free sirve para un tablero.
- [Cuotas de Pinnacle en ChatGPT y Claude (MCP)](https://pinnfeed.io/es/answers/pinnacle-odds-chatgpt-mcp): Conecta ChatGPT, Claude o Cursor a cuotas de Pinnacle en vivo con el MCP alojado de PinnFeed en https://pinnfeed.io/mcp. Cabeceras, herramientas y ejemplos.
- [Max stake de Pinnacle (`maxStake`) por API](https://pinnfeed.io/es/answers/pinnacle-max-stake-api): Cada mercado de PinnFeed trae maxStake, el riesgo máximo que acepta la fuente. Filtra líneas finas en detectores de steam y bots de valor. REST y WebSocket.
- [Cuotas de Pinnacle en un DataFrame de pandas](https://pinnfeed.io/es/answers/pinnacle-odds-pandas-dataframe): Aplana el JSON de /v1/odds de PinnFeed (eventos, mercados, resultados) en una fila de pandas por resultado con decimal, fair, fairProb, margin y maxStake.
- [Cliente WebSocket en Go para cuotas de Pinnacle](https://pinnfeed.io/es/answers/pinnacle-odds-websocket-golang): Conéctate al WebSocket de cuotas de Pinnacle de PinnFeed desde Go con gorilla/websocket o nhooyr.io/websocket y x-api-key. Requiere el plan Builder.
- [Cliente WebSocket en Rust para cuotas de Pinnacle](https://pinnfeed.io/es/answers/pinnacle-odds-websocket-rust): Patrón de cliente en Rust para el WebSocket de cuotas de PinnFeed con tokio-tungstenite: autenticación x-api-key, ping/pong y snapshot/delta en Builder.
- [Alternativa a pinnodds con el WebSocket incluido en el plan](https://pinnfeed.io/es/pinnodds-alternative): pinnodds añade el WebSocket por +99 $/mes (Pro+WS 198 $). PinnFeed Builder incluye WS a 99 €/mes (IVA incl.). Comparativa neutra a 9 nov. 2026.
- [Cliente WebSocket en C# / .NET para cuotas de Pinnacle](https://pinnfeed.io/es/answers/pinnacle-odds-websocket-csharp): Conéctate a PinnFeed desde C# con ClientWebSocket: cabecera x-api-key, suscripción en JSON y respuesta a los pings. Plan Builder para /v1/stream.
- [Bot de alertas en Discord con cuotas de Pinnacle](https://pinnfeed.io/es/answers/discord-picks-bot-pinnacle-odds): Bot de alertas de steam para Discord sobre el WebSocket de Pinnacle de PinnFeed: stream de Builder, umbral de maxStake y webhook entrante de Discord. 18+.
- [Cuotas de Pinnacle en n8n](https://pinnfeed.io/es/answers/pinnacle-odds-api-n8n): Lleva cuotas o drops de Pinnacle a n8n con un Schedule Trigger, un nodo HTTP Request con Header Auth x-api-key y un nodo IF que avisa de movimientos grandes.
- [Cuotas moneyline de la NBA de Pinnacle en tiempo real](https://pinnfeed.io/es/answers/pinnacle-nba-moneyline-odds-api): Consulta o recibe en streaming las cuotas moneyline de la NBA de Pinnacle con PinnFeed. El slug es basketball; ejemplos de REST y WebSocket que funcionan.
- [API de cuotas de la NFL de Pinnacle (american-football)](https://pinnfeed.io/es/answers/pinnacle-nfl-american-football-odds-api): Consulta o recibe en streaming cuotas de la NFL y del fútbol americano universitario de Pinnacle con PinnFeed. El slug es american-football, no nfl.
- [Arbitraje vs value betting con una API sharp](https://pinnfeed.io/es/answers/arbitrage-vs-value-betting-api): El arbitraje compara precios de dos casas; el value compara un precio blando con la referencia sin margen de Pinnacle. Qué cubre PinnFeed y qué no.
- [Guardar cuotas de Pinnacle en Postgres](https://pinnfeed.io/es/answers/pinnacle-odds-postgres-storage): Una tabla de Postgres para ticks de precios de Pinnacle y un worker en Node que guarda los deltas del WebSocket de PinnFeed, para backtests, CLV y gráficos.
- [Cuotas de Pinnacle en un Cloudflare Worker](https://pinnfeed.io/es/answers/pinnacle-odds-cloudflare-worker): Un Cloudflare Worker que oculta tu clave de PinnFeed, cachea /v1/odds unos segundos y publica bajadas de cuota en un webhook de Discord con un cron.
- [Cuotas de Pinnacle en Supabase con una Edge Function](https://pinnfeed.io/es/answers/pinnacle-odds-supabase-edge-function): Guarda bajadas de cuota de Pinnacle en una tabla de Supabase con una Edge Function que pg_cron llama cada minuto. Secretos, tabla, código y SQL del cron.
- [Alternativa a oddssea para cuotas de Pinnacle en vivo y prepartido](https://pinnfeed.io/es/oddssea-alternative): oddssea Prematch 59 $/mes (solo prepartido) y Live 149 $. Builder 99 €/mes incluye live + prepartido. Comparativa honesta a 9 nov. 2026.
- [Arquitectura de un bot de apuestas con cuotas de Pinnacle](https://pinnfeed.io/es/answers/sports-betting-bot-architecture): Cómo se suele montar un bot de apuestas o trading: ingesta por WebSocket, estado local, reglas de señal, riesgo y ejecución aparte. PinnFeed solo da datos.
- [Snapshot y delta en el WebSocket de Pinnacle](https://pinnfeed.io/es/answers/pinnacle-odds-websocket-snapshot-delta): El WebSocket de PinnFeed envía un snapshot por partes y después deltas con upsert y remove. Cómo reconstruir el libro de cuotas y aplicar cambios sin errores.
- [API de cuotas justas sin margen](https://pinnfeed.io/es/answers/no-vig-fair-odds-api): Cada resultado de PinnFeed incluye la cuota justa sin margen (fair) y fairProb con el método multiplicativo, y el margin de cada mercado, sin calcular el vig.
- [API de cuotas en vivo de Pinnacle](https://pinnfeed.io/es/answers/pinnacle-live-odds-api): Cuotas en vivo de Pinnacle con PinnFeed: push por WebSocket en Builder o REST con live=true. Free va con retraso; Hobby es REST en tiempo real sin WebSocket.
- [Frames raw de Pinnacle en el WebSocket (Pro)](https://pinnfeed.io/es/answers/pinnacle-odds-websocket-raw-frames): En Pro, format:"raw" envía los registros de Pinnacle sin normalizar, en un sobre raw de PinnFeed, filtrados solo por deporte. Formato del frame y cuándo usarlo.
- [Aplicar snapshot y deltas de Pinnacle en un Map de Node](https://pinnfeed.io/es/answers/pinnacle-odds-node-snapshot-delta-map): Mantén un Map en memoria de mercados Pinnacle en Node.js — partes de snapshot tras subscribe, luego upsert/remove de deltas en el WebSocket PinnFeed.
- [Heartbeat ping / pong del WebSocket](https://pinnfeed.io/es/answers/pinnacle-odds-websocket-ping-pong): PinnFeed envía un ping aproximadamente cada 20 segundos. Responde con type pong o el servidor cierra el socket tras unos 60 segundos de silencio.
- [WebSocket Pinnacle estable: precios stale y reconexión](https://pinnfeed.io/es/answers/pinnacle-websocket-stale-price-reconnect): Checklist de producción del WebSocket PinnFeed: pong, rebuild del snapshot, backoff, códigos de cierre y detección de precios locales stale.
- [Alternativa a odds-api.io para un WebSocket solo de Pinnacle](https://pinnfeed.io/es/odds-api-io-alternative): odds-api.io Solo+WS 98 £/mes o 980 £/año (≈98,33 €/mes anual). Builder 99 €/mes IVA incl. cuando corresponde, solo Pinnacle, sin compromiso anual. 9 nov. 2026.
- [Latencia de una API de cuotas — enfoque honesto](https://pinnfeed.io/es/answers/pinnacle-odds-api-latency-honesty): PinnFeed no publica SLA de latencia frente a competidores nombrados. Mide de extremo a extremo desde tu región con marcas de tiempo en deltas WS y REST.
- [Probabilidad implícita vía fairProb](https://pinnfeed.io/es/answers/pinnacle-odds-implied-probability-api): Lee las probabilidades implícitas de Pinnacle desde fairProb en cada outcome de PinnFeed. Combínalo con decimal y american para modelos y pantallas +EV.
- [API de dropping odds](https://pinnfeed.io/es/answers/dropping-odds-api): Lista caídas recientes de Pinnacle con GET /v1/drops, o detecta steam en vivo en el WebSocket Builder. Params, campos y curl.
- [API de cuotas gratis](https://pinnfeed.io/es/answers/free-odds-api): Tiers gratis verificados el 9 nov. 2026: The Odds API 500 créditos, oddssea REST retrasado, pinnwire trial, PinnFeed Free (€0, 30 s, sin WebSocket).
- [Backtestear modelos contra las líneas de cierre de Pinnacle](https://pinnfeed.io/es/answers/pinnacle-odds-api-backtesting-clv): Backtestea modelos con el historial de cierre PinnFeed: guarda señales, une GET /v1/closing, puntúa CLV. Plan Builder para el archivo.
- [Obtener líneas de cierre de Pinnacle vía API para CLV](https://pinnfeed.io/es/answers/pinnacle-closing-line-api-clv): Obtén cuotas de cierre de Pinnacle vía /v1/closing y calcula el CLV frente al fair no-vig. Incluye curl y Python. Contenido educativo (18+).
- [API de movimiento de línea Pinnacle](https://pinnfeed.io/es/answers/pinnacle-line-movement-api): Sigue el movimiento de línea de Pinnacle: registra deltas WebSocket, grafícalos y usa /v1/drops y /v1/closing. Código Python incluido.
- [Enviar steam moves de Pinnacle a Telegram](https://pinnfeed.io/es/answers/pinnacle-steam-telegram-alert): Conecta alertas steam/drop de Pinnacle a Telegram con /v1/drops o el WebSocket — patrón que une detección steam y bot de Telegram.
- [Cuotas Pinnacle en Excel con Power Query](https://pinnfeed.io/es/answers/pinnacle-odds-excel-power-query): Carga cuotas Pinnacle en Excel con Power Query Web.Contents y cabecera x-api-key hacia el REST PinnFeed. Free con retraso; Builder para push en vivo fuera de
- [Cuotas de cierre de Pinnacle en DuckDB y Parquet](https://pinnfeed.io/es/answers/pinnacle-closing-odds-duckdb-parquet): Job Python diario que pagina /v1/closing?date= a Parquet y lo consulta con DuckDB: márgenes por liga, joins CLV, sin servidor DB. Builder.
- [Alternativa a oddspush con facturación mensual por tarjeta](https://pinnfeed.io/es/oddspush-alternative): oddspush REST+WS 138 $/mes prepago crypto. PinnFeed Builder 99 €/mes con tarjeta, WS incluido. Comparativa a 9 nov. 2026.
- [Cuotas Pinnacle en Power BI](https://pinnfeed.io/es/answers/pinnacle-odds-api-power-bi): Cargue el REST de PinnFeed en Power BI con Web.Contents y cabecera x-api-key. Free o Hobby para REST; el WebSocket no es fuente de Power BI.
- [API de córners de fútbol Pinnacle](https://pinnfeed.io/es/answers/pinnacle-soccer-corners-odds-api): Lea mercados de córners Pinnacle en PinnFeed filtrando eventos de fútbol relacionados con units Corners. Líneas main en planes de soccer; alternates en Builder.
- [Cuotas Pinnacle en JavaScript del navegador](https://pinnfeed.io/es/answers/pinnacle-odds-browser-javascript-cors): El REST envía Access-Control-Allow-Origin *, así que fetch() funciona, pero la clave quedaría pública. Use un proxy de servidor; WebSocket solo en servidor.
- [Bot de picks Telegram sobre cuotas Pinnacle](https://pinnfeed.io/es/answers/telegram-picks-bot-pinnacle): Publique steam moves de Pinnacle en un canal Telegram con un bot Node de ~70 líneas sobre el WebSocket PinnFeed. BotFather, dry-run y Builder.
- [permessage-deflate en el WebSocket de cuotas](https://pinnfeed.io/es/answers/pinnacle-odds-websocket-compression): Active permessage-deflate en el WebSocket PinnFeed para reducir snapshots ~5–10×. Defaults de Python websockets y Node ws.
- [WebSocket de cuotas Pinnacle en Kotlin (OkHttp)](https://pinnfeed.io/es/answers/pinnacle-odds-websocket-kotlin): Streamee cuotas Pinnacle en Kotlin con OkHttp: cabecera x-api-key, subscribe en onOpen, pong a ping, parse de deltas y reconexión. Plan Builder.
- [Detectar steam moves de Pinnacle vía API](https://pinnfeed.io/es/answers/detect-steam-moves-pinnacle-api): Detecte steam y dropping odds de Pinnacle en tiempo real con el detector de ventana deslizante en el WebSocket PinnFeed, o haga poll de GET /v1/drops.
- [Alternativa a pinnwire con el WebSocket incluido](https://pinnfeed.io/es/pinnwire-alternative): pinnwire Raw WS +89 $/mes (Pro+WS 178 $). Builder incluye WebSocket a 99 €/mes IVA incl. cuando corresponde Comparativa neutra a 9 nov. 2026.
- [API de cuotas League of Legends y Dota 2](https://pinnfeed.io/es/answers/lol-dota2-odds-api-pinnacle): Cuotas Pinnacle de LoL y Dota 2 vía API bajo esports: encuentre ids de liga, tire moneyline y hándicap, streamee moves en vivo.
- [Proxy de cuotas Pinnacle con FastAPI](https://pinnfeed.io/es/answers/pinnacle-odds-fastapi-proxy): Servicio FastAPI que guarda la clave PinnFeed en el servidor, cachea /v1/odds unos segundos y expone JSON limpio para su front o app.
- [Cliente WebSocket TypeScript](https://pinnfeed.io/es/answers/pinnacle-odds-websocket-typescript): Patrón cliente WebSocket TypeScript para PinnFeed: tipos snapshot/delta, ping/pong y reconexión con backoff en Builder. Contenido educativo (18+).
- [Flujos SSE de drops vs WebSocket full-book](https://pinnfeed.io/es/answers/pinnacle-odds-sse-vs-websocket): Algunos revendedores empujan alertas SSE de drops; PinnFeed ofrece un WebSocket full-book más REST /v1/drops. Cuándo usar cada patrón.
- [WebSocket solo-prematch vs live + pre-match](https://pinnfeed.io/es/answers/pinnacle-prematch-vs-live-websocket): oddssea Prematch publica un WebSocket solo-prematch más barato; PinnFeed Builder es live + pre-match. Alcance honesto de la claim de nov. 2026.
- [Cargar cuotas Pinnacle en Excel con Power Query](https://pinnfeed.io/es/answers/pinnacle-odds-excel-power-query-guide): Cargue GET /v1/odds en Excel con Power Query y cabecera x-api-key. Paso a paso frente al OpenAPI en vivo. Free sirve. Contenido educativo (18+).
- [Líneas de cierre Pinnacle para fútbol europeo](https://pinnfeed.io/es/answers/pinnacle-closing-lines-european-football-api): Obtenga cierres Pinnacle de ligas europeas con /v1/closing. Filtre sport soccer y league.name (EPL, La Liga, Serie A…). Contenido educativo (18+).
- [Specials / props Pinnacle vía API](https://pinnfeed.io/es/answers/pinnacle-specials-props-odds-api): Pida specials y player props Pinnacle en PinnFeed con specials true en Builder. Las líneas main siguen en main true; units cubre córners.
- [API de cuotas Pinnacle en R (httr2)](https://pinnfeed.io/es/answers/pinnacle-odds-api-r-httr2): Llame al REST PinnFeed desde R con httr2: cabecera de API key, parse JSON y lea precios fair y american. Contenido educativo (18+).
- [Alerta por email de drops de cuotas en Google Sheets](https://pinnfeed.io/es/answers/google-sheets-odds-drop-email-alert): Reciba un email cuando Pinnacle acorte cuotas: Apps Script + /v1/drops o IMPORTDATA, con umbral min_pct. Free/Hobby sirven para polling.
- [Alternativa a The Odds API para cuotas de Pinnacle en tiempo real](https://pinnfeed.io/es/the-odds-api-alternative): The Odds API es solo REST (sin WebSocket). PinnFeed Builder añade push de cuotas Pinnacle en vivo + prepartido a 99 €/mes. 9 nov. 2026.
- [Vibe-codea un escáner +EV educativo](https://pinnfeed.io/es/answers/vibe-coding-ev-scanner): Monta una pantalla +EV con Cursor/Claude sobre fairProb de PinnFeed: educativo, 18+, sin beneficio garantizado. Compara tu modelo con fair.
- [API de cuotas de apuestas](https://pinnfeed.io/es/answers/betting-odds-api): Una API de cuotas es REST y/o push para apps y modelos. Elige por push vs poll y un book vs muchos. Precios fechados 9 nov 2026.
- [¿The Odds API ofrece un WebSocket?](https://pinnfeed.io/es/answers/the-odds-api-websocket): A 9 nov 2026 The Odds API es solo REST (desde $30/mes). PinnFeed Builder empuja Pinnacle live + prepartido por WebSocket. Matriz honesta.
- [Ids y slugs de deportes PinnFeed](https://pinnfeed.io/es/answers/pinnacle-odds-api-sport-ids): Los 13 ids/slugs que acepta PinnFeed (soccer=1 … cricket=13), conteos live/prepartido en /v1/sports y límites por plan. Contenido educativo (18+).
- [API de líneas alternativas Pinnacle](https://pinnfeed.io/es/answers/pinnacle-alternate-lines-api): Accede a líneas alternativas Pinnacle (main false) vía REST y WebSocket Builder. Conserva mercados por id, no solo por tipo.
- [Alternativa a OpticOdds para desarrolladores que quieren empezar hoy](https://pinnfeed.io/es/opticodds-alternative): OpticOdds cotiza a medida y no publica WebSocket (SSE). PinnFeed Builder: WebSocket Pinnacle autoservicio a 99 €/mes. Comparativa 9 nov. 2026.
- [API de props de jugador NFL con precios Pinnacle](https://pinnfeed.io/es/answers/nfl-player-props-odds-api-pinnacle): Props de jugador NFL de Pinnacle por API en Builder: eventos special con parentId bajo american-football. REST y WebSocket.
- [Alternativas a OddsJam para un feed de cuotas de Pinnacle](https://pinnfeed.io/es/oddsjam-alternative): OddsJam API sin precio público (formulario). PinnFeed publica Builder 99 €/mes con WebSocket Pinnacle. Cuándo encaja cada opción. 9 nov. 2026.
- [Precio WebSocket oddssea por mes](https://pinnfeed.io/es/answers/oddssea-websocket-price): Precios WebSocket oddssea.dev a 9 nov 2026: Prematch $59/mes (solo prepartido) y Live $149/mes (live + prepartido). Cuándo encaja vs Builder €99.
- [oddssea vs PinnFeed](https://pinnfeed.io/es/answers/oddssea-vs-pinnfeed): oddssea vs PinnFeed para compradores de WebSocket Pinnacle a 9 nov 2026: Prematch $59, Live $149 vs Builder €99 live + prepartido. Cuándo elegir.
- [Cómo cancelar PinnFeed o pedir un reembolso](https://pinnfeed.io/es/answers/pinnacle-odds-api-cancel-refund): Cómo cancelar un plan de PinnFeed desde el panel, qué pasa con el acceso y cuándo se puede reembolsar el primer pago según la política de reembolsos.
- [¿Puedo usar datos de cuotas Pinnacle de forma comercial?](https://pinnfeed.io/es/answers/pinnacle-odds-api-commercial-use): Lo que permite la política de uso aceptable de PinnFeed: apps, bots y paneles comerciales sí; revender o reexponer el feed requiere Enterprise. Ejemplos.
- [¿La mejor API de datos de apuestas? Un corte honesto](https://pinnfeed.io/es/answers/best-sports-betting-data-api): Las APIs de datos deportivos dan stats y marcadores. Una API de cuotas Pinnacle da precios, cierres sin margen y caídas. Corte honesto, con precios fechados.
- [Integración de una API de cuotas con precios Pinnacle](https://pinnfeed.io/es/answers/sportsbook-api-integration-pinnacle): Integra un feed Pinnacle sin cuenta en Pinnacle: clave PinnFeed, REST, WebSocket Builder en /v1/stream y OpenAPI. API oficial cerrada el 23 jul 2025.
- [Bot de arbitraje sobre cuotas Pinnacle (educativo)](https://pinnfeed.io/es/answers/arbitrage-betting-bot-pinnacle): Arquitectura educativa de un bot de arb referenciado a Pinnacle: precios fair por WebSocket y la otra casa la aportas tú. La API no coloca apuestas.
- [Histórico de player props (alcance Pinnacle)](https://pinnfeed.io/es/answers/historical-player-props-odds-pinnacle): Props de Pinnacle en vivo como specials en Builder. No cuentes con /v1/closing para su histórico: registra el precio tú. No es un almacén multi-casa.
- [Machine learning con cierres de Pinnacle](https://pinnfeed.io/es/answers/machine-learning-pinnacle-closing-odds): Usa cierres Pinnacle sin margen de GET /v1/closing como etiqueta o feature. Educativo 18+ — sin promesa de beneficio ni look-ahead en el entreno.
- [Alternativa a SportsDataIO para cuotas de Pinnacle en vivo](https://pinnfeed.io/es/sportsdataio-alternative): SportsDataIO Discovery Lab 99 $/mes es next-day delayed. PinnFeed Builder 99 €/mes: Pinnacle en tiempo real por WebSocket. 9 nov. 2026.
- [Calculadora de margen Pinnacle a través de la API](https://pinnfeed.io/es/answers/pinnacle-margin-calculator): Ejemplos del margen (overround) de Pinnacle con el campo margin y sum(1/decimal)−1. Misma fórmula que otros feeds: no reivindicamos un método único.
- [API Fanatics frente a un feed de cuotas Pinnacle](https://pinnfeed.io/es/answers/fanatics-api-vs-pinnacle-odds): Fanatics es una casa, no una API de cuotas pública que podamos cotizar. PinnFeed es WebSocket y REST solo de Pinnacle — no un feed de cuotas Fanatics.
- [Histórico de cuotas MLB vía cierres de Pinnacle](https://pinnfeed.io/es/answers/historical-mlb-odds-pinnacle): Obtén cierres históricos de MLB / béisbol con GET /v1/closing de PinnFeed: archivo de cierres Pinnacle por día UTC, no un almacén MLB multi-casa.
- [API de cuotas dinámicas en un WebSocket de Pinnacle](https://pinnfeed.io/es/answers/dynamic-odds-api-pinnacle): Las cuotas dinámicas son precios que se mueven. PinnFeed las empuja como snapshot y deltas en /v1/stream (Builder). Sin afirmaciones de latencia.
- [API BetMGM frente a un feed de cuotas Pinnacle](https://pinnfeed.io/es/answers/betmgm-api-vs-pinnacle-odds): BetMGM tiene una Sports API de partners, no una tarifa autoservicio que podamos citar. PinnFeed es WebSocket y REST solo de Pinnacle — no un espejo de BetMGM.
- [«Mejor API de deportes» frente a una API de cuotas — un corte honesto](https://pinnfeed.io/es/answers/best-sports-api-vs-odds-api): «Mejor API de deportes» suele ser stats y marcadores. Una API de cuotas sirve precios. PinnFeed es cuotas Pinnacle, no stats. Corte honesto y precios fechados.
- [Alternativa a Sportmonks para cuotas de Pinnacle](https://pinnfeed.io/es/sportmonks-alternative): Sportmonks marca Pinnacle limited/delayed y sin push de cuotas. PinnFeed Builder: WebSocket Pinnacle a 99 €/mes. Comparativa 9 nov. 2026.
- [Alternativa a la Betfair Exchange API para datos sharp](https://pinnfeed.io/es/betfair-exchange-api-alternative): Betfair Exchange API: datos y apuestas Exchange (FREE + £499 activación). PinnFeed es WebSocket Pinnacle — otro trabajo. Revisado 9 nov 2026.
- [Alternativa a SportsGameOdds para cuotas de Pinnacle](https://pinnfeed.io/es/sportsgameodds-alternative): SportsGameOdds lista Pinnacle desde Pro (299 $/mes) y su stream es solo All-Star, bajo presupuesto. PinnFeed Builder: WebSocket Pinnacle a 99 €/mes.
- [Alternativa a OddsPapi para cuotas de Pinnacle](https://pinnfeed.io/es/oddspapi-alternative): OddsPapi tiene un plan REST gratis (250 peticiones/mes) y WebSocket solo en B2B, bajo presupuesto. PinnFeed Builder: WebSocket Pinnacle a 99 €/mes.
- [Alternativa a la API de cuotas de Unabated](https://pinnfeed.io/es/unabated-alternative): API de Unabated: Concierge 799 $/mes por SSE (5 ligas de EE. UU., sin uso comercial), Advantage 2.999 $. PinnFeed Builder: WebSocket Pinnacle a 99 €/mes.
- [API de cuotas de apertura y cierre Pinnacle (fútbol)](https://pinnfeed.io/es/answers/pinnacle-opening-closing-odds-football-api): Cómo obtener cierres Pinnacle de fútbol (soccer) con PinnFeed. Alcance honesto: archivo de cierre sí; no hay endpoint aparte de líneas de apertura.
- [Obtener cuotas Pinnacle sin scraping](https://pinnfeed.io/es/answers/pinnacle-odds-without-scraping): Usa una clave API self-serve en lugar de scrapear Pinnacle. PinnFeed REST y WebSocket entregan cuotas live y prepartido normalizadas con límites documentados.
- [Push de cuotas en vivo vs polling REST](https://pinnfeed.io/es/answers/pinnacle-live-odds-push-vs-polling): Por qué un WebSocket Pinnacle supera al polling REST para steam y modelos in-play. Push Builder vs REST Free/Hobby, con cuotas y retraso honestos.
- [Tracker de CLV MLB vía API](https://pinnfeed.io/es/answers/mlb-closing-line-value-tracker-api): Sigue el closing line value de MLB con PinnFeed: deporte baseball, GET /v1/closing y compara tu precio tomado con el cierre fair sin margen.
- [API de +EV con cuotas fair sin margen](https://pinnfeed.io/es/answers/ev-betting-api-no-vig): Monta una pantalla +EV contra precios fair sin margen de Pinnacle vía PinnFeed. Compara un decimal soft con fair; +EV no es beneficio garantizado.
- [Detectar steam moves en Python en el WebSocket](https://pinnfeed.io/es/answers/steam-move-detection-python-websocket): Detecta steam moves de Pinnacle en Python sobre el WebSocket PinnFeed: acortamientos, filtro maxStake y alertas. Plan Builder.
- [OddsJam API (solo cotización) vs WebSocket Pinnacle self-serve](https://pinnfeed.io/es/answers/oddsjam-api-quote-vs-self-serve): OddsJam API es solo cotización (9 nov 2026); Builder es self-serve a €99/mes IVA incl. para WebSocket Pinnacle live + prepartido. Cuándo encaja cada uno.
- [Polling de The Odds API vs push WebSocket PinnFeed](https://pinnfeed.io/es/answers/the-odds-api-polling-vs-pinnfeed-push): The Odds API es polling REST desde $30/mes sin WebSocket; PinnFeed Builder empuja Pinnacle live + prepartido a €99/mes. Matriz de encaje honesta.
- [odds-api.io Solo+WS anual vs PinnFeed Builder](https://pinnfeed.io/es/answers/odds-api-io-annual-vs-pinnfeed-builder): odds-api.io Solo+WS anual ≈ €98,33/mes sin impuestos (9 nov 2026) vs PinnFeed Builder €99/mes IVA incl. o €990/año ≈ €82,50. Lectura honesta anual vs mensual.
- [Cuotas Pinnacle en Google Sheets con IMPORTDATA](https://pinnfeed.io/es/answers/pinnacle-odds-google-sheets-importdata): IMPORTDATA no puede enviar cabecera de API key. Usa Apps Script UrlFetchApp para cuotas PinnFeed en Google Sheets, o un proxy firmado. Free sirve con retraso.
- [Cookbook de prompts MCP para cuotas Pinnacle](https://pinnfeed.io/es/answers/pinnacle-odds-mcp-prompts-cookbook): Prompts MCP listos para PinnFeed en ChatGPT o Claude: listar deportes, cuotas, cierres y explicar fairProb. Builder necesario para historial de cierre.
- [Qué incluye el plan Builder](https://pinnfeed.io/es/answers/pinnacle-odds-api-builder-whats-included): Builder (€99/mes IVA incl.) es el plan WebSocket: 3 WS, REST 10 req/s, 13 deportes, todos los mercados, fair/fairProb, historial de cierre y prueba de 3 días.
- [Pagar la API de cuotas Pinnacle con crypto](https://pinnfeed.io/es/answers/pinnacle-odds-api-crypto-payment): Paga PinnFeed con USDC, USDT, SOL o BTC en el dashboard. Prepago 1/3/12 meses; se activa on-chain y no se renueva solo. La tarjeta Stripe sigue disponible.
- [API multi-book vs feed solo Pinnacle](https://pinnfeed.io/es/answers/multi-book-odds-api-vs-pinnacle-only): Multi-book (OddsJam, OpticOdds, odds-api.io, TOA) vs WebSocket solo Pinnacle. Cuándo gana cada clase — 9 nov 2026; sin “más barato” sin en vivo + prepartido.
- [Webhook vs WebSocket para cuotas Pinnacle](https://pinnfeed.io/es/answers/pinnacle-odds-webhook-vs-websocket): PinnFeed empuja cuotas por WebSocket, no por webhooks HTTP. Mantén una conexión /v1/stream en Builder, o haz polling REST si no puedes abrir un socket.
- [Recetas curl de la API de cuotas Pinnacle (OpenAPI)](https://pinnfeed.io/es/answers/pinnacle-odds-curl-openapi-recipes): Recetas curl contra OpenAPI real de PinnFeed — /v1/account, /sports, /events, /odds, /drops y /closing. El plan Free vale.
- [Construye con PinnFeed usando IA](https://pinnfeed.io/es/vibe-coding): Programa cuotas Pinnacle con IA: clave ps_live_ en 60 s, prompts Cursor/Claude/ChatGPT/Lovable/Replit/Bolt y MCP real. Sin hardcodear la clave.
- [Arrancar un cliente Python con /v1/account y /v1/sports](https://pinnfeed.io/es/answers/pinnacle-odds-python-account-bootstrap): Llama a /v1/account y /v1/sports en Python para verificar clave PinnFeed, límites del plan y deportes permitidos antes de pedir cuotas.
- [Quickstart — clave a la primera cuota](https://pinnfeed.io/es/quickstart): De signup a la primera cuota Pinnacle en un minuto: export PINNFEED_KEY, curl, Python, Node y Google Sheets. Enlaza WebSocket y MCP cuando toque.
- [Bot de apuestas con Cursor](https://pinnfeed.io/es/answers/build-betting-bot-with-cursor): Vibe-codea un bot de cuotas Pinnacle en Cursor: PINNFEED_KEY, llms-api.txt, REST o WebSocket Builder, prompts educativos 18+ sin hardcodear claves.
- [Paginar eventos y cuotas Pinnacle en Python](https://pinnfeed.io/es/answers/pinnacle-odds-python-events-odds-pagination): Recorre /v1/events y /v1/odds con limit y offset en Python. Parámetros reales del OpenAPI; compatible con el plan Free. Compatible con Free hoy.
- [Claude MCP para cuotas Pinnacle](https://pinnfeed.io/es/answers/claude-mcp-sports-odds): Conecta Claude Desktop o Claude Code al MCP PinnFeed (POST /mcp) con Bearer o ?key=. Tools: get_live_odds, get_drops, get_closing_odds y más.
- [Líneas de cierre Pinnacle en Python para CLV](https://pinnfeed.io/es/answers/pinnacle-odds-python-closing-lines-clv): Obtén líneas de cierre Pinnacle con /v1/closing y /v1/closing/{eventId} en Python para medir CLV. Requiere plan Builder.
- [Prompt ChatGPT para cuotas](https://pinnfeed.io/es/answers/chatgpt-odds-api-prompt): Prompts para ChatGPT con MCP PinnFeed (?key=) o curl con x-api-key. Sin endpoints inventados: ancla OpenAPI y llms-api.txt siempre.
- [Pantalla de EV con fairProb en Python](https://pinnfeed.io/es/answers/pinnacle-odds-python-fairprob-ev-screen): Filtra cuotas Pinnacle por valor en Python usando outcome.fair y fairProb de GET /v1/odds. Precios sin margen; Free vale.
- [Sheets sin código](https://pinnfeed.io/es/answers/no-code-odds-google-sheets): Lleva cuotas PinnFeed a Google Sheets con Apps Script y x-api-key. IMPORTDATA no envía headers: usa Script Properties para ps_live_.
- [Sondear caídas de precio Pinnacle en Node.js](https://pinnfeed.io/es/answers/pinnacle-odds-nodejs-drops-poller): Poller Node.js para GET /v1/drops — steam reciente de Pinnacle con filtros minutes y min_pct. Parámetros fieles al OpenAPI.
- [Refrescar cuotas Pinnacle en Google Sheets con un timer](https://pinnfeed.io/es/answers/pinnacle-odds-sheets-time-driven-trigger): Añade un trigger por tiempo en Apps Script para que Google Sheets refresque cuotas Pinnacle desde GET /v1/odds cada 15 minutos en Free.
- [Referencia de herramientas MCP de cuotas Pinnacle](https://pinnfeed.io/es/answers/pinnacle-odds-mcp-tools-reference): Qué hace cada herramienta MCP alojada de PinnFeed — get_live_odds, get_drops, get_closing_odds y más — con args de ejemplo y equivalentes REST.
- [Feed XML de cuotas en vivo — usa JSON](https://pinnfeed.io/es/answers/live-odds-xml-feed-to-json): ¿Buscas un feed XML de cuotas en vivo? PinnFeed sirve JSON por REST y WebSocket — contrato OpenAPI, sin endpoint XML. Docs OpenAPI.
- [API Pinnacle en autoservicio](https://pinnfeed.io/es/answers/pinnacle-api-self-serve): ¿Necesitas API Pinnacle sin llamada de ventas? PinnFeed es REST + WebSocket autoservicio de cuotas Pinnacle — Free al alta, Builder para push.
- [Plan Free: cuotas Pinnacle con ~30 s de retraso](https://pinnfeed.io/es/answers/pinnacle-odds-api-free-tier-delay): Plan Free de PinnFeed: 0 €, REST con ~30 s de retraso, 2 deportes, 1.000 req/día. Límites honestos antes de subir a Hobby o Builder.
- [Feed de cuotas de fútbol de Pinnacle](https://pinnfeed.io/es/answers/football-odds-feed-pinnacle): Cuotas de fútbol de Pinnacle: 1X2, hándicap asiático, totales y totales por equipo por REST o WebSocket, con cuota justa, margen y maxStake por mercado.
- [PinnFeed: facturación anual y trimestral](https://pinnfeed.io/es/answers/pinnfeed-annual-quarterly-billing): Facturación con tarjeta de PinnFeed: mensual, trimestral (≈10 % menos) o anual (2 meses gratis). Builder 99 €/mes, 267 €/trimestre o 990 €/año, IVA incluido.
- [Criterio de Kelly con cuotas justas de Pinnacle](https://pinnfeed.io/es/answers/kelly-criterion-pinnacle-fair-odds): Calcula la fracción de Kelly a partir del fairProb sin margen de Pinnacle y la cuota de otra casa. Código Python, Kelly fraccional y por qué conviene prudencia.
- [WebSocket de cuotas Pinnacle: ejemplo en Python](https://pinnfeed.io/es/answers/pinnacle-odds-websocket-python-example): Cliente Python funcional para el WebSocket de PinnFeed: subscribe, frames snapshot y delta, respuesta a los ping y reconexión con backoff. Plan Builder.
- [Límites de la API de cuotas por plan](https://pinnfeed.io/es/answers/pinnacle-odds-api-rate-limits): Límites de PinnFeed por plan: Free 1 req/s y 1.000 al día, Hobby 2 req/s, Builder 10 req/s, Pro 30 req/s, y conexiones WebSocket en Builder (3) y Pro (10).
- [Autenticación de la API de cuotas Pinnacle](https://pinnfeed.io/es/answers/pinnacle-odds-api-authentication): Autentica PinnFeed con x-api-key, Authorization Bearer o ?key= en REST y MCP; con x-api-key o ?key= en el WebSocket. Crea, rota y revoca claves en el panel.
- [Códigos de error de la API de cuotas](https://pinnfeed.io/es/answers/pinnacle-odds-api-error-codes): Cómo tratar los errores de PinnFeed: 401 invalid_key, 403 plan_lacks_ws o sport_not_in_plan, 429 de límites y los cierres 4001, 4002, 4008 y 1001 del WebSocket.
- [Cuotas Pinnacle de un equipo por nombre](https://pinnfeed.io/es/answers/pinnacle-odds-by-team-name): Encuentra el próximo partido de un equipo y sus cuotas Pinnacle con una sola llamada REST: q= busca en local, visitante o liga, sin distinguir mayúsculas.
- [Margen (overround) de Pinnacle por mercado](https://pinnfeed.io/es/answers/pinnacle-margin-overround-api): Cada mercado de PinnFeed trae un campo margin: la suma de probabilidades implícitas menos 1. Cómo se calcula, una comprobación en Python y cómo ordenar ligas.
- [Probar el WebSocket de cuotas Pinnacle con wscat](https://pinnfeed.io/es/answers/pinnacle-odds-websocket-wscat): Abre wss://pinnfeed.io/v1/stream desde la terminal con wscat o websocat, suscríbete en la URL o con JSON y lee los frames welcome, snapshot y delta. Builder.
- [Rotar o revocar una clave API](https://pinnfeed.io/es/answers/pinnacle-odds-api-key-rotation): Crea una segunda clave, despliégala y revoca la antigua: una clave revocada falla en REST al instante y sus WebSockets abiertos se cierran con 4001 key_revoked.
- [API de Pinnacle cerrada: ¿qué opciones hay?](https://pinnfeed.io/es/answers/pinnacle-api-access-closed): Pinnacle cerró su API al público general el 23 de julio de 2025. Qué significa, cómo solicitar acceso a medida y cómo obtener sus cuotas en autoservicio.
- [Qué se construye con las cuotas de Pinnacle](https://pinnfeed.io/es/use-cases): Quién usa una API de cuotas Pinnacle y cómo: tipsters que demuestran precios y CLV, servidores de Discord con alertas en vivo y data scientists con datasets.
- [API de cuotas para tipsters](https://pinnfeed.io/es/use-cases/tipsters): Para tipsters: sella cada pick con el precio en vivo de Pinnacle y su cuota justa, y publica el CLV en un historial verificable. REST en todos los planes.
- [API de cuotas para servidores de Discord de apuestas](https://pinnfeed.io/es/use-cases/discord-servers): Para servidores de Discord de apuestas: alertas de steam y caídas de Pinnacle, consultas de cuotas por comando y la clave en tu servidor. Push en Builder.
- [Datos de cuotas Pinnacle para data scientists](https://pinnfeed.io/es/use-cases/data-scientists): Para data scientists: precios de Pinnacle en JSON limpio para pandas o R, fairProb como referencia, cierres diarios en Builder y exportaciones en Enterprise.
- [Steam chasing con alertas de caídas de Pinnacle](https://pinnfeed.io/es/answers/steam-chasing-pinnacle-alerts): Cómo usan los steam chasers las caídas de Pinnacle como señal: /v1/drops o deltas del WebSocket, filtro por maxStake y por qué importan velocidad y límites.
- [Line shopping frente al precio de Pinnacle](https://pinnfeed.io/es/answers/line-shopping-vs-pinnacle): Usa el precio de Pinnacle y su cuota justa como referencia al comparar casas: compara cada oferta, marca precios por encima del fair y registra la diferencia.
- [Calculadora de arbitraje con cuotas de Pinnacle](https://pinnfeed.io/es/answers/arbitrage-calculator-pinnacle-odds): Comprueba un arbitraje entre Pinnacle y otra casa: la fórmula, el reparto del stake, un bucle de alertas en Python y los riesgos que debes conocer antes.
- [Hoja de registro de apuestas con CLV](https://pinnfeed.io/es/answers/bet-tracker-spreadsheet-clv): Una hoja que registra tu precio, el precio sin margen de Pinnacle al apostar y el último precio que capturas antes del inicio, y calcula el CLV de cada apuesta.
- [Calculadora sin margen en Excel o Google Sheets](https://pinnfeed.io/es/answers/no-vig-calculator-excel-sheets): Fórmulas sin margen para Excel y Google Sheets en mercados de 2 y 3 resultados, y cómo traer precios en vivo de Pinnacle con sus cuotas justas ya calculadas.
- [Respuestas a preguntas concretas sobre la API de cuotas Pinnacle](https://pinnfeed.io/es/answers): Páginas breves que responden primero sobre la API y el WebSocket de cuotas Pinnacle de PinnFeed: límites, errores, autenticación, CLV, steam y hojas de cálculo.
- [Prueba gratis de la API de cuotas Pinnacle: cómo funciona](https://pinnfeed.io/es/answers/pinnacle-odds-api-free-trial): Los planes de pago de PinnFeed empiezan con 3 días de prueba: tarjeta obligatoria, cobro tras el día 3 salvo que canceles, una por cliente. Free, sin tarjeta.
- [Cuotas de Pinnacle: datos históricos o feed en vivo](https://pinnfeed.io/es/answers/pinnacle-odds-historical-vs-live): ¿Feed en vivo de Pinnacle, cuotas históricas o ambos? Qué cubren el feed de PinnFeed y los cierres de Builder, sus límites y cuándo guardar tu propio log.
## Guías
- [Cuotas de Pinnacle en tiempo real por WebSocket con Python y Node](https://pinnfeed.io/es/guides/pinnacle-odds-websocket-python-node): Conecta al WebSocket de cuotas Pinnacle en Python o Node en ~60 líneas: snapshot, deltas, pings y reconexión. Código listo con PinnFeed Builder.
- [Detecta caídas de cuotas y movimientos steam en Pinnacle en tiempo real](https://pinnfeed.io/es/guides/dropping-odds-steam-detection): Detecta caídas de cuotas y steam en Pinnacle en tiempo real: detector Python en el WebSocket PinnFeed, filtro maxStake y atajo /v1/drops.
- [Value betting frente a casas blandas con las cuotas justas de Pinnacle](https://pinnfeed.io/es/guides/value-betting-no-vig-fair-odds): Encuentra apuestas +EV comparando cuotas soft con las justas sin margen de Pinnacle vía WebSocket PinnFeed. Detector Python con cálculo de EV.
- [Mide tu valor de la línea de cierre frente al cierre de Pinnacle](https://pinnfeed.io/es/guides/closing-line-value-clv-tracking): Mide closing line value (CLV) frente a las cuotas de cierre de Pinnacle con /v1/closing de PinnFeed. Script Python que puntúa tus fills.
- [Crea un bot de picks para Telegram con cuotas de Pinnacle en vivo](https://pinnfeed.io/es/guides/telegram-picks-bot): Bot Node.js que publica steam de Pinnacle en un canal de Telegram en tiempo real desde el WebSocket PinnFeed. BotFather, dry-run y código.
- [Cuotas de Pinnacle en vivo dentro de ChatGPT y Claude con MCP](https://pinnfeed.io/es/guides/pinnacle-odds-chatgpt-claude-mcp): Usa cuotas Pinnacle en vivo en ChatGPT, Claude y Cursor con el MCP alojado de PinnFeed en /mcp. Setup, herramientas y prompts de ejemplo.
- [Cuotas de Pinnacle en Google Sheets](https://pinnfeed.io/es/guides/pinnacle-odds-google-sheets): Lleva cuotas Pinnacle a Google Sheets con Apps Script contra la API REST de PinnFeed. El plan Free sirve para un tablero con 30 s de retraso.
- [Crea un bot de picks para Discord con cuotas de Pinnacle en vivo](https://pinnfeed.io/es/guides/discord-picks-bot): Bot Node.js que publica el steam de Pinnacle en un canal de Discord vía webhook desde el WebSocket de PinnFeed. Embeds, manejo de 429 y código.
## Más
- [English llms.txt](https://pinnfeed.io/llms.txt)
- [Texto completo en español](https://pinnfeed.io/llms-es-full.txt)
---
Source: https://pinnfeed.io/es/
# API de cuotas de Pinnacle en tiempo real, por WebSocket
PinnFeed es una **API de cuotas de Pinnacle** pensada para quien programa: un único **WebSocket** que primero envía un snapshot y después solo lo que ha cambiado. Filtras en el servidor por deporte, liga y mercado, cada línea llega con su **cuota justa sin margen** y el **precio de cierre** queda archivado. No necesitas cuenta en Pinnacle.
PinnFeed (pinnfeed.io, con doble n) es una API de cuotas de Pinnacle, no la app de Pinterest PinFeed. El plan Free no pide tarjeta (REST con 30 s de retraso, 2 deportes).
**El plan WebSocket es Builder, 99 €/mes** (IVA incluido cuando corresponde): push en tiempo real, los 13 deportes, todos los mercados y cuotas de cierre. Todos los planes de pago empiezan con **3 días gratis** (tarjeta obligatoria; se cobra al cuarto día salvo que canceles).
## Hecho para el bot, no para el navegador
Todo lo que de otro modo tendrías que escribir tú (reconexión, reglas de fusión, conversión de cuotas, eliminación del margen, detección del inicio del partido) lo hacemos una vez en nuestro lado y te llega como JSON limpio.
- **Push, sin polling.** Te suscribes una vez y recibes deltas. Un mercado tranquilo no te cuesta nada.
- **Filtros en el servidor.** Por deporte, liga, evento, tipo de mercado y en vivo o prepartido. Solo recibes lo que pides.
- **Cuotas justas y cierre.** Cada mercado lleva su margen y una cuota justa decimal por resultado. Al empezar el partido, el último precio prepartido se guarda como cuota de cierre.
- **Esquema estable.** Eventos y mercados con ids estables, cuotas decimales y americanas, líneas, periodos, apuesta máxima y hora de cierre.
- **MCP alojado.** Un servidor MCP en `/mcp` permite a Claude, Cursor, Copilot y ChatGPT leer cuotas en vivo, caídas y cuotas de cierre con tu clave.
- **Claves autoservicio.** Crea, renombra y revoca claves, mira el uso por clave y cambia de plan desde el panel.
Los 13 deportes: fútbol, tenis, baloncesto, hockey sobre hielo, fútbol americano, béisbol, rugby, MMA, boxeo, voleibol y balonmano, esports, golf y críquet.
## Un cliente que funciona
Te conectas, te suscribes al fútbol en vivo y ves cada movimiento. Es un WebSocket normal con JSON: Python, Node o cualquier otro lenguaje.
```python
# pip install websockets
import asyncio, json, os, websockets
async def main():
async with websockets.connect("wss://pinnfeed.io/v1/stream",
additional_headers={"x-api-key": os.environ["PINNFEED_KEY"]}) as ws:
await ws.send(json.dumps({"type": "subscribe", "sports": ["soccer"], "live": True, "markets": ["moneyline"], "main": True}))
async for raw in ws:
msg = json.loads(raw)
if msg["type"] == "ping":
await ws.send('{"type":"pong"}') # responde al latido o el servidor cierra
elif msg["type"] == "delta":
print(len(msg["changes"]), "changes")
asyncio.run(main())
```
El cliente completo, con libro de cuotas en memoria y reconexión, está en la [guía de Python y Node](/es/guides/pinnacle-odds-websocket-python-node).
## Snapshot y luego solo lo que cambia
- **Snapshot y deltas.** Un snapshot por partes al suscribirte y después solo los mercados que cambian, agrupados por actualización.
- **Las bajas son explícitas.** Los mercados suspendidos o liquidados llegan como `op: "remove"`, así tu libro nunca muestra precios viejos.
- **REST refleja el socket.** Los mismos objetos salen de `GET /v1/odds` para cron jobs y cargas históricas.
## Push frente a polling: la aritmética
Un cliente que hace polling solo ve un cambio en su siguiente petición: de media llega medio intervalo tarde y, en el peor caso, un intervalo entero, más el viaje de ida y vuelta. Un WebSocket no tiene intervalo. Es aritmética, no un benchmark, así que puedes comprobarlo tú.
| Medida | WebSocket push | REST cada 5 s | REST cada 30 s | REST cada 60 s |
|---|---|---|---|---|
| Cuándo ves un cambio | Llega en cuanto se produce | En el siguiente poll | En el siguiente poll | En el siguiente poll |
| Retraso medio añadido | Ninguno | 2,5 s | 15 s | 30 s |
| Retraso máximo añadido | Ninguno | 5 s | 30 s | 60 s |
| Peticiones por hora, un endpoint | 1 conexión | 720 | 120 | 60 |
El tránsito de red y el procesamiento afectan a ambos y no se muestran. Nuestro REST del plan Free lleva 30 s de retraso a propósito; el REST de Hobby y todos los planes WebSocket son en tiempo real.
## Tarifas
| Plan | Precio (EUR, IVA incl. cuando corresponde) | Qué incluye |
|---|---|---|
| Free | 0 € | REST con 30 s de retraso, 2 deportes, 1 req/s, 1.000 peticiones/día, sin tarjeta |
| Hobby | 29 €/mes | REST en tiempo real, 3 deportes, 2 req/s, **sin WebSocket** |
| **Builder** | **99 €/mes** | **El plan WebSocket**: 3 conexiones, los 13 deportes, todos los mercados y props, REST 10 req/s, cuotas de cierre |
| Pro | 199 €/mes | 10 conexiones WebSocket, 30 req/s, frames en bruto |
| Enterprise | A medida | Exportaciones del archivo de cierre, SLA y licencia comercial |
Precio del WebSocket con su matiz: a 9 de noviembre de 2026, Builder era el precio publicado más bajo con facturación mensual o anual que encontramos para un WebSocket de cuotas de Pinnacle **en vivo + prepartido**. Las cifras, fuentes y salvedades están en la [página del precio](/es/cheapest-pinnacle-odds-websocket). [Ver todos los límites](/es/pricing).
Preguntas concretas con código: [respuestas](/es/answers) · [casos de uso](/es/use-cases) · [guías](/es/guides).
## Preguntas frecuentes
### ¿Sigue existiendo una API pública de Pinnacle?
Pinnacle cerró su API pública a la mayoría de usuarios en julio de 2025. PinnFeed es un servicio independiente que distribuye los precios de Pinnacle a desarrolladores por un WebSocket normalizado y una API REST. No necesitas cuenta en Pinnacle.
### ¿Por qué un WebSocket y no hacer polling a una API REST?
Un cliente que hace polling solo ve un cambio en su siguiente petición, así que de media llega medio intervalo tarde. Con el WebSocket, PinnFeed envía cada cambio en cuanto llega a nuestro servidor, filtrado a lo que te suscribiste y con cuotas justas. Builder (99 €/mes) es el plan WebSocket.
### ¿Qué es una cuota justa (sin margen)?
Los precios de Pinnacle incluyen un margen. Lo quitamos con el método multiplicativo y devolvemos la probabilidad justa y la cuota decimal justa de cada resultado, para que compares cualquier casa con la línea más afilada sin hacer cuentas.
### ¿Hay plan gratis?
Sí. El plan Free da acceso REST a dos deportes con 30 segundos de retraso y 1.000 peticiones al día, sin tarjeta. Hobby (29 €/mes) hace el REST en tiempo real; Builder (99 €/mes) añade el WebSocket en tiempo real.
### ¿Puedo cancelar cuando quiera?
Sí. Cada plan de pago empieza con 3 días gratis (tarjeta obligatoria, se cobra el cuarto día salvo que canceles) y es mensual con Stripe; cancelas o cambias de plan desde el panel con un clic. Los planes en cripto se prepagan por 1, 3 o 12 meses y nunca se renuevan solos.
### ¿Es contenido para mayores de edad?
PinnFeed es una API de autoservicio de cuotas de Pinnacle en tiempo real: un WebSocket normalizado (Builder 99 €/mes) más REST, cuotas justas sin margen, historial de cierre, 13 deportes y un servidor MCP alojado. Free 0 € (REST, 30 s de retraso); Hobby 29 €/mes solo REST; Pro 199 €/mes. 3 días de prueba en planes de pago. A 9 de noviembre de 2026, Builder era el precio publicado más bajo con facturación mensual o anual que encontramos para un WebSocket de cuotas Pinnacle en vivo + prepartido (fuentes).
- Plan WebSocket
- Builder · 99 €/mes · 3 conexiones · en vivo + prepartido · los 13 deportes
- También
- Free 0 € · Hobby 29 €/mes (sin WS) · Pro 199 €/mes · Enterprise a medida
- Prueba
- 3 días en Hobby, Builder y Pro (se pide tarjeta)
- Stack
- WebSocket + REST · cuotas justas sin margen · cuotas de cierre · MCP
Sí. PinnFeed es una herramienta de datos y su contenido es educativo, para mayores de 18 años. Nada aquí es un pronóstico ni una promesa de beneficios. Juega con responsabilidad y solo donde sea legal.
---
Source: https://pinnfeed.io/es/pricing
# Precios de la API de cuotas de Pinnacle
Empieza gratis con datos REST con retraso o prueba cualquier plan de pago **3 días gratis**. **Builder es el plan WebSocket** (99 €/mes): push de cuotas de Pinnacle en tiempo real, todos los deportes, todos los mercados e historial de cuotas de cierre. Cancelas cuando quieras.
PinnFeed (pinnfeed.io, con doble n) es una API de cuotas de Pinnacle, no la app de Pinterest PinFeed.
## Planes
| Plan | Mensual (EUR, IVA incl. cuando corresponde) | Qué lleva la clave | Empezar |
|---|---|---|---|
| Free | 0 € | Snapshots REST (30 s de retraso) · 2 deportes a elegir · mercados principales · 1.000 peticiones/día · sin tarjeta | [Clave gratis](/signup) |
| Hobby | 29 €/mes | REST en tiempo real (sin retraso) · 3 deportes · mercados principales + cuotas justas · 2 req/s · sin WebSocket | [3 días gratis](/start/hobby) |
| **Builder · el plan WebSocket** | **99 €/mes** | Push WebSocket en tiempo real (3 conexiones) · los 13 deportes · todos los mercados, líneas alternativas, props y futuros · REST 10 req/s · historial de cuotas de cierre | [3 días gratis](/start/builder) |
| Pro | 199 €/mes | 10 conexiones WebSocket · todo lo de Builder · opción de frames en bruto · REST 30 req/s · soporte prioritario | [3 días gratis](/start/pro) |
| Enterprise | A medida | 50 conexiones WebSocket (más bajo petición) · exportaciones masivas de cuotas de cierre (CSV/Parquet) · SLA y licencia comercial | [Escríbenos](mailto:support@pinnfeed.io?subject=PinnFeed%20Enterprise) |
Precios en euros, facturación mensual, IVA incluido cuando corresponde; las empresas pueden añadir su NIF/VAT en el checkout. Pagas con tarjeta a través de Stripe, o prepagas 1, 3 o 12 meses en USDC, USDT, SOL o BTC desde el panel.
## Todos los límites, lado a lado
| Límite | Free | Hobby | Builder | Pro | Enterprise |
|---|---|---|---|---|---|
| WebSocket en tiempo real | — | — (solo REST) | 3 conexiones | 10 conexiones | 50 (más bajo petición) |
| API REST | 1 req/s · 1.000/día | 2 req/s | 10 req/s | 30 req/s | 100 req/s |
| Prueba gratis | — | 3 días | 3 días | 3 días | — |
| Retraso de los datos | 30 segundos | Tiempo real | Tiempo real | Tiempo real | Tiempo real |
| Deportes | 2 a elegir | 3 a elegir | Los 13 | Los 13 | Los 13 |
| Mercados | Principales | Principales | Todas las líneas, periodos, props y futuros | Todo + frames en bruto | Todo + en bruto |
| Cuotas justas sin margen | ✓ | ✓ | ✓ | ✓ | ✓ |
| Historial de cuotas de cierre | — | — | ✓ | ✓ | Exportaciones masivas |
| Servidor MCP para IA | ✓ con retraso | ✓ | ✓ | ✓ | ✓ |
| Precio (EUR, IVA incl. cuando corresponde) | 0 € | 29 €/mes | 99 €/mes | 199 €/mes | A medida |
| Soporte | Docs | Email | Email | Prioritario | SLA |
¿Cómo queda Builder frente a otras opciones? A 9 de noviembre de 2026, Builder a 99 €/mes era el precio publicado más bajo con facturación mensual o anual que encontramos para un WebSocket de cuotas de Pinnacle **en vivo + prepartido**; hay un WebSocket solo prepartido publicado por menos. Detalle y fuentes en la [comparativa de precios](/es/cheapest-pinnacle-odds-websocket).
## Preguntas sobre facturación
### ¿Hay prueba gratis?
Sí. Hobby, Builder y Pro empiezan con 3 días gratis. Se pide tarjeta en el checkout y se cobra automáticamente al terminar el día 3 salvo que canceles antes. Una prueba por persona.
### ¿Puedo pagar con cripto o por un año?
Sí. Desde el panel puedes prepagar 1, 3 o 12 meses en USDC o USDT (Ethereum, Base, Arbitrum, Polygon, BNB Chain, Solana), SOL o BTC. Las stablecoins son tokens en dólares, así que el precio en euros se convierte al tipo de referencia del BCE al crear la factura. Los planes en cripto se activan con la confirmación en cadena y nunca se renuevan solos.
### ¿Hobby incluye el WebSocket?
No. Hobby es solo REST en tiempo real. El WebSocket empieza en Builder (99 €/mes), el plan WebSocket, con 3 conexiones, los 13 deportes y todos los mercados.
### ¿Qué pasa si falla un pago?
Stripe reintenta el cobro. Tu plan sigue activo durante un periodo de gracia de 3 días y después pasa a Free hasta que el pago se complete.
### ¿Puedo usar los datos comercialmente?
Sí, dentro de tus propios productos y según la Política de Uso Aceptable. Redistribuir el feed en bruto como un servicio de datos competidor requiere una licencia Enterprise.
### ¿Cobráis IVA?
- Plan WebSocket
- Builder · 99 €/mes · 3 conexiones · en vivo + prepartido · los 13 deportes
- También
- Free 0 € · Hobby 29 €/mes (sin WS) · Pro 199 €/mes · Enterprise 50 (más bajo petición)
- Prueba
- 3 días en Hobby, Builder y Pro (se pide tarjeta)
- Stack
- WebSocket + REST · cuotas justas sin margen · cuotas de cierre · MCP
Los precios están en euros e incluyen el IVA cuando corresponde: el importe publicado ya incluye el IVA, y Stripe calcula la parte de IVA en el checkout a partir de tu dirección de facturación. Esa parte puede ser 0 en caso de inversión del sujeto pasivo o cuando no aplica IVA.
---
Source: https://pinnfeed.io/es/cheapest-pinnacle-odds-websocket
# El precio publicado más bajo con facturación mensual para un WebSocket de cuotas de Pinnacle en vivo y prepartido
A 9 de noviembre de 2026, PinnFeed Builder a **99 €/mes** (IVA incluido) era el precio publicado más bajo con facturación mensual o anual que encontramos para un WebSocket en tiempo real que transmite cuotas de Pinnacle **en vivo y prepartido**. Hay un WebSocket solo prepartido publicado por menos (oddssea Prematch, 59 $/mes). En mensual, odds-api.io Solo + WebSocket está a 118 €/mes (EUR; precios sin impuestos según sus condiciones). Su anual es 1.180 €/año ≈ 98,33 €/mes, aún por encima del anual de Builder (990 €/año ≈ 82,50 €/mes IVA incl.). La [comparativa completa](/es/compare) enlaza la página de precios de cada proveedor.
Si PinnFeed no encaja contigo, [alternativas a la API de cuotas de Pinnacle](/es/alternatives) explica cuándo gana cada otro proveedor.
## Qué compras con 99 € al mes
- **Push en tiempo real.** Los precios se envían cuando cambian: un snapshot al suscribirte y después solo los deltas. Sin polling y sin cuota de peticiones en el socket.
- **3 conexiones WebSocket**, los 13 deportes, en vivo y prepartido.
- **Todos los mercados**: ganador (moneyline), hándicap, total y total por equipo de cada periodo, líneas alternativas, props y futuros.
- **Cuotas justas sin margen** y el margen de la casa en cada mercado, para valorar apuestas de valor sin hacer tú las cuentas.
- **Historial de cuotas de cierre** para medir el CLV, con `/v1/closing`.
- **REST a 10 peticiones por segundo** con el mismo esquema, para snapshots y cargas históricas.
- **Servidor MCP alojado** en todos los planes, incluido Free (30 segundos de retraso), para que ChatGPT, Claude o Cursor lean las mismas cuotas. Los planes de pago son en tiempo real; `get_closing_odds` necesita Builder o superior.
## Cómo se compara el precio
| Opción | Lo que pagas al mes | ¿Push? | ¿En vivo + prepartido? |
|---|---|---|---|
| oddssea Prematch | 59 $ (≈ 53 €) | WebSocket | Solo prepartido |
| **PinnFeed Builder** | **99 €** (IVA incl. cuando corresponde) | WebSocket | **Sí** |
| odds-api.io Solo + WebSocket | 98 £ al mes (≈ 117 €), o 980 £ al año (≈ 98,33 € al mes) | WebSocket | Sí (varias casas) |
| oddspush REST + WebSocket | 138 $ (≈ 124 €), 1 mes prepago | WebSocket | Sí |
| oddssea Live | 149 $ (≈ 133 €) | WebSocket | Sí |
| pinnwire Pro + Raw WebSocket | 89 $ + 89 $ = 178 $ (≈ 159 €) | WebSocket | Sí |
| Revendedores solo-Pinnacle: plan REST + complemento WebSocket | 99 $ + 99 $ = 198 $ (≈ 177 €) | WebSocket | Sí |
| Unabated Concierge | 799 $ (≈ 716 €), solo cinco ligas de EE. UU. | SSE | Deportes limitados |
| OpticOdds | Solo bajo presupuesto | SSE, RabbitMQ | — |
| OddsJam API | Solo bajo presupuesto | Push stream, protocolo no indicado | — |
| The Odds API | Desde 30 $ (≈ 27 €) | No, solo polling | Sí (polling) |
Precios tal y como estaban publicados en la página de cada proveedor el 9 de noviembre de 2026. Las conversiones a euros usan el tipo de referencia del BCE del 6 de noviembre de 2026 (1 USD = 0,89566 €, 1 GBP = 1,1988 €) y son aproximadas. Fuentes: [oddssea.dev](https://oddssea.dev/), [oddspush.com](https://oddspush.com/#pricing), [pinnwire.com](https://pinnwire.com/), [odds-api.io/pricing](https://odds-api.io/pricing).
Salvedades honestas: hay un WebSocket **solo prepartido** publicado por menos (oddssea Prematch, 59 $/mes ≈ 53 €); odds-api.io Solo + WS anual es ≈ 98,33 €/mes (sin impuestos), aún por encima del anual de Builder (≈ 82,50 €/mes IVA incl.); y The Odds API es más barata si te basta con polling, pero no tiene WebSocket.
## Formas más baratas de empezar
- **Free**: 0 €, snapshots REST con 30 segundos de retraso, 2 deportes, 1.000 peticiones al día. Suficiente para construir y probar tu parser.
- **Hobby**: 29 €/mes, REST en tiempo real sin retraso, 3 deportes. Sin WebSocket.
- **Builder**: 99 €/mes, el plan WebSocket. [Ver Builder en la página de precios](/es/pricing#plan-builder).
## Conéctate en pocas líneas
```python
# pip install websockets
import asyncio, json, os, websockets
async def main():
async with websockets.connect("wss://pinnfeed.io/v1/stream",
additional_headers={"x-api-key": os.environ["PINNFEED_KEY"]}) as ws:
await ws.send(json.dumps({"type": "subscribe", "sports": ["soccer"], "markets": ["moneyline"], "main": True}))
async for raw in ws:
msg = json.loads(raw)
if msg["type"] == "ping":
await ws.send('{"type":"pong"}')
elif msg["type"] == "delta":
print(len(msg["changes"]), "changes")
asyncio.run(main())
```
Un cliente completo que mantiene el libro de cuotas en vivo, con reconexiones, está en la [guía de Python y Node](/es/guides/pinnacle-odds-websocket-python-node).
## Preguntas frecuentes
### ¿Cuánto cuesta un WebSocket de cuotas de Pinnacle en vivo y prepartido?
A 9 de noviembre de 2026, PinnFeed Builder a 99 €/mes (IVA incluido) era el precio publicado más bajo con facturación mensual o anual que encontramos para un WebSocket en tiempo real que transmite cuotas de Pinnacle en vivo y prepartido. Hay un WebSocket solo prepartido publicado por menos (oddssea Prematch, 59 $/mes). En mensual, odds-api.io Solo + WebSocket está a 118 €/mes (EUR; precios sin impuestos según sus condiciones). Su anual es 1.180 €/año ≈ 98,33 €/mes, aún por encima del anual de Builder (990 €/año ≈ 82,50 €/mes IVA incl.).
### ¿Hay prueba gratis?
Sí. Todos los planes de pago empiezan con 3 días gratis. Añades una tarjeta en el checkout y se cobra el cuarto día salvo que canceles. El plan Free no pide tarjeta.
### ¿Puedo pagar con cripto?
Sí. Además de la tarjeta con Stripe, puedes prepagar 1, 3 o 12 meses en USDC, USDT, SOL o BTC desde el panel. Los planes en cripto nunca se renuevan solos.
### ¿Necesito una cuenta en Pinnacle?
No. Solo necesitas una clave de API de PinnFeed. PinnFeed es independiente y no está afiliado a Pinnacle.
---
Source: https://pinnfeed.io/es/compare
# Comparativa de APIs de cuotas de Pinnacle: quién transmite los precios y cuánto cuesta
Si necesitas que las cuotas de Pinnacle lleguen a tu código en cuanto se mueven, el mercado se divide en tres grupos: APIs autoservicio con WebSocket, revendedores solo-Pinnacle que venden el socket como complemento, y proveedores enterprise que solo dan precio en una llamada comercial. Aquí tienes los precios publicados que encontramos, con enlaces, para que compruebes cada cifra.
**Respuesta corta:** a 9 de noviembre de 2026, PinnFeed Builder a **99 €/mes** (IVA incluido) era el precio publicado más bajo con facturación mensual o anual que encontramos para un WebSocket en tiempo real que transmite cuotas de Pinnacle **en vivo y prepartido**. Hay un WebSocket solo prepartido publicado por menos (oddssea Prematch, 59 $/mes). En mensual, odds-api.io Solo + WebSocket está a 118 €/mes (EUR; precios sin impuestos según sus condiciones). Su anual es 1.180 €/año ≈ 98,33 €/mes, aún por encima del anual de Builder (990 €/año ≈ 82,50 €/mes IVA incl.). Si te basta con hacer polling, The Odds API es más barata que todos, pero no tiene ningún feed push.
## La tabla comparativa
Precios tal y como estaban publicados en la página de cada proveedor el 9 de noviembre de 2026. Las conversiones a euros usan el tipo de referencia del BCE del 6 de noviembre de 2026 (1 GBP = 1,1988 €, 1 USD = 0,89566 €) y son aproximadas.
| Proveedor | Cuotas de Pinnacle | Push en tiempo real | Plan publicado más barato con push | ≈ € al mes | Plan gratis | Fuente |
|---|---|---|---|---|---|---|
| oddssea Prematch | Sí (solo Pinnacle) | WebSocket | Prematch, 59 $/mes | ≈ 53 € | Sí, REST prepartido con retraso | [oddssea.dev](https://oddssea.dev/) (revisado el 9 nov. 2026) |
| **PinnFeed** | Sí (solo Pinnacle) | WebSocket, deltas normalizados | Builder (en vivo + prepartido) | **99 €** (IVA incl. cuando corresponde) | Sí, REST con 30 s de retraso | [precios](/es/pricing) |
| odds-api.io | Sí (una de tus casas) | WebSocket | Solo (2 casas) + WebSocket, 98 £/mes | ≈ 117 € mensual · ≈ 98,33 € en anual | No | [odds-api.io/pricing](https://odds-api.io/pricing) |
| oddspush | Sí (solo Pinnacle) | WebSocket | REST + WebSocket, 138 $ (1 mes prepago) | ≈ 124 € | Prueba de 7 días (REST + WS) | [oddspush.com](https://oddspush.com/#pricing) (revisado el 9 nov. 2026) |
| oddssea Live | Sí (solo Pinnacle) | WebSocket | Live, 149 $/mes | ≈ 133 € | Sí, REST prepartido con retraso | [oddssea.dev](https://oddssea.dev/) (revisado el 9 nov. 2026) |
| pinnwire | Sí (solo Pinnacle) | Complemento WebSocket en bruto (+ caídas por SSE) | Pro 89 $ + Raw WS 89 $ = 178 $ | ≈ 159 € | Sí, 100 peticiones/día | [pinnwire.com](https://pinnwire.com/), [docs](https://pinnwire.com/docs.html) (revisado el 9 nov. 2026) |
| Revendedores solo-Pinnacle | Sí (solo Pinnacle) | Complemento WebSocket en bruto | Plan REST de 99 $ + complemento WebSocket de 99 $ | ≈ 177 € | Sí, 100 peticiones/día | Páginas de precios publicadas de los tres revendedores revisados |
| SportsGameOdds | Pinnacle en Pro y superiores | WebSocket vía Pusher (beta); envía ids de eventos cambiados y vuelves a pedirlos por REST | AllStar o plan a medida, precio bajo petición | No publicado | Sí (Amateur, actualizaciones cada 10 minutos) | [docs de streaming](https://sportsgameodds.com/docs/guides/realtime-streaming-api), [precios](https://sportsgameodds.com/pricing/) |
| OddsPapi | Sí | WebSocket (v5) | Solo plan B2B | No publicado | Sí, 250 peticiones/mes | [docs del WebSocket](https://oddspapi.io/en/docs/websocket-api) |
| Unabated | No aparece en su página de la API; Unabated Line en Concierge | SSE, sin WebSocket | Concierge, 799 $/mes (NFL, NBA, MLB, NHL, WNBA; uso personal) | ≈ 716 € | 15 segundos de retraso, para medios que cumplen objetivos de tráfico por enlaces | [unabated.com/odds-api](https://unabated.com/odds-api) |
| OpticOdds | Sí (agregador) | SSE y RabbitMQ, sin WebSocket | Solo bajo presupuesto | No publicado | No | [precios](https://opticodds.com/pricing), [FAQ de la API](https://developer.opticodds.com/docs/api-faq) |
| OddsJam API | No aparece en su página de la API | Push stream, protocolo no indicado | Solo bajo presupuesto | No publicado | No publica plan gratis de la API | [oddsjam.com/odds-api](https://oddsjam.com/odds-api) |
| The Odds API | Sí (región UE) | **Ninguno**, solo polling REST | Sin plan push; polling desde 30 $/mes | ≈ 27 € (polling) | Sí, 500 créditos/mes | [the-odds-api.com](https://the-odds-api.com/) |
## Cómo leerla
- **Push frente a polling.** Un WebSocket entrega cada cambio de precio una vez, cuando ocurre. Hacer polling a un endpoint REST cada N segundos se pierde los movimientos intermedios y gasta cuota en precios que no cambiaron. Para detectar steam, modelos en vivo o cualquier cosa sensible al tiempo, el push es lo que importa. Mira [por qué el push gana al polling](/odds-websocket-api) (en inglés).
- **En vivo + prepartido frente a solo prepartido.** Varios feeds dedicados publican un WebSocket solo prepartido más barato. La afirmación de esta página se limita a planes que transmiten cuotas de Pinnacle **en vivo y prepartido**. oddssea Prematch, a 59 $/mes, es más barato si no necesitas el directo.
- **Solo Pinnacle frente a varias casas.** PinnFeed lleva solo Pinnacle, el mercado más afilado y el precio de referencia habitual. Si además necesitas las cuotas de casas blandas en el mismo feed, encaja mejor un agregador como odds-api.io o SportsGameOdds, y pagas por cada casa extra.
- **Qué incluye el precio.** Builder incluye el WebSocket con REST a 10 peticiones por segundo, los 13 deportes, líneas alternativas, props y futuros, cuotas justas en cada mercado e historial de cuotas de cierre. Los revendedores solo-Pinnacle venden el socket como complemento de 99 $ sobre un plan REST, por eso el total ronda los 177 €. pinnwire también cobra el WebSocket en bruto como complemento de +89 $ en Pro y superiores.
- **Proveedores que solo dan presupuesto.** OpticOdds, la API de OddsJam y los niveles B2B de otros proveedores no publican precios. Algunos artículos de terceros citan cifras, pero las dejamos fuera porque los proveedores no las han publicado.
## Una página por proveedor
Cada proveedor tiene su propia página con un veredicto, una tabla de precios fechada y cuándo elegirlo en lugar de PinnFeed: empieza por [alternativas a la API de cuotas de Pinnacle](/es/alternatives) o ve directo a [oddssea](/es/oddssea-alternative), [odds-api.io](/es/odds-api-io-alternative), [oddspush](/es/oddspush-alternative), [pinnwire](/es/pinnwire-alternative), [The Odds API](/es/the-odds-api-alternative), [OpticOdds](/es/opticodds-alternative), [OddsJam](/es/oddsjam-alternative), [SportsDataIO](/es/sportsdataio-alternative), [Sportmonks](/es/sportmonks-alternative), [Betfair Exchange API](/es/betfair-exchange-api-alternative), [OddsPapi](/es/oddspapi-alternative), [SportsGameOdds](/es/sportsgameodds-alternative) o [Unabated](/es/unabated-alternative).
## Lo que no afirmamos
- No afirmamos tener menos latencia que ningún proveedor concreto; no hemos hecho una prueba cara a cara.
- No afirmamos ser más baratos que The Odds API, que cuesta menos pero no envía datos por push.
- No afirmamos ser más baratos que un WebSocket **solo prepartido** (oddssea Prematch, 59 $/mes a 9 de noviembre de 2026).
- «Más bajo» significa aquí el precio publicado más bajo con facturación mensual o anual que pudimos encontrar el 9 de noviembre de 2026 para un WebSocket en tiempo real que transmite cuotas de Pinnacle **en vivo y prepartido**. Los precios cambian. Si ves un plan publicado más barato dentro de ese alcance, escríbenos y actualizaremos la página.
## Preguntas frecuentes
### ¿Cuál es el precio publicado más bajo con facturación mensual para un WebSocket de cuotas de Pinnacle en vivo y prepartido?
A 9 de noviembre de 2026, PinnFeed Builder a 99 €/mes (IVA incluido) era el precio publicado más bajo con facturación mensual o anual que encontramos para un WebSocket en tiempo real que transmite cuotas de Pinnacle en vivo y prepartido. Hay un WebSocket solo prepartido publicado por menos (oddssea Prematch, 59 $/mes). En mensual: odds-api.io Solo + WS 118 €/mes (sin impuestos). Su anual ≈ 98,33 €/mes — aún por encima del anual de Builder (≈ 82,50 €/mes IVA incl.).
### ¿Existe un WebSocket gratis de cuotas de Pinnacle?
No encontramos ninguno. Los planes gratis con precios de Pinnacle son solo REST: el plan gratis de PinnFeed tiene 30 segundos de retraso, The Odds API da 500 créditos al mes y OddsPapi 250 peticiones al mes.
### ¿The Odds API tiene WebSocket?
No. The Odds API es solo REST; tienes que hacer polling para ver cambios. Sus planes empiezan en 30 $ al mes.
### ¿OpticOdds tiene WebSocket?
No. La propia FAQ de la API de OpticOdds dice que no ofrece webhooks ni WebSockets y que transmite por Server-Sent Events. El precio es solo bajo presupuesto.
### ¿PinnFeed es la API oficial de Pinnacle?
No. Pinnacle cerró su API pública en julio de 2025. PinnFeed es un servicio independiente, no afiliado a Pinnacle, que redistribuye precios observados de Pinnacle para desarrollo de software e investigación.
---
Source: https://pinnfeed.io/es/faq
# Preguntas frecuentes sobre PinnFeed
Respuestas directas sobre PinnFeed, la API de cuotas de Pinnacle en tiempo real. PinnFeed (pinnfeed.io, con doble n) es una API de cuotas de Pinnacle, no la app de Pinterest PinFeed. Hay un plan Free (sin tarjeta, REST con 30 s de retraso, 2 deportes) y una prueba gratis de 3 días en los planes de pago (se pide tarjeta). ¿Falta algo? Escribe a support@pinnfeed.io.
## Preguntas sobre el producto y los datos
### ¿Qué es PinnFeed?
PinnFeed (pinnfeed.io, con doble n) es una API para desarrolladores con las cuotas de apuestas deportivas de Pinnacle en tiempo real, no la app de Pinterest PinFeed. Entrega precios en vivo y prepartido por un único WebSocket con filtros en el servidor y actualizaciones delta, además de snapshots REST, cuotas justas sin margen, historial de cuotas de cierre y un servidor MCP alojado para asistentes de IA.
### ¿PinnFeed es la API oficial de Pinnacle?
No. Pinnacle cerró su API pública en julio de 2025. PinnFeed es un servicio independiente, no afiliado a Pinnacle, y no necesitas una cuenta en Pinnacle.
### ¿Qué deportes y mercados cubre?
Trece deportes: fútbol, tenis, baloncesto, hockey, fútbol americano, béisbol, rugby, MMA, boxeo, voleibol y balonmano, esports, golf y críquet. Los mercados son ganador (moneyline), hándicap, total y total por equipo de cada periodo, más líneas alternativas, props y futuros en Builder y superiores.
### ¿Qué contiene cada mercado?
Cuotas decimales y americanas, la línea, la apuesta máxima de Pinnacle, el margen de la casa y la cuota justa sin margen y la probabilidad justa de cada resultado.
### ¿Qué frescura tienen los datos?
Los planes de pago son en tiempo real: el WebSocket envía cada cambio en cuanto se recibe. El plan gratis lleva 30 segundos de retraso.
### ¿Puedo usar PinnFeed con ChatGPT o Claude?
Sí. PinnFeed aloja un servidor MCP en https://pinnfeed.io/mcp que funciona con Claude, Claude Code, el modo desarrollador de ChatGPT, Cursor, VS Code Copilot y Codex. Consulta la guía de MCP.
### ¿Es contenido para mayores de edad?
Sí. Los datos de cuotas y las guías son material educativo para mayores de 18 años. Nada de esto es un pronóstico, una apuesta segura ni una promesa de beneficios.
## Preguntas sobre precios y facturación
### ¿Cuánto cuesta PinnFeed?
Free 0 € (REST, 30 segundos de retraso); Hobby 29 €/mes (REST en tiempo real, sin WebSocket); Builder 99 €/mes (el plan WebSocket); Pro 199 €/mes; Enterprise bajo petición. Los precios incluyen IVA cuando corresponde.
### ¿Qué plan incluye el WebSocket?
Builder (99 €/mes) y superiores. Las claves Free y Hobby son solo REST.
### ¿Hay prueba gratis?
Sí, 3 días gratis en todos los planes de pago. Se cobra la tarjeta el cuarto día salvo que canceles. Una prueba por cliente.
### ¿Es PinnFeed el WebSocket de Pinnacle en vivo + prepartido más barato con facturación mensual?
A 9 de noviembre de 2026, PinnFeed Builder a 99 €/mes (IVA incluido) era el precio publicado más bajo con facturación mensual o anual que encontramos para un WebSocket en tiempo real que transmite cuotas de Pinnacle **en vivo y prepartido**. Hay un WebSocket solo prepartido publicado por menos (oddssea Prematch, 59 $/mes). En mensual, odds-api.io Solo + WebSocket está a 118 €/mes (EUR; precios sin impuestos según sus condiciones). Su anual es 1.180 €/año ≈ 98,33 €/mes, aún por encima del anual de Builder (990 €/año ≈ 82,50 €/mes IVA incl.). La [comparativa](/es/compare) enlaza todas las fuentes.
### ¿Puedo pagar con cripto?
Sí. Puedes prepagar 1, 3 o 12 meses en USDC, USDT, SOL o BTC desde el panel, o pagar con tarjeta a través de Stripe.
### ¿Los precios incluyen IVA cuando corresponde, y puede mi empresa añadir un NIF?
Sí. Los precios están en euros e incluyen el IVA cuando corresponde: el importe publicado ya incluye el IVA, y Stripe calcula la parte de IVA en el checkout a partir de tu dirección de facturación. Esa parte puede ser 0 en caso de inversión del sujeto pasivo o cuando no aplica IVA. Las empresas pueden añadir su NIF o número de IVA en el checkout.
### ¿Cómo cancelo?
Desde el panel: Plan & billing → Manage billing → Cancel. Mantienes el acceso hasta el final del periodo pagado.
---
Source: https://pinnfeed.io/es/alternatives
# Alternativas a la API de cuotas de Pinnacle: qué proveedor encaja en cada caso
**Si necesitas cuotas de Pinnacle en vivo y prepartido por WebSocket con facturación mensual, PinnFeed Builder cuesta 99 €/mes (IVA incluido). A 9 de noviembre de 2026 era el precio publicado más bajo con facturación mensual o anual que encontramos para un WebSocket en tiempo real que transmite cuotas de Pinnacle en vivo y prepartido. Hay un WebSocket solo prepartido publicado por menos (oddssea Prematch, 59 $/mes) y, odds-api.io Solo + WS anual es ≈ 98,33 €/mes (1.180 €/año, sin impuestos), aún por encima del anual de Builder (≈ 82,50 €/mes IVA incl.). Si necesitas muchas casas, casas de EE. UU., estadísticas de fútbol a fondo o un contrato enterprise, alguno de los proveedores de abajo encaja mejor, y cada página lo dice.**
Todos los precios de estas páginas se leyeron en la web de cada proveedor el 9 de noviembre de 2026. Las cifras en euros usan el tipo de referencia del BCE del 6 de noviembre de 2026 (1 USD = 0,89566 €, 1 GBP = 1,1988 €) y son aproximadas. Cuando un proveedor no publica precio escribimos «solo bajo presupuesto»; cuando no pudimos verificar algo escribimos «sin datos» en lugar de suponer.
## Qué necesitas y qué proveedor encaja
| Lo que necesitas | Proveedor que encaja | Precio publicado que leímos (9 nov. 2026) | Nuestra página |
|---|---|---|---|
| Pinnacle en vivo + prepartido por WebSocket, mensual | PinnFeed Builder | 99 €/mes, IVA incl. cuando corresponde | [precios](/es/pricing) |
| WebSocket de Pinnacle solo prepartido, al menor precio | oddssea Prematch | 59 $/mes (≈ 52,84 €) | [alternativa a oddssea](/es/oddssea-alternative) |
| Pinnacle y casas blandas en el mismo socket | odds-api.io | Solo + WebSocket 98 £/mes (≈ 117,48 €) | [alternativa a odds-api.io](/es/odds-api-io-alternative) |
| Polling barato a muchas casas | The Odds API | 30 $/mes (≈ 26,87 €), solo REST | [alternativa a The Odds API](/es/the-odds-api-alternative) |
| Alertas de caídas de Pinnacle por SSE | pinnwire Drops | 89 $/mes (≈ 79,71 €) | [alternativa a pinnwire](/es/pinnwire-alternative) |
| Alertas de caídas en el servidor por SSE y frames de Pinnacle en bruto | Un revendedor solo-Pinnacle (REST + complemento WebSocket) | REST desde 99 $/mes; WebSocket +99 $/mes | [alternativa a un revendedor solo-Pinnacle](/es/pinnodds-alternative) |
| Prepago en cripto, sin tarjeta | oddspush | REST + WebSocket 138 $ por 1 mes (≈ 123,60 €) | [alternativa a oddspush](/es/oddspush-alternative) |
| Más de 200 casas, contrato enterprise | OpticOdds | Solo bajo presupuesto | [alternativa a OpticOdds](/es/opticodds-alternative) |
| Más de 100 casas con props de jugadores y lesiones | OddsJam API | Solo bajo presupuesto | [alternativas a OddsJam](/es/oddsjam-alternative) |
| Datos de ligas de EE. UU. más cuotas, uso personal | SportsDataIO Discovery Lab | Odds 99 $/mes, datos del día anterior | [alternativa a SportsDataIO](/es/sportsdataio-alternative) |
| Estadísticas de fútbol, alineaciones y cuotas de casas blandas | Sportmonks | Fútbol desde 29 €/mes, cuotas como complemento | [alternativa a Sportmonks](/es/sportmonks-alternative) |
| Varias casas con Pinnacle en Pro, stream en All-Star | SportsGameOdds | Pro 299 $/mes (≈ 267,80 €); stream solo bajo presupuesto | [alternativa a SportsGameOdds](/es/sportsgameodds-alternative) |
| REST multicasa con plan gratis pequeño, WebSocket en B2B | OddsPapi | Gratis 250 peticiones/mes; WebSocket solo bajo presupuesto | [alternativa a OddsPapi](/es/oddspapi-alternative) |
| Unabated Line y datos de ligas de EE. UU. por SSE | Unabated | Concierge 799 $/mes (≈ 715,63 €) | [alternativa a Unabated](/es/unabated-alternative) |
## Tres tipos de proveedor
- **Feeds dedicados de Pinnacle** (PinnFeed, oddssea, pinnwire, oddspush y revendedores solo-Pinnacle que venden REST más un complemento WebSocket). Una sola casa, el precio sharp de referencia, normalmente con cuotas justas y datos de caídas. Se diferencian en el alcance en vivo o prepartido, las conexiones, la facturación y el método de pago.
- **Agregadores de varias casas** (odds-api.io, The Odds API, OpticOdds, OddsJam API). Muchas casas en un mismo esquema; Pinnacle es una más cuando la ofrecen. Mejores para arbitraje, comparar líneas y casas de EE. UU.
- **Plataformas de datos deportivos con cuotas** (SportsDataIO, Sportmonks). Primero resultados, estadísticas, alineaciones y calendarios; las cuotas son un producto o un complemento. Mejores cuando las cuotas viven dentro de una app deportiva más amplia.
## Cara a cara
| Proveedor | Pinnacle | Transporte push | Plan más bajo con push | ≈ €/mes | Fuente |
|---|---|---|---|---|---|
| **PinnFeed** | Sí, única casa | WebSocket (en vivo + prepartido) | Builder | **99 €** | [precios](/es/pricing) |
| oddssea | Sí, única casa | WebSocket | Prematch 59 $ (solo prepartido); Live 149 $ | ≈ 52,84 €; ≈ 133,45 € | [oddssea.dev](https://oddssea.dev/) |
| odds-api.io | Sí, una de tus casas | WebSocket | Solo + WebSocket 98 £ | ≈ 117,48 € (≈ 98,33 € en anual) | [odds-api.io/pricing](https://odds-api.io/pricing) |
| oddspush | Sí, única casa | WebSocket | REST + WebSocket 138 $ (1 mes prepago) | ≈ 123,60 € | [oddspush.com](https://oddspush.com/#pricing) |
| pinnwire | Sí, única casa | Complemento WebSocket en bruto; caídas por SSE | Pro 89 $ + WebSocket 89 $ | ≈ 159,43 € | [pinnwire.com](https://pinnwire.com/) |
| Revendedor solo-Pinnacle | Sí, única casa | Complemento WebSocket en bruto; caídas por SSE | Pro 99 $ + WebSocket 99 $ | ≈ 177,34 € | [página del revendedor](/es/pinnodds-alternative) |
| The Odds API | Sí (región UE) | Ninguno, polling REST | Sin plan push | n/a | [the-odds-api.com](https://the-odds-api.com/) |
| OpticOdds | Lo ofrece la API (agregador) | SSE y RabbitMQ, sin WebSocket | Solo bajo presupuesto | Solo bajo presupuesto | [FAQ de la API](https://developer.opticodds.com/docs/api-faq) |
| OddsJam API | No aparece en su página de la API (sin datos) | «Push stream», protocolo no indicado | Solo bajo presupuesto | Solo bajo presupuesto | [oddsjam.com/odds-api](https://oddsjam.com/odds-api) |
| SportsDataIO | No aparece en las páginas que leímos (sin datos) | No indicado (sin datos) | Planes comerciales solo bajo presupuesto | Solo bajo presupuesto | [developers](https://sportsdata.io/developers) |
| Sportmonks | Feed Standard: «limitado / con retraso»; Premium: no aparece | No encontrado (sin datos) | No encontramos plan push | n/a | [docs de casas](https://docs.sportmonks.com/v3/tutorials-and-guides/tutorials/odds-and-predictions/bookmakers) |
La tabla completa, con SportsGameOdds, OddsPapi y Unabated, está en la [comparativa](/es/compare). La lógica del precio se explica en [precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket).
## Cuándo gana otro proveedor
- Necesitas **más que Pinnacle**: casas blandas para arbitraje, casas de EE. UU. o props de jugadores de más de 100 operadores. PinnFeed solo lleva Pinnacle.
- Solo necesitas cuotas **prepartido**: oddssea Prematch está publicado por debajo de Builder.
- Puedes **pagar un año por adelantado**: Solo + WebSocket anual de odds-api.io sale por unos 98,33 €/mes para 2 casas.
- Solo necesitas hacer **polling** unas pocas veces por minuto: The Odds API cuesta menos y tiene plan gratis.
- Necesitas **SLA y contrato** para una casa de apuestas o un medio: OpticOdds, OddsJam API o los planes comerciales de SportsDataIO.
## Cuándo gana PinnFeed
- Quieres cuotas de Pinnacle **en vivo y prepartido** por un único WebSocket con factura **mensual** y 3 conexiones.
- Quieres **cuotas justas sin margen** (fair, fairProb, margin) e **historial de cuotas de cierre** en cada mercado sin escribir código extra.
- Quieres usar las mismas cuotas dentro de ChatGPT o Claude con el **servidor MCP**.
- Quieres empezar con una clave REST gratis y luego probar Builder 3 días.
## Cómo probar antes de pagar
1. Consigue una clave gratis de PinnFeed y lee el [quickstart](/docs) (en inglés).
2. Ejecuta el [cliente WebSocket en Python y Node](/es/guides/pinnacle-odds-websocket-python-node) durante una jornada completa.
3. En paralelo, abre el plan gratis o la prueba de la alternativa que estés valorando.
4. Registra los mismos mercados en ambos y compara lo que de verdad necesitas: cobertura, campos, límites de conexión y condiciones de facturación.
## Preguntas frecuentes
### ¿Cuál es la mejor alternativa a la API oficial de Pinnacle?
Pinnacle cerró su API pública en julio de 2025, así que todas las opciones de aquí son servicios independientes. Para cuotas de Pinnacle en vivo y prepartido por WebSocket con factura mensual, PinnFeed Builder a 99 €/mes era el precio publicado más bajo con facturación mensual o anual que encontramos el 9 de noviembre de 2026. Para solo prepartido, oddssea Prematch a 59 $/mes está por debajo.
### ¿Qué API de cuotas cubre más casas de apuestas?
De los proveedores de esta página, OpticOdds anuncia más de 200 casas y OddsJam más de 100. PinnFeed solo lleva Pinnacle.
### ¿Qué alternativas publican sus precios?
PinnFeed, oddssea, pinnwire, oddspush, odds-api.io, The Odds API y Sportmonks publican precios. SportsDataIO solo publica sus planes Discovery Lab de uso personal. OpticOdds y la API de OddsJam funcionan solo bajo presupuesto.
### ¿Existe un WebSocket gratis de cuotas de Pinnacle?
No encontramos ninguno. Los planes gratis que incluyen Pinnacle son solo REST, por ejemplo PinnFeed Free (30 segundos de retraso) y los 500 créditos al mes de The Odds API. oddspush ofrece una prueba de 7 días que incluye su WebSocket.
## Prueba Builder
Builder es el plan WebSocket: 99 €/mes, 3 conexiones, los 13 deportes, en vivo y prepartido, cuotas justas y cuotas de cierre. Empieza la prueba de 3 días desde [precios](/es/pricing). Se pide tarjeta y se cobra después del día 3 salvo que canceles.
*Solo para mayores de 18 años. PinnFeed es una API de datos para desarrolladores e investigadores. Las cuotas y estadísticas como las cuotas justas o el CLV son herramientas educativas, no consejos de apuestas, y nada de esto promete beneficios. Juega con responsabilidad.*
---
Source: https://pinnfeed.io/es/answers/odds-api-pricing-per-request-vs-flat
# Precio de una API de cuotas: por petición o tarifa plana
**Respuesta:** las APIs de cuotas usan tres modelos de precio. Los **bonos de créditos** cobran por volumen de peticiones (The Odds API: 500 créditos gratis al mes y después de 20K créditos por $30/mes hasta 15M por $249/mes, según lo publicado el 9 de noviembre de 2026). Las **cuotas por hora** incluyen un ritmo de peticiones y venden más como extra (odds-api.io Solo incluye 5.000 peticiones por hora). Las **tarifas planas** cobran un precio con límite de ritmo: los planes de pago de PinnFeed no tienen tope diario de peticiones y en Builder (€99/mes) los cambios de precio llegan por WebSocket, así que vigilar un mercado no cuesta una petición por consulta. Los bonos encajan con consultas ocasionales a muchas casas; la tarifa plana, con vigilar precios de Pinnacle sin parar.
## Los tres modelos (publicado el 9 nov 2026)
| Modelo | Ejemplo | Qué pagas | Push |
|---|---|---|---|
| Bono de créditos | The Odds API: 500 créditos gratis/mes; 20K $30/mes; 100K $59; 5M $119; 15M $249 | Volumen de peticiones; su página cuenta una petición como un deporte, un mercado y una región | No (polling REST) |
| Cuota por hora | odds-api.io Solo £49/mes, 5.000 peticiones/hora; más peticiones por hora como extra mensual (10.000/h +£139/mes) | Número de casas y ritmo de peticiones; el WebSocket cuesta 2× el plan | WebSocket (2× el plan) |
| Plana con límite | PinnFeed Free 1.000 peticiones/día (30 s de retraso) · Hobby €29/mes, 2 req/s · Builder €99/mes, 10 req/s · Pro €199/mes, 30 req/s | Funciones y velocidad; sin tope diario en los planes de pago | WebSocket en Builder y Pro |
Las cifras de competidores son las publicadas en su página de precios el 9 de noviembre de 2026 y pueden cambiar; odds-api.io muestra precios sin impuestos y PinnFeed incluye IVA. Los proveedores que solo dan presupuesto (por ejemplo OpticOdds o la API de OddsJam) son "solo presupuesto" y no aparecen en la tabla.
## Ejemplo: hacer polling de un mercado
Supón que consultas un deporte y tres mercados cada 10 segundos, todo el día:
- 6 consultas por minuto × 1.440 minutos = **8.640 consultas al día**, unas **259.200 al mes** (30 días).
- Con la regla de una petición por deporte, mercado y región, tres mercados son unas **777.600 peticiones al mes**. Eso supera el bono de 100K y cabe en el de 5M ($119/mes según lo publicado).
- Con una tarifa plana con WebSocket, la misma vigilancia es una conexión: recibes cada cambio cuando llega al servidor de PinnFeed, en lugar de hasta 10 segundos tarde, y los push no cuentan como peticiones.
Consultar cada 60 segundos divide el volumen entre 6, pero ves cada movimiento más tarde. Las cuentas de push frente a polling: [push o polling](/es/answers/pinnacle-live-odds-push-vs-polling).
## Cuándo encaja cada modelo
- **Muchas casas, consultas ocasionales:** un bono de créditos suele encajar mejor; PinnFeed solo lleva Pinnacle. [Multicasa o solo Pinnacle](/es/answers/multi-book-odds-api-vs-pinnacle-only).
- **Precios de Pinnacle vigilados todo el día, en vivo o prepartido:** tarifa plana con push. A 9 de noviembre de 2026, Builder era el precio publicado más bajo con facturación mensual o anual que encontramos para un WebSocket de cuotas de Pinnacle **en vivo + prepartido**. El plan Prematch de oddssea ($59) cuesta menos pero es solo prepartido; odds-api.io Solo + WebSocket cuesta €118/mes (sin impuestos) y su anual, unos €98,33/mes, queda por encima de Builder anual (€82,50/mes). Detalles: [comparativa](/es/compare).
- **Prototipos:** empieza en un plan gratis y mide tu patrón real de peticiones: [APIs de cuotas gratis](/es/answers/free-odds-api).
## Planes
[Builder](/es/pricing#plan-builder) (€99/mes, €990/año): WebSocket, 3 conexiones, todos los mercados y registros de cierre. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Los mensajes del WebSocket cuentan para el límite de PinnFeed?
No. El límite de ritmo se aplica a las peticiones REST. En el WebSocket, el límite es el número de conexiones simultáneas (3 en Builder, 10 en Pro).
### ¿Qué pasa si supero los límites de PinnFeed?
REST devuelve `429 rate_limited` con una cabecera `Retry-After`; Free además devuelve `429 daily_quota` tras 1.000 peticiones (se reinicia a las 00:00 UTC). Mira los [límites de peticiones](/es/answers/pinnacle-odds-api-rate-limits).
### ¿Un bono de créditos sale a cuenta alguna vez?
Sí, con poco volumen o cuando necesitas muchas casas. El plan gratis de The Odds API y su bono de $30 cuestan menos en términos absolutos que cualquier plan de pago de PinnFeed: [polling de The Odds API frente a push](/es/answers/the-odds-api-polling-vs-pinnfeed-push).
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-startup-mvp
# API de cuotas Pinnacle para el MVP de tu startup
**Respuesta:** puedes montar y lanzar un MVP sobre PinnFeed sin hablar con ventas. Prototipa con la clave **Free** (REST, 30 segundos de retraso, 2 deportes, 1.000 peticiones al día, sin tarjeta). Cuando necesites tiempo real, **Hobby** (€29/mes) da REST en tiempo real y **Builder** (€99/mes) añade el WebSocket con los 13 deportes, todos los mercados y registros de cierre. Guarda la clave en tu servidor, abre allí un WebSocket y reparte los precios a tus usuarios. Mostrar valores derivados en tu propio producto es self-serve; revender el feed en sí requiere Enterprise.
## Un camino que sirve a casi cualquier MVP
| Fase | Plan | Por qué |
|---|---|---|
| Prototipo y demo | Free | Esquema real y precios reales, 30 s tarde; suficiente para la interfaz |
| Beta privada | Hobby o Builder | Tiempo real; Builder si necesitas push en vivo, props o cierres |
| Lanzamiento | Builder (mensual o anual) | 3 conexiones WebSocket, 10 req/s REST |
| Escala o redistribución | Pro o Enterprise | 10 conexiones y frames raw, o licencia comercial y SLA |
Builder anual cuesta €990 (€82,50/mes); el trimestral, €267. Todos los planes de pago empiezan con 3 días de prueba; se requiere tarjeta y se cobra después del día 3 salvo que canceles: [cómo funciona la prueba](/es/answers/pinnacle-odds-api-free-trial).
## La arquitectura en un dibujo
```
PinnFeed WebSocket ──► your server (one connection, key stays here)
├─ in-memory book (snapshot + deltas)
├─ Postgres for history you want to keep
└─ your API / SSE ──► your users
```
- **Nunca envíes la clave al navegador.** Pasa el REST por tu backend: [JavaScript en el navegador y CORS](/es/answers/pinnacle-odds-browser-javascript-cors), [proxy con FastAPI](/es/answers/pinnacle-odds-fastapi-proxy).
- **Mantén un libro local.** Aplica el snapshot y luego los deltas: [snapshot y delta](/es/answers/pinnacle-odds-websocket-snapshot-delta).
- **Guarda lo que necesites.** [Almacenamiento en Postgres](/es/answers/pinnacle-odds-postgres-storage); cierres en Builder: [API de líneas de cierre](/es/answers/pinnacle-closing-line-api-clv).
- **Una conexión por proceso basta.** Builder permite 3, así que tienes margen para staging y un worker.
## Qué puedes mostrar a tus usuarios
Según la [política de uso aceptable](/legal/acceptable-use), el uso comercial dentro de tu propia app está permitido, incluida la visualización derivada como unos pocos precios, cuotas justas, ventajas o gráficos. Una API o una descarga masiva de cuotas para tus clientes es redistribución y requiere Enterprise: [uso comercial](/es/answers/pinnacle-odds-api-commercial-use). No presentes tu producto ni los datos como oficiales de Pinnacle.
## Ideas que encajan en los planes self-serve
[Herramientas para tipsters](/es/use-cases/tipsters), [bots de alertas en Discord](/es/use-cases/discord-servers), [ciencia de datos y modelos](/es/use-cases/data-scientists), [escáneres de EV hechos con IA](/es/answers/vibe-coding-ev-scanner).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. Revisa las normas de juego y de datos de cada mercado donde lances. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Necesito una cuenta en Pinnacle?
No. PinnFeed es un servicio de datos independiente; solo necesitas una clave de PinnFeed. No está afiliado a Pinnacle.
### ¿Puedo empezar en mensual y pasar a anual después?
Sí, los planes se gestionan desde el panel. Mira [facturación anual y trimestral](/es/answers/pinnfeed-annual-quarterly-billing).
### ¿Y si necesitamos más que Builder?
Pro (€199/mes) sube a 10 conexiones y 30 req/s. Enterprise incluye 50 conexiones WebSocket (más bajo petición), exportaciones masivas de cierres, SLA y licencia comercial.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-python-rest
# Cómo obtener cuotas de Pinnacle en Python (REST)
**Respuesta:** `pip install requests`, define `PINNFEED_KEY` y llama a `GET https://pinnfeed.io/v1/odds` con la cabecera `x-api-key`. El plan Free funciona al momento (30 s de retraso, 2 deportes). Para un libro en memoria en vivo, usa el [ejemplo de WebSocket en Python](/es/answers/pinnacle-odds-websocket-python-example) en Builder.
## Snapshot en unas 15 líneas
```python
import os, requests
KEY = os.environ["PINNFEED_KEY"]
r = requests.get(
"https://pinnfeed.io/v1/odds",
params={"sport": "soccer", "market": "moneyline", "main": "true", "limit": 20},
headers={"x-api-key": KEY},
timeout=15,
)
r.raise_for_status()
for ev in r.json().get("events", []):
m = next((x for x in ev["markets"] if x["type"] == "moneyline"), None)
if not m:
continue
prices = {o["name"]: (o["decimal"], o["fair"]) for o in m["outcomes"]}
print(ev["home"], "v", ev["away"], prices)
```
Otros endpoints útiles: `/v1/sports`, `/v1/events`, `/v1/drops` y `/v1/closing/{id}` (Builder o superior). Referencia: [docs REST](/docs/rest).
## Cuándo es mejor el WebSocket
| Tarea | Usa |
|---|---|
| Hojas de cálculo, cron, descargas para análisis | REST (esta página) |
| Bot de steam, libro en vivo, alertas en Telegram | WebSocket ([ejemplo](/es/answers/pinnacle-odds-websocket-python-example)) |
Siguiente paso con datos: [cuotas en un DataFrame de pandas](/es/answers/pinnacle-odds-pandas-dataframe).
## Planes
[Clave gratis](/signup) · [Builder](/es/pricing#plan-builder) (€99/mes) para el push. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Necesito WebSocket en el plan Free?
No. Free es solo REST por diseño.
### ¿Dónde está la paginación?
`limit` y `offset` en los endpoints de listas: mira [REST](/docs/rest) y la [paginación en Python](/es/answers/pinnacle-odds-python-events-odds-pagination).
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-websocket-nodejs-reconnect
# WebSocket de cuotas Pinnacle en Node.js con reconexión
**Respuesta:** en `close`, espera `min(delay*2, 30000)` ms más un jitter, abre un socket nuevo, reenvía `subscribe` y reconstruye el estado con el `snapshot` nuevo (vacía los mapas cuando `part === 1`). Responde siempre al `ping` del servidor con `{"type":"pong"}` o el servidor te cierra tras unos 60 s. Requiere el plan Builder (€99/mes). Archivo completo: `stream.mjs` en la [guía de Python y Node](/es/guides/pinnacle-odds-websocket-python-node).
## Patrón de reconexión
```javascript
// Example — npm install ws; export PINNFEED_KEY=...
import WebSocket from 'ws';
const WS_URL = process.env.PINNFEED_WS || 'wss://pinnfeed.io/v1/stream';
const KEY = process.env.PINNFEED_KEY;
const events = new Map();
const markets = new Map();
function connect(delay = 1000) {
const ws = new WebSocket(WS_URL, { headers: { 'x-api-key': KEY } });
ws.on('open', () => {
delay = 1000;
ws.send(JSON.stringify({
type: 'subscribe',
sports: ['soccer', 'tennis'],
markets: ['moneyline'],
main: true,
specials: false,
}));
});
ws.on('message', (raw) => {
const msg = JSON.parse(raw);
if (msg.type === 'ping') return ws.send('{"type":"pong"}');
if (msg.type === 'snapshot') {
if (msg.part === 1) { events.clear(); markets.clear(); }
msg.events.forEach((e) => events.set(e.id, e));
msg.markets.forEach((m) => markets.set(m.id, m));
if (msg.final) console.log(`book ready: ${events.size} events, ${markets.size} markets`);
}
// apply deltas the same way as in the full stream.mjs
});
ws.on('close', (code) => {
const wait = Math.min(delay * 2, 30000);
console.log(`closed (${code}); reconnecting in ${wait / 1000}s`);
setTimeout(() => connect(wait), wait + Math.random() * 1000);
});
}
connect();
```
El código de cierre **1001** (`server_shutdown`) significa un despliegue: reconecta con backoff ([docs del WebSocket](/docs/websocket)). Evita la estampida: el jitter importa.
## Planes
[Empieza con Builder](/es/pricing#plan-builder). Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. Relacionado: [ejemplo en Python](/es/answers/pinnacle-odds-websocket-python-example).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Reutilizo el mismo Map entre reconexiones?
Vacíalo con la primera parte del snapshot (`part === 1`). Si no, conservas mercados que el snapshot nuevo ya no menciona.
### ¿Hobby puede reconectar al stream?
Hobby no tiene WebSocket. Recibirás `403 plan_lacks_ws` antes de que corra la lógica de reconexión.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-google-sheets-excel
# API de cuotas Pinnacle para Google Sheets y Excel
**Respuesta:** llama a `GET /v1/odds` de la API REST de PinnFeed con la cabecera `x-api-key` desde Google Apps Script (`UrlFetchApp`) o desde Excel (Power Query, Office Scripts o un pequeño script de Python). Free (€0, 30 s de retraso, 2 deportes, 1.000 peticiones al día) basta para un tablero que se actualiza cada 15 minutos. Paso a paso con Apps Script: [guía de Google Sheets](/es/guides/pinnacle-odds-google-sheets).
## Google Sheets (la llamada básica)
Guarda la clave en las **propiedades del script** como `PINNFEED_KEY`, nunca en una celda:
```javascript
// Example fragment — full script in the Sheets guide
function refreshOdds() {
const key = PropertiesService.getScriptProperties().getProperty('PINNFEED_KEY');
const url = 'https://pinnfeed.io/v1/odds?sport=soccer&market=moneyline&main=true&limit=50';
const res = UrlFetchApp.fetch(url, { headers: { 'x-api-key': key }, muteHttpExceptions: true });
if (res.getResponseCode() !== 200) {
console.warn(res.getContentText());
return; // leave previous rows alone
}
const events = JSON.parse(res.getContentText()).events || [];
// write Starts / League / Home / Away / 1 / X / 2 / fair columns into sheet "Odds"
}
```
Activador: por tiempo cada 15 minutos ≈ 96 llamadas al día, dentro de la cuota diaria de Free.
## Excel
Opciones fieles a la API:
1. **Power Query:** `Web.Contents("https://pinnfeed.io/v1/odds?sport=soccer&main=true", [Headers=[#"x-api-key"=Key]])` y después expande `events`, `markets` y `outcomes`.
2. **Python en Excel** o un script local con `requests` que escribe un `.xlsx` con un horario.
3. **No** pongas la clave en la URL de un libro compartido.
No hay complemento oficial de Excel; la integración es el JSON de la API REST ([docs REST](/docs/rest)).
## Planes
Tablero con retraso: [registro gratis](/signup). El push en tiempo real necesita [Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
Más: [calculadora sin margen en Excel o Sheets](/es/answers/no-vig-calculator-excel-sheets), [alerta por email de caídas en Sheets](/es/answers/google-sheets-odds-drop-email-alert), [registro de apuestas con CLV](/es/answers/bet-tracker-spreadsheet-clv).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Puedo meter el WebSocket en Sheets?
No de forma útil. Apps Script no mantiene un socket abierto. Usa REST con un temporizador en Sheets y el [cliente WebSocket](/es/guides/pinnacle-odds-websocket-python-node) para herramientas en vivo.
### ¿Por qué x-api-key y no un parámetro en la URL?
Es la autenticación preferida en los [docs](/docs/authentication). La cabecera mantiene la clave fuera de los logs y de las fórmulas de las celdas.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-chatgpt-mcp
# Cuotas de Pinnacle en ChatGPT y Claude (MCP)
**Respuesta:** añade el servidor MCP alojado de PinnFeed en **`https://pinnfeed.io/mcp`** con tu clave de API. El asistente puede llamar a herramientas de cuotas en vivo y prepartido, caídas, precios justos y líneas de cierre. Cada llamada a una herramienta cuenta como una petición REST de tu plan. Guía completa: [guía de MCP](/es/guides/pinnacle-odds-chatgpt-claude-mcp).
## Conectar
**Cursor** (`~/.cursor/mcp.json`):
```json
{
"mcpServers": {
"pinnfeed": {
"url": "https://pinnfeed.io/mcp",
"headers": { "Authorization": "Bearer YOUR_KEY" }
}
}
}
```
**Claude Code:**
```bash
claude mcp add --transport http pinnfeed https://pinnfeed.io/mcp \
--header "Authorization: Bearer YOUR_KEY"
```
**ChatGPT / Claude escritorio:** crea un conector personalizado con la URL `https://pinnfeed.io/mcp?key=YOUR_KEY` (en los [docs de MCP](/docs/mcp) está la ruta exacta en cada aplicación).
Usa una **clave distinta del panel** para cada asistente y así revocas una sin rotar todas.
## Herramientas
`get_account`, `list_sports`, `search_events`, `get_live_odds`, `get_prematch_odds`, `get_event`, `get_drops`, `get_closing_odds`.
Ejemplos de prompt: "¿Qué precios de fútbol cayeron más en Pinnacle en 15 minutos?" · "Ganador en vivo de tenis con precio justo y margen." · "Cuotas de cierre del evento 1640229582."
## Prueba sin asistente
```bash
curl -s https://pinnfeed.io/mcp \
-H "Authorization: Bearer $PINNFEED_KEY" \
-H "content-type: application/json" -H "accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_drops","arguments":{"sport":"soccer","minutes":15}}}'
```
## Planes
La clave gratis funciona con datos con retraso: [registro](/signup). La herramienta de cierres y la profundidad en vivo: [Builder](/es/pricing#plan-builder). Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
Más: [recetario de prompts MCP](/es/answers/pinnacle-odds-mcp-prompts-cookbook), [referencia de herramientas MCP](/es/answers/pinnacle-odds-mcp-tools-reference).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿El MCP necesita el plan WebSocket?
El MCP habla HTTP con la misma API REST. Free funciona (con retraso). `get_closing_odds` necesita Builder o superior. La frescura sigue el retraso de tu plan.
### ¿Se pegan las cuotas en el chat?
No. El asistente llama al servidor; no pegas ningún tablero en el prompt.
---
Source: https://pinnfeed.io/es/answers/pinnacle-max-stake-api
# Max stake de Pinnacle (`maxStake`) por API
**Respuesta:** cada objeto de mercado lleva **`maxStake`**, el riesgo máximo que acepta la fuente en esa línea (número o `null`). Un límite más alto suele indicar un precio más fiable; los detectores de steam suelen ignorar movimientos por debajo de un mínimo (por ejemplo 100). Campos: [esquema](/docs/schema).
## Dónde aparece
```json
{
"id": "1640278226:s;0;m",
"type": "moneyline",
"main": true,
"margin": 0.041,
"maxStake": 1500,
"outcomes": [
{ "name": "home", "decimal": 2.05, "fair": 2.14, "fairProb": 0.467 }
]
}
```
Es el mismo objeto en los snapshots y deltas del WebSocket y en REST `/v1/odds` y `/v1/events/{id}`.
## Filtrar mercados finos
```python
FLOOR = 100
for m in markets:
if (m.get("maxStake") or 0) < FLOOR:
continue
# evaluate steam / value on this market
```
Se usa en la [guía de steam](/es/guides/dropping-odds-steam-detection) y en el [bot de Telegram](/es/answers/telegram-picks-bot-pinnacle).
## Caídas de límite
Cuando Pinnacle recorta un precio **y** sube o mantiene un `maxStake` alto, esa combinación suele decir más que un recorte con un límite pequeño. PinnFeed expone los campos; la regla la defines tú. No hay un endpoint aparte de "caída de límite": observa `maxStake` en el tiempo en el stream o combina filas de `/v1/drops` con una lectura posterior de `/v1/events/{id}`.
## Planes
[Precios](/es/pricing). Builder para ver `maxStake` en vivo (€99/mes). Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿maxStake es el límite público de Pinnacle?
Es el riesgo máximo que trae el registro de mercado que normalizamos. Trátalo como el campo de límite del feed, no como garantía de que te acepten esa apuesta en una cuenta minorista.
### ¿Free ve maxStake?
Sí, en los mercados que devuelve Free (principales, con retraso).
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-pandas-dataframe
# Cuotas de Pinnacle en un DataFrame de pandas
**Respuesta:** llama a `GET /v1/odds` y recorre eventos → mercados → resultados para crear una fila por resultado. Obtienes un DataFrame ordenado con `decimal`, `fair`, `fairProb`, `margin` y `maxStake` por precio, listo para groupby, Parquet o un notebook. Funciona en todos los planes; en Free los datos llevan 30 segundos de retraso.
## Código
```python
# pip install requests pandas
import os, requests, pandas as pd
r = requests.get(
"https://pinnfeed.io/v1/odds",
headers={"x-api-key": os.environ["PINNFEED_KEY"]}, # ps_live_...
params={"sport": "soccer", "main": "true", "limit": 200},
timeout=20,
)
r.raise_for_status()
rows = []
for ev in r.json()["events"]:
for m in ev.get("markets", []):
for o in m.get("outcomes", []):
rows.append({
"event_id": ev["id"], "start": ev.get("startTime"), "live": ev.get("live"),
"league": (ev.get("league") or {}).get("name"),
"home": ev.get("home"), "away": ev.get("away"),
"market": m.get("type"), "period": m.get("period"), "line": m.get("line"),
"margin": m.get("margin"), "max_stake": m.get("maxStake"),
"outcome": o.get("name"), "decimal": o.get("decimal"),
"fair": o.get("fair"), "fair_prob": o.get("fairProb"),
})
df = pd.DataFrame(rows)
df["start"] = pd.to_datetime(df["start"], utc=True)
print(df.groupby("market")["margin"].describe())
df.to_csv("pinnacle_soccer.csv", index=False)
```
## Siguientes pasos
- Mercados con tamaño: `df[df.max_stake >= 100]` ([maxStake](/es/answers/pinnacle-max-stake-api)).
- Más de 200 eventos: pagina con `offset` ([paginación](/es/answers/pinnacle-odds-python-events-odds-pagination)).
- Cierres para CLV en Builder: [líneas de cierre en Python](/es/answers/pinnacle-odds-python-closing-lines-clv).
- Cambios en vivo sin polling: [ejemplo de WebSocket en Python](/es/answers/pinnacle-odds-websocket-python-example).
## Planes
Free (€0): 30 s de retraso, 2 deportes, mercados principales, 1.000 peticiones al día. Hobby (€29/mes): REST en tiempo real. [Builder](/es/pricing#plan-builder) (€99/mes): WebSocket, todos los mercados e histórico de cierres. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años. Para investigación y modelos, no es consejo de apuestas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Por qué una fila por resultado?
Así cada precio está en una sola columna y los filtros, tablas dinámicas y joins son sencillos. Para una fila por mercado: `df.pivot_table(index=["event_id","market","line"], columns="outcome", values="decimal")`.
### ¿Funciona en Jupyter o Colab?
Sí. Define la clave con `os.environ["PINNFEED_KEY"] = "ps_live_..."` en una celda que no compartas.
### ¿Hay versión con polars?
Pasa la misma lista `rows` a `polars.DataFrame(rows)`.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-websocket-golang
# Cliente WebSocket en Go para cuotas de Pinnacle
**Respuesta:** abre `wss://pinnfeed.io/v1/stream` con la cabecera `x-api-key: ps_live_...`, envía un `subscribe` en JSON, responde a cada `ping` con `{"type":"pong"}` (el servidor lo manda cada 20 s) y reconecta con backoff. Necesitas Builder (€99/mes).
## Esquema
```go
// go get github.com/gorilla/websocket
hdr := http.Header{}
hdr.Set("x-api-key", os.Getenv("PINNFEED_KEY"))
c, _, err := websocket.DefaultDialer.Dial("wss://pinnfeed.io/v1/stream", hdr)
// write: {"type":"subscribe","sports":["soccer"],"markets":["moneyline"],"main":true}
// on {"type":"ping"} write {"type":"pong"}
```
Detalles del protocolo: [snapshot y delta](/es/answers/pinnacle-odds-websocket-snapshot-delta), [ping/pong](/es/answers/pinnacle-odds-websocket-ping-pong), [reconexión en Node](/es/answers/pinnacle-odds-websocket-nodejs-reconnect).
## Planes
[Builder](/es/pricing#plan-builder) (€99/mes) para el WebSocket en vivo + prepartido y el historial de cierres. Prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles. REST gratis con retraso: [registro](/signup).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Hay un SDK oficial para Go?
No. Basta con un WebSocket normal y JSON.
### ¿Puedo pasar la clave como parámetro de la URL?
Sí, `/v1/stream?key=ps_live_...` funciona, pero usa la cabecera siempre que tu cliente lo permita.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-websocket-rust
# Cliente WebSocket en Rust para cuotas de Pinnacle
**Respuesta:** usa `tokio-tungstenite` (o `tungstenite`) contra `wss://pinnfeed.io/v1/stream` con la cabecera `x-api-key`. Suscríbete en JSON, responde a los pings y procesa primero el snapshot y luego los deltas. Requiere Builder.
## Esquema
```rust
// tokio-tungstenite + http::Request with header x-api-key
// after connect, send:
// {"type":"subscribe","sports":["soccer"],"markets":["moneyline"],"main":true}
// when type=="ping" reply {"type":"pong"}
```
Ideas de reconexión: [respuesta de Node](/es/answers/pinnacle-odds-websocket-nodejs-reconnect). Esquema de mensajes: [documentación](/docs/websocket).
## Planes
[Builder](/es/pricing#plan-builder) (€99/mes) para el WebSocket en vivo + prepartido y el historial de cierres. Prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles. REST gratis con retraso: [registro](/signup).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Importa permessage-deflate en Rust?
Es opcional. Consulta la [respuesta sobre compresión](/es/answers/pinnacle-odds-websocket-compression).
### ¿Hay un crate oficial?
No hace falta ningún SDK: es un WebSocket con mensajes JSON.
---
Source: https://pinnfeed.io/es/pinnodds-alternative
# Alternativa a pinnodds con el WebSocket incluido en el plan
**pinnodds y PinnFeed llevan solo cuotas de Pinnacle, en vivo y prepartido. En pinnodds el WebSocket es un complemento de +99 $/mes sobre un plan REST, así que el total más bajo con WebSocket es Pro 99 $ + WebSocket 99 $ = 198 $/mes (≈ 177,34 €). PinnFeed Builder incluye el WebSocket por 99 €/mes (IVA incluido cuando corresponde). Si quieres alertas de caídas calculadas en el servidor por SSE, los frames de Pinnacle en bruto o una clave gratis que no caduca, pinnodds encaja bien.**
Los datos de pinnodds salen de [su página de inicio](https://pinnodds.com/), su [documentación](https://pinnodds.com/docs) y su [llms.txt](https://pinnodds.com/llms.txt), leídos el 9 de noviembre de 2026. Las cifras en euros usan el tipo del BCE del 6 de noviembre de 2026 (1 USD = 0,89566 €). Los precios están en dólares; el IVA no se indica.
## Qué ofrece pinnodds
- Un feed solo de Pinnacle: REST en vivo y prepartido, flujos SSE de caídas, un complemento WebSocket en bruto y un servidor MCP. Su página de inicio indica 14 deportes.
- **Trial**: gratis, sin tarjeta, sin caducidad, 100 peticiones al día; sin SSE. Hay una demo completa de 3 días bajo petición.
- **Stream 99 $/mes**: alertas de caídas por SSE (en vivo y prepartido), REST limitado a la cuota del trial.
- **Pro 99 $/mes**: REST a 10 peticiones por segundo, volumen ilimitado, sin SSE.
- **Pro + SSE 149 $/mes**: REST 10/s más flujos SSE de caídas.
- **Scale 229 $/mes**: REST 30/s más flujos SSE de caídas.
- **Complemento WebSocket en bruto +99 $/mes** en Pro, Pro + SSE o Scale (no en Stream ni Trial): reenvía los frames de Pinnacle idénticos byte a byte, más el snapshot REST prepartido. Una segunda conexión con la misma clave expulsa a la primera. 99 $ por 30 días, 297 $ por 90 y 594 $ por 180.
- Las alertas de caídas llevan un precio justo sin margen (`nvp`) del resultado.
- Los planes base tienen descuentos de hasta el 16% trimestral y hasta el 24% semestral.
- Tarjeta con Stripe (mensual, renovación automática, cancelación desde el panel) o cripto de pago único.
## Tabla de precios, 9 de noviembre de 2026
| Opción | Qué incluye | Mensual | ≈ €/mes |
|---|---|---|---|
| pinnodds Stream | Alertas de caídas por SSE, REST ligero | 99 $ | ≈ 88,67 € |
| **PinnFeed Builder** | WebSocket, en vivo + prepartido, 3 conexiones, REST 10/s | 99 € (IVA incl. cuando corresponde) | 99 € |
| pinnodds Pro + WebSocket | REST 10/s + WebSocket en bruto, 1 conexión | 198 $ | ≈ 177,34 € |
| pinnodds Pro + SSE + WebSocket | Añade flujos SSE de caídas | 248 $ | ≈ 222,12 € |
| pinnodds Scale + WebSocket | REST 30/s + SSE + WebSocket en bruto | 328 $ | ≈ 293,78 € |
## Cara a cara
| | pinnodds | PinnFeed |
|---|---|---|
| Casa | Solo Pinnacle | Solo Pinnacle |
| Deportes | 14 (según su web) | 13 |
| WebSocket | Frames en bruto, complemento de +99 $/mes | Deltas normalizados, incluido en Builder |
| Conexiones WebSocket | 1 por clave | 3 en Builder, 10 en Pro |
| Alertas de caídas | En el servidor, por SSE, desde un movimiento del 1% | REST `/v1/drops` y la [guía de steam](/es/guides/dropping-odds-steam-detection) |
| Cuotas justas | `nvp` en las alertas de caídas | fair, fairProb y margin en cada mercado |
| Historial de cuotas de cierre | No lo encontramos en su documentación (sin datos) | Incluido desde Builder |
| Servidor MCP | Sí | Sí |
| Plan gratis | 100 peticiones/día, sin caducidad, sin tarjeta | 1.000 peticiones/día, 30 s de retraso, sin tarjeta |
| Facturación | Tarjeta mensual o cripto de pago único; descuentos multimes | Tarjeta mensual o cripto prepago |
## Cuándo elegir pinnodds
- Quieres **alertas de caídas calculadas en el servidor** y enviadas por SSE, sin escribir tu propio detector.
- Quieres los **frames de Pinnacle en bruto, byte a byte**, por ejemplo para construir tu propio normalizador.
- Quieres una **clave gratis sin caducidad** para una evaluación larga por REST.
- Puedes comprometerte 3 o 6 meses y aprovechar los descuentos por periodo.
- Su web indica 14 deportes frente a los 13 de PinnFeed; si necesitas uno que no llevamos, compara ambas listas.
## Cuándo encaja mejor PinnFeed
- Quieres el **WebSocket dentro del plan**: 99 € frente a 198 $ por REST + WebSocket.
- Tienes más de un consumidor: Builder incluye **3 conexiones**.
- Quieres deltas normalizados con cuotas justas en cada mercado y cuotas de cierre para el CLV ([guía de CLV](/es/guides/closing-line-value-clv-tracking)).
## Preguntas frecuentes
### ¿Cuánto cuesta el WebSocket de pinnodds?
Es un complemento de +99 $/mes sobre Pro, Pro + SSE o Scale. El total más bajo con WebSocket es Pro + WebSocket a 198 $/mes (≈ 177,34 €), según lo publicado el 9 de noviembre de 2026.
### ¿pinnodds tiene plan gratis?
Sí. Su clave de prueba es gratis, no pide tarjeta, no caduca y permite 100 peticiones al día.
### ¿PinnFeed cuesta menos que pinnodds para un WebSocket en vivo + prepartido?
Con los precios mensuales publicados el 9 de noviembre de 2026, sí: 99 € frente a 198 $. A esa fecha, PinnFeed Builder era el precio publicado más bajo con facturación mensual o anual que encontramos para un WebSocket en tiempo real que transmite cuotas de Pinnacle en vivo y prepartido. Hay un WebSocket solo prepartido publicado por menos (oddssea Prematch, 59 $/mes).
### ¿La latencia es distinta?
pinnodds publica su propia cifra de latencia. No hemos medido ambos feeds cara a cara, así que no afirmamos nada sobre latencia.
## Prueba Builder
Empieza la prueba de 3 días de Builder desde [precios](/es/pricing): se pide tarjeta y se cobra después del día 3 salvo que canceles. Lee el protocolo del WebSocket en la [documentación](/docs) (en inglés) y compara más proveedores en [todas las alternativas](/es/alternatives), la [comparativa](/es/compare) y la [página del precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket).
*Solo para mayores de 18 años. Las cuotas, las cuotas justas y el CLV son herramientas educativas y estadísticas, no consejos de apuestas. Nada de esto promete beneficios. Juega con responsabilidad.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-websocket-csharp
# Cliente WebSocket en C# / .NET para cuotas de Pinnacle
**Respuesta:** usa `System.Net.WebSockets.ClientWebSocket`, pon `x-api-key` con `Options.SetRequestHeader`, conéctate a `wss://pinnfeed.io/v1/stream`, suscríbete y responde a cada ping. Plan Builder (€99/mes).
## Esquema
```csharp
using var ws = new ClientWebSocket();
ws.Options.SetRequestHeader("x-api-key", Environment.GetEnvironmentVariable("PINNFEED_KEY"));
await ws.ConnectAsync(new Uri("wss://pinnfeed.io/v1/stream"), CancellationToken.None);
// SendAsync UTF-8 JSON subscribe; on ping send {"type":"pong"}
```
Relacionado: [TypeScript](/es/answers/pinnacle-odds-websocket-typescript), [documentación](/docs/websocket).
## Planes
[Builder](/es/pricing#plan-builder) (€99/mes) para el WebSocket en vivo + prepartido y el historial de cierres. Prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles. REST gratis con retraso: [registro](/signup).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Funciona en .NET Framework?
Mejor .NET moderno con `ClientWebSocket`. Las plataformas antiguas pueden necesitar una librería WebSocket de terceros que permita fijar cabeceras.
### ¿Puedo usar SignalR?
No hace falta: el feed es un WebSocket normal, no un hub de SignalR.
---
Source: https://pinnfeed.io/es/answers/discord-picks-bot-pinnacle-odds
# Bot de alertas en Discord con cuotas de Pinnacle
**Respuesta:** sigue el mismo patrón que el [bot de Telegram](/es/guides/telegram-picks-bot): WebSocket de Builder → detectar una bajada de cuota con un mínimo de `maxStake` → `POST` en JSON a un **webhook entrante** de Discord. El fragmento de abajo es la forma mínima; el bot completo y probado (embeds, cola y control de 429) está en la [guía del bot de picks para Discord](/es/guides/discord-picks-bot). Herramienta educativa para mayores de 18 años, no pronósticos ni ganancias garantizadas.
## Ruta mínima de la alerta
```bash
export PINNFEED_KEY="ps_live_..." # Builder
export DISCORD_WEBHOOK="https://discord.com/api/webhooks/..."
npm install ws
```
```javascript
// Pseudocode — wire to the same steam detector as the Telegram guide
import WebSocket from 'ws';
const ws = new WebSocket(process.env.PINNFEED_WS || 'wss://pinnfeed.io/v1/stream', {
headers: { 'x-api-key': process.env.PINNFEED_KEY },
});
ws.on('open', () => ws.send(JSON.stringify({
type: 'subscribe', sports: ['soccer'], markets: ['moneyline', 'spread'], main: true,
})));
ws.on('message', async (raw) => {
const msg = JSON.parse(raw);
if (msg.type === 'ping') return ws.send('{"type":"pong"}');
// if steam rule hits:
// await fetch(process.env.DISCORD_WEBHOOK, { method:'POST', headers:{'content-type':'application/json'},
// body: JSON.stringify({ content: 'Steam: ...' }) });
});
```
Cálculo completo del steam: [guía de steam](/es/guides/dropping-odds-steam-detection). Sin Builder, consulta `/v1/drops` por polling ([respuesta sobre drops](/es/answers/dropping-odds-api)).
## Planes
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Hay una guía completa de Discord?
Sí: la [guía del bot de picks para Discord](/es/guides/discord-picks-bot) incluye el archivo Node completo. Usa el mismo stream de cuotas que el bot de Telegram; solo cambia el aviso (webhook frente a la Bot API).
### ¿En qué se diferencia del bot de Telegram?
Usa el mismo stream de cuotas; solo cambia la URL de aviso (webhook de Discord en lugar de la Bot API de Telegram).
### ¿Puedo anunciar las alertas como apuestas seguras?
No. Sigue las normas de Discord y la regulación local de publicidad del juego, y mantén un tono educativo.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-n8n
# Cuotas de Pinnacle en n8n
**Respuesta:** en n8n añade un **Schedule Trigger** y después un nodo **HTTP Request** que llame a `https://pinnfeed.io/v1/drops` (o `/v1/odds`) con una credencial **Header Auth** llamada `x-api-key` que contenga tu clave `ps_live_`. Separa el array `drops`, filtra con un nodo **IF** y envía el resultado a Telegram, Slack, Discord o una hoja de cálculo. Sin código, salvo una expresión opcional.
## Flujo
1. **Schedule Trigger**: cada minuto (dentro de los [límites de tu plan](/es/answers/pinnacle-odds-api-rate-limits)).
2. **HTTP Request**: método `GET`, URL `https://pinnfeed.io/v1/drops`, Authentication → Generic Credential Type → **Header Auth**, nombre `x-api-key`, valor `ps_live_...`. Parámetros: `sport=soccer`, `minutes=5`, `min_pct=5`.
3. **Split Out**: campo `drops`.
4. **IF**: la expresión `$json.dropPct` (con la sintaxis de expresiones de n8n entre dobles llaves) mayor o igual que `8`.
5. **Remove Duplicates** (o un nodo Code con clave `eventId` + `market` + `outcome` + `movedAt`) para que cada movimiento avise una sola vez.
6. Nodo de **Telegram / Slack / Discord**: compón el mensaje con `$json.home`, `$json.away`, `$json.market`, `$json.outcome`, `$json.from` y `$json.to`.
Comprueba los nombres exactos de los campos con tu primera ejecución o en [`/openapi.json`](/openapi.json) antes de montar el mensaje.
## Prueba la llamada antes
```bash
export PINNFEED_KEY="ps_live_..."
curl -sS -H "x-api-key: $PINNFEED_KEY" "https://pinnfeed.io/v1/drops?sport=soccer&minutes=5&min_pct=5"
```
## Polling o push
n8n hace polling: en Free ves los movimientos con 30 segundos de retraso, como mucho 1 petición por segundo y 1.000 al día. Un horario de 1 minuto gasta 1.440 llamadas al día, así que en Free consulta cada 2 minutos o más. Hobby (€29/mes) es REST en tiempo real. Para alertas en menos de un segundo, monta un pequeño worker WebSocket en [Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Puede n8n mantener un WebSocket abierto?
No con el nodo HTTP Request estándar. Haz polling en n8n, o ejecuta un worker WebSocket aparte que envíe los avisos a un nodo Webhook de n8n.
### ¿Dónde guardo la clave?
En una credencial de n8n (Header Auth), no en la URL, para que no aparezca en los registros de ejecución.
### ¿Funciona en n8n Cloud y autoalojado?
Sí: Schedule, HTTP Request e IF son nodos básicos en ambos.
---
Source: https://pinnfeed.io/es/answers/pinnacle-nba-moneyline-odds-api
# Cuotas moneyline de la NBA de Pinnacle en tiempo real
**Respuesta:** el slug de PinnFeed para la NBA (y el resto del baloncesto) es **`basketball`**. Consulta `GET /v1/odds?sport=basketball&market=moneyline&main=true` en Free o Hobby, o suscríbete al WebSocket con `"sports":["basketball"],"markets":["moneyline"],"main":true` en Builder (€99/mes). No hay slug `nba`: filtra por `league.name` en tu cliente.
## Snapshot REST (funciona en Free con 30 s de retraso)
```bash
export PINNFEED_KEY="ps_live_..."
curl -sS -H "x-api-key: $PINNFEED_KEY" \
"https://pinnfeed.io/v1/odds?sport=basketball&market=moneyline&main=true&live=true&limit=20"
```
Cada evento trae `league`, `home`, `away` y mercados cuyos resultados incluyen `decimal`, `american`, `fair` y `fairProb`.
## Suscripción WebSocket (Builder)
```javascript
// Example Node fragment — needs Builder key
const ws = new WebSocket('wss://pinnfeed.io/v1/stream', {
headers: { 'x-api-key': process.env.PINNFEED_KEY },
});
ws.on('open', () => ws.send(JSON.stringify({
type: 'subscribe',
sports: ['basketball'],
markets: ['moneyline'],
main: true,
live: true,
specials: false,
})));
ws.on('message', (buf) => {
const msg = JSON.parse(buf);
if (msg.type === 'ping') ws.send(JSON.stringify({ type: 'pong' }));
// filter NBA: if (event.league?.name?.includes('NBA')) ...
});
```
Lista de deportes: [esquema](/docs/schema). Cliente completo: [guía de Python y Node](/es/guides/pinnacle-odds-websocket-python-node). Ver también: [cuotas históricas de la NBA](/answers/historical-betting-odds-pinnacle-closing).
## Planes
Push en vivo: [Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles. REST gratis con retraso: [registro](/signup).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Spreads, totales y totales por equipo
Los mismos partidos de basketball también traen `market=spread`, `market=total` y, cuando Pinnacle lo ofrece, `market=team_total`. Usa `main=true` para la línea principal.
## Preguntas frecuentes
### ¿El slug es `nba` o `basketball`?
`basketball`. Los 13 deportes de PinnFeed usan los slugs de la documentación; los partidos de la NBA llegan dentro de las ligas de baloncesto.
### ¿Free puede recibir moneylines de la NBA en vivo?
Free puede **consultar** `/v1/odds` con 30 s de retraso y un límite de 2 deportes. El push en vivo por WebSocket empieza en Builder.
---
Source: https://pinnfeed.io/es/answers/pinnacle-nfl-american-football-odds-api
# API de cuotas de la NFL de Pinnacle (american-football)
**Respuesta:** el slug de deporte de PinnFeed es **`american-football`** (id 5). No existe el slug `nfl`. Consulta `GET /v1/odds?sport=american-football&market=moneyline,spread,total&main=true` o suscríbete con `"sports":["american-football"]` en el WebSocket de Builder (€99/mes). Separa la NFL del fútbol universitario (y otras ligas) con `league.name` en tu cliente.
## REST
```bash
export PINNFEED_KEY="ps_live_..."
curl -sS -H "x-api-key: $PINNFEED_KEY" \
"https://pinnfeed.io/v1/odds?sport=american-football&market=moneyline,spread,total&main=true&limit=40"
```
Filtro de ejemplo tras leer la respuesta (ilustrativo):
```python
events = r.json()["events"]
nfl = [e for e in events if "NFL" in (e.get("league") or {}).get("name", "")]
```
## WebSocket (Builder)
```json
{
"type": "subscribe",
"sports": ["american-football"],
"markets": ["moneyline", "spread", "total"],
"main": true,
"specials": false
}
```
Conéctate a `wss://pinnfeed.io/v1/stream` con `x-api-key`. Cliente completo: [ejemplo de WebSocket en Python](/es/answers/pinnacle-odds-websocket-python-example). Ids de deporte: [esquema](/docs/schema). Ver también: [cuotas históricas de la NFL](/answers/historical-betting-odds-pinnacle-closing).
## Planes
Push en vivo: [Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles. REST gratis con retraso: [registro](/signup).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Por qué no `sport=nfl`?
PinnFeed usa los 13 slugs de deporte de origen. Los partidos de la NFL llegan dentro de las ligas de `american-football`; filtra en el cliente.
### ¿Free incluye la NFL?
Free te deja elegir 2 deportes en el panel. Elige american-football ahí (30 s de retraso, mercados principales, 1.000 peticiones al día).
---
Source: https://pinnfeed.io/es/answers/arbitrage-vs-value-betting-api
# Arbitraje vs value betting con una API sharp
**Respuesta:** el **arbitraje** compara los precios de dos casas en el mismo mercado. El **value** compara un precio blando con una referencia sharp sin margen. PinnFeed da la referencia sharp de Pinnacle (`fair` y `fairProb`), no un feed multicasa para arbitraje: para arbitrar necesitas otra fuente con las casas blandas.
## Cuándo encaja PinnFeed
- Filtros de +EV / value frente al precio justo de Pinnacle
- Seguimiento del CLV
- Steam en la línea sharp
Push multicasa: consulta la [comparativa](/es/compare) fechada (odds-api.io y otros).
## Planes
[Builder](/es/pricing#plan-builder) (€99/mes) para el WebSocket y el historial de cierres. Prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles. REST gratis: [registro](/signup).
Ver también: [calculadora de arbitraje con cuotas de Pinnacle](/es/answers/arbitrage-calculator-pinnacle-odds), [comparar líneas frente a Pinnacle](/es/answers/line-shopping-vs-pinnacle).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Puedo hacer arbitraje solo con Pinnacle?
No. El arbitraje necesita al menos dos casas.
### ¿El value está garantizado?
No. Son estadísticas educativas para mayores de 18 años, no una promesa de beneficio.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-postgres-storage
# Guardar cuotas de Pinnacle en Postgres
**Respuesta:** mantén una tabla de solo inserción con los ticks de precio, con clave por id de mercado, resultado y marca de tiempo, y escribe en ella cada `upsert` de mercado que llegue por el WebSocket de PinnFeed. Los snapshots dan el estado inicial y los frames `delta`, cada cambio. Más adelante puedes añadir filas de `/v1/closing` para el CLV. Funciona con cualquier Postgres (autoalojado, Supabase, Neon).
## Esquema
```sql
create table if not exists odds_ticks (
ts timestamptz not null default now(),
event_id bigint not null,
market_id text not null,
market text not null, -- moneyline | spread | total | team_total
period int,
line numeric,
outcome text not null,
decimal numeric not null,
fair numeric,
max_stake numeric,
primary key (market_id, outcome, ts)
);
create index if not exists odds_ticks_event on odds_ticks (event_id, ts);
```
## Worker en Node (Builder)
```js
// npm i ws pg · PINNFEED_KEY=ps_live_... DATABASE_URL=postgres://... node worker.js
import WebSocket from 'ws';
import pg from 'pg';
const db = new pg.Pool({ connectionString: process.env.DATABASE_URL });
const sql = `insert into odds_ticks (event_id, market_id, market, period, line, outcome, decimal, fair, max_stake)
values ($1,$2,$3,$4,$5,$6,$7,$8,$9) on conflict do nothing`;
async function save(m) {
for (const o of m.outcomes || []) {
await db.query(sql, [m.eventId, m.id, m.type, m.period, m.line ?? null, o.name, o.decimal, o.fair ?? null, m.maxStake ?? null]);
}
}
function connect() {
const ws = new WebSocket('wss://pinnfeed.io/v1/stream', { headers: { 'x-api-key': process.env.PINNFEED_KEY } });
ws.on('open', () => ws.send(JSON.stringify({ type: 'subscribe', sports: ['soccer'], markets: ['moneyline', 'total'], main: true })));
ws.on('message', async (raw) => {
const msg = JSON.parse(raw);
if (msg.type === 'ping') return ws.send(JSON.stringify({ type: 'pong' }));
if (msg.type === 'snapshot') for (const m of msg.markets || []) await save(m);
if (msg.type === 'delta') for (const ch of msg.changes) if (ch.kind === 'market' && ch.op === 'upsert') await save(ch.market);
});
ws.on('close', (code) => { console.log('closed', code); setTimeout(connect, 2000); });
}
connect();
```
Si las inserciones van por detrás del stream, el servidor puede cerrar con `4008 slow_consumer`: agrupa las inserciones (o ponlas en cola) y suscríbete a menos mercados. Reconexión completa: [reconexión en Node](/es/answers/pinnacle-odds-websocket-nodejs-reconnect).
## Consultas de ejemplo
```sql
-- last price per outcome
select distinct on (market_id, outcome) market_id, outcome, decimal, ts
from odds_ticks order by market_id, outcome, ts desc;
```
Usa la tabla para [backtests contra cierres](/es/answers/pinnacle-odds-api-backtesting-clv) y [gráficos de movimiento de línea](/es/answers/pinnacle-line-movement-api).
## Planes
El streaming necesita [Builder](/es/pricing#plan-builder) (€99/mes) o Pro; el historial de cierres va incluido en Builder. En Free o Hobby puedes consultar `/v1/odds` por polling y guardar en la misma tabla. Prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años. Datos para investigación, no consejos de apuestas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Debo guardar el snapshot?
Sí, como primera fila de cada resultado. Si no, la tabla solo tendrá los precios que cambiaron después de conectarte.
### ¿Cómo evito duplicados tras una reconexión?
El snapshot tras reconectar repite los precios actuales; `on conflict do nothing` con una clave de tiempo los guarda como ticks nuevos. Si solo quieres cambios, compara con el último precio guardado antes de insertar.
### ¿Y TimescaleDB?
Funciona igual: convierte `odds_ticks` en hypertable sobre `ts`.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-cloudflare-worker
# Cuotas de Pinnacle en un Cloudflare Worker
**Respuesta:** guarda la clave con `wrangler secret put PINNFEED_KEY`. El handler `fetch` del Worker hace de proxy de `/v1/odds` para tu front end con una caché corta en el edge, así la clave nunca llega al navegador; el handler `scheduled` se ejecuta con un cron trigger, llama a `/v1/drops` y publica las bajadas nuevas en un webhook de Discord. Todo es REST, así que funciona desde Free (30 s de retraso).
## `wrangler.toml`
```toml
name = "pinnfeed-worker"
main = "src/index.js"
compatibility_date = "2026-11-01"
[triggers]
crons = ["*/2 * * * *"]
```
```bash
npx wrangler secret put PINNFEED_KEY # ps_live_...
npx wrangler secret put DISCORD_WEBHOOK # https://discord.com/api/webhooks/...
npx wrangler deploy
```
## `src/index.js`
```js
const API = 'https://pinnfeed.io/v1';
export default {
async fetch(req, env, ctx) {
const url = new URL(req.url);
if (url.pathname !== '/odds') return new Response('not found', { status: 404 });
const sport = url.searchParams.get('sport') || 'soccer';
const cache = caches.default;
const cacheKey = new Request(`${url.origin}/odds?sport=${sport}`);
let res = await cache.match(cacheKey);
if (!res) {
const r = await fetch(`${API}/odds?sport=${sport}&market=moneyline&main=true&limit=50`, {
headers: { 'x-api-key': env.PINNFEED_KEY },
});
res = new Response(r.body, { status: r.status, headers: { 'content-type': 'application/json', 'cache-control': 'max-age=5' } });
if (r.ok) ctx.waitUntil(cache.put(cacheKey, res.clone()));
}
return res;
},
async scheduled(_event, env) {
const r = await fetch(`${API}/drops?sport=soccer&minutes=2&min_pct=5&limit=10`, {
headers: { 'x-api-key': env.PINNFEED_KEY },
});
if (!r.ok) return;
const { drops } = await r.json();
if (!drops.length) return;
const lines = drops.map((d) => `${d.home} v ${d.away}: ${d.market} ${d.outcome} ${d.from} → ${d.to} (${d.dropPct}%)`);
await fetch(env.DISCORD_WEBHOOK, {
method: 'POST', headers: { 'content-type': 'application/json' },
body: JSON.stringify({ content: lines.join('\n').slice(0, 1900) }),
});
},
};
```
Como la ventana del cron y la ventana `minutes` son ambas de 2, cada bajada se publica más o menos una vez; guarda los ids en KV si necesitas una deduplicación estricta.
## Límites que respetar
Free permite 1 petición/s y 1.000 al día, Hobby 2/s y Builder 10/s. La caché del edge evita que los picos de tráfico se conviertan en llamadas a la API. Para push real, mantén el WebSocket en un servidor siempre encendido con [Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles.
Relacionado: [apps de navegador y CORS](/es/answers/pinnacle-odds-browser-javascript-cors), [bot de Discord](/es/answers/discord-picks-bot-pinnacle-odds), [API de cuotas que bajan](/es/answers/dropping-odds-api).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Puede un Worker mantener abierto el WebSocket de PinnFeed?
Un Worker normal vive lo que dura la petición. Un Durable Object puede mantener sockets, pero para el stream es más sencillo un pequeño servidor siempre encendido.
### ¿La caché del edge sirve cuotas viejas?
Como mucho durante el max-age que pongas (5 s aquí). Bájalo, o no caches las vistas en vivo.
### ¿El cron cuenta para mi cuota diaria?
Sí, cada ejecución es una petición: cada 2 minutos son 720 al día, dentro de las 1.000 de Free.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-supabase-edge-function
# Cuotas de Pinnacle en Supabase con una Edge Function
**Respuesta:** guarda la clave de la API como secreto de Supabase, escribe una Edge Function que llame a `GET /v1/drops` (o `/v1/odds`) y haga upsert de las filas con el cliente admin de `@supabase/server`, y deja que `pg_cron` + `pg_net` la llamen cada minuto con una clave secreta guardada en Supabase Vault. Las Edge Functions duran poco, así que esto es un trabajo de polling REST, no un listener de WebSocket. Funciona en Free (30 s de retraso, 2 deportes) y en tiempo real desde Hobby.
## 1. Tabla
```sql
create table if not exists pinnacle_drops (
event_id bigint, market_id text, outcome text,
price_from numeric, price_to numeric, drop_pct numeric,
moved_at timestamptz, home text, away text,
primary key (market_id, outcome, moved_at)
);
```
## 2. Secreto
```bash
supabase secrets set PINNFEED_KEY=ps_live_your_key
```
## 3. Función `supabase/functions/pinnfeed-drops/index.ts`
```ts
import { withSupabase } from 'npm:@supabase/server@1';
// auth: 'secret' accepts only callers that send your project's secret key on the apikey header
export default {
fetch: withSupabase({ auth: 'secret' }, async (_req, ctx) => {
const r = await fetch('https://pinnfeed.io/v1/drops?sport=soccer&minutes=5&min_pct=3&limit=100', {
headers: { 'x-api-key': Deno.env.get('PINNFEED_KEY')! },
});
if (!r.ok) return new Response(await r.text(), { status: r.status });
const { drops } = await r.json();
const rows = drops.map((d: any) => ({
event_id: d.eventId, market_id: d.marketId, outcome: d.outcome,
price_from: d.from, price_to: d.to, drop_pct: d.dropPct,
moved_at: d.movedAt, home: d.home, away: d.away,
}));
const { error } = await ctx.supabaseAdmin.from('pinnacle_drops').upsert(rows, { ignoreDuplicates: true });
return Response.json({ saved: rows.length, error: error?.message ?? null });
}),
};
```
A la función la llama un cron con una clave secreta, no un usuario con sesión, así que desactiva la comprobación de JWT de la plataforma en `supabase/config.toml` y deja que `withSupabase` compruebe la clave:
```toml
[functions.pinnfeed-drops]
verify_jwt = false
```
Despliega con `supabase functions deploy pinnfeed-drops`. Revisa una vez la respuesta de `/v1/drops` para confirmar el formato de `movedAt` antes de fiarte de la clave primaria.
## 4. Programación
Activa las extensiones `pg_cron` y `pg_net`. Guarda una sola vez en Supabase Vault la URL del proyecto y una clave secreta de Supabase (`sb_secret_...`), para que nunca aparezcan en el SQL del cron:
```sql
select vault.create_secret('https://YOUR_PROJECT.supabase.co', 'project_url');
select vault.create_secret('YOUR_SUPABASE_SECRET_KEY', 'secret_key');
```
Después programa la llamada leyendo ambos valores de `vault.decrypted_secrets` y enviando la clave en la cabecera `apikey`:
```sql
select cron.schedule('pinnfeed-drops', '* * * * *', $$
select net.http_post(
url := (select decrypted_secret from vault.decrypted_secrets where name = 'project_url')
|| '/functions/v1/pinnfeed-drops',
headers := jsonb_build_object(
'Content-Type', 'application/json',
'apikey', (select decrypted_secret from vault.decrypted_secrets where name = 'secret_key')
),
body := '{}'::jsonb
);
$$);
```
Notas:
- **Usa la clave secreta, no la publicable.** La clave publicable es pública: cualquiera que la tenga podría disparar la función.
- **`apikey` frente a `Authorization`.** La documentación actual de Supabase envía las nuevas claves `sb_secret_` en `apikey`; no son JWT, así que no dependas de `Authorization: Bearer` para ellas. Si tu proyecto aún usa el JWT heredado `service_role` (Supabase retira las claves heredadas a finales de 2026), deja `verify_jwt` activado y envía esa clave en `apikey` y en `Authorization: Bearer`, leyéndola de Vault del mismo modo.
- **Límite de Vault.** `pg_net` escribe la clave descifrada en `net.http_request_queue` hasta enviar la petición, así que cualquier rol que pueda iniciar sesión en tu base de datos podría leerla mientras espera. Limita los accesos a la base de datos.
- La clave de PinnFeed sigue en los secretos de la Edge Function (paso 2), nunca en el SQL.
Cada minuto son 1.440 llamadas al día: bien desde Hobby (sin límite diario), pero por encima de las 1.000 diarias de Free, así que en Free usa `*/2 * * * *`.
## Siguientes pasos
¿Necesitas todos los precios y no solo las bajadas? Guarda snapshots de `/v1/odds`: [patrón de Postgres](/es/answers/pinnacle-odds-postgres-storage). ¿Quieres push en vez de polling? Ejecuta un pequeño worker siempre encendido con el WebSocket de [Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles. [Clave gratis](/signup).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Puede una Edge Function mantener abierto el WebSocket?
No de forma fiable: viven lo que dura la petición. Para el stream usa un proceso de larga duración (una VM, Fly, Railway, un servidor en casa).
### ¿Es segura aquí la clave secreta de Supabase?
Sí, en el servidor: en Vault para la llamada del cron y comprobada dentro de la función. Nunca la expongas al navegador, ni tampoco la clave de PinnFeed.
### ¿Puedo usar Supabase Realtime para enviar datos a mi app?
Sí: cuando las filas llegan a la tabla, Supabase Realtime puede emitir las inserciones a tu front end.
---
Source: https://pinnfeed.io/es/oddssea-alternative
# Alternativa a oddssea para cuotas de Pinnacle en vivo y prepartido
**Si solo necesitas prepartido, oddssea Prematch a 59 $/mes (≈ 52,84 €) está publicado por debajo de PinnFeed e incluye un WebSocket. Si necesitas cuotas de Pinnacle en vivo y prepartido en el mismo socket, PinnFeed Builder cuesta 99 €/mes (IVA incluido cuando corresponde) con 3 conexiones, frente a oddssea Live a 149 $/mes (≈ 133,45 €) con 1 conexión de stream.**
Los datos de oddssea salen de [su página de inicio y su tabla de precios](https://oddssea.dev/), leídas el 9 de noviembre de 2026. Las cifras en euros usan el tipo del BCE del 6 de noviembre de 2026 (1 USD = 0,89566 €). oddssea no indica el IVA en esa página.
## Qué ofrece oddssea
- Un feed solo de Pinnacle: REST más un stream WebSocket en todos los planes de pago.
- **Free**: cuotas prepartido con retraso, 100 peticiones REST al día, sin stream.
- **Prematch 59 $/mes**: prepartido en tiempo real por WebSocket, 1 conexión de stream, 60 peticiones REST por minuto, precios justos, caídas, cambios de límite e historial de líneas (prepartido).
- **Live 149 $/mes**: en vivo y prepartido, 1 conexión de stream, 120 peticiones REST por minuto.
- **Scale 299 $/mes**: en vivo y prepartido, 10 conexiones de stream, 600 peticiones REST por minuto.
- El pago es en cripto prepago (3 meses −10%, 6 meses −15%, 12 meses −20%); las tarjetas aparecen como «próximamente»; nada se renueva solo.
## Tabla de precios, 9 de noviembre de 2026
| Plan | Alcance | Conexiones de stream | Mensual | ≈ €/mes |
|---|---|---|---|---|
| oddssea Prematch | Solo prepartido | 1 | 59 $ | ≈ 52,84 € |
| **PinnFeed Builder** | **En vivo + prepartido** | **3** | 99 € (IVA incl. cuando corresponde) | 99 € |
| oddssea Live | En vivo + prepartido | 1 | 149 $ | ≈ 133,45 € |
| PinnFeed Pro | En vivo + prepartido | 10 | 199 € | 199 € |
| oddssea Scale | En vivo + prepartido | 10 | 299 $ | ≈ 267,80 € |
## Cara a cara
| | oddssea | PinnFeed |
|---|---|---|
| Casa | Solo Pinnacle | Solo Pinnacle |
| Plan WebSocket más bajo | 59 $, solo prepartido | 99 €, en vivo + prepartido |
| WebSocket en vivo + prepartido más bajo | 149 $, 1 conexión | 99 €, 3 conexiones |
| Precios justos (sin margen) | En los planes de pago | En cada mercado (fair, fairProb, margin) |
| Cuotas de cierre | No comprobado en la tabla de precios (sin datos) | Incluidas desde Builder |
| Pago | Cripto prepago; tarjetas «próximamente» | Tarjeta (Stripe) mensual o cripto prepago |
| Plan gratis | Prepartido con retraso, 100 peticiones/día | REST, 30 s de retraso, 1.000 peticiones/día |
| Servidor MCP | No comprobado (sin datos) | Sí |
## Cuándo gana oddssea
- Solo necesitas cuotas **prepartido**: 59 $ está por debajo de Builder.
- Quieres un plan en vivo con **10 conexiones** y lo comparas con PinnFeed Pro: oddssea Scale cuesta 299 $ frente a 199 €; mira qué límites te importan.
- Prefieres cripto prepago sin renovación automática y con descuentos por varios meses.
## Cuándo gana PinnFeed
- Necesitas **en vivo y prepartido** en un socket con precio mensual: 99 € frente a 149 $.
- Ejecutas más de un proceso: Builder incluye **3 conexiones**, oddssea Live 1.
- Quieres pagar con tarjeta cada mes, con 3 días de prueba.
- Quieres cuotas de cierre para el CLV ([guía de CLV](/es/guides/closing-line-value-clv-tracking)) y el servidor MCP.
## Preguntas frecuentes
### ¿oddssea cuesta menos que PinnFeed?
Para solo prepartido, sí: oddssea Prematch cuesta 59 $/mes (≈ 52,84 €). Para en vivo y prepartido, a 9 de noviembre de 2026 PinnFeed Builder a 99 €/mes (IVA incluido) era el precio publicado más bajo con facturación mensual o anual que encontramos para un WebSocket en tiempo real que transmite cuotas de Pinnacle en vivo y prepartido; oddssea Live cuesta 149 $/mes.
### ¿Cuántas conexiones WebSocket incluye oddssea?
1 conexión de stream en Prematch y Live y 10 en Scale, según su tabla de precios del 9 de noviembre de 2026. PinnFeed Builder incluye 3 y Pro 10.
### ¿Puedo pagar oddssea con tarjeta?
El 9 de noviembre de 2026 su página indicaba cripto prepago, con las tarjetas marcadas como «próximamente».
### ¿La latencia es distinta?
No hemos medido ambos feeds cara a cara, así que no afirmamos nada sobre latencia.
## Prueba Builder
Empieza la prueba de 3 días de Builder desde [precios](/es/pricing): se pide tarjeta y se cobra después del día 3 salvo que canceles. Revisa el protocolo del WebSocket en la [documentación](/docs) (en inglés) y mira [todas las alternativas](/es/alternatives), la [comparativa](/es/compare) y la [página del precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket).
*Solo para mayores de 18 años. Las cuotas, las cuotas justas y el CLV son herramientas educativas y estadísticas, no consejos de apuestas. Nada de esto promete beneficios. Juega con responsabilidad.*
---
Source: https://pinnfeed.io/es/answers/sports-betting-bot-architecture
# Arquitectura de un bot de apuestas con cuotas de Pinnacle
**Respuesta:** la mayoría de bots de apuestas o trading tienen cinco partes: (1) un feed de datos, (2) un estado local de eventos y mercados, (3) reglas de señal, (4) controles de riesgo y (5) la ejecución en la cuenta con la que apuestas. PinnFeed cubre la parte 1 y ayuda con la 2 y la 3: un WebSocket (Builder) que envía un `snapshot` completo y luego frames `delta` con cada cambio de precio de Pinnacle, incluidos `fair`, `margin` y `maxStake`. No coloca apuestas: la ejecución es tuya, en una casa que lo permita y donde apostar sea legal para ti.
## El pipeline
| Parte | Qué hace | Con PinnFeed |
|---|---|---|
| Ingesta | Mantener una conexión abierta, responder `ping` con `pong`, reconectar con backoff | `wss://pinnfeed.io/v1/stream` ([Python](/es/answers/pinnacle-odds-websocket-python-example), [Node](/es/answers/pinnacle-odds-websocket-nodejs-reconnect)) |
| Estado | Mapa de `market.id` → último mercado; borrar con `op: "remove"` | [snapshot/delta](/es/answers/pinnacle-odds-websocket-snapshot-delta) |
| Señales | Bajada de precio, oferta por encima de `fair`, cambio de línea | [steam](/es/answers/steam-chasing-pinnacle-alerts), [filtro EV](/es/answers/pinnacle-odds-python-fairprob-ev-screen) |
| Riesgo | Topes de stake, `maxStake >= 100`, exposición máxima por evento, botón de parada | Tu código |
| Ejecución | Colocar la apuesta, registrar precio y resultado | Tu casa de apuestas o exchange |
## Bucle mínimo de señales (Python)
```python
book = {} # market id -> market
def on_frame(msg, alert):
if msg["type"] == "snapshot":
for m in msg["markets"]:
book[m["id"]] = m
elif msg["type"] == "delta":
for ch in msg["changes"]:
if ch["kind"] != "market":
continue
if ch["op"] == "remove":
book.pop(ch["id"], None)
continue
new, old = ch["market"], book.get(ch["market"]["id"])
book[new["id"]] = new
if not old or (new["maxStake"] or 0) < 100:
continue
for o_new, o_old in zip(new["outcomes"], old["outcomes"]):
if o_old["decimal"] and o_new["decimal"] / o_old["decimal"] - 1 <= -0.04:
alert(new["eventId"], o_new["name"], o_old["decimal"], o_new["decimal"])
```
Conecta `on_frame` a cualquier cliente de las páginas por lenguaje ([Go](/es/answers/pinnacle-odds-websocket-golang), [Rust](/es/answers/pinnacle-odds-websocket-rust), [Kotlin](/es/answers/pinnacle-odds-websocket-kotlin)). Registra cada señal y cada decisión para medirlas después contra el cierre: [registro de apuestas con CLV](/es/answers/bet-tracker-spreadsheet-clv).
## Consejos de diseño
- Ejecuta la ingesta en un host siempre encendido, no en una función serverless.
- Ten un modo `paper` que registre lo que haría el bot antes de apostar nada.
- Usa un WebSocket por proceso y reparte internamente; Builder permite 3 conexiones y Pro 10.
- Gestiona `4008 slow_consumer` sacando el trabajo del bucle de recepción.
## Planes
[Builder](/es/pricing#plan-builder) (€99/mes): WebSocket, los 13 deportes y todos los mercados. Pro (€199/mes): 10 conexiones y frames en bruto. Prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles. Haz el prototipo antes con REST gratis: [registro](/signup).
*Contenido educativo para mayores de 18 años. Las apuestas automáticas pueden perder dinero rápido; sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿PinnFeed puede colocar apuestas por mi bot?
No. Son datos de solo lectura. La ejecución ocurre en tu propia cuenta de casa de apuestas o exchange.
### ¿Las casas permiten bots?
Muchas restringen las apuestas automatizadas en sus condiciones. Compruébalo antes de automatizar la ejecución.
### ¿Puedo construirlo con una herramienta de IA?
Sí: [crea un bot de apuestas con Cursor](/es/answers/build-betting-bot-with-cursor).
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-websocket-snapshot-delta
# Snapshot y delta en el WebSocket de Pinnacle
**Respuesta:** después de `subscribe`, espera las partes del `snapshot` hasta `final: true` y luego aplica cada `upsert`/`remove` de los frames `delta`. Vacía tus mapas locales cuando `part === 1`. Documentación: [WebSocket](/docs/websocket).
## Modelo mental
1. **Snapshot**: el libro actual que coincide con tu filtro, dividido en partes (hasta 400 eventos cada una).
2. **Delta**: solo cambios; upsert de mercado o evento (objeto completo) o remove (id).
3. **Ping**: responde `{"type":"pong"}`.
```javascript
if (msg.type === 'snapshot' && msg.part === 1) { events.clear(); markets.clear(); }
```
Patrón de reconexión en Node: [respuesta](/es/answers/pinnacle-odds-websocket-nodejs-reconnect).
## Planes
[Builder](/es/pricing#plan-builder) (€99/mes) para el WebSocket y el histórico de cierres. Prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles. REST gratis: [registro](/signup).
Ver también: [frames raw de Pinnacle (Pro)](/es/answers/pinnacle-odds-websocket-raw-frames) y [Map de snapshot/delta en Node](/es/answers/pinnacle-odds-node-snapshot-delta-map).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Puedo aplicar deltas antes del snapshot final?
Puedes guardarlos en un búfer, pero considera el libro incompleto hasta `final: true`.
### ¿Los remove se propagan?
Cuando se elimina un evento, borra también todos sus mercados en local.
---
Source: https://pinnfeed.io/es/answers/no-vig-fair-odds-api
# API de cuotas justas sin margen
**Respuesta:** PinnFeed añade **`fair`** (cuota decimal sin margen) y **`fairProb`** a cada resultado, y **`margin`** a cada mercado, con el método multiplicativo. Las cuotas brutas `decimal` / `american` siguen disponibles, así que puedes aplicar tú el método de potencia o de Shin. Está en REST y en el WebSocket para los planes que incluyen esos mercados (Hobby o superior para campos justos en tiempo real por REST en mercados principales; Builder para todos los mercados y push).
## Fórmula (ya aplicada en el servidor)
```text
implied_i = 1 / decimal_i
margin = Σ implied_i − 1
fairProb_i = implied_i / Σ implied_j
fair_i = 1 / fairProb_i
```
Los resultados de un mercado suman `fairProb = 1`. Documentación: [esquema](/docs/schema).
## Leer cuotas justas por REST
```bash
curl -sS -H "x-api-key: $PINNFEED_KEY" \
"https://pinnfeed.io/v1/odds?sport=soccer&market=moneyline&main=true&limit=5" \
| jq '.events[0].markets[0] | {margin, outcomes: [.outcomes[] | {name, decimal, fair, fairProb}]}'
```
Forma de ejemplo (números ilustrativos):
```json
{
"margin": 0.041,
"outcomes": [
{ "name": "home", "decimal": 2.05, "fair": 2.14, "fairProb": 0.467 },
{ "name": "draw", "decimal": 3.40, "fair": 3.55, "fairProb": 0.282 },
{ "name": "away", "decimal": 3.70, "fair": 3.86, "fairProb": 0.251 }
]
}
```
## Uso para value
Frente a una cuota decimal `soft` de otra casa: `EV = soft / fair − 1` (o `soft × fairProb − 1`). Guía completa: [value betting con cuotas justas](/es/guides/value-betting-no-vig-fair-odds).
## Planes
[Precios](/es/pricing): Free (con retraso), Hobby (REST en tiempo real), Builder (WebSocket, €99/mes). Prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles.
Ver también: [calculadora sin margen en Excel o Sheets](/es/answers/no-vig-calculator-excel-sheets) y [margen (overround) por mercado](/es/answers/pinnacle-margin-overround-api).
*Contenido educativo para mayores de 18 años. Las cuotas justas son una herramienta estadística, no un pronóstico ni una promesa de ganancia. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Qué método se usa?
El multiplicativo (proporcional). Las cuotas brutas siempre están presentes si prefieres otro método.
### ¿Hay cuotas justas en Free?
Sí, en los mercados que devuelve Free (principales, con 30 s de retraso). La profundidad y los especiales necesitan Builder.
---
Source: https://pinnfeed.io/es/answers/pinnacle-live-odds-api
# API de cuotas en vivo de Pinnacle
**Respuesta:** suscríbete en `/v1/stream` con `"live":true` (Builder) o consulta `/v1/odds?live=true`. Combínalo con `main=true` para quedarte en las líneas principales.
## Snapshot en vivo por REST
```bash
curl -sS -H "x-api-key: $PINNFEED_KEY" \
"https://pinnfeed.io/v1/odds?sport=soccer&live=true&main=true&limit=20"
```
Ayudas para movimientos y caídas: [/v1/drops](/es/answers/dropping-odds-api) y la [guía de caídas de cuotas y steam](/es/guides/dropping-odds-steam-detection).
## Planes
[Builder](/es/pricing#plan-builder) (€99/mes) para el WebSocket en vivo y prepartido y el histórico de cierres. Prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles. REST gratis con retraso: [registro](/signup).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿El prepartido va en el mismo socket?
Sí: omite `live` o suscríbete sin filtrar solo en vivo. Ver [prepartido frente a en vivo](/es/answers/pinnacle-prematch-vs-live-websocket).
### ¿Y las comparaciones de latencia con otros proveedores?
No publicamos comparaciones de latencia con competidores sin nombre; mídelo tú. Ver [latencia, con honestidad](/es/answers/pinnacle-odds-api-latency-honesty).
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-websocket-raw-frames
# Frames raw de Pinnacle en el WebSocket (Pro)
**Respuesta:** en Pro (y Enterprise), añade `"format":"raw"` a tu `subscribe`. En lugar de frames normalizados `snapshot`/`delta`, PinnFeed envía frames `raw`: los registros de partidos y mercados de Pinnacle, tal como los publica Pinnacle, dentro de un sobre pequeño de PinnFeed. Los frames raw solo se filtran por **deporte**: liga, evento, mercado y `main` no aplican; no hay snapshot al suscribir y no se añaden `fair`, `fairProb` ni `margin`. En Builder la misma petición devuelve un frame `error` con código `plan_lacks_raw`.
## Subscribe
```json
{"type":"subscribe","sports":["soccer","tennis"],"format":"raw"}
```
El servidor responde `subscribed` con `"format":"raw"`. Sigue respondiendo a `{"type":"ping"}` con `{"type":"pong"}` cada 20 s; el timeout de pong de 60 s y el cierre `4008 slow_consumer` (buffer > 16 MB) siguen aplicando. El raw suele ser más pesado que el normalizado.
## Formato del frame
```json
{"type":"raw","seq":1842,"ts":1794217196688,"sportId":29,"sport":"soccer","channel":"live","kind":"matchup","action":"upsert","eventId":1640275337,"data":{"id":1640275337,"league":{},"participants":[],"markets":[]}}
```
| Campo | Significado |
|---|---|
| `type` | Siempre `raw`. |
| `seq` | Contador creciente de frames raw en este servidor. |
| `ts` | Cuándo envió PinnFeed el frame (ms desde epoch). |
| `sportId`, `sport` | Id de deporte de Pinnacle y nombre de deporte de PinnFeed. |
| `channel` | `live` o `prematch`. |
| `kind` | `matchup` (un evento), `matchups` (lista de eventos), `markets` (todos los mercados de un evento) o `snapshot` (lista completa de eventos con mercados, al (re)arrancar el feed). |
| `action` | `upsert`, `remove` (`data` es solo `{"id":…}`) o `replace` (la lista sustituye lo que tengas de ese evento o deporte). |
| `eventId` | El evento al que se refiere el frame (`matchup` y `markets`). |
| `part`, `final` | Solo en listas grandes de `markets` enviadas por partes: aplica la lista cuando llegue la parte con `final: true`. |
| `data` | Registro(s) de Pinnacle sin normalizar: precios americanos y nombres de campo de Pinnacle. |
## ¿Normalizado o raw?
| | Normalizado (todos los planes WS) | Raw (Pro, Enterprise) |
|---|---|---|
| Esquema | PinnFeed v1 documentado ([schema](/docs)) | Sobre de PinnFeed + registros propios de Pinnacle (campos de Pinnacle) |
| Filtros | sports, leagues, events, markets, live, main, specials | solo sports |
| Snapshot al suscribir | Sí (opt-out `snapshot:false`) | No |
| Fair odds y margen | Incluidos | No se añaden |
| Uso típico | Apps, bots, dashboards | Normalizador propio, archivado, depuración |
La mayoría de proyectos deberían quedarse en frames normalizados. Elige raw solo si quieres montar tu propio normalizador sobre el formato de registros de Pinnacle o archivar los registros.
## Planes
Pro cuesta 199 €/mes con 10 conexiones WebSocket y 30 req/s REST; Builder (99 €/mes) tiene frames normalizados con 3 conexiones. Prueba de 3 días; se requiere tarjeta y se cobra tras el día 3 salvo que canceles. [Precios](/es/pricing) · [Docs WebSocket](/docs).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
Ver también: [snapshot y delta](/es/answers/pinnacle-odds-websocket-snapshot-delta) · [Map de snapshot/delta en Node](/es/answers/pinnacle-odds-node-snapshot-delta-map).
## Preguntas frecuentes
### ¿Una conexión puede mezclar raw y normalizado?
No. El formato es por conexión; abre una segunda para el otro formato.
### ¿Es más rápido el raw?
Se salta la normalización, pero PinnFeed no publica una cifra de latencia para ninguno de los dos formatos. Mide en tu lado.
### ¿Están documentados los frames raw?
El sobre de arriba forma parte del protocolo PinnFeed v1. Los registros dentro de `data` siguen el formato propio de Pinnacle, que PinnFeed no versiona; si necesitas un esquema estable, usa frames normalizados.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-node-snapshot-delta-map
# Aplicar snapshot y deltas de Pinnacle en un Map de Node
**Respuesta:** tras `subscribe`, aplica las partes del `snapshot` en un `Map` indexado por `id` de mercado (`eventId:key`), luego cada `changes[]` de los deltas (`upsert` / `remove`). Cliente completo: [guía Python/Node](/guides/pinnacle-odds-websocket-python-node). Requiere [Builder](/es/pricing#plan-builder) (€99/mes).
## Lógica de fusión
```js
import WebSocket from "ws";
const markets = new Map(); // id -> market object
const KEY = process.env.PINNFEED_KEY;
function applyChange(ch) {
if (ch.op === "upsert" || ch.type === "upsert") {
const m = ch.market || ch.value;
markets.set(m.id, m);
} else if (ch.op === "remove" || ch.type === "remove") {
markets.delete(ch.id || ch.marketId);
}
}
const ws = new WebSocket("wss://pinnfeed.io/v1/stream", {
headers: { "x-api-key": KEY },
perMessageDeflate: true,
});
ws.on("open", () => {
ws.send(JSON.stringify({
type: "subscribe",
sports: ["soccer"],
markets: ["moneyline"],
main: true,
}));
});
ws.on("message", (buf) => {
const msg = JSON.parse(buf.toString());
if (msg.type === "ping") return ws.send(JSON.stringify({ type: "pong" }));
if (msg.type === "snapshot" || msg.part != null) {
for (const m of msg.markets || []) markets.set(m.id, m);
}
if (msg.type === "delta" && Array.isArray(msg.changes)) {
for (const ch of msg.changes) applyChange(ch);
}
});
```
Los nombres de campo siguen la [doc WebSocket](/docs/websocket). Planes de pago: prueba de 3 días; se requiere tarjeta y se cobra tras el día 3 salvo que canceles.
Ver también: [snapshot y delta](/es/answers/pinnacle-odds-websocket-snapshot-delta) · [reconexión Node](/es/answers/pinnacle-odds-websocket-nodejs-reconnect) · [frames raw (Pro)](/es/answers/pinnacle-odds-websocket-raw-frames).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Los eventos se fusionan igual?
Sí — guarda un segundo `Map` para eventos si necesitas metadatos home/away; snapshot y delta pueden llevar ambos.
### ¿Por qué Builder?
Las claves Free/Hobby reciben `403 plan_lacks_ws` en el WebSocket. El polling REST funciona en Free; el push necesita Builder o Pro.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-websocket-ping-pong
# Heartbeat ping / pong del WebSocket
**Respuesta:** responde a cada `{"type":"ping"}` del servidor con `{"type":"pong"}`. Sin pong durante ~60 s, la conexión se cierra. Misma regla en los ejemplos de Python y Node.
## One-liner handlers
```python
if msg["type"] == "ping":
await ws.send('{"type":"pong"}')
```
```javascript
if (msg.type === 'ping') ws.send('{"type":"pong"}');
```
Reconexión / precio stale (EN): [stale-price reconnect](/es/answers/pinnacle-websocket-stale-price-reconnect).
## Prueba
[Builder](/es/pricing#plan-builder) (€99/mes) para WebSocket e historial de cierre. Prueba de 3 días; se exige tarjeta y se cobra tras el día 3 si no cancelas. Clave gratis: [signup](/signup). Relacionado: [hub de respuestas](/es/answers), [docs](/docs), [ejemplo Python](/es/answers/pinnacle-odds-websocket-python-example).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Es el ping del protocolo WebSocket?
No: es un ping/pong JSON de aplicación en el stream PinnFeed, documentado en la [doc WebSocket](/docs/websocket).
### ¿REST necesita pong?
No. Los heartbeats son solo de WebSocket.
---
Source: https://pinnfeed.io/es/answers/pinnacle-websocket-stale-price-reconnect
# WebSocket Pinnacle estable: precios stale y reconexión
**Respuesta:** trata el socket como transporte poco fiable. (1) Responde a cada `ping` con `{"type":"pong"}`. (2) En `close`, backoff exponencial + jitter, resuscríbete, vacía los maps en snapshot `part === 1`. (3) Sigue `seq`/`ts` y el último apply — si el silencio supera tu SLA, fuerza la reconexión. (4) Honra los códigos (`1001` deploy, `4008` slow consumer). Hace falta Builder (€99/mes). Ejemplo Node: [reconexión](/es/answers/pinnacle-odds-websocket-nodejs-reconnect).
## Stale-price detection (client-side)
```python
import time
LAST = {"ts": 0.0}
STALE_SEC = 15 # your SLA — not a vendor latency claim
def on_message(msg):
if msg["type"] in ("snapshot", "delta", "ping"):
LAST["ts"] = time.time()
def watchdog():
if time.time() - LAST["ts"] > STALE_SEC:
raise TimeoutError("no frames; reconnect")
```
Quiet markets are normal — gate the watchdog on whether events you care about are live.
## Failure modes
| Signal | Action |
|---|---|
| No `pong` path | Socket dies ~60 s after missed ping |
| `4008 slow_consumer` | Narrow filters or speed up handlers |
| `1001 server_shutdown` | Backoff reconnect (deploy) |
| Snapshot without clear | Ghost markets from the previous session |
We do **not** publish latency versus named competitors. Measure tick → your handler yourself.
## CTA
[Builder](/es/pricing#plan-builder). 3-day trial; card required, charged after day 3 unless cancelled. Docs: [WebSocket](/docs/websocket).
## Preguntas frecuentes
### ¿Basta el scraping de invitado?
Los bans y tableros de invitado retrasados son fallos habituales. Una clave self-serve con códigos de cierre documentados es la vía soportada.
### ¿Garantizáis actualizaciones sub-segundo?
Documentamos heartbeats y tipos de frame, no un RTT de marketing frente a otros revendedores. Instrumenta de extremo a extremo.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/odds-api-io-alternative
# Alternativa a odds-api.io para un WebSocket solo de Pinnacle
**Si la casa que necesitas es Pinnacle y pagas cada mes, PinnFeed Builder transmite cuotas de Pinnacle en vivo y prepartido por WebSocket por 99 €/mes (IVA incluido cuando corresponde), frente a 98 £/mes (≈ 117,48 €) del plan WebSocket de entrada de odds-api.io, Solo + WebSocket. Si necesitas Pinnacle y casas blandas en el mismo socket, o no te importa pagar un año por adelantado (≈ 98,33 €/mes), odds-api.io encaja mejor.**
Los datos de odds-api.io salen de [su página de precios](https://odds-api.io/pricing), leída el 9 de noviembre de 2026. Las cifras en euros usan el tipo del BCE del 6 de noviembre de 2026 (1 GBP = 1,1988 €). Los planes cambian; revisa la página antes de comprar.
## Qué ofrece odds-api.io
- Planes según el número de casas de apuestas; el de entrada, Solo, cuesta 49 £/mes con 2 casas, y Pinnacle puede ser una de ellas.
- 5.000 peticiones REST por hora, prepartido y en vivo, 34 deportes.
- **El WebSocket cuesta otra vez el precio del plan**: Solo + WebSocket 98 £/mes o 980 £/año.
- La facturación anual equivale a 10 veces el precio mensual.
## Tabla de precios, 9 de noviembre de 2026
| Plan | Casas | Mensual | ≈ €/mes | Anual, al mes | ≈ €/mes |
|---|---|---|---|---|---|
| **PinnFeed Builder** (WebSocket) | Pinnacle | 99 € (IVA incl. cuando corresponde) | 99 € | Solo mensual | n/a |
| odds-api.io Solo + WebSocket | 2 | 98 £ | ≈ 117,48 € | 980 £/año = 81,67 £ | ≈ 98,33 € |
| odds-api.io Solo (solo REST) | 2 | 49 £ | ≈ 58,74 € | — | — |
| PinnFeed Hobby (solo REST) | Pinnacle | 29 € | 29 € | Solo mensual | n/a |
## Cara a cara
| | odds-api.io | PinnFeed |
|---|---|---|
| Casas | Según el plan (2 en Solo), Pinnacle entre ellas | Solo Pinnacle |
| WebSocket | Complemento al doble del precio del plan | Incluido en Builder (3 conexiones) |
| Límite REST | 5.000 peticiones/hora | 10 peticiones/segundo en Builder |
| Deportes | 34 | 13 |
| Cuotas justas sin margen por mercado | No aparecen en su página de precios | Incluidas (fair, fairProb, margin) |
| Historial de cuotas de cierre | No aparece en su página de precios | Incluido desde Builder |
| Plan gratis | Ninguno en su página de precios | Clave REST gratis, 30 s de retraso |
| Prueba | Ninguna en su página de precios | 3 días en los planes de pago |
| Servidor MCP para asistentes de IA | No anunciado | Sí |
## Cuándo gana odds-api.io
- Necesitas **Pinnacle y casas blandas en un mismo socket**, para arbitraje o para comparar líneas. PinnFeed no tiene casas blandas.
- Necesitas **más de 13 deportes**: odds-api.io lista 34.
- Puedes **pagar un año por adelantado**: Solo + WebSocket anual sale por unos 98,33 €/mes, algo por debajo de Builder, para 2 casas.
## Cuándo gana PinnFeed
- **Pinnacle es tu precio de referencia** y quieres el precio justo y el margen ya calculados, como en la [guía de value betting](/es/guides/value-betting-no-vig-fair-odds).
- Pagas **cada mes**: 99 € frente a 98 £ (≈ 117,48 €).
- Necesitas **cuotas de cierre** para el CLV ([guía de CLV](/es/guides/closing-line-value-clv-tracking)) o el servidor MCP.
- Quieres empezar con una clave gratis sin tarjeta.
## Lo que pierdes si cambias
Los precios de las casas blandas. Si tu herramienta compara Pinnacle con una casa blanda, mantén una fuente de varias casas para el lado blando y usa PinnFeed para el lado sharp.
## Preguntas frecuentes
### ¿PinnFeed cuesta menos que odds-api.io?
Con facturación mensual, sí: Builder 99 € frente a Solo + WS 118 €/mes (EUR) / 98 £. Con facturación anual, Builder 990 €/año ≈ 82,50 €/mes (IVA incl. cuando corresponde) sigue por debajo de Solo + WS 1.180 €/año ≈ 98,33 €/mes (EUR, sin impuestos). Solo cubre dos casas; el anual se paga por adelantado.
### ¿odds-api.io incluye Pinnacle?
Sí, Pinnacle es una de las casas que puedes elegir. Cada plan limita cuántas casas tienes; Solo empieza en 2.
### ¿El WebSocket de odds-api.io lleva cuotas en vivo?
Su página de precios dice que el WebSocket transmite cuotas prepartido y en vivo.
### ¿Puedo usar los dos?
Sí. Una combinación habitual es odds-api.io para las casas blandas y PinnFeed para las cuotas justas y de cierre de Pinnacle. Mira la [comparativa](/es/compare) para otras opciones con varias casas.
## Prueba Builder
Empieza la prueba de 3 días de Builder desde [precios](/es/pricing): se pide tarjeta y se cobra después del día 3 salvo que canceles. Más opciones en [todas las alternativas](/es/alternatives) y en la [página del precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket). La integración empieza en la [documentación](/docs) (en inglés).
*Solo para mayores de 18 años. Las cuotas, las cuotas justas y el CLV son herramientas educativas y estadísticas, no consejos de apuestas. Nada de esto promete beneficios. Juega con responsabilidad.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-latency-honesty
# Latencia de una API de cuotas — enfoque honesto
**Respuesta:** **no afirmamos** menor latencia que ningún competidor nombrado — no está medida como SLA publicado. Instrumenta tu cliente: marca el tiempo de recepción de cada delta WS y compáralo con relojes de evento en los que confíes.
## Practical measurement
1. Open Builder WebSocket; log `Date.now()` on every `delta`.
2. Optionally correlate with `/v1/odds` polls from the same region.
3. Watch for `4008 slow_consumer` if your handler blocks.
4. Treat vendor marketing latency numbers as unverified unless you reproduce them.
Reconnect/stale: [stale reconnect](/es/answers/pinnacle-websocket-stale-price-reconnect).
## CTA
[Builder](/es/pricing#plan-builder) (€99/mo) for the live + prematch WebSocket and closing history. 3-day trial; card required, charged after day 3 unless cancelled. Free delayed REST: [signup](/signup). Related: [answers hub](/es/answers), [docs](/docs), [pricing](/es/pricing).
## Preguntas frecuentes
### ¿Publicáis un SLA de latencia?
No hay SLA público relativo a competidores. Límites de plan y transportes están documentados; los tiempos varían por región y filtros.
### ¿Ayuda la compresión?
Puede reducir el tamaño del payload, pero no es una garantía de latencia.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-implied-probability-api
# Probabilidad implícita vía fairProb
**Respuesta:** usa **`fairProb`** (0–1) del outcome, del precio no-vig. `fairProb` ≈ `1/fair`. También: decimal/american brutos. Esquema: [docs](/docs/schema).
## Example
```json
{ "name": "home", "decimal": 2.05, "fair": 2.14, "fairProb": 0.467 }
```
Related: [no-vig](/es/answers/no-vig-fair-odds-api).
## CTA
[Builder](/es/pricing#plan-builder) (€99/mo) for WebSocket and closing history. 3-day trial; card required, charged after day 3 unless cancelled. Free REST: [signup](/signup). Related: [answers hub](/es/answers), [docs](/docs).
See also: [margin (overround)](/es/answers/pinnacle-margin-overround-api).
## Preguntas frecuentes
### ¿fairProb está sin vig?
Sí — derivado tras quitar el margen del mercado Pinnacle.
### ¿Puedo usar 1/decimal?
Eso aún incluye vig; prefiera fairProb para priors del modelo.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/dropping-odds-api
# API de dropping odds
**Respuesta:** llama **`GET /v1/drops`** para una lista lista de acortamientos recientes (`from`, `to`, `dropPct`, `movedAt`, equipos, mercado). Para alertas steam sub-segundo, streamea el libro en Builder y usa un detector de ventana ([steam Python](/es/answers/steam-move-detection-python-websocket), [guía steam](/guides/dropping-odds-steam-detection)).
## REST: /v1/drops
| Param | Example | Meaning |
|---|---|---|
| `sport` | `soccer` | Sport slug |
| `live` | `true` | In-play only when true |
| `minutes` | `10` | Look-back window |
| `min_pct` | `5` | Minimum drop percent |
```bash
export PINNFEED_KEY="ps_live_..."
curl -sS -H "x-api-key: $PINNFEED_KEY" \
"https://pinnfeed.io/v1/drops?sport=soccer&live=true&minutes=10&min_pct=5"
```
Free sigue el retraso de 30 s y el límite de 2 deportes; Hobby es REST en tiempo real; el push en vivo pide Builder.
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; se exige tarjeta y se cobra tras el día 3 salvo que canceles. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿/v1/drops es un WebSocket?
No. Es REST. Para push usa `/v1/stream` en Builder.
### ¿Contenido educativo para adultos?
Sí (18+). Las señales dropping-odds son educativas, no tips garantizados.
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/free-odds-api
# API de cuotas gratis
**Respuesta:** «free odds API» suele ser un tier **REST con créditos limitados o retrasado** — no un WebSocket live del libro entero. Al **9 de noviembre de 2026** verificamos: **The Odds API** Starter free (**500 créditos/mes**); **oddssea** REST prematch retrasado gratis; **pinnwire** trial REST limitado; **PinnFeed Free €0** (REST, **30 s de retraso**, 2 deportes, mercados principales, 1 req/s, 1.000/día, **sin WebSocket** → `403 plan_lacks_ws` en `/v1/stream`). Resumen: [Best sports odds APIs 2026](/best-sports-odds-apis).
## PinnFeed Free (límites honestos)
| Limit | Free |
|---|---|
| Price | €0 |
| Transport | REST |
| Delay | 30 seconds |
| Sports | 2 (dashboard pick) |
| Markets | Main only |
| Rate | 1 req/s, 1,000/day |
| WebSocket | No |
| Closing history | No |
```bash
export PINNFEED_KEY="ps_live_..."
curl -sS -H "x-api-key: $PINNFEED_KEY" \
"https://pinnfeed.io/v1/odds?sport=soccer&main=true&limit=5"
```
## Otros tiers free (fechados 9 Nov 2026)
| Vendor | What free includes | Source |
|---|---|---|
| The Odds API | Starter FREE — 500 credits/mo | [the-odds-api.com](https://the-odds-api.com/) · [alternative](/es/the-odds-api-alternative) |
| oddssea | Free delayed prematch REST | [oddssea.dev](https://oddssea.dev/) · [alternative](/es/oddssea-alternative) |
| pinnwire | Trial REST (20/min, 100/day) | [pinnwire.com](https://pinnwire.com/) · [alternative](/es/pinnwire-alternative) |
| OpticOdds / OddsJam API | Quote only / no free API tier published | [OpticOdds](/es/opticodds-alternative) · [OddsJam](/es/oddsjam-alternative) |
Upgrade: Hobby 29 €/mes (REST tiempo real, aún sin WS) → [Builder](/es/pricing#plan-builder) 99 €/mes (WebSocket). Prueba 3 días.
Related: [Free 30 s](/es/answers/pinnacle-odds-api-free-tier-delay), [pricing per request vs flat](/es/answers/odds-api-pricing-per-request-vs-flat).
## Preguntas frecuentes
### ¿Free es gratis para siempre?
PinnFeed Free es €0 con los límites de arriba. Los planes de pago son aparte.
### ¿WebSocket live en un plan free?
No encontramos un WebSocket live free del libro entero en el hub [best sports odds APIs](/best-sports-odds-apis). PinnFeed Free no puede abrir `/v1/stream`.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-backtesting-clv
# Backtestear modelos contra las líneas de cierre de Pinnacle
**Respuesta:** registra cada señal (event id, clave de mercado, lado, marca de tiempo, precio tomado), luego une `/v1/closing` de Builder tras el inicio. Puntúa con CLV fair-close. El archivo crece desde el lanzamiento del servicio — no es un dump multi-año multi-book.
## Pipeline
1. Paper trade → CSV of bets.
2. Batch `/v1/closing?date=` for those days.
3. Join and summarize.
Guide: [CLV tracking](/guides/closing-line-value-clv-tracking).
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Hasta dónde llega el historial?
Desde el día en que empezó el archivo de cierre; crece cada día.
### Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-closing-line-api-clv
# Obtener líneas de cierre de Pinnacle vía API para CLV
**Respuesta:** llama `GET /v1/closing/{eventId}` (o `/v1/closing?date=YYYY-MM-DD`) con tu clave, lee el `fair` no-vig al cierre, luego `CLV = price_taken / closing_fair − 1`. El historial de cierre está en **Builder** (€99/mes) y superiores. Guía: [CLV](/guides/closing-line-value-clv-tracking).
## Pull one event's close
```bash
export PINNFEED_KEY="ps_live_..."
curl -sS -H "x-api-key: $PINNFEED_KEY" \
"https://pinnfeed.io/v1/closing/1640229582"
```
## Compute CLV in Python
```python
clv = price_taken / closing_fair - 1
```
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Hace falta Builder?
Sí para el historial de cierre.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-line-movement-api
# API de movimiento de línea Pinnacle
**Respuesta:** PinnFeed da tres piezas: el stream live (`delta` en el WebSocket Builder), caídas recientes (`GET /v1/drops`) y el precio de cierre (`GET /v1/closing`, Builder). No hay endpoint de historial tick-a-tick: para un gráfico completo registra los deltas desde la suscripción.
## Record deltas (Python, Builder)
```python
# 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](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup). Related: [dropping odds](/es/answers/dropping-odds-api), [closing/CLV](/es/answers/pinnacle-closing-line-api-clv).
## Preguntas frecuentes
### ¿Hay historial tick-a-tick?
No. Registra los deltas tú mismo.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-steam-telegram-alert
# Enviar steam moves de Pinnacle a Telegram
**Respuesta:** combina [/v1/drops](/es/answers/dropping-odds-api) (o steam WS) con un token de bot de Telegram. Bots completos: [guía steam](/guides/dropping-odds-steam-detection) + [bot Telegram](/guides/telegram-picks-bot).
## Minimal drops → Telegram
```python
import os, requests
KEY, TG, CHAT = os.environ["PINNFEED_KEY"], os.environ["TELEGRAM_BOT_TOKEN"], os.environ["TELEGRAM_CHAT_ID"]
drops = requests.get(
"https://pinnfeed.io/v1/drops",
headers={"x-api-key": KEY},
params={"sport": "soccer", "minutes": 10, "min_pct": 4},
timeout=15,
).json()
for d in drops.get("drops", drops if isinstance(drops, list) else []):
text = f"steam {d}"
requests.post(f"https://api.telegram.org/bot{TG}/sendMessage", json={"chat_id": CHAT, "text": text[:3500]})
```
Builder for sub-second WS steam.
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Son tips?
No — alertas de movimiento en bruto. Educativo (18+).
### ¿Plugin oficial de Telegram?
Usa la Bot API tú; no alojamos bots.
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-excel-power-query
# Cuotas Pinnacle en Excel con Power Query
**Respuesta:** usa Power Query `Web.Contents` con `Headers=[#"x-api-key"=YourKey]`, luego expande `events` → `markets` → `outcomes`. El REST Free (retraso 30 s) vale para un tablero refrescado; el push en vivo sigue necesitando el WebSocket Builder (no dentro de Excel).
## Power Query sketch
```powerquery
let
Key = Excel.CurrentWorkbook(){[Name="ApiKey"]}[Content]{0}[Column1],
Raw = Json.Document(Web.Contents("https://pinnfeed.io/v1/odds?sport=soccer&main=true&limit=50",
[Headers=[#"x-api-key"=Key]])),
Events = Raw[events]
in
Events
```
Keep the key in a named cell on a **hidden** sheet or a local parameter — never commit it to a shared OneDrive file. Related: [Sheets+Excel](/es/answers/pinnacle-odds-api-google-sheets-excel).
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup). Related: [answers](/es/answers), [docs](/docs).
Related: [Power BI REST](/es/answers/pinnacle-odds-api-power-bi).
## Preguntas frecuentes
### ¿Hay un complemento Excel oficial?
No — REST JSON vía Power Query / Python es la superficie de integración.
### ¿Excel puede abrir el WebSocket?
No de forma práctica — refresca REST en Excel; ejecuta un cliente WS Python/Node al lado para el live.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-closing-odds-duckdb-parquet
# Cuotas de cierre de Pinnacle en DuckDB y Parquet
**Respuesta:** en Builder o Pro, ejecuta un job diario pequeño que pagina `GET /v1/closing?date=YYYY-MM-DD` (hasta 2.000 filas por llamada), aplana `market` y `outcomes`, y escribe un Parquet por día. DuckDB consulta luego la carpeta con SQL, sin servidor de base de datos. Los registros existen desde que PinnFeed guarda cierres.
## 1. Daily export (Python)
```python
import os, sys, requests, pandas as pd
H = {"x-api-key": os.environ["PINNFEED_KEY"]} # ps_live_...
def closing_day(day, sport):
rows, offset = [], 0
while True:
r = requests.get("https://pinnfeed.io/v1/closing", headers=H, timeout=30,
params={"date": day, "sport": sport, "limit": 2000, "offset": offset})
r.raise_for_status() # 403 plan_lacks_history on Free/Hobby
batch = r.json()["closing"]
rows += batch
if len(batch) < 2000:
return rows
offset += 2000
day = sys.argv[1] # e.g. 2026-11-08
out = []
for row in closing_day(day, "soccer"):
m = row["market"]
for o in m["outcomes"] or []:
out.append({
"event_id": row["eventId"], "league": row["league"]["name"], "home": row["home"], "away": row["away"],
"start_time": row["startTime"], "captured_at": row["capturedAt"],
"market": m["type"], "period": m["period"], "line": m["line"], "main": m["main"],
"margin": m["margin"], "max_stake": m["maxStake"],
"outcome": o.get("name"), "decimal": o.get("decimal"), "fair": o.get("fair"),
})
os.makedirs("closing", exist_ok=True)
pd.DataFrame(out).to_parquet(f"closing/soccer-{day}.parquet", index=False) # needs pyarrow
print(len(out), "outcome rows")
```
## 2. Query with DuckDB
```sql
-- duckdb shell, from the folder that contains closing/
SELECT league, avg(margin) AS avg_margin
FROM read_parquet('closing/*.parquet')
GROUP BY 1
ORDER BY 2 DESC
LIMIT 20;
```
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup). Related: [closing/CLV](/es/answers/pinnacle-closing-line-api-clv), [backtesting](/es/answers/pinnacle-odds-api-backtesting-clv).
## Preguntas frecuentes
### ¿Bastan Free/Hobby?
No — `/v1/closing` devuelve `403 plan_lacks_history` fuera de Builder/Pro.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/oddspush-alternative
# Alternativa a oddspush con facturación mensual por tarjeta
**Con factura de un mes, oddspush REST + WebSocket cuesta 138 $ (≈ 123,60 €) por 1 conexión WebSocket, prepagado en cripto. PinnFeed Builder cuesta 99 €/mes (IVA incluido cuando corresponde) con 3 conexiones, con tarjeta o cripto. Si prepagas oddspush 6 meses, el precio efectivo baja a unos 98,82 €/mes, y su prueba de 7 días incluye el WebSocket sin tarjeta.**
Los datos de oddspush salen de [su sección de precios](https://oddspush.com/#pricing), su [llms.txt](https://oddspush.com/llms.txt) y su [documentación](https://oddspush.com/docs), leídos el 9 de noviembre de 2026. Las cifras en euros usan el tipo del BCE del 6 de noviembre de 2026 (1 USD = 0,89566 €). Su página no indica el IVA.
## Qué ofrece oddspush
- Un feed solo de Pinnacle, en vivo y prepartido, 13 deportes.
- **Prueba gratis**: 7 días, sin tarjeta, con WebSocket; se activa por Telegram.
- **REST**: 69 $ por 1 mes, 186 $ por 3 meses, 331 $ por 6 meses. Sin WebSocket.
- **REST + WebSocket**: 138 $ por 1 mes, 373 $ por 3 meses (124,33 $/mes), 662 $ por 6 meses (110,33 $/mes).
- Límites de REST + WebSocket: 1 conexión WebSocket simultánea, 12 snapshots por hora, 400 MB por hora, 12 reconexiones por minuto, 1 dirección IP.
- Cuotas de cierre y cuotas justas (sin margen) disponibles en todos los planes, activándolas.
- El pago es cripto prepago (USDC, USDT, BTC y otras); sin tarjeta; sin renovación automática.
## Tabla de precios, 9 de noviembre de 2026
| Opción | Facturación | Conexiones | Efectivo al mes | ≈ €/mes |
|---|---|---|---|---|
| **PinnFeed Builder** | Mensual, tarjeta o cripto | 3 | 99 € (IVA incl. cuando corresponde) | 99 € |
| oddspush REST + WebSocket | 1 mes prepago | 1 | 138 $ | ≈ 123,60 € |
| oddspush REST + WebSocket | 3 meses prepago (373 $) | 1 | 124,33 $ | ≈ 111,36 € |
| oddspush REST + WebSocket | 6 meses prepago (662 $) | 1 | 110,33 $ | ≈ 98,82 € |
| oddspush REST | 1 mes prepago | ninguna | 69 $ | ≈ 61,80 € |
## Cara a cara
| | oddspush | PinnFeed |
|---|---|---|
| Casa | Solo Pinnacle, 13 deportes | Solo Pinnacle, 13 deportes |
| Conexiones WebSocket | 1, desde 1 IP | 3 en Builder, 10 en Pro |
| Cuotas justas y de cierre | Opcionales en todos los planes | Incluidas desde Builder |
| Pago | Solo cripto prepago | Tarjeta (Stripe) mensual o cripto |
| Prueba | 7 días, sin tarjeta, con WebSocket | 3 días, tarjeta obligatoria |
| Plan gratis | Solo la prueba | Clave REST gratis, 30 s de retraso |
## Cuándo gana oddspush
- Quieres **probar el WebSocket sin tarjeta**: su prueba de 7 días lo incluye.
- Pagas en **cripto** y puedes prepagar 6 meses: unos 98,82 €/mes efectivos.
- Te basta una conexión desde una IP para tu bot.
## Cuándo gana PinnFeed
- Quieres una **factura mensual con tarjeta** que cancelas con un clic.
- Necesitas **más de una conexión** o más de una IP: Builder incluye 3 conexiones.
- Quieres un servidor MCP para usar las cuotas desde ChatGPT o Claude ([guía de MCP](/es/guides/pinnacle-odds-chatgpt-claude-mcp)).
## Preguntas frecuentes
### ¿Cuánto cuesta el plan WebSocket de oddspush?
REST + WebSocket cuesta 138 $ por 1 mes, 373 $ por 3 meses o 662 $ por 6 meses, prepagado en cripto, según lo publicado el 9 de noviembre de 2026.
### ¿PinnFeed cuesta menos que oddspush?
Con factura de un mes, sí: 99 € frente a 138 $ (≈ 123,60 €). Prepagando 6 meses, oddspush sale por unos 98,82 €/mes, más o menos lo mismo que Builder, pero pagas 662 $ por adelantado por 1 conexión.
### ¿oddspush acepta tarjeta?
No el 9 de noviembre de 2026: su página de precios solo indica cripto prepago.
### ¿La latencia es distinta?
oddspush publica su propia cifra de latencia. No hemos medido ambos feeds cara a cara, así que no afirmamos nada sobre latencia.
## Prueba Builder
Empieza la prueba de 3 días de Builder desde [precios](/es/pricing): se pide tarjeta y se cobra después del día 3 salvo que canceles. Lee el protocolo del WebSocket en la [documentación](/docs) (en inglés) y compara más proveedores en [todas las alternativas](/es/alternatives), la [comparativa](/es/compare) y la [página del precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket).
*Solo para mayores de 18 años. Las cuotas, las cuotas justas y el CLV son herramientas educativas y estadísticas, no consejos de apuestas. Nada de esto promete beneficios. Juega con responsabilidad.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-power-bi
# Cuotas Pinnacle en Power BI
**Respuesta:** use **Obtener datos → Web** / Power Query `Web.Contents` con cabecera `x-api-key`. Apunte a `https://pinnfeed.io/v1/odds?...`. Power BI solo hace pull — no es cliente WebSocket.
## Patrón Power Query
```powerquery
let
key = Environment.GetEnvironmentVariable("PINNFEED_KEY"),
url = "https://pinnfeed.io/v1/odds?sport=soccer&main=true&limit=50",
raw = Web.Contents(url, [Headers=[#"x-api-key"=key]]),
json = Json.Document(raw)
in
json
```
Gemelo Excel: [Power Query](/es/answers/pinnacle-odds-excel-power-query). Guarde la clave en un parámetro o credencial — nunca en un PBIX compartido en git.
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Puede Power BI abrir el WebSocket?
No. Use capturas REST con programación de actualización.
### ¿Qué plan?
Free (30 s de retraso, 2 deportes) u Hobby para REST en tiempo real. Builder añade WS/cierres para otras herramientas.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-soccer-corners-odds-api
# API de córners de fútbol Pinnacle
**Respuesta:** las líneas de córner llegan como **eventos de fútbol relacionados** (`parentId` apunta al partido principal) con `units` igual a `"Corners"` (ver [schema](/docs/schema)). No son un deporte aparte ni specials. Las líneas **main** de córner entran en todo plan con soccer, también Free y Hobby; Free/Hobby son solo main, así que las líneas **alternate** de córner necesitan Builder (o Pro). En el WebSocket Builder, suscríbase a soccer con `main: false` para recibir también las alternate, y conserve mercados cuyo evento padre tenga `units === "Corners"`.
## Filtrar córners de un snapshot
```python
import os, requests
KEY = os.environ["PINNFEED_KEY"]
r = requests.get(
"https://pinnfeed.io/v1/odds",
params={"sport": "soccer", "live": "true", "limit": 100},
headers={"x-api-key": KEY},
timeout=15,
)
r.raise_for_status()
for ev in r.json().get("events", []):
if ev.get("units") != "Corners":
continue
print(ev["home"], "v", ev["away"], ev.get("league", {}).get("name"))
for m in ev.get("markets", []):
print(" ", m["type"], m.get("line"), [(o["name"], o["decimal"], o["fair"]) for o in m["outcomes"]])
```
## Suscripción WebSocket
```json
{
"type": "subscribe",
"sports": ["soccer"],
"markets": ["total", "spread", "moneyline"],
"main": false,
"specials": true
}
```
Luego conserve eventos con `units == "Corners"`. Las claves de estado van por `id` de mercado (`eventId:key`).
## CTA
Profundidad completa, incluidas alternate de córner: [Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Hay filtro `market=corners`?
No. Los córners se identifican por `units` del evento, no por un enum de market-type. Los tipos siguen siendo `moneyline` / `spread` / `total` / `team_total`.
### ¿Free y Hobby incluyen córners?
Sí, las líneas main, si soccer es uno de sus deportes. Las alternate empiezan en Builder.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-browser-javascript-cors
# Cuotas Pinnacle en JavaScript del navegador
**Respuesta:** las respuestas REST `/v1/*` incluyen `Access-Control-Allow-Origin: *`, así que `fetch()` desde una página no da error CORS. El problema es la clave: todo en el front es visible. En sitios públicos, llame a PinnFeed desde un servidor (o función serverless) que guarda `PINNFEED_KEY` y solo devuelve lo necesario. Los navegadores no pueden poner cabeceras en un WebSocket, así que un socket en el browser necesitaría `?key=` en la URL y la expondría igual.
## Vale para una prueba privada
```html
```
## Sitio público: patrón proxy
```js
// server.js (Node 18+), run with PINNFEED_KEY in the environment
import http from 'node:http';
http.createServer(async (req, res) => {
if (!req.url.startsWith('/odds')) { res.writeHead(404).end(); return; }
const r = await fetch('https://pinnfeed.io/v1/odds?sport=tennis&market=moneyline&main=true&limit=20', {
headers: { 'x-api-key': process.env.PINNFEED_KEY },
});
res.writeHead(r.status, { 'content-type': 'application/json', 'cache-control': 'max-age=5' });
res.end(await r.text());
}).listen(3000);
```
Una caché corta evita que muchos visitantes gasten su rate limit (Free 1 req/s, Hobby 2, Builder 10, Pro 30). Proxies listos: [FastAPI](/es/answers/pinnacle-odds-fastapi-proxy), [Cloudflare Worker](/es/answers/pinnacle-odds-cloudflare-worker), [Supabase Edge](/es/answers/pinnacle-odds-supabase-edge-function).
## Actualizaciones live en la página
Mantenga el WebSocket en el servidor (Builder) y reenvíe solo los cambios al browser por su propio WS o SSE. [Reconnect Node](/es/answers/pinnacle-odds-websocket-nodejs-reconnect).
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup). ¿Clave filtrada? [Rótel a](/es/answers/pinnacle-odds-api-key-rotation).
## Preguntas frecuentes
### ¿Puedo restringir una clave a mi dominio?
No hay restricción por dominio; por eso el proxy es el patrón seguro.
### ¿El WebSocket envía cabeceras CORS?
CORS no aplica a WebSockets; el problema es que la clave iría en la URL desde el browser.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/telegram-picks-bot-pinnacle
# Bot de picks Telegram sobre cuotas Pinnacle
**Respuesta:** ejecute un cliente WebSocket Node en **Builder**, detecte steam (p. ej. acortamiento ≥5% en ~2 minutos con suelo de `maxStake`) y haga `POST` a la Bot API de Telegram. Unas 70 líneas, sin SDK de Telegram. Código completo: [guía bot Telegram](/guides/telegram-picks-bot). Herramienta educativa para adultos (18+) — no promete beneficio.
## Setup
```bash
export PINNFEED_KEY="ps_live_..." # Builder (WebSocket)
export TELEGRAM_TOKEN="123456:ABC..." # from @BotFather
export TELEGRAM_CHAT="@mychannel" # bot is admin
npm install ws
# Leave TELEGRAM_TOKEN unset for dry-run (print only)
node telegram-picks-bot.mjs
```
Cree el bot con **@BotFather** y añádalo como admin del canal con permiso de publicar. La guía incluye `telegram-picks-bot.mjs` junto al patrón del [guide Python/Node](/guides/pinnacle-odds-websocket-python-node).
## Aspecto de un mensaje
```text
📉 SOCCER · Italy - Serie A
Udinese v Fiorentina
Pick: Udinese (spread +0.25)
Pinnacle 1.88 → 1.70 (−9.5%)
Fair now 1.83 · max stake 150
```
## Sin Builder
Haga poll de `GET /v1/drops` cada minuto en Free/Hobby y publique esas filas — más lento, sin socket. Ver [API dropping odds](/es/answers/dropping-odds-api).
## CTA
Bot WebSocket → [Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Por qué Builder?
El bot de ejemplo usa `/v1/stream`. Free/Hobby reciben `403 plan_lacks_ws`.
### ¿Puedo presentarlo como "locks"?
No — contenido educativo (18+), sin tip ni promesa de ganancia.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-websocket-compression
# permessage-deflate en el WebSocket de cuotas
**Respuesta:** los clientes que negocian **permessage-deflate** reciben frames comprimidos (umbral ~1 KB). Los snapshots suelen reducirse 5–10×. Python `websockets` lo activa por defecto; Node `ws` necesita `perMessageDeflate: true`.
## Node
```javascript
new WebSocket(url, { headers: { 'x-api-key': KEY }, perMessageDeflate: true });
```
Detalles: [docs WebSocket](/docs/websocket#compression).
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Debo activarlo?
Recomendado para libros grandes de soccer. Omítalo solo si la CPU está muy justada.
### ¿Cambia campos JSON?
No — mismo schema tras inflate.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-websocket-kotlin
# WebSocket de cuotas Pinnacle en Kotlin (OkHttp)
**Respuesta:** con OkHttp, construya un `Request` a `wss://pinnfeed.io/v1/stream` con cabecera `x-api-key`, llame `newWebSocket`, envíe un JSON `subscribe` en `onOpen`, y responda `{"type":"pong"}` a cada `ping` del servidor (cada 20 s). Frames: `welcome`, `subscribed`, partes `snapshot`, luego `delta`. Builder (99 €/mes) o Pro.
## Gradle
```kotlin
dependencies {
implementation("com.squareup.okhttp3:okhttp:4.12.0")
implementation("org.json:json:20240303")
}
```
## Client
```kotlin
import okhttp3.*
import org.json.JSONObject
import java.util.concurrent.TimeUnit
fun main() {
val key = System.getenv("PINNFEED_KEY") ?: error("set PINNFEED_KEY") // ps_live_...
val client = OkHttpClient.Builder().readTimeout(0, TimeUnit.MILLISECONDS).build()
fun connect(delayMs: Long = 0) {
Thread.sleep(delayMs)
val req = Request.Builder().url("wss://pinnfeed.io/v1/stream").header("x-api-key", key).build()
client.newWebSocket(req, object : WebSocketListener() {
override fun onOpen(ws: WebSocket, response: Response) {
ws.send("""{"type":"subscribe","sports":["soccer"],"markets":["moneyline"],"main":true}""")
}
override fun onMessage(ws: WebSocket, text: String) {
val msg = JSONObject(text)
when (msg.getString("type")) {
"ping" -> ws.send("""{"type":"pong"}""")
"delta" -> {
val changes = msg.getJSONArray("changes")
for (i in 0 until changes.length()) {
val ch = changes.getJSONObject(i)
if (ch.getString("kind") == "market" && ch.getString("op") == "upsert") {
val m = ch.getJSONObject("market")
if (m.optDouble("maxStake", 0.0) >= 100) println("${m.getLong("eventId")} ${m.getJSONArray("outcomes")}")
}
}
}
"error" -> println("error ${msg.optString("code")}: ${msg.optString("message")}")
}
}
override fun onClosed(ws: WebSocket, code: Int, reason: String) {
println("closed $code $reason")
if (code != 4001) connect(2000) // 4001 = key revoked
}
override fun onFailure(ws: WebSocket, t: Throwable, response: Response?) {
println("failure ${response?.code} ${t.message}")
connect(5000)
}
})
}
connect()
}
```
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Por qué Builder?
`/v1/stream` exige Builder o Pro. Free/Hobby reciben `403 plan_lacks_ws`.
### ¿Hace falta un SDK oficial?
No — OkHttp + JSON bastan.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/detect-steam-moves-pinnacle-api
# Detectar steam moves de Pinnacle vía API
**Respuesta:** streamee el libro en Builder, guarde un high rodante por outcome, y alerte cuando el decimal se acorte ≥5% en ~2 minutos con `maxStake` suficiente (p. ej. ≥100). O haga poll de `GET /v1/drops?sport=soccer&live=true&minutes=10&min_pct=5`. Detector completo: [guía steam](/guides/dropping-odds-steam-detection).
## Definición práctica
- Caída de precio ≥ **5%** desde el high de ventana (`MIN_DROP`).
- Ventana ≈ **2 minutos** (`WINDOW_S`).
- Prefiera mercados con **max stake** significativo para no spamear líneas finas.
- Alerta **una vez por outcome y ventana**.
Señal estadística de monitores sharp — ni tip ni garantía de +EV.
## Esquema WebSocket (Builder)
Reutilice el cliente compartido de la [guía Python](/guides/pinnacle-odds-websocket-python-node) (`on_market`):
```python
# Example outline — full steam.py is in the steam guide
from collections import defaultdict, deque
import time
WINDOW_S, MIN_DROP, MIN_STAKE = 120, 0.05, 100
hist = defaultdict(deque) # key -> deque[(ts, decimal)]
def on_market(old, new, event):
if not event or (new.get("maxStake") or 0) < MIN_STAKE:
return
now = time.time()
for o in new["outcomes"]:
if o["name"] not in {"home", "away", "draw", "over", "under"}:
continue
k = (new["id"], o["name"])
q = hist[k]
q.append((now, o["decimal"]))
while q and now - q[0][0] > WINDOW_S:
q.popleft()
peak = max(p for _, p in q)
drop = (peak - o["decimal"]) / peak
if drop >= MIN_DROP:
print(f"STEAM {event['home']} v {event['away']} {new['type']} {o['name']}: "
f"{peak:.3f} -> {o['decimal']:.3f} ({drop:.1%}) max {new.get('maxStake')}")
q.clear() # one alert per window
```
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup). Relacionado: [dropping odds](/es/answers/dropping-odds-api), [steam Telegram](/es/answers/pinnacle-steam-telegram-alert).
## Preguntas frecuentes
### ¿Basta Free?
Para `/v1/drops` sí (retraso 30 s). El detector WS en tiempo real pide Builder.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/pinnwire-alternative
# Alternativa a pinnwire con el WebSocket incluido
**Si quieres el libro completo de Pinnacle en vivo y prepartido por WebSocket, la combinación más baja de pinnwire es Pro 89 $ + complemento Raw WebSocket 89 $ = 178 $/mes (≈ 159,43 €). PinnFeed Builder incluye el WebSocket por 99 €/mes (IVA incluido cuando corresponde). Si solo quieres recibir alertas de caídas, pinnwire Drops a 89 $/mes por SSE es una opción más acotada y sencilla.**
Los datos de pinnwire salen de [su página de inicio y precios](https://pinnwire.com/) y de su [documentación](https://pinnwire.com/docs.html), leídas el 9 de noviembre de 2026. Las cifras en euros usan el tipo del BCE del 6 de noviembre de 2026 (1 USD = 0,89566 €). Su página no indica el IVA.
## Qué ofrece pinnwire
- Un feed solo de Pinnacle con REST, alertas de caídas por SSE y un complemento WebSocket en bruto.
- **Trial**: gratis, sin tarjeta, 20 peticiones por minuto y 100 al día.
- **Drops 89 $/mes**: alertas de caídas enviadas por SSE (no el libro completo), REST ligero.
- **Pro 89 $/mes**: REST a 10 peticiones por segundo, volumen ilimitado.
- **Pro + Drops 139 $/mes** y **Scale 219 $/mes** (30 peticiones por segundo).
- **Raw WebSocket +89 $/mes** en Pro, Pro + Drops o Scale: retransmisión en vivo y prepartido, 1 conexión por clave (una segunda conexión expulsa a la primera), hasta 200 eventos por suscripción.
- Facturación mensual, con tarjeta o cripto.
## Tabla de precios, 9 de noviembre de 2026
| Opción | Qué incluye | Mensual | ≈ €/mes |
|---|---|---|---|
| pinnwire Drops | Solo alertas de caídas por SSE | 89 $ | ≈ 79,71 € |
| **PinnFeed Builder** | WebSocket, en vivo + prepartido, 3 conexiones, REST 10/s | 99 € (IVA incl. cuando corresponde) | 99 € |
| pinnwire Pro + Raw WebSocket | REST 10/s + WebSocket, 1 conexión | 178 $ | ≈ 159,43 € |
| pinnwire Pro + Drops + Raw WebSocket | Añade caídas por SSE | 228 $ | ≈ 204,21 € |
| pinnwire Scale + Raw WebSocket | REST 30/s + WebSocket | 308 $ | ≈ 275,86 € |
## Cara a cara
| | pinnwire | PinnFeed |
|---|---|---|
| Casa | Solo Pinnacle | Solo Pinnacle |
| WebSocket | Complemento, +89 $/mes | Incluido en Builder |
| Conexiones WebSocket | 1 por clave | 3 en Builder, 10 en Pro |
| Alertas de caídas | Stream SSE (planes Drops) | REST `/v1/drops` y la [guía de steam](/es/guides/dropping-odds-steam-detection) |
| Plan gratis | 100 peticiones/día, sin tarjeta | 1.000 peticiones/día, 30 s de retraso |
| Cuotas justas y de cierre | No comprobado (sin datos) | Incluidas desde Builder |
## Cuándo gana pinnwire
- Solo quieres **recibir alertas de caídas** y no necesitas el libro completo: Drops a 89 $ por SSE.
- Quieres una clave de prueba gratis, sin tarjeta y sin caducidad, para probar el REST.
- Prefieres una retransmisión en bruto de los frames de origen en una sola conexión.
## Cuándo gana PinnFeed
- Necesitas el **libro completo en vivo y prepartido** por WebSocket: 99 € frente a 178 $.
- Tienes más de un consumidor: Builder incluye **3 conexiones**.
- Quieres deltas normalizados, cuotas justas sin margen y cuotas de cierre en el mismo esquema ([documentación](/docs), en inglés).
## Preguntas frecuentes
### ¿Cuánto cuesta el WebSocket de pinnwire?
Es un complemento de +89 $/mes sobre Pro, Pro + Drops o Scale. El total más bajo con WebSocket es Pro + Raw WebSocket a 178 $/mes (≈ 159,43 €), según lo publicado el 9 de noviembre de 2026.
### ¿El plan Drops de pinnwire es un WebSocket?
No. Drops envía alertas de caídas por Server-Sent Events. No es un WebSocket con el libro completo.
### ¿PinnFeed cuesta menos que pinnwire para un WebSocket en vivo + prepartido?
Con los precios mensuales publicados el 9 de noviembre de 2026, sí: 99 € frente a 178 $. A esa fecha, PinnFeed Builder era el precio publicado más bajo con facturación mensual o anual que encontramos para un WebSocket en tiempo real que transmite cuotas de Pinnacle en vivo y prepartido. Hay un WebSocket solo prepartido publicado por menos (oddssea Prematch, 59 $/mes).
## Prueba Builder
Empieza la prueba de 3 días de Builder desde [precios](/es/pricing): se pide tarjeta y se cobra después del día 3 salvo que canceles. Mira [todas las alternativas](/es/alternatives), la [comparativa](/es/compare) y la [página del precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket).
*Solo para mayores de 18 años. Las cuotas, las cuotas justas y el CLV son herramientas educativas y estadísticas, no consejos de apuestas. Nada de esto promete beneficios. Juega con responsabilidad.*
---
Source: https://pinnfeed.io/es/answers/lol-dota2-odds-api-pinnacle
# API de cuotas League of Legends y Dota 2
**Respuesta:** los partidos de League of Legends y Dota 2 llegan bajo el sport `esports` de PinnFeed (id 11) cuando Pinnacle los lista. Pinnacle nombra las ligas esports por título y torneo, así que `/v1/events?sport=esports&q=league of legends` o `q=dota` encuentra los ids. Luego filtre `/v1/odds` o una suscripción WebSocket por esos ids para moneylines, handicaps y totales según ofrezca Pinnacle.
## Encontrar competiciones
```bash
for t in "league of legends" "dota"; do
curl -s -G "https://pinnfeed.io/v1/events" --data-urlencode "sport=esports" --data-urlencode "q=$t" \
-d limit=200 -H "x-api-key: ps_live_your_key" | jq -r '.events[].league | "\(.id)\t\(.name)"' | sort -u
done
```
Si la búsqueda no devuelve nada, liste todos los eventos `esports` y lea los nombres de liga.
## Cuotas de esas ligas
```bash
curl -s "https://pinnfeed.io/v1/odds?sport=esports&league=ID1,ID2&market=moneyline,spread,total" \
-H "x-api-key: ps_live_your_key"
```
Los mercados a nivel de mapa, cuando existen, traen su propio `period`; lea `period` y `line`. Los live tienen `live: true`; en Builder, los `delta` empujan cada cambio entre mapas.
## CTA
Free: retraso 30 s, 2 deportes (elija `esports`), mercados main. Hobby (€29/mes): REST en tiempo real. [Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup). Otros títulos: [esports](/es/answers/pinnacle-esports-odds-api), [CS2/CS:GO](/es/answers/pinnacle-csgo-odds-api).
## Preguntas frecuentes
### ¿Datos in-game (kills, oro)?
No. PinnFeed lleva cuotas Pinnacle; `score` solo si Pinnacle publica uno.
### ¿Valorant u otros?
Mismo sport `esports`; busque por título o torneo.
### ¿Por qué faltan mercados en Free?
Free y Hobby solo main; mapas y specials piden Builder.
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-fastapi-proxy
# Proxy de cuotas Pinnacle con FastAPI
**Respuesta:** ejecute una pequeña app FastAPI que lea `PINNFEED_KEY` del entorno, llame `/v1/odds` con `httpx`, cachee el resultado unos segundos y devuelva solo los campos útiles. El navegador habla con su API; la clave no sale del servidor.
## `app.py`
```python
import os, time
import httpx
from fastapi import FastAPI, HTTPException
KEY = os.environ["PINNFEED_KEY"] # ps_live_...
API = "https://pinnfeed.io/v1"
TTL = 5 # seconds
cache: dict[str, tuple[float, list]] = {}
app = FastAPI()
client = httpx.AsyncClient(headers={"x-api-key": KEY}, timeout=10)
@app.get("/odds/{sport}")
async def odds(sport: str, q: str | None = None):
ck = f"{sport}|{q}"
hit = cache.get(ck)
if hit and time.time() - hit[0] < TTL:
return hit[1]
params = {"sport": sport, "market": "moneyline", "main": "true", "limit": 100}
if q:
params["q"] = q
r = await client.get(f"{API}/odds", params=params)
if r.status_code != 200:
raise HTTPException(r.status_code, r.json().get("error", {}).get("message", "upstream error"))
rows = [
{"id": e["id"], "home": e["home"], "away": e["away"], "start": e["startTime"], "live": e["live"],
"prices": {o["name"]: o["decimal"] for m in e["markets"] for o in m["outcomes"]},
"maxStake": max((m["maxStake"] or 0) for m in e["markets"]) if e["markets"] else None}
for e in r.json()["events"]
]
cache[ck] = (time.time(), rows)
return rows
```
Ejecute con `pip install fastapi uvicorn httpx` y `uvicorn app:app --port 8000`, luego `/odds/soccer?q=arsenal`.
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup). Otros hosts: [Cloudflare Worker](/es/answers/pinnacle-odds-cloudflare-worker), [Supabase](/es/answers/pinnacle-odds-supabase-edge-function). Relacionado: [JS navegador / CORS](/es/answers/pinnacle-odds-browser-javascript-cors).
## Preguntas frecuentes
### ¿Por qué no llamar PinnFeed desde JavaScript?
CORS lo permite, pero la clave sería pública: [JS navegador y CORS](/es/answers/pinnacle-odds-browser-javascript-cors).
### ¿La caché deja cuotas viejas?
Hasta TTL segundos. 1–5 s para prematch; WebSocket para live.
### ¿Puedo usar Flask?
Sí; mismo patrón con `requests` y un dict cache.
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-websocket-typescript
# Cliente WebSocket TypeScript
**Respuesta:** reutilice la respuesta de reconexión Node `ws` con uniones tipadas (`ping` | `snapshot` | `delta` | `error`). Builder requerido para `/v1/stream`.
## Esquema
```ts
type Msg =
| { type: 'ping' }
| { type: 'snapshot'; part: number; final: boolean; events: unknown[]; markets: unknown[] }
| { type: 'delta'; changes: unknown[] };
// npm i ws @types/ws
```
Lógica completa de reconexión: [respuesta Node](/es/answers/pinnacle-odds-websocket-nodejs-reconnect).
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Hay SDK oficial?
No — WebSocket + JSON bastan.
### ¿Deno/Bun funcionan?
Sí si hablan WebSocket y ponen la clave en header o query.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-sse-vs-websocket
# Flujos SSE de drops vs WebSocket full-book
**Respuesta:** una **alerta SSE de drop** avisa de que se cruzó un umbral; un **WebSocket full-book** streamea cada upsert de mercado. PinnFeed Builder es el WS full-book; los atajos steam también usan `GET /v1/drops`. No reivindicamos latencia frente a vendedores SSE nombrados.
## Elegir
| Necesidad | Usar |
|---|---|
| Tablero entero + inputs de modelo | WebSocket snapshot/delta |
| Solo «algo se acortó» | `/v1/drops` o su regla steam en el WS |
Los add-ons SSE de competidores figuran en [compare](/es/compare) (fechado 9 nov. 2026).
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup). Relacionado: [Webhook vs WebSocket](/es/answers/pinnacle-odds-webhook-vs-websocket).
## Preguntas frecuentes
### ¿PinnFeed ofrece SSE?
El push principal es WebSocket; los drops son REST. Vea la doc de transportes actuales.
### ¿El SSE es más barato en otro sitio (vs WS en vivo + pre-match)?
Algunos venden drops SSE por debajo de un WS full-book — vea [compare](/es/compare) fechado. Alcance: drops ≠ full book. Qualifique **live + pre-match** vs solo alertas.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-prematch-vs-live-websocket
# WebSocket solo-prematch vs live + pre-match
**Respuesta:** al **9 de noviembre de 2026**, oddssea **Prematch** se publica a **$59/mes** por un WebSocket **solo prematch**. PinnFeed **Builder** (99 €/mes IVA incl. cuando corresponde, o €990/año ≈ €82,50/mes) era el WebSocket Pinnacle **live + pre-match** al precio publicado más bajo que encontramos en facturación mensual o anual. Fuentes: [compare](/es/compare).
## No mezcle alcances
Decir «WebSocket más barato (sin live + pre-match)» sin **live + pre-match** engaña. Si solo necesita prematch, un plan solo-prematch puede ser más bajo.
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup). Divulgaciones: [precio live + pre-match](/es/cheapest-pinnacle-odds-websocket), [compare](/es/compare).
## Preguntas frecuentes
### ¿Builder incluye prematch?
Sí — live y prematch.
### ¿Dónde están las divulgaciones?
[/cheapest-pinnacle-odds-websocket](/es/cheapest-pinnacle-odds-websocket) y [compare](/es/compare).
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-excel-power-query-guide
# Cargar cuotas Pinnacle en Excel con Power Query
**Respuesta:** Datos → Obtener datos → Desde la Web no basta (sin cabecera custom). Use **Consulta en blanco** + Editor avanzado, ponga `x-api-key`, llame `GET https://pinnfeed.io/v1/odds` y expanda `events` / `markets` / `outcomes`. Nota corta: [respuesta Power Query](/es/answers/pinnacle-odds-excel-power-query).
## Consulta M (moneylines soccer main)
```powerquery
let
Key = Excel.CurrentWorkbook(){[Name="PinnfeedKey"]}[Content]{0}[Column1],
Url = "https://pinnfeed.io/v1/odds?sport=soccer&market=moneyline&main=true&limit=40",
Raw = Json.Document(Web.Contents(Url, [
Headers = [#"x-api-key" = Key, Accept = "application/json"]
])),
Events = Table.FromList(Raw[events], Splitter.SplitByNothing(), {"ev"}),
Expand = Table.ExpandRecordColumn(Events, "ev", {"home", "away", "markets", "starts"}),
Markets = Table.ExpandListColumn(Expand, "markets"),
M2 = Table.ExpandRecordColumn(Markets, "markets", {"type", "outcomes"}),
Out = Table.ExpandListColumn(M2, "outcomes"),
O2 = Table.ExpandRecordColumn(Out, "outcomes", {"name", "decimal", "fair", "fairProb"})
in
O2
```
Guarde la clave en una celda con nombre en una hoja **oculta**. Power BI: [Power BI REST](/es/answers/pinnacle-odds-api-power-bi).
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Excel puede abrir el WebSocket?
No de forma práctica — refresque en REST; WS aparte en Python/Node.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-closing-lines-european-football-api
# Líneas de cierre Pinnacle para fútbol europeo
**Respuesta:** Builder expone `GET /v1/closing?date=YYYY-MM-DD&sport=soccer`. Filtre el JSON por `league.name` para competiciones europeas (Premier League, La Liga, Serie A, Bundesliga, Ligue 1, UCL, etc.). Prefiera `fair` no-vig para CLV. No hay endpoint «solo Europa».
## Pull del día
```bash
export PINNFEED_KEY="ps_live_..."
curl -sS -H "x-api-key: $PINNFEED_KEY" \
"https://pinnfeed.io/v1/closing?date=2026-11-08&sport=soccer&main=true&limit=500"
```
Filtre por `league.name`. Campos: [docs REST](/docs/rest). CLV: [cierre/CLV](/es/answers/pinnacle-closing-line-api-clv).
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Hace falta Builder?
Sí — `/v1/closing` fuera de Builder/Pro devuelve `403 plan_lacks_history`.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-specials-props-odds-api
# Specials / props Pinnacle vía API
**Respuesta:** ponga `"specials": true` en el subscribe WebSocket (o filtros REST equivalentes) en **Builder+**. Mantenga `main: true` para líneas primarias. Los córners de soccer suelen usar `units` (ver [córners](/es/answers/pinnacle-soccer-corners-odds-api)).
## WebSocket
```json
{
"type": "subscribe",
"sports": ["basketball", "soccer"],
"main": true,
"specials": true
}
```
La cobertura sigue lo que Pinnacle publique. Schema: [docs](/docs/schema).
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup). Ver también: [NBA player props](/es/answers/nfl-player-props-odds-api-pinnacle).
## Preguntas frecuentes
### ¿Free incluye specials?
No — Free/Hobby son main-only. Specials/props empiezan en Builder.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-r-httr2
# API de cuotas Pinnacle en R (httr2)
**Respuesta:** use **httr2** con cabecera `x-api-key`, llame `GET https://pinnfeed.io/v1/odds` y parse el JSON. El push WebSocket sigue necesitando un cliente WS (o quédese en REST en Free/Hobby). Builder desbloquea `/v1/stream` e historial de cierres.
## Llamada REST mínima
```r
library(httr2)
library(jsonlite)
key <- Sys.getenv("PINNFEED_KEY")
resp <- request("https://pinnfeed.io/v1/odds") |>
req_url_query(sport = "soccer", market = "moneyline", main = "true", limit = 20) |>
req_headers(`x-api-key` = key) |>
req_perform()
data <- resp_body_json(resp)
# data$events[[i]]$markets[[j]]$outcomes[[k]]$decimal / $fair / $american
```
Campos: [docs/schema](/docs/schema). Gemelo Python: [REST](/es/answers/pinnacle-odds-python-rest).
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Hay SDK R oficial?
No — httr2 + jsonlite bastan.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/google-sheets-odds-drop-email-alert
# Alerta por email de drops de cuotas en Google Sheets
**Respuesta:** programe un disparador de tiempo en Apps Script que llame `GET /v1/drops` (o lea un tablero IMPORTDATA) y envíe `MailApp.sendEmail` cuando `dropPct` supere su umbral. Free (retraso 30 s) u Hobby bastan para polling; el push live sigue siendo WebSocket Builder.
## Esquema
Use la clave en Script Properties (no en la hoja compartida). Endpoint: `/v1/drops?sport=soccer&minutes=10&min_pct=5`. Relacionado: [dropping odds](/es/answers/dropping-odds-api), [Sheets time-driven](/es/answers/pinnacle-odds-sheets-time-driven-trigger).
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Sheets puede abrir el WebSocket?
No — use REST programado.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/the-odds-api-alternative
# Alternativa a The Odds API para cuotas de Pinnacle en tiempo real
**Si te basta con hacer polling, The Odds API cuesta menos que PinnFeed: 30 $/mes (≈ 26,87 €) por 20.000 créditos, con muchas casas y un plan gratis. No tiene WebSocket ni feed push a ningún precio. Si necesitas que los precios de Pinnacle te lleguen en cuanto se mueven, PinnFeed Builder transmite cuotas de Pinnacle en vivo y prepartido por WebSocket por 99 €/mes (IVA incluido cuando corresponde).**
Los datos de The Odds API salen de [su página de inicio](https://the-odds-api.com/), leída el 9 de noviembre de 2026. Las cifras en euros usan el tipo del BCE del 6 de noviembre de 2026 (1 USD = 0,89566 €).
## Qué ofrece The Odds API
- Plan Starter gratis: 500 créditos al mes.
- Planes de pago por créditos, empezando por 20.000 créditos a 30 $/mes.
- Casas agrupadas por regiones; Pinnacle aparece en la región UE.
- Es una API REST: cada petición gasta créditos de tu plan.
## Tabla de precios, 9 de noviembre de 2026
| Opción | Mensual | ≈ €/mes | ¿Push? | Casas |
|---|---|---|---|---|
| The Odds API Starter | 0 $ (500 créditos) | 0 € | No | Muchas, por regiones |
| The Odds API 20K | 30 $ | ≈ 26,87 € | No | Muchas, por regiones |
| PinnFeed Free | 0 € | 0 € | No (REST, 30 s de retraso) | Pinnacle |
| PinnFeed Hobby | 29 € | 29 € | No (REST en tiempo real) | Pinnacle |
| **PinnFeed Builder** | 99 € (IVA incl. cuando corresponde) | 99 € | **WebSocket, en vivo + prepartido** | Pinnacle |
## Cara a cara
| | The Odds API | PinnFeed |
|---|---|---|
| Casas | Muchas, incluida Pinnacle (región UE) | Solo Pinnacle |
| Entrega | Polling REST | Push por WebSocket + REST |
| Modelo de precio | Créditos por petición | Plan mensual fijo |
| Cuotas justas sin margen | Las calculas tú | Incluidas en cada mercado |
| Cuotas de cierre | No las nombra; snapshots históricos (desde 2020) en los planes de pago | Incluidas desde Builder |
| Plan gratis | 500 créditos/mes | 1.000 peticiones/día, 30 s de retraso |
## Cuándo gana The Odds API
- Necesitas **muchas casas** en una respuesta, de distintas regiones.
- Te basta con hacer polling cada minuto más o menos, para un modelo diario o una página de comparación de cuotas.
- Lo primero es el presupuesto: 30 $ al mes está por debajo de todos los feeds push que encontramos, y el plan gratis da margen para probar.
## Cuándo gana PinnFeed
- Reaccionas a **movimientos de precio**: alertas de steam y de caídas de cuotas ([guía de steam](/es/guides/dropping-odds-steam-detection)), modelos en directo o bots que tienen que ver el movimiento cuando ocurre.
- Quieres el **precio justo sin margen** de Pinnacle y el margen calculados en cada mercado.
- Mides el **valor de la línea de cierre** con `/v1/closing` ([guía de CLV](/es/guides/closing-line-value-clv-tracking)).
- Quieres un precio fijo sin créditos por petición.
## Usar las dos
Muchos desarrolladores mantienen The Odds API para los precios de las casas blandas y usan PinnFeed como referencia sharp: el precio blando de una y la cuota justa de Pinnacle de la otra. La [guía de value betting](/es/guides/value-betting-no-vig-fair-odds) muestra el código.
## Preguntas frecuentes
### ¿The Odds API tiene WebSocket o streaming?
No. Es una API REST; pides las cuotas y cada petición gasta créditos de tu plan.
### ¿PinnFeed cuesta menos que The Odds API?
No. El plan de 30 $ de The Odds API cuesta menos que PinnFeed Hobby (29 €) y que Builder, pero no tiene push a ningún precio. Para un WebSocket en tiempo real que transmite cuotas de Pinnacle en vivo y prepartido, a 9 de noviembre de 2026 PinnFeed Builder a 99 €/mes (IVA incluido) era el precio publicado más bajo con facturación mensual o anual que encontramos. Hay un WebSocket solo prepartido publicado por menos (oddssea Prematch, 59 $/mes).
### ¿The Odds API incluye Pinnacle?
Sí, en su región de casas de la UE.
### ¿Puedo migrar rápido?
Sí. PinnFeed devuelve eventos y mercados en JSON con precios decimales y americanos; la mayoría de integraciones solo necesitan una nueva función de descarga. La [guía de Python y Node](/es/guides/pinnacle-odds-websocket-python-node) tiene un cliente completo.
## Prueba Builder
Empieza la prueba de 3 días de Builder desde [precios](/es/pricing): se pide tarjeta y se cobra después del día 3 salvo que canceles. Compara más proveedores en [todas las alternativas](/es/alternatives), la [comparativa](/es/compare) y la [página del precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket); los detalles de integración están en la [documentación](/docs) (en inglés).
*Solo para mayores de 18 años. Las cuotas, las cuotas justas y el CLV son herramientas educativas y estadísticas, no consejos de apuestas. Nada de esto promete beneficios. Juega con responsabilidad.*
---
Source: https://pinnfeed.io/es/answers/vibe-coding-ev-scanner
# Vibe-codea un escáner +EV educativo
**Respuesta:** pide al agente que lea `/v1/odds`, use `fairProb` y marque donde **tu** probabilidad de modelo supera fairProb por un umbral. Etiquétalo educativo — sin tips ni beneficio garantizado.
## Prompt
```text
Using PINNFEED_KEY and https://pinnfeed.io/v1/odds?sport=basketball&main=true&limit=20,
build a CLI that joins outcomes' fairProb with a local model_prob JSON file.
Print rows where model_prob - fairProb >= 0.02. Header: educational 18+, not betting advice.
```
Relacionado: [API +EV](/es/answers/ev-betting-api-no-vig) · [fairProb](/es/answers/pinnacle-odds-implied-probability-api) · [vibe coding](/es/vibe-coding).
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿fairProb es no-vig?
Sí — campos `fair` / `fairProb` en outcomes.
### ¿Arb multi-book?
PinnFeed es solo Pinnacle.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/betting-odds-api
# API de cuotas de apuestas
**Respuesta:** una **API de cuotas** da a tu código precios de casas (y a menudo scores) por REST y a veces push. A **9 de noviembre de 2026**, elige en dos ejes: **poll vs push**, y **un book sharp vs muchos**. Lista fechada: [mejores APIs](/best-sports-odds-apis).
## Checklist
1. **¿Necesitas push?** The Odds API es **solo REST** ([detalle](/es/answers/the-odds-api-websocket)) desde **$30/mes**, con starter free 500 créditos — más barato en dólares absolutos, no es producto push.
2. **¿Un book o muchos?** Feeds solo Pinnacle (PinnFeed, oddssea) vs agregadores (odds-api.io, OpticOdds, OddsJam API).
3. **¿Live + prepartido o solo prepartido?** oddssea **Prematch $59/mes** es WS en tiempo real solo prepartido. Live + prepartido en factura mensual publicada: [claim](/es/cheapest-pinnacle-odds-websocket) (Builder €99/mes IVA incl. cuando corresponde a 9 nov 2026 en ese alcance).
4. **¿Precio publicado o cotización?** OpticOdds y OddsJam API son **cotización** en las páginas leídas.
## Dónde encaja PinnFeed
PinnFeed es **solo Pinnacle**: REST + WebSocket normalizado (Builder+), Free REST con 30 s de retraso.
```bash
export PINNFEED_KEY="ps_live_..."
curl -sS -H "x-api-key: $PINNFEED_KEY" \
"https://pinnfeed.io/v1/odds?sport=soccer&main=true&limit=5"
```
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup). Relacionado: [sports API](/pinnacle-odds-api).
## Preguntas frecuentes
### ¿Cuál es la mejor API?
No hay ganador universal — encaja push vs poll y cobertura de books.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/the-odds-api-websocket
# ¿The Odds API ofrece un WebSocket?
**Respuesta:** a **9 de noviembre de 2026**, The Odds API publica **solo polling REST** — sin WebSocket a ningún precio listado. PinnFeed Builder (€99/mes IVA incl. cuando corresponde) empuja cuotas Pinnacle **live + prepartido**. No afirmamos ser más baratos en dólares absolutos. Ver [polling vs push](/es/answers/the-odds-api-polling-vs-pinnfeed-push), [compare](/es/compare).
## Qué publica The Odds API (9 nov 2026)
- **Starter FREE:** 500 créditos/mes.
- **20K créditos:** **$30/mes**.
- Regiones US/UK/EU/AU; Pinnacle listado en EU.
- **Sin WebSocket/push.**
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Anunciaron un WS después?
No en la página leída el 9 nov 2026.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-sport-ids
# Ids y slugs de deportes PinnFeed
**Respuesta:** pasa `sport` como slug o id, separados por comas (`sport=soccer,tennis` o `sport=1,2`). Los mismos valores valen en el array `"sports"` del WebSocket. `GET /v1/sports` lista los 13 con conteos live/prepartido e `inPlan`.
| id | slug | id | slug |
|---|---|---|---|
| 1 | `soccer` | 8 | `mma` |
| 2 | `tennis` | 9 | `boxing` |
| 3 | `basketball` | 10 | `volleyball-handball` |
| 4 | `hockey` | 11 | `esports` |
| 5 | `american-football` | 12 | `golf` |
| 6 | `baseball` | 13 | `cricket` |
| 7 | `rugby` | | |
## Qué está en vivo ahora
```bash
curl -s https://pinnfeed.io/v1/sports -H "x-api-key: ps_live_your_key" \
| jq '.sports[] | select(.live > 0) | {slug, live, prematch, inPlan}'
```
## Límites por plan
| Plan | Deportes |
|---|---|
| Free | 2 a elegir (retraso 30 s) |
| Hobby | 3 a elegir |
| Builder, Pro | Los 13 |
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: [signup](/signup). Relacionado: [soccer](/es/answers/football-odds-feed-pinnacle), [tennis](/es/answers/pinnacle-tennis-odds-api), [NBA](/es/answers/pinnacle-nba-moneyline-odds-api), [MMA](/es/answers/pinnacle-mma-ufc-odds-api), [esports](/es/answers/pinnacle-esports-odds-api), [betting odds API](/es/answers/betting-odds-api).
## Preguntas frecuentes
### ¿Los 13 en Free?
Free: 2. Hobby: 3. Builder/Pro: los 13.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-alternate-lines-api
# API de líneas alternativas Pinnacle
**Respuesta:** en Builder+, pide `main=false` (REST) o `"main": false` (WebSocket) para recibir alternativas además de las main. Clave de estado = `id` de mercado (`eventId:key`). Free/Hobby son main-only.
## WebSocket
```bash
curl -s "https://pinnfeed.io/v1/odds?sport=basketball&market=spread,total&limit=20" \
-H "x-api-key: ps_live_your_key"
```
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba 3 días; tarjeta requerida. REST gratis: [signup](/signup). Relacionado: [corners](/es/answers/pinnacle-soccer-corners-odds-api), [specials](/es/answers/pinnacle-specials-props-odds-api).
## Preguntas frecuentes
### ¿Free incluye alternates?
No — main-only hasta Builder.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/opticodds-alternative
# Alternativa a OpticOdds para desarrolladores que quieren empezar hoy
**OpticOdds es la mejor opción si llevas una casa de apuestas, una mesa de trading o un medio que necesita más de 200 casas y un contrato negociado; su precio es solo bajo presupuesto. Si Pinnacle es tu mercado de referencia y quieres empezar sin una llamada comercial, PinnFeed Builder transmite cuotas de Pinnacle en vivo y prepartido por WebSocket por 99 €/mes (IVA incluido cuando corresponde), con una clave REST gratis para probar antes.**
Los datos de OpticOdds salen de [su página de inicio](https://opticodds.com/), su [página de precios](https://opticodds.com/pricing) y la [FAQ de su API](https://developer.opticodds.com/docs/api-faq), leídas el 9 de noviembre de 2026.
## Qué ofrece OpticOdds
- Cuotas en tiempo real de **más de 200 casas**, en vivo y prepartido, en un feed estandarizado (según su web).
- Streaming por **Server-Sent Events** y **RabbitMQ**. La FAQ de su API dice que no ofrece webhooks ni WebSockets.
- El precio es un formulario: tamaño de la empresa y necesidades, y después una conversación comercial. No publica precios.
## Tabla de precios, 9 de noviembre de 2026
| Opción | Precio publicado | Transporte push | Clave autoservicio |
|---|---|---|---|
| OpticOdds | Solo bajo presupuesto | SSE, RabbitMQ | No |
| PinnFeed Free | 0 € | Ninguno (REST, 30 s de retraso) | Sí |
| **PinnFeed Builder** | 99 €/mes (IVA incl. cuando corresponde) | WebSocket, en vivo + prepartido | Sí |
| PinnFeed Pro | 199 €/mes | WebSocket, 10 conexiones | Sí |
## Cara a cara
| | OpticOdds | PinnFeed |
|---|---|---|
| Cobertura | Más de 200 casas | Solo Pinnacle, 13 deportes |
| Streaming | SSE, RabbitMQ | WebSocket (snapshot y luego deltas) |
| Precio publicado | No, solo bajo presupuesto | Sí, desde 0 € |
| Clave autoservicio | No | Sí |
| Plan gratis | No | REST con 30 s de retraso |
| Cuotas justas sin margen | No comprobado (sin datos) | Incluidas en cada mercado |
## Cuándo gana OpticOdds
- Necesitas **cientos de casas** en un único feed, en vivo y prepartido.
- Necesitas un contrato, un SLA y una licencia comercial a la medida de tu producto.
- Tu sistema ya consume colas SSE o RabbitMQ.
## Cuándo gana PinnFeed
- Eres desarrollador, un equipo pequeño o un apostador que construye sus propias herramientas y quiere **empezar hoy**.
- Pinnacle es tu mercado de referencia: detección de steam, valor frente a casas blandas, seguimiento del CLV.
- Quieres un **precio mensual publicado** y un cliente WebSocket que puedas copiar de la [guía de Python y Node](/es/guides/pinnacle-odds-websocket-python-node).
## Preguntas frecuentes
### ¿Cuánto cuesta OpticOdds?
OpticOdds no publica precios. Su página de precios es un formulario de contacto, así que el coste depende de un presupuesto para tus deportes, productos y volumen.
### ¿OpticOdds tiene WebSocket?
No. La FAQ de su API dice que no ofrece webhooks ni WebSockets y que transmite las cuotas por Server-Sent Events. También ofrece RabbitMQ.
### ¿PinnFeed cubre tantas casas como OpticOdds?
No. PinnFeed solo lleva Pinnacle. Si necesitas muchas casas, OpticOdds u otro agregador de la [página de alternativas](/es/alternatives) encaja mejor.
## Prueba Builder
Empieza la prueba de 3 días de Builder desde [precios](/es/pricing): se pide tarjeta y se cobra después del día 3 salvo que canceles. Mira la [comparativa](/es/compare), la [página del precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket) y la [documentación](/docs) (en inglés).
*Solo para mayores de 18 años. Las cuotas, las cuotas justas y el CLV son herramientas educativas y estadísticas, no consejos de apuestas. Nada de esto promete beneficios. Juega con responsabilidad.*
---
Source: https://pinnfeed.io/es/answers/nfl-player-props-odds-api-pinnacle
# API de props de jugador NFL con precios Pinnacle
**Respuesta:** Pinnacle publica player props NFL como eventos **special** bajo `american-football`. En Builder/Pro, `/v1/odds?sport=american-football` los devuelve con `parentId` al partido. Free/Hobby son main-only.
## Ejemplo
```python
import os, requests
from collections import defaultdict
H = {"x-api-key": os.environ["PINNFEED_KEY"]} # ps_live_...
# 1) find the NFL league id once (college football is a different league)
ev = requests.get("https://pinnfeed.io/v1/events", headers=H, timeout=10,
params={"sport": "american-football", "q": "nfl", "limit": 200}).json()["events"]
print({(e["league"]["id"], e["league"]["name"]) for e in ev if e["league"]})
LEAGUE = int(input("NFL league id: "))
# 2) games and props together (no main=true: that would drop the specials)
data = requests.get("https://pinnfeed.io/v1/odds", headers=H, timeout=15,
params={"sport": "american-football", "league": LEAGUE, "limit": 500}).json()["events"]
games = {e["id"]: e for e in data if not e.get("special")}
props = defaultdict(list)
for e in data:
if e.get("special") and e.get("parentId") in games:
props[e["parentId"]].append(e)
for gid, items in props.items():
g = games[gid]
print(f'{g["away"]} @ {g["home"]} ({len(items)} props)')
for p in items[:10]:
for m in p["markets"]:
line = " | ".join(f'{o["name"]} {o["decimal"]} (fair {o.get("fair")})' for o in m["outcomes"])
print(" ", p["special"]["description"], m["type"], m.get("line"), line)
```
```json
{ "type": "subscribe", "sports": ["american-football"], "leagues": [LEAGUE_ID], "specials": true }
```
Relacionado: [specials](/es/answers/pinnacle-specials-props-odds-api), [NFL API](/es/answers/pinnacle-nfl-american-football-odds-api).
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Player props de la NBA (el mismo patrón)
Los player props de la NBA usan el mismo patrón de eventos `special` con `parentId`, en `sport=basketball`. Busca el id de la NBA con `q=nba`. No pases `main=true` si quieres los specials.
## Preguntas frecuentes
### ¿Free incluye props NFL?
No — Builder.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/oddsjam-alternative
# Alternativas a OddsJam para un feed de cuotas de Pinnacle
**La API de OddsJam encaja mejor si necesitas más de 100 casas, props de jugadores y datos de lesiones bajo un acuerdo comercial; no publica precios. Si lo que necesitas es el precio sharp de Pinnacle en tiempo real con un precio mensual publicado, PinnFeed Builder transmite cuotas de Pinnacle en vivo y prepartido por WebSocket por 99 €/mes (IVA incluido cuando corresponde).**
Esta página trata de la API de datos de OddsJam, no de su pantalla de cuotas para apostadores. Los datos salen de [oddsjam.com/odds-api](https://oddsjam.com/odds-api), leída el 9 de noviembre de 2026.
## Qué ofrece la API de OddsJam
- Cuotas prepartido y en directo de **más de 100 casas**: líneas principales, mercados alternativos, props de jugadores y futuros.
- Partes de lesiones, calendarios, plantillas, resultados de partidos y jugadores, enlaces directos y un corrector automático de apuestas.
- Una base de datos histórica de cuotas con líneas de apertura y de cierre.
- Respuestas en JSON o XML y un **push stream**; la página no dice qué protocolo usa.
- Sin precio en la página: pides que te contacten («Have us reach out»). La listamos como **solo bajo presupuesto**.
- Pinnacle no aparece en esa página. No pudimos verificar que la cubra: **sin datos**.
## Tabla de precios, 9 de noviembre de 2026
| Opción | Precio publicado | Push | Pinnacle |
|---|---|---|---|
| OddsJam API | Solo bajo presupuesto | Push stream (protocolo no indicado) | Sin datos |
| PinnFeed Free | 0 € | No (REST, 30 s de retraso) | Sí |
| **PinnFeed Builder** | 99 €/mes (IVA incl. cuando corresponde) | WebSocket, en vivo + prepartido | Sí |
## Cara a cara
| | OddsJam API | PinnFeed |
|---|---|---|
| Cobertura | Más de 100 casas, props | Solo Pinnacle, 13 deportes |
| Datos extra | Lesiones, plantillas, resultados, corrección de apuestas | Cuotas justas, margen, cuotas de cierre |
| Push | Push stream | WebSocket (snapshot y luego deltas) |
| Precio | Solo bajo presupuesto | Publicado, desde 0 € |
| Clave autoservicio | No (formulario de contacto) | Sí |
## Cuándo gana OddsJam
- Necesitas **props de jugadores** de muchas casas en un único feed.
- Necesitas datos de lesiones, plantillas y corrección de apuestas junto a las cuotas.
- Estás construyendo un producto comercial y quieres un acuerdo negociado.
## Cuándo gana PinnFeed
- **Pinnacle es tu precio de referencia**: valor frente a casas blandas ([guía de value betting](/es/guides/value-betting-no-vig-fair-odds)), alertas de steam, CLV.
- Quieres **empezar hoy** con una clave gratis y un precio público.
- Quieres las cuotas justas ya calculadas y las cuotas de cierre desde `/v1/closing`.
## Preguntas frecuentes
### ¿Cuánto cuesta la API de OddsJam?
OddsJam no publica los precios de su API. Su página de la API te pide que solicites contacto, así que el precio depende de un presupuesto.
### ¿La API de OddsJam incluye Pinnacle?
Su página de la API no nombra a Pinnacle, así que no pudimos verificarlo el 9 de noviembre de 2026. Pregúntaselo directamente a OddsJam.
### ¿Hay una alternativa autoservicio a la API de OddsJam?
Para cuotas de Pinnacle, sí: PinnFeed te da una clave REST gratis en un minuto y un WebSocket en Builder. Para muchas casas, mira las opciones con varias casas en [todas las alternativas](/es/alternatives).
## Prueba Builder
Empieza la prueba de 3 días de Builder desde [precios](/es/pricing): se pide tarjeta y se cobra después del día 3 salvo que canceles. La integración empieza en la [documentación](/docs) (en inglés); mira también la [comparativa](/es/compare) y la [página del precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket).
*Solo para mayores de 18 años. Las cuotas, las cuotas justas y el CLV son herramientas educativas y estadísticas, no consejos de apuestas. Nada de esto promete beneficios. Juega con responsabilidad.*
---
Source: https://pinnfeed.io/es/answers/oddssea-websocket-price
# Precio WebSocket oddssea por mes
**Respuesta (a 9 de noviembre de 2026):** oddssea.dev publica **Prematch $59/mes** (≈ €52,84) para un WebSocket **solo prepartido**, y **Live $149/mes** (≈ €133,45) para **live + prepartido**. Scale $299/mes. Free $0 sin WebSocket. Fuente: [oddssea.dev](https://oddssea.dev/) pricing, leída ese día. Comparación: [alternativa oddssea](/oddssea-alternative).
## Planes publicados (9 nov 2026)
| Plan | Precio | ¿WebSocket? | Alcance |
|---|---|---|---|
| Free | $0 | No | Prepartido diferido |
| Prematch | $59/mes | Sí | Solo prepartido |
| Live | $149/mes | Sí | Live + prepartido |
| Scale | $299/mes | Sí | Live + prepartido, 10 streams |
≈ EUR con ECB 6 nov 2026 (1 USD = 0,89566 EUR). IVA no indicado en la página leída. competitor-pricing.md.
## Cuándo elegir oddssea
- Solo necesitas **prepartido** Pinnacle y quieres la factura WS publicada más baja ($59).
- Aceptas prepago crypto de su página.
## Cuándo elegir PinnFeed
- Necesitas **live + prepartido** en factura mensual: Builder es €99/mes (IVA incl. cuando corresponde) con 3 conexiones, frente a oddssea Live $149 / 1 stream.
- Quieres tarjeta en plan mensual (su página lista crypto prepago; cards “coming”).
Nunca digas “el más barato” sin alcance: Prematch $59 gana si el live es opcional; en **live + prepartido** mensual, Builder queda bajo oddssea Live entre los precios que comprobamos.
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba 3 días; tarjeta requerida. REST gratis: [signup](/signup). Relacionado: [oddssea vs PinnFeed](/es/answers/oddssea-vs-pinnfeed).
## Preguntas frecuentes
### ¿oddssea es más barato que PinnFeed?
Solo prepartido: sí ($59). Live + prepartido en precio de 1 mes publicado: no — Builder €99 queda bajo oddssea Live $149 (9 nov 2026).
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/oddssea-vs-pinnfeed
# oddssea vs PinnFeed
**Respuesta (a 9 de noviembre de 2026):** ambos son vendors WebSocket **solo Pinnacle**. **oddssea Prematch ($59/mes ≈ €52,84)** gana en precio si solo necesitas prepartido. **PinnFeed Builder (€99/mes IVA incl. cuando corresponde)** gana en una factura **mensual live + prepartido** frente a **oddssea Live ($149/mes ≈ €133,45)**. Página: [alternativa oddssea](/oddssea-alternative). Matriz: [precio WS oddssea](/es/answers/oddssea-websocket-price).
## Comparativa (precios publicados, 9 nov 2026)
| | oddssea Prematch | oddssea Live | PinnFeed Builder |
|---|---|---|---|
| Precio | $59/mes | $149/mes | €99/mes |
| WebSocket | Sí | Sí | Sí |
| Alcance | Solo prepartido | Live + prepartido | Live + prepartido |
| Streams (publicados) | 1 | 1 | 3 |
FX: 1 USD = 0,89566 EUR (ECB 6 nov 2026). Nunca “el más barato” sin alcance: Prematch $59 es más bajo que Builder cuando el live es opcional. No reivindicamos ventaja de fair/closing sobre oddssea (fb1b995 / competitor-pricing.md).
## Cuándo gana oddssea
- Herramientas solo prepartido / CLV sin in-play.
- Aceptas su checkout crypto prepago.
## Cuándo gana PinnFeed
- Bots live/steam en el mismo socket que el prepartido.
- Facturación con tarjeta y 3 conexiones WS en Builder (oddssea lista 1 stream en Prematch y Live).
## CTA
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba 3 días; tarjeta requerida. REST gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Quién es más barato en live + prepartido?
En precios de 1 mes publicados: **Builder €99** vs oddssea Live **$149**.
### ¿Latencia?
No medida. Sin claim de latencia.
### ¿Contenido educativo para adultos?
Sí (18+).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-cancel-refund
# Cómo cancelar PinnFeed o pedir un reembolso
**Respuesta:** cancela cuando quieras desde el panel (Plan y facturación → Gestionar facturación → Cancelar). El plan sigue activo hasta el final del periodo que ya pagaste y no se renueva. Según la [política de reembolsos](/legal/refunds), si no estás conforme en los primeros 7 días de tu primer mes de pago, escribe a support@pinnfeed.io y reembolsamos ese primer pago. Los planes en cripto se pagan por adelantado y no se renuevan, así que no hay nada que cancelar.
## Cancelar un plan con tarjeta
1. Abre el panel y ve a **Plan y facturación**.
2. Pulsa **Gestionar facturación**: se abre el portal de facturación de tu suscripción.
3. Elige **Cancelar**. El acceso continúa hasta el final del mes, trimestre o año en curso; después la cuenta vuelve a Free.
Para no pagar nada durante la prueba de 3 días, cancela antes de que termine. Se pide tarjeta al pagar y se cobra automáticamente cuando acaba la prueba ([cómo funciona la prueba](/es/answers/pinnacle-odds-api-free-trial)).
## Reembolsos
| Caso | Lo que dice la política |
|---|---|
| Primeros 7 días de tu primer mes de pago | Escribe a support@pinnfeed.io; se reembolsa el primer pago |
| Más adelante en un periodo | En general no es reembolsable; cancela para detener la renovación |
| Plan en cripto (1, 3 o 12 meses) | Prepago, nunca se renueva solo; los reembolsos, si se conceden, se pagan en el mismo activo menos las comisiones de red |
| Caída nuestra de más de 24 horas seguidas | Se abonan los días afectados si lo pides |
| Consumidores de la UE | Se solicita acceso inmediato en la compra; el texto sobre el derecho de desistimiento está pendiente de revisión legal |
## Antes de cancelar
- ¿Solo quieres bajar el coste? La facturación anual de Builder es 990 € al año (82,50 €/mes): [facturación anual y trimestral](/es/answers/pinnfeed-annual-quarterly-billing).
- ¿Solo necesitas datos con retraso? Free sigue disponible sin tarjeta.
*Contenido educativo para mayores de 18 años. En España, apuesta solo con operadores con licencia de la DGOJ.*
Relacionado: [prueba gratis](/es/answers/pinnacle-odds-api-free-trial).
## Preguntas frecuentes
### ¿Pierdo el acceso en el momento de cancelar?
No. Conservas el plan de pago hasta el final del periodo que ya pagaste.
### ¿Puedo pedir un reembolso después de la primera semana?
Según la política de reembolsos, los pagos en general no son reembolsables después de los primeros 7 días del primer mes de pago. Cancelar detiene la siguiente renovación.
### ¿Dónde envío una solicitud de reembolso?
A support@pinnfeed.io, desde la dirección de correo de tu cuenta.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-commercial-use
# ¿Puedo usar datos de cuotas Pinnacle de forma comercial?
**Respuesta:** según la [política de uso aceptable](/legal/acceptable-use) de PinnFeed, puedes usar los datos dentro de tus propias aplicaciones, modelos, investigación, paneles y bots, **incluidos productos comerciales**. Puedes mostrar valores derivados en tu producto, como unos pocos precios, cuotas justas, ventajas o gráficos, siempre que no ofrezcas una exportación masiva de los datos subyacentes. Lo que requiere licencia **Enterprise** es la redistribución: revender, sublicenciar o volver a exponer el feed bruto o normalizado, o una parte sustancial, a terceros mediante una API, un archivo o un socket.
## Comprobación rápida
| Quieres | Plan self-serve | Enterprise |
|---|---|---|
| Operar tu propio bot o modelo de apuestas | Sí | — |
| Web de tipster de pago que muestra el precio y la cuota justa de cada pick | Sí (visualización derivada) | — |
| Alertas de Discord o Telegram con unos pocos precios por alerta | Sí (visualización derivada) | — |
| Panel SaaS para clientes con gráficos y ventajas | Sí, sin exportación masiva | — |
| Una API o una descarga CSV de las cuotas para tus clientes | No | Obligatorio |
| Compartir una clave entre varias empresas para saltarse límites | No | — |
Ejemplos por audiencia: [tipsters](/es/use-cases/tipsters), [servidores de Discord](/es/use-cases/discord-servers), [científicos de datos](/es/use-cases/data-scientists).
## Otras reglas de la política
- No compartir claves para saltarse límites de conexión, deportes o ritmo.
- No abusar: evadir límites, sondear o atacar el servicio.
- No usar los datos donde las apuestas o servicios relacionados sean ilegales, ni nada dirigido a menores.
- No presentar PinnFeed ni sus datos como un producto oficial de Pinnacle. PinnFeed es independiente.
Lee la [política de uso aceptable](/legal/acceptable-use) vigente antes de lanzar. Si el caso es dudoso, escribe a support@pinnfeed.io y describe el producto.
## Planes
Self-serve: Free, Hobby (29 €/mes), [Builder](/es/pricing#plan-builder) (99 €/mes) y Pro (199 €/mes). Enterprise: precio a medida, SLA, licencia comercial y exportaciones masivas. Prueba de 3 días en los planes de pago; se pide tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años. No es asesoramiento jurídico. En España, apuesta solo con operadores con licencia de la DGOJ.*
Relacionado: [MVP de startup con cuotas Pinnacle](/es/answers/pinnacle-odds-api-startup-mvp).
## Preguntas frecuentes
### ¿Pinnacle lo permite?
PinnFeed es independiente de Pinnacle y esta página describe solo la política de PinnFeed. No es asesoramiento jurídico sobre derechos de terceros.
### ¿Puedo mostrar una tabla completa de cuotas en mi web?
La política permite «unos pocos precios» como visualización derivada. Una página que reproduzca una parte sustancial del feed, o que permita descargarlo, entra en redistribución. Si estás entre los dos casos, pregunta antes de lanzar.
### ¿Necesito Enterprise para un panel interno de la empresa?
No: el uso interno es tu propia aplicación. Las claves siguen contando para los límites de tu plan.
---
Source: https://pinnfeed.io/es/answers/best-sports-betting-data-api
# ¿La mejor API de datos de apuestas? Un corte honesto
**Respuesta:** «la mejor API de datos de apuestas» mezcla dos trabajos. Una API de **datos deportivos** (estadísticas, marcadores, calendarios, lesiones) no es una API de **cuotas** (precios, líneas, cierres). **PinnFeed** es lo segundo, y solo de **Pinnacle**: REST más un WebSocket Builder en `/v1/stream`, con `fair` / `fairProb`, `margin`, `maxStake` y cierres con marca de tiempo. No es un feed de stats ni un panel de 100 casas. Si necesitas muchas casas blandas o el marcador oficial, elige un producto que documente ese trabajo.
## Dos trabajos, dos listas
| Trabajo | Qué buscar | ¿PinnFeed? |
|---|---|---|
| Stats, marcadores, calendarios | Una API de datos deportivos | No |
| Precios de muchas casas, por polling | Una API multi-casa | No — solo Pinnacle |
| Referencia sharp de Pinnacle, push en vivo + prepartido, cierres sin margen | Una API de cuotas Pinnacle | Sí, autoservicio |
Precios publicados que podemos citar de nuestra revisión del 9 de noviembre de 2026 ([comparativa](/es/compare)):
- **PinnFeed** — Gratis €0 (REST, 30 s de retraso); Hobby €29/mes (REST en tiempo real, sin WebSocket); [Builder](/es/pricing#plan-builder) €99/mes o €990/año ≈ €82,50/mes (WebSocket en vivo + prepartido, cierres). IVA incl. cuando corresponde Prueba de 3 días en planes de pago.
- **The Odds API** — desde 30 $/mes por 20.000 créditos; **sin WebSocket ni push a ningún precio publicado**. Multi-casa, con Pinnacle en la región UE.
- **SportsDataIO** Discovery Lab Odds — 99 $/mes o 599 $/año, **con un día de retraso**, uso personal. La «Leagues API» comercial en tiempo real es solo bajo presupuesto. Pinnacle no aparece en las páginas que leímos.
- **OpticOdds** — **solo presupuesto**; su FAQ describe SSE / RabbitMQ, no un WebSocket.
A 9 de noviembre de 2026, Builder era el precio publicado más bajo que encontramos para un WebSocket de cuotas Pinnacle **en vivo y prepartido** con facturación **mensual o anual** ([fuentes](/es/cheapest-pinnacle-odds-websocket)). Hay un WebSocket solo prepartido publicado por menos (oddssea Prematch, 59 $/mes). odds-api.io está a 118 €/mes sin impuestos en Solo + WebSocket mensual; su anual es 1.180 €/año ≈ 98,33 €/mes, aún por encima del anual de Builder (82,50 €/mes IVA incl.). No afirmamos menor latencia que ningún proveedor con nombre.
La mayoría de modelos que solo necesitan una **referencia sharp** y cierres sin margen con hora no necesitan 100 casas. Ese es el trabajo de PinnFeed. Recuento más amplio (en inglés): [best sports odds APIs 2026](/best-sports-odds-apis).
## Prueba
[Prueba Builder 3 días](/start/builder?src=es-answers-best-betting-data) (€99/mes, IVA incl. cuando corresponde) o [pide una clave REST retrasada gratis](/signup). Planes de pago: prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. [Precios](/es/pricing).
*Contenido educativo para mayores de 18 años (18+). Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿PinnFeed es una API de datos (stats)?
No. Transmite cuotas de Pinnacle. Combínala con una API de stats si tu modelo también necesita marcadores o lesiones.
### ¿The Odds API es más barata?
En dólares absolutos, su plan de 20.000 créditos es 30 $/mes (revisión del 9 de noviembre de 2026) y no tiene push. PinnFeed no es más barato que ese poller; Builder es el WebSocket **en vivo + prepartido** de Pinnacle con el precio publicado más bajo que encontramos en facturación mensual o anual.
### ¿SportsDataIO ya cubre esto?
Su plan publicado Discovery Lab Odds a 99 $/mes es del día siguiente, uso personal (9 de noviembre de 2026). No es un WebSocket de Pinnacle en tiempo real con tarifa pública.
---
Source: https://pinnfeed.io/es/answers/sportsbook-api-integration-pinnacle
# Integración de una API de cuotas con precios Pinnacle
**Respuesta:** Pinnacle cerró su API pública para el público general el **23 de julio de 2025** ([README oficial](https://github.com/pinnacleapi/pinnacleapi-documentation), abierta el 10 de noviembre de 2026): el acceso es ahora a medida y se exige una cuenta Pinnacle con saldo. **PinnFeed** es una integración aparte y autoservicio: crea una clave (`ps_live_...`), llama al REST en `https://pinnfeed.io/v1` y —en Builder— abre `wss://pinnfeed.io/v1/stream`. **No** necesitas cuenta en Pinnacle. El feed es solo Pinnacle, no un panel multi-casa.
## Conexión en cinco pasos
1. [Obtén una clave REST retrasada gratis](/signup) (sin tarjeta) o empieza una [prueba Builder de 3 días](/start/builder?src=es-answers-sportsbook-integration).
2. Envía `x-api-key: ps_live_...` (o `Authorization: Bearer ps_live_...`). Docs: [autenticación](/es/answers/pinnacle-odds-api-authentication).
3. Snapshot: `GET /v1/sports`, `GET /v1/events`, `GET /v1/odds`. Contrato: [OpenAPI](/openapi.json), [REST](/docs/rest).
4. Si necesitas **push** en vivo + prepartido, suscríbete en `/v1/stream` (Builder €99/mes). Las claves Free y Hobby reciben `403 plan_lacks_ws`. Protocolo: [snapshot vs delta](/es/answers/pinnacle-odds-websocket-snapshot-delta).
5. Para backtests y CLV, toma **cierres sin margen con marca de tiempo** de `GET /v1/closing` (Builder+) en lugar de entrenar con un precio que tu modelo no habría visto.
```bash
curl -sS -H "x-api-key: ps_live_..." \
"https://pinnfeed.io/v1/odds?sport=soccer&main=true&limit=20"
```
## Qué plan para qué trabajo
| Trabajo | Plan |
|---|---|
| Evaluar el esquema | Gratis €0 — REST, 30 s de retraso, 2 deportes |
| REST en tiempo real, sin push | Hobby €29/mes — 3 deportes |
| WebSocket en vivo + prepartido, 13 deportes, props, cierres | [Builder](/es/pricing#plan-builder) €99/mes (o €990/año ≈ €82,50/mes) |
| Más conexiones, frames en bruto | Pro €199/mes |
Un cliente que hace polling solo ve el cambio en la petición siguiente, así que de media llega tarde la mitad de un intervalo, más el viaje de ida y vuelta. Es aritmética, no un test de latencia frente a ningún proveedor. Builder envía los deltas cuando llegan a nuestro servidor.
## Alcance honesto
- **Solo datos de cuotas** — no puedes colocar apuestas a través de PinnFeed.
- **Una casa** — Pinnacle. Para un poller multi-casa documentado como The Odds API (desde 30 $/mes por 20.000 créditos; sin WebSocket a ningún precio publicado, revisión del 9 de noviembre de 2026), ver [The Odds API vs PinnFeed](/es/the-odds-api-alternative).
- No redistribuyas el feed en bruto salvo con licencia Enterprise ([Uso aceptable](/legal/acceptable-use)).
Relacionado: [API FanDuel vs Pinnacle](/answers/sportsbook-api-integration-pinnacle) (EN), [cuotas dinámicas](/answers/dynamic-odds-api-pinnacle) (EN), [cierres históricos NFL](/answers/historical-betting-odds-pinnacle-closing).
## Prueba
[Prueba Builder 3 días](/start/builder?src=es-answers-sportsbook-integration) (€99/mes, IVA incl. cuando corresponde) o [pide una clave gratis](/signup). Planes de pago: prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. [Precios](/es/pricing).
*Contenido educativo para mayores de 18 años (18+). Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Otras APIs de casas frente a un feed de Pinnacle
PinnFeed no lista las cuotas de estas casas. Las notas salen de las páginas de comparación que se fusionan aquí.
| Casa | Lo que documentaba la página |
|---|---|
| Fanduel | No encontramos una API de cuotas FanDuel oficial de autoservicio ni una tarifa que podamos citar (10 de noviembre de 2026). FanDuel es una casa de apuestas. Esta página no inventa una. |
Comparativas que se mantienen aparte: [Fanatics](/es/answers/fanatics-api-vs-pinnacle-odds), [BetMGM](/es/answers/betmgm-api-vs-pinnacle-odds).
## Preguntas frecuentes
### ¿Sigue pública la API oficial de Pinnacle?
No. La documentación oficial indica que el acceso para el público general está cerrado desde el 23 de julio de 2025, con acceso a medida y cuenta con saldo ([README](https://github.com/pinnacleapi/pinnacleapi-documentation), abierta el 10 de noviembre de 2026). PinnFeed es un feed independiente y autoservicio.
### ¿Necesito el WebSocket para hacer backtesting?
No para los cierres históricos. El `/v1/closing` de Builder devuelve el cierre sin margen con el momento del evento. Usa el WebSocket cuando necesites deltas en vivo. Hobby (€29/mes) es solo REST en tiempo real, sin stream ni archivo de cierres.
### ¿Puedo colocar apuestas con esta integración?
No — solo datos de cuotas.
---
Source: https://pinnfeed.io/es/answers/arbitrage-betting-bot-pinnacle
# Bot de arbitraje sobre cuotas Pinnacle (educativo)
**Respuesta:** un «bot de arb» referenciado a Pinnacle es un **programa de comparación**, no una máquina de apuestas seguras. PinnFeed aporta precios de **Pinnacle** (y `fair` / `fairProb`) por REST o el WebSocket Builder. Tú traes los precios de la otra casa desde una fuente que los documente. Marca cuando el decimal de la otra casa supera el `fair` de Pinnacle lo bastante como para cubrir ambos lados tras comisiones. PinnFeed es **solo datos de cuotas** — no coloca apuestas. Esta página es educativa para adultos (18+). No hay beneficios garantizados ni receta de apuesta automática.
## Arquitectura (solo datos)
1. Suscríbete a los deltas de Pinnacle en `wss://pinnfeed.io/v1/stream` (Builder) o haz polling de `/v1/odds`.
2. Ingesta la otra casa desde *su* API documentada o tu propia captura — no desde PinnFeed.
3. Empareja eventos tú mismo (liga, equipos, hora, mercado, línea). Los ids de PinnFeed son ids de Pinnacle.
4. Compara `other_decimal` con el `fair` de Pinnacle. Ignora mercados finos: un suelo de `maxStake` en torno a **100** es un filtro habitual, no un número mágico.
5. Alerta (log, Telegram, Discord). La ejecución, si la hay, ocurre en la web de la casa y está sujeta a la ley local, límites y riesgo de cuenta. No automatices la colocación de apuestas con este patrón, y no redistribuyas el feed en bruto de PinnFeed ([Uso aceptable](/legal/acceptable-use)).
```python
# Pantalla educativa — no coloca apuestas.
FLOOR = 100 # filtro maxStake, en torno a 100
def flag(pinnacle_fair, other_decimal, max_stake):
if not pinnacle_fair or (max_stake or 0) < FLOOR:
return False
return other_decimal > pinnacle_fair # añade tu propio margen por comisiones
```
Relacionado: [arbitraje vs value](/es/answers/arbitrage-vs-value-betting-api), [calculadora de arbitraje](/es/answers/arbitrage-calculator-pinnacle-odds), [pantalla fairProb EV](/es/answers/pinnacle-odds-python-fairprob-ev-screen), [guía del bot de Discord](/es/guides/discord-picks-bot).
## Por qué Pinnacle es la referencia, no el lado «blando»
Las casas blandas se mueven. Pinnacle es la línea sharp que muchos modelos usan como referencia. Un «arb» frente a un precio blando caducado o limitado suele desaparecer antes de poder tomar ambos lados. Usa `fair`, `margin` y `maxStake`; no trates una fila marcada como un beneficio cerrado.
## Prueba
[Prueba Builder 3 días](/start/builder?src=es-answers-arb-bot) (€99/mes, IVA incl. cuando corresponde) para push en vivo + prepartido, o [pide una clave REST retrasada gratis](/signup). Planes de pago: prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. [Precios](/es/pricing).
*Contenido educativo para mayores de 18 años (18+). Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ. No hay apuestas seguras.*
## Preguntas frecuentes
### ¿PinnFeed coloca las apuestas?
No. Es una API de cuotas. Cualquier apuesta es entre tú y una casa con licencia, donde eso sea legal.
### ¿Es un sistema de apuestas seguras?
No. Las diferencias entre casas pueden estar caducadas, limitadas o retiradas. La página es una arquitectura de datos, no una promesa de beneficio.
### ¿Necesito el WebSocket?
Para comparar en vivo, el push es lo habitual porque un poller solo ve el cambio en la siguiente petición (de media, medio intervalo de retraso: aritmética, no un test entre proveedores). Builder (€99/mes) es el plan WebSocket.
---
Source: https://pinnfeed.io/es/answers/historical-player-props-odds-pinnacle
# Histórico de player props (alcance Pinnacle)
**Respuesta:** PinnFeed **no** es un almacén histórico multi-casa de props. Las **player props de Pinnacle** en vivo y prepartido llegan como eventos `special` en Builder (`/v1/odds`, sin `main=true`), enlazados al partido por `parentId`. **No cuentes con `GET /v1/closing` para el histórico de un prop** — la captura de cierres está pensada en torno a los partidos. Si necesitas el cierre de un prop o una serie temporal, registra tú el precio del special poco antes del inicio. No afirmamos una ventaja de historial de cierres frente a otros feeds de Pinnacle.
## Qué puedes pedir hoy
Props en vivo / prepartido (Builder y Pro; Free y Hobby se quedan en mercados principales):
```bash
curl -sS -H "x-api-key: ps_live_..." \
"https://pinnfeed.io/v1/odds?sport=basketball&limit=100"
```
Quédate con las filas que tengan `special` y agrupa por `parentId`. El mismo patrón vale para `american-football`, `baseball` y otros deportes en los que Pinnacle publique props. Qué props existen lo decide por completo la lista de Pinnacle para ese partido — una lista vacía es normal. Detalle: [props NBA](/es/answers/nfl-player-props-odds-api-pinnacle), [props NFL](/es/answers/nfl-player-props-odds-api-pinnacle), [specials y props](/es/answers/pinnacle-specials-props-odds-api).
## Qué no debes esperar
- Un archivo multi-año y multi-casa de props (eso es otra categoría de producto)
- Una fila de prop garantizada en `/v1/closing?date=YYYY-MM-DD`
- Histórico de apertura salvo que hayas guardado los ticks prepartido
- Una ventaja no documentada frente a otros proveedores que también envían cierres de Pinnacle
Para el histórico a nivel de partido: [histórico NFL](/answers/historical-betting-odds-pinnacle-closing), [histórico NBA](/answers/historical-betting-odds-pinnacle-closing) y [histórico MLB](/answers/historical-mlb-odds-pinnacle) (EN).
## Registra tu propio histórico de props
Suscríbete en `wss://pinnfeed.io/v1/stream` (Builder) o haz polling de `/v1/odds`, y guarda `event.id`, `parentId`, `special.description`, el `decimal` / `fair` del outcome, `maxStake` y una marca de tiempo. Un suelo de `maxStake` en torno a 100 sirve para ignorar límites diminutos. Ese log es la serie histórica de props que sí puedes backtestear.
## Prueba
[Prueba Builder 3 días](/start/builder?src=es-answers-historical-props) (€99/mes, IVA incl. cuando corresponde) para todos los mercados, el WebSocket y los cierres a nivel de partido. Planes de pago: prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. [Clave REST retrasada gratis](/signup). [Precios](/es/pricing).
*Contenido educativo para mayores de 18 años (18+). Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Las player props están en el archivo de cierres?
No cuentes con ello. La captura de cierres está pensada en torno a los partidos. Para CLV de un prop, registra el special tú poco antes del inicio.
### ¿Es como el histórico de props de The Odds API?
No. Esa categoría suele ser ficheros históricos multi-casa. PinnFeed archiva cierres de partidos de Pinnacle y sirve specials en vivo — no es un almacén multi-casa de props.
### ¿Qué plan necesito?
Las props requieren [Builder](/es/pricing#plan-builder) (€99/mes) o Pro. Free y Hobby se quedan en los mercados principales.
---
Source: https://pinnfeed.io/es/answers/machine-learning-pinnacle-closing-odds
# Machine learning con cierres de Pinnacle
**Respuesta:** trata el **cierre sin margen de Pinnacle, con marca de tiempo**, como etiqueta o como feature, no como un vistazo al resultado. En Builder, `GET /v1/closing?date=YYYY-MM-DD` devuelve el decimal de cierre, `fair` y `fairProb` de cada mercado cuando el evento pasa a vivo. Une esas filas a tus propios snapshots **solo en instantes que tu modelo ya habría tenido**. Entrenar con el resultado del partido, o con un cierre que tu bot no habría visto, es look-ahead. Esto es educativo (18+). No prometemos un edge ni una ventaja de historial de cierres frente a otros feeds de Pinnacle.
## Un patrón seguro
```python
import os, requests
KEY = os.environ["PINNFEED_KEY"] # ps_live_...
r = requests.get(
"https://pinnfeed.io/v1/closing",
params={"date": "2026-11-03", "sport": "american-football", "main": "true", "limit": 100},
headers={"x-api-key": KEY}, timeout=10)
# Cada fila es el cierre Pinnacle de ese día UTC — usa fairProb como etiqueta
# y quédate solo con features cuya marca de tiempo sea estrictamente anterior al cierre.
for ev in r.json().get("events", []):
for m in ev.get("markets", []):
print(ev.get("id"), m.get("key"), m.get("margin"), [
(o.get("name"), o.get("fairProb")) for o in m.get("outcomes", [])])
```
Guarda tus propios ticks prepartido de `/v1/odds` o `wss://pinnfeed.io/v1/stream` si necesitas una serie temporal. El archivo de cierres es un **snapshot por día UTC**, no un histórico tick a tick, y crece desde el día en que empezó — consulta [docs](/docs/rest) para la fecha más temprana. Relacionado: [backtesting contra cierres](/es/answers/pinnacle-odds-api-backtesting-clv), [histórico NFL](/answers/historical-betting-odds-pinnacle-closing), [histórico MLB](/answers/historical-mlb-odds-pinnacle) (EN), [fairProb implícita](/es/answers/pinnacle-odds-implied-probability-api).
## Qué no es esto
- Un modelo de beneficio garantizado, un tipster o apuesta automática
- Un almacén de features multi-casa (PinnFeed es solo Pinnacle)
- La afirmación de que nuestro historial de cierres es más profundo o mejor que el de otros revendedores de Pinnacle
Los endpoints de cierre requieren [Builder](/es/pricing#plan-builder) (€99/mes, o €990/año ≈ €82,50/mes) o Pro. Hobby (€29/mes) es solo REST en tiempo real y no incluye el archivo de cierres.
## Prueba
[Prueba Builder 3 días](/start/builder?src=es-answers-ml-closing) (€99/mes, IVA incl. cuando corresponde) o [pide una clave REST retrasada gratis](/signup) para inspeccionar el esquema en vivo. Planes de pago: prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. [Precios](/es/pricing).
*Contenido educativo para mayores de 18 años (18+). Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Puedo entrenar con el resultado del partido?
Puedes predecir resultados, pero si una feature incluye el cierre o el desenlace en un momento que el modelo no habría tenido, el backtest está amañado. Pon marca de tiempo a cada precio y corta las features antes del cierre.
### ¿La API oficial de Pinnacle sirve para esto?
La documentación oficial indica que el acceso público está cerrado desde el 23 de julio de 2025 y que cualquier acceso restante exige una cuenta con saldo ([README](https://github.com/pinnacleapi/pinnacleapi-documentation), abierta el 10 de noviembre de 2026). PinnFeed es autoservicio y no necesita cuenta en Pinnacle.
### ¿Qué plan incluye `/v1/closing`?
[Builder](/es/pricing#plan-builder) (€99/mes) o Pro.
---
Source: https://pinnfeed.io/es/sportsdataio-alternative
# Alternativa a SportsDataIO para cuotas de Pinnacle en vivo
**El plan autoservicio Discovery Lab Odds de SportsDataIO cuesta 99 $/mes (≈ 88,67 €), pero sus datos llegan con un día de retraso y la licencia es para uso personal; las cuotas en tiempo real para uso comercial requieren un acuerdo con ventas. Si necesitas cuotas de Pinnacle en tiempo real con un precio mensual publicado, PinnFeed Builder transmite cuotas en vivo y prepartido por WebSocket por 99 €/mes (IVA incluido cuando corresponde). Si necesitas datos de ligas de EE. UU. junto a las cuotas, SportsDataIO es el producto más amplio.**
Los datos de SportsDataIO salen de [su página para desarrolladores](https://sportsdata.io/developers), su [página de la API de cuotas](https://sportsdata.io/live-odds-api) y los [planes Discovery Lab](https://discoverylab.sportsdata.io/personal-use-apis/nfl), leídas el 9 de noviembre de 2026. Las cifras en euros usan el tipo del BCE del 6 de noviembre de 2026 (1 USD = 0,89566 €).
## Qué ofrece SportsDataIO
- **Free Trial**: datos codificados con la estructura de producción, los 13 deportes, límite diario pequeño.
- **Discovery Lab** (autoservicio, uso personal): datos reales del día anterior, 8 deportes (NFL, NBA, MLB, NHL, fútbol americano universitario, baloncesto universitario, golf y NASCAR), de 100 a 1.000 llamadas al día según el nivel, sin licencia para redistribución comercial. Plan gratis con los datos de la temporada pasada.
- **Leagues API** (contacto con ventas): datos en tiempo real, 13 deportes, cuotas de más de 10 casas. Precio según el caso de uso.
- Entrega documentada como REST (JSON y XML). No encontramos un transporte push para las cuotas en las páginas que leímos: **sin datos**.
- Pinnacle no aparece en las páginas que leímos: **sin datos**.
## Tabla de precios, 9 de noviembre de 2026
| Opción | Frescura de los datos | Uso | Mensual | ≈ €/mes |
|---|---|---|---|---|
| SportsDataIO Discovery Lab Odds | Día anterior | Personal | 99 $ (o 599 $/año) | ≈ 88,67 € (≈ 44,71 € en anual) |
| SportsDataIO Discovery Lab Fantasy + Odds | Día anterior | Personal | 149 $ (o 899 $/año) | ≈ 133,45 € |
| SportsDataIO Leagues API | Tiempo real | Comercial | Solo bajo presupuesto | Solo bajo presupuesto |
| PinnFeed Hobby | REST en tiempo real | Cualquiera | 29 € | 29 € |
| **PinnFeed Builder** | WebSocket en tiempo real, en vivo + prepartido | Cualquiera | 99 € (IVA incl. cuando corresponde) | 99 € |
## Cara a cara
| | SportsDataIO | PinnFeed |
|---|---|---|
| Enfoque | Datos de ligas de EE. UU. y cuotas | Solo cuotas de Pinnacle |
| Fuentes de cuotas | Más de 10 casas en Leagues API | Pinnacle |
| Cuotas en tiempo real autoservicio | No (Discovery Lab es del día anterior) | Sí |
| Push | No indicado (sin datos) | WebSocket |
| Fútbol y tenis | Fútbol en Leagues API; ninguno en Discovery Lab | Incluidos entre los 13 deportes |
| Cuotas justas y de cierre | Líneas de apertura y cierre en su API de cuotas | Cuotas justas en cada mercado, cuotas de cierre desde Builder |
## Cuándo gana SportsDataIO
- Necesitas **datos de ligas de EE. UU.** a fondo junto a las cuotas.
- Eres aficionado y analizas la temporada pasada o las líneas de ayer: Discovery Lab Odds cuesta 599 $ al año.
- Necesitas una licencia comercial con SLA de un proveedor de datos de EE. UU.
## Cuándo gana PinnFeed
- Necesitas cuotas **en tiempo real** sin pasar por ventas.
- Pinnacle es tu precio de referencia para valor, steam o CLV ([guía de steam](/es/guides/dropping-odds-steam-detection)).
- Necesitas fútbol, tenis y otros deportes no estadounidenses en el mismo plan autoservicio.
## Preguntas frecuentes
### ¿Cuánto cuesta SportsDataIO?
Su plan autoservicio Discovery Lab Odds cuesta 99 $/mes o 599 $/año, y Fantasy + Odds 149 $/mes o 899 $/año, a 9 de noviembre de 2026. Esos datos son del día anterior y para uso personal. Los planes comerciales en tiempo real son solo bajo presupuesto.
### ¿SportsDataIO incluye cuotas de Pinnacle?
Las páginas que leímos el 9 de noviembre de 2026 no nombran a Pinnacle, así que no pudimos verificarlo.
### ¿Puedo usar Discovery Lab de SportsDataIO en una app comercial?
No. SportsDataIO indica que Discovery Lab no tiene licencia para redistribución comercial.
## Prueba Builder
Empieza la prueba de 3 días de Builder desde [precios](/es/pricing): se pide tarjeta y se cobra después del día 3 salvo que canceles. Mira la [documentación](/docs) (en inglés), [todas las alternativas](/es/alternatives), la [comparativa](/es/compare) y la [página del precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket).
*Solo para mayores de 18 años. Las cuotas, las cuotas justas y el CLV son herramientas educativas y estadísticas, no consejos de apuestas. Nada de esto promete beneficios. Juega con responsabilidad.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-margin-calculator
# Calculadora de margen Pinnacle a través de la API
**Respuesta:** no hace falta un «producto calculadora» aparte. Cada mercado de PinnFeed ya lleva `margin`: el overround, `sum(1/decimal) - 1`. Ejemplo trabajado: precios 2,10, 3,45 y 3,60 dan `1/2.10 + 1/3.45 + 1/3.60 - 1 ≈ 0,0438` (4,38 %). Compáralo con el campo `margin` de `/v1/odds` o del WebSocket. La misma matemática proporcional da `fair` y `fairProb`. Es el método multiplicativo habitual, no una ventaja exclusiva de PinnFeed.
## Ejemplo trabajado
```python
def margin(decimals):
return sum(1 / d for d in decimals) - 1
# Moneyline ilustrativo, no una cuota en vivo
prices = [2.10, 3.45, 3.60]
print(round(margin(prices), 5)) # 0.04382 — compáralo con market["margin"]
# fairProb = (1/decimal) / (1 + margin); fair = 1 / fairProb
```
PinnFeed redondea `margin` a 5 decimales, `fairProb` a 5 y `fair` a 4. Si un outcome no tiene precio válido, se omite `margin` en lugar de inventarlo. Referencia: [margen / overround API](/es/answers/pinnacle-margin-overround-api), [cuotas justas no-vig](/es/answers/no-vig-fair-odds-api).
## Sácale de la API
```bash
curl -sS -H "x-api-key: ps_live_..." \
"https://pinnfeed.io/v1/odds?sport=soccer&market=moneyline&main=true&limit=20"
```
Luego lee `markets[].margin` y el `decimal` de cada outcome. Combínalo con `maxStake` (un suelo en torno a 100 es un filtro habitual de líneas finas): [max stake](/es/answers/pinnacle-max-stake-api). `margin`, `fair` y `fairProb` están en todos los planes, incluido el Gratis. El WebSocket en vivo y el archivo de cierres necesitan [Builder](/es/pricing#plan-builder) (€99/mes, o €990/año ≈ €82,50/mes).
Una guía de la misma fórmula en hojas: [calculadora no-vig en Excel / Sheets](/es/answers/no-vig-calculator-excel-sheets).
## Prueba
[Pide una clave REST retrasada gratis](/signup) (sin tarjeta) para ver `margin` en snapshots, o [empieza una prueba Builder de 3 días](/start/builder?src=es-answers-margin-calc) (€99/mes, IVA incl. cuando corresponde) para push y cierres. Planes de pago: prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. [Precios](/es/pricing).
*Contenido educativo para mayores de 18 años (18+). Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Es distinto del vig o del juice?
No. Overround, vig y juice describen el mismo margen incorporado. PinnFeed lo informa como fracción (0,025 = 2,5 %).
### ¿Afirmáis una calculadora mejor que la de otros feeds de Pinnacle?
No. La fórmula es la estándar. Exponemos `margin` en cada mercado para que lo compruebes; no reivindicamos un método único.
### ¿Qué plan necesito para ver el margen?
Cualquier plan, incluido el Gratis. Builder añade el WebSocket y el historial de cierres.
---
Source: https://pinnfeed.io/es/answers/fanatics-api-vs-pinnacle-odds
# API Fanatics frente a un feed de cuotas Pinnacle
**Respuesta:** **Fanatics Sportsbook es una casa de apuestas**, no un proveedor de API de cuotas pública que podamos cotizar. El 10 de noviembre de 2026 no encontramos una API de cuotas oficial de autoservicio de Fanatics Sportsbook ni una tarifa publicada. Fanatics sí publica APIs de **identidad / ecosistema**; esas no son cuotas de sportsbook. **PinnFeed** no incluye Fanatics. Transmite **Pinnacle** por REST y un WebSocket Builder (`/v1/stream`). Si necesitas precios de Fanatics, usa una fuente que los documente.
## Qué está (y no está) documentado
| Superficie | Lo que podemos decir (10 nov. 2026) |
|---|---|
| API de cuotas de Fanatics Sportsbook | No hay una tarifa ni un portal de desarrolladores de autoservicio oficial que podamos citar. |
| APIs de identidad / ecosistema de Fanatics | Existen como producto aparte (login y pasarela). No son un feed de cuotas, y PinnFeed no las usa. |
| Cobertura de PinnFeed | Solo Pinnacle. Sin casas Fanatics, promociones ni colocación de apuestas. |
No inventamos endpoints de cuotas, tarifas, latencia ni cobertura por estado de Fanatics. Los agregadores de terceros que dicen llevar Fanatics quedan fuera de esta página.
## Cuándo encaja PinnFeed
- Líneas **sharp de Pinnacle**, cuotas justas y cierres, en push con [Builder](/es/pricing#plan-builder) (€99/mes, o €990/año ≈ €82,50/mes)
- Comparar un precio Fanatics que ya tengas con el `fair` de Pinnacle
- Clave de autoservicio: `x-api-key: ps_live_...` en `/v1/odds` o `/v1/stream`
## Cuándo no
- Necesitas cuotas nativas de Fanatics, promociones o colocar apuestas
- Necesitas la plataforma de identidad de Fanatics — eso no es PinnFeed
Relacionado: [API FanDuel vs cuotas Pinnacle](/es/answers/sportsbook-api-integration-pinnacle), [API DraftKings vs feed Pinnacle](/es/answers/sportsbook-api-integration-pinnacle), [multi-casa vs solo Pinnacle](/es/answers/multi-book-odds-api-vs-pinnacle-only), [integración de API de cuotas](/es/answers/sportsbook-api-integration-pinnacle), [API BetMGM vs cuotas Pinnacle](/es/answers/betmgm-api-vs-pinnacle-odds).
## Prueba
[Prueba Builder 3 días](/start/builder?src=es-answers-fanatics-api) o [pide una clave REST retrasada gratis](/signup). Builder cuesta €99/mes (IVA incl. cuando corresponde). Planes de pago: prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. [Precios](/es/pricing).
*Contenido educativo para mayores de 18 años (18+). Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿PinnFeed lista cuotas de Fanatics?
No — solo Pinnacle.
### ¿La API EcoSystem de Fanatics es una API de cuotas?
La documentación pública de identidad / ecosistema de Fanatics que vimos cubre autenticación y una pasarela, no un feed de cuotas de sportsbook que podamos citar. PinnFeed no se integra con ella.
### ¿Puedo colocar apuestas Fanatics a través de PinnFeed?
No. PinnFeed es solo datos de cuotas.
---
Source: https://pinnfeed.io/es/answers/historical-mlb-odds-pinnacle
# Histórico de cuotas MLB vía cierres de Pinnacle
**Respuesta:** PinnFeed guarda **líneas de cierre de Pinnacle**, no un almacén MLB multi-año y multi-casa. Para béisbol usa `sport=baseball` en `GET /v1/closing?date=YYYY-MM-DD` (Builder+). La MLB comparte ese slug con otras ligas de béisbol — filtra por `league.name`. Es un snapshot de cierre por día UTC, no un histórico tick a tick, y no afirmamos una ventaja de historial de cierres frente a otros feeds de Pinnacle.
## Ejemplo
```bash
curl -sS -H "x-api-key: ps_live_..." \
"https://pinnfeed.io/v1/closing?date=2026-11-03&sport=baseball&main=true&limit=100"
```
En vivo y prepartido: `/v1/odds?sport=baseball`. Hub del deporte: [API de cuotas béisbol / MLB](/es/answers/pinnacle-baseball-mlb-odds-api). Flujo de CLV: [tracker de closing-line value MLB](/es/answers/mlb-closing-line-value-tracker-api). Hermanas: [histórico NFL](/answers/historical-betting-odds-pinnacle-closing), [histórico NBA](/answers/historical-betting-odds-pinnacle-closing), [cierres históricos](/answers/historical-betting-odds-pinnacle-closing) (EN).
Cada fila de cierre usa los mismos ids de evento y mercado que el esquema en vivo, con decimal / americano más `fair` y `fairProb` cuando el mercado se puede desviggear. El archivo crece desde el día en que empezó — consulta la documentación para la fecha más temprana, no asumas un backfill desde 2020.
## Lo que no obtienes
- Líneas de apertura, salvo que hayas guardado tú los ticks prepartido
- Histórico MLB multi-casa
- Movimiento tick a tick (usa el WebSocket o tu propio log)
- Un cierre de props garantizado — ver [histórico de player props](/es/answers/historical-player-props-odds-pinnacle)
## Prueba
[Prueba Builder 3 días](/start/builder?src=es-answers-historical-mlb) (€99/mes, IVA incl. cuando corresponde; anual €990/año ≈ €82,50/mes) para el historial de cierres y el WebSocket en vivo. Planes de pago: prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. [Clave REST retrasada gratis](/signup). [Precios](/es/pricing).
*Contenido educativo para mayores de 18 años (18+). Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Hasta cuándo llega el archivo de la MLB?
Desde el día en que empezó el archivo de cierres; crece a diario. Consulta [docs](/docs/rest) para la fecha más temprana. Aquí no inventamos una fecha de inicio.
### ¿Es lo mismo que el histórico de The Odds API?
No — ese producto son snapshots multi-casa. PinnFeed archiva los cierres de Pinnacle cuando los eventos pasan a vivo.
### ¿Qué plan?
Los endpoints de cierre necesitan [Builder](/es/pricing#plan-builder) (€99/mes) o Pro.
---
Source: https://pinnfeed.io/es/answers/dynamic-odds-api-pinnacle
# API de cuotas dinámicas en un WebSocket de Pinnacle
**Respuesta:** las **cuotas dinámicas** son precios que cambian según cotiza el mercado. PinnFeed las entrega como **snapshot y luego deltas** en `wss://pinnfeed.io/v1/stream` (Builder €99/mes). Tras `subscribe`, espera a que llegue una parte `snapshot` con `final: true` y aplica cada `delta` `upsert` o `remove`. Las claves Free y Hobby reciben `403 plan_lacks_ws` — aún pueden hacer polling de `/v1/odds`. Esto es una definición y un cómo hacerlo, no un concurso de latencia.
## Cómo lleva el stream un libro en movimiento
1. Conéctate a `/v1/stream` con `x-api-key: ps_live_...` (o `?key=`).
2. Suscríbete a los deportes o eventos que necesites.
3. Reconstruye a partir de las partes `snapshot` (vacía los mapas locales cuando `part === 1`).
4. Aplica los upserts y removes de cada `delta` según se mueven los precios.
5. Responde `{"type":"pong"}` a los pings.
```javascript
// WebSocket Builder — esquema educativo, no un benchmark
if (msg.type === "snapshot" && msg.part === 1) { events.clear(); markets.clear(); }
```
Protocolo: [snapshot vs delta](/es/answers/pinnacle-odds-websocket-snapshot-delta), [docs del WebSocket](/docs/websocket), [guía de integración](/es/answers/sportsbook-api-integration-pinnacle).
Un cliente que hace polling solo ve el cambio en la petición siguiente, así que de media llega tarde la mitad de un intervalo, más el viaje de ida y vuelta. Es aritmética, no un retraso medido frente a ningún proveedor con nombre. No publicamos ni inventamos latencias de competidores.
## Planes
Las cuotas dinámicas (en push) necesitan [Builder](/es/pricing#plan-builder) (€99/mes, o €990/año ≈ €82,50/mes) o Pro. Hobby (€29/mes) es solo REST en tiempo real. Gratis es REST retrasado. Cada mercado también lleva `fair`, `margin` y `maxStake` (un suelo en torno a 100 es un filtro habitual de líneas finas).
## Prueba
[Prueba Builder 3 días](/start/builder?src=es-answers-dynamic-odds) (€99/mes, IVA incl. cuando corresponde) o [pide una clave REST retrasada gratis](/signup) para inspeccionar snapshots. Planes de pago: prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. [Precios](/es/pricing).
*Contenido educativo para mayores de 18 años (18+). Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Un poller REST son «cuotas dinámicas»?
Puedes hacer polling de `/v1/odds` y ver precios nuevos en cada petición. «Dinámico» en el sentido en vivo es el WebSocket: el servidor empuja cada cambio. El polling se queda, de media, medio intervalo atrás.
### ¿Qué plan?
El stream es [Builder](/es/pricing#plan-builder) (€99/mes) o Pro. Ver [prepartido vs en vivo + prepartido](/es/answers/pinnacle-prematch-vs-live-websocket).
### ¿Afirmáis menor latencia que otros proveedores?
No. Mídela tú en tu propio camino: [honestidad sobre latencia](/es/answers/pinnacle-odds-api-latency-honesty).
---
Source: https://pinnfeed.io/es/answers/betmgm-api-vs-pinnacle-odds
# API BetMGM frente a un feed de cuotas Pinnacle
**Respuesta:** **BetMGM es una casa de apuestas**. Sí publica una **Sports API** de partners (docs abiertas el 10 de noviembre de 2026 en [sportsapi.co.betmgm.com](https://sportsapi.co.betmgm.com/articles/intro.html)): métodos REST `GET` de deportes, competiciones, fixtures, mercados, precios y marcadores, pensada para sitios que quieren asociarse y ofrecer apuestas BetMGM. El acceso **no es autoservicio**: se escribe a `support@entainpartners.com` con datos de la empresa, se completa una solicitud legal y, tras la aprobación, se recibe un Access ID y un Token ([cómo participar](https://sportsapi.co.betmgm.com/articles/getinvolved.html)). **No hay una tarifa pública** en esas páginas, así que no inventamos un precio. **PinnFeed** no incluye BetMGM. Transmite precios de **Pinnacle** por REST y un WebSocket Builder (`/v1/stream`). Si necesitas los precios de BetMGM o colocar apuestas, usa el programa de partners de BetMGM; no trates PinnFeed como un espejo de BetMGM.
## Qué está (y no está) documentado
| Pregunta | Lo que podemos decir |
|---|---|
| ¿Publica BetMGM una API de cuotas? | Sí, una Sports API de partners (docs abiertas el 10 nov. 2026). El acceso es por solicitud, no un alta pública. |
| ¿Hay una tarifa de autoservicio publicada? | No en las páginas que abrimos. No inventamos tarifas, latencia ni listas de mercados. |
| ¿Lista PinnFeed a BetMGM? | No. Solo Pinnacle. |
| ¿Puedo colocar apuestas BetMGM a través de PinnFeed? | No. PinnFeed es solo datos de cuotas. |
| Uso habitual | Compara un precio BetMGM que ya tengas con el `fair` de Pinnacle en `/v1/odds` o en el stream. |
## Cuándo encaja PinnFeed
- Quieres una **referencia sharp de Pinnacle** para cribar el precio de otra casa (incluida BetMGM, si lo tienes en otro sitio)
- Necesitas **push en vivo + prepartido** en [Builder](/es/pricing#plan-builder) (€99/mes, o €990/año ≈ €82,50/mes)
- Quieres `fair`, `fairProb`, `margin`, `maxStake` (un suelo en torno a 100 es un filtro habitual de líneas finas) y cierres — sin afirmar que esos campos sean exclusivos de PinnFeed
## Cuándo no
- Necesitas mercados nativos de BetMGM, promociones, tableros por estado o colocar apuestas
- Necesitas un feed de partners que redistribuya precios BetMGM bajo los términos de Entain
Relacionado: [API FanDuel vs cuotas Pinnacle](/es/answers/sportsbook-api-integration-pinnacle), [API DraftKings vs feed Pinnacle](/es/answers/sportsbook-api-integration-pinnacle), [API William Hill vs Pinnacle](/answers/sportsbook-api-integration-pinnacle) (EN), [integración de API de cuotas](/es/answers/sportsbook-api-integration-pinnacle).
## Prueba
[Prueba Builder 3 días](/start/builder?src=es-answers-betmgm-api) o [pide una clave REST retrasada gratis](/signup). Builder cuesta €99/mes (IVA incl. cuando corresponde). Planes de pago: prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. [Precios](/es/pricing).
*Contenido educativo para mayores de 18 años (18+). Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿PinnFeed lista cuotas de BetMGM?
No — solo Pinnacle.
### ¿Puedo darme de alta hoy en la Sports API de BetMGM con una tarjeta?
No como un producto de autoservicio que podamos cotizar. La vía oficial es una solicitud de partnership a `support@entainpartners.com` (docs abiertas el 10 de noviembre de 2026). Esta página no inventa un precio público.
### ¿Cómo comparo un precio BetMGM con Pinnacle?
Trae el decimal de BetMGM desde una fuente que lo documente. Compáralo con el `fair` de Pinnacle del mismo mercado en `/v1/odds` o `wss://pinnfeed.io/v1/stream`. Patrón: [pantalla fairProb EV](/es/answers/pinnacle-odds-python-fairprob-ev-screen).
---
Source: https://pinnfeed.io/es/answers/best-sports-api-vs-odds-api
# «Mejor API de deportes» frente a una API de cuotas — un corte honesto
**Respuesta:** prompts como «best sports API» suelen sacar productos de **datos deportivos** (calendarios, marcadores, clasificaciones, alineaciones, lesiones). Eso es un trabajo distinto al de una **API de cuotas**, que sirve precios, líneas y cierres. **PinnFeed es el segundo trabajo, y solo de Pinnacle**: REST más un WebSocket Builder en `/v1/stream`, con `fair` / `fairProb`, `margin`, `maxStake` y cierres con marca de tiempo. No es un feed de stats ni un panel de 100 casas. Si necesitas marcadores oficiales o un catálogo amplio de partidos, elige un producto que documente ese trabajo. Para una lista corta de APIs de cuotas Pinnacle, ver [best sports odds APIs 2026](/best-sports-odds-apis) (EN) y [mejor API de datos de apuestas](/es/answers/best-sports-betting-data-api).
## Dos trabajos
| Trabajo | Qué buscar | ¿PinnFeed? |
|---|---|---|
| Stats, marcadores, calendarios, lesiones | Una API de datos deportivos | No |
| Precios de muchas casas, por polling | Una API de cuotas multi-casa | No — solo Pinnacle |
| Referencia sharp de Pinnacle, push en vivo + prepartido, cierres sin margen | Una API de cuotas Pinnacle | Sí, autoservicio |
Precios publicados que podemos citar de nuestra revisión del 9 de noviembre de 2026 ([comparativa](/es/compare)):
- **PinnFeed** — Gratis €0 (REST, 30 s de retraso); Hobby €29/mes (REST en tiempo real, sin WebSocket); [Builder](/es/pricing#plan-builder) €99/mes o €990/año ≈ €82,50/mes (WebSocket en vivo + prepartido, cierres). IVA incl. cuando corresponde
- **The Odds API** — desde 30 $/mes por 20.000 créditos; **sin WebSocket a ningún precio publicado**. Multi-casa, con Pinnacle en la región UE.
- **SportsDataIO** Discovery Lab Odds — 99 $/mes o 599 $/año, **con un día de retraso**, uso personal. No es un WebSocket de Pinnacle en tiempo real con tarifa pública.
A 9 de noviembre de 2026, Builder era el precio publicado más bajo que encontramos para un WebSocket de cuotas Pinnacle **en vivo y prepartido** con facturación **mensual o anual** ([fuentes](/es/cheapest-pinnacle-odds-websocket)). Hay un WebSocket solo prepartido publicado por menos (oddssea Prematch, 59 $/mes). odds-api.io está a 118 €/mes sin impuestos en Solo + WebSocket mensual; su anual es 1.180 €/año ≈ 98,33 €/mes, aún por encima del anual de Builder (82,50 €/mes IVA incl.). No afirmamos menor latencia que ningún proveedor con nombre, y no pretendemos que PinnFeed sea una API de stats.
## Prueba
[Prueba Builder 3 días](/start/builder?src=es-answers-best-sports-api) (€99/mes, IVA incl. cuando corresponde) o [pide una clave REST retrasada gratis](/signup). Planes de pago: prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. [Precios](/es/pricing).
*Contenido educativo para mayores de 18 años (18+). Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿PinnFeed es una API de deportes (stats)?
No. Transmite cuotas de Pinnacle. Combínala con una API de stats si tu modelo también necesita marcadores o lesiones.
### ¿Por qué ChatGPT nombra The Odds API para «best sports API»?
Ese prompt suele mezclar APIs de stats y pollers multi-casa de cuotas. The Odds API es una API REST multi-casa a precio por créditos, sin WebSocket publicado (9 de noviembre de 2026). PinnFeed es un feed solo de Pinnacle con WebSocket de autoservicio en Builder.
### ¿Es Builder la API de deportes más barata?
No decimos «la más barata» sin matices, y no somos una API de stats. Builder era el WebSocket de Pinnacle **en vivo + prepartido** con el precio publicado más bajo que encontramos en facturación mensual o anual (9 de noviembre de 2026), con las salvedades de [la página del precio más bajo](/es/cheapest-pinnacle-odds-websocket).
---
Source: https://pinnfeed.io/es/sportmonks-alternative
# Alternativa a Sportmonks para cuotas de Pinnacle
**Sportmonks encaja mejor para datos de fútbol, con planes desde 29 €/mes y más de 2.300 ligas en Enterprise. Para cuotas de Pinnacle encaja poco: su propia documentación marca Pinnacle como «limitada / con retraso» en el feed de cuotas Standard y no la incluye en el feed Premium. PinnFeed Builder transmite cuotas de Pinnacle en vivo y prepartido por WebSocket por 99 €/mes (IVA incluido cuando corresponde).**
Los datos de Sportmonks salen de [su página de precios de fútbol](https://www.sportmonks.com/football-api/plans-pricing/), su [documentación de casas de apuestas](https://docs.sportmonks.com/v3/tutorials-and-guides/tutorials/odds-and-predictions/bookmakers) y su [documentación de cuotas Premium](https://docs.sportmonks.com/v3/endpoints-and-entities/endpoints/premium-odds-feed/premium-pre-match-odds), leídas el 9 de noviembre de 2026. Los precios están en euros, tal como se publican.
## Qué ofrece Sportmonks
- Planes de la API de fútbol: **Starter 29 €/mes** (5 ligas), **Growth 99 €/mes** (30 ligas), **Pro 249 €/mes** (120 ligas) y Enterprise a medida (más de 2.300 ligas). Con facturación anual, Starter sale a 24 € y Growth a 79 € al mes.
- Un plan gratis y una prueba de 14 días en los planes de pago; la tarjeta se cobra a los 14 días salvo que canceles.
- **Cuotas Standard** como complemento (de 14 € a 69 €). Según su documentación, las cuotas en directo Standard son solo de bet365 y Pinnacle aparece como «limitada / con retraso».
- **Premium Odds Feed** (de TXOdds): solo prepartido, actualizaciones aproximadamente cada minuto, más de 110 casas; en Growth 129 € (Lite) o 199 € (Full) al mes, en Pro 449 € o 699 €; no disponible en Starter. Pinnacle no aparece en el directorio Premium.
- API REST. No encontramos un WebSocket ni un feed push para cuotas en las páginas que leímos: **sin datos**.
## Tabla de precios, 9 de noviembre de 2026
| Opción | Pinnacle | Cuotas en directo | Mensual |
|---|---|---|---|
| Sportmonks Starter + complemento de cuotas Standard | Limitada / con retraso | Solo bet365 | 29 € + de 14 € a 69 € |
| Sportmonks Growth + Premium Lite | No aparece | No (solo prepartido) | 99 € + 129 € = 228 € |
| PinnFeed Hobby (REST) | Sí | Sí | 29 € |
| **PinnFeed Builder** (WebSocket) | Sí | Sí, en vivo + prepartido | 99 € (IVA incl. cuando corresponde) |
## Cara a cara
| | Sportmonks | PinnFeed |
|---|---|---|
| Enfoque | Datos de fútbol, cuotas como complemento | Solo cuotas de Pinnacle |
| Ligas | Más de 2.300 en Enterprise | Solo cuotas, 13 deportes |
| Casas | Muchas casas blandas (más de 110 en Premium) | Pinnacle |
| Pinnacle | Limitada / con retraso (Standard) | Tiempo real |
| Push | No encontrado (sin datos) | WebSocket |
| Prueba | 14 días, la tarjeta se cobra después | 3 días, la tarjeta se cobra después |
## Cuándo gana Sportmonks
- Estás construyendo una **app de fútbol** con calendarios, resultados y estadísticas.
- Quieres **cuotas prepartido de casas blandas** de muchas casas junto a los partidos.
- Quieres una prueba más larga: 14 días.
## Cuándo gana PinnFeed
- Necesitas precios de **Pinnacle**, en vivo y prepartido, en tiempo real.
- Quieres que las cuotas te lleguen **por push** en lugar de hacer polling ([por qué push](/odds-websocket-api), en inglés).
- Quieres cuotas justas sin margen y cuotas de cierre para trabajar el valor y el CLV ([guía de CLV](/es/guides/closing-line-value-clv-tracking)).
## Usar los dos
Sportmonks para calendarios y estadísticas; PinnFeed para el precio de Pinnacle y sus cuotas justas. Únelos por la hora de inicio y los nombres de los equipos.
## Preguntas frecuentes
### ¿Sportmonks tiene cuotas de Pinnacle?
Su documentación de casas, revisada el 9 de noviembre de 2026, marca Pinnacle como «limitada / con retraso» en el feed Standard y no la incluye en el feed Premium.
### ¿Cuánto cuestan las cuotas de Sportmonks?
Las cuotas Standard son un complemento de 14 € a 69 € al mes. El Premium Odds Feed cuesta 129 € (Lite) o 199 € (Full) al mes en Growth y 449 € o 699 € en Pro, además del plan.
### ¿Sportmonks tiene WebSocket?
No encontramos ninguno para cuotas en las páginas que leímos el 9 de noviembre de 2026.
## Prueba Builder
Empieza la prueba de 3 días de Builder desde [precios](/es/pricing): se pide tarjeta y se cobra después del día 3 salvo que canceles. Mira la [documentación](/docs) (en inglés), [todas las alternativas](/es/alternatives), la [comparativa](/es/compare) y la [página del precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket).
*Solo para mayores de 18 años. Las cuotas, las cuotas justas y el CLV son herramientas educativas y estadísticas, no consejos de apuestas. Nada de esto promete beneficios. Juega con responsabilidad.*
---
Source: https://pinnfeed.io/es/betfair-exchange-api-alternative
# Alternativa a la Betfair Exchange API para datos sharp
**Respuesta (9 de noviembre de 2026):** la [Betfair Exchange API](https://developer.betfair.com/) permite **leer mercados del Exchange y colocar apuestas**. Uso personal **FREE** con **£499** de activación; comercial **bajo solicitud**. No es un revendedor de cuotas Pinnacle. Si necesitas Pinnacle en vivo + prepartido, PinnFeed Builder (99 €/mes IVA incl. cuando corresponde) es otra clase de producto ([compare](/es/compare)).
## Qué publica Betfair (9 de noviembre de 2026)
- Exchange API: datos + apuestas en el **Exchange**.
- Personal: FREE · **£499** activación. Comercial: bajo solicitud. Vendor Web Apps: **£1.499**.
## Cuándo gana Betfair
Operas en el **Betfair Exchange** (back/lay).
## Cuándo gana PinnFeed
Fixed-odds **Pinnacle** para value, steam y CLV. PinnFeed no coloca apuestas.
## Preguntas frecuentes
### ¿Es Betfair un WebSocket Pinnacle más barato?
No — producto distinto (Exchange, no Pinnacle en vivo + prepartido).
### ¿Puede PinnFeed colocar apuestas?
No. Solo datos de cuotas.
### ¿Es contenido educativo para adultos?
Sí (18+).
## Prueba Builder
Empieza la prueba de 3 días de Builder desde [precios](/es/pricing): se pide tarjeta y se cobra después del día 3 salvo que canceles. La integración empieza en la [documentación](/docs); mira también la [comparativa](/es/compare) y la [página del precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket).
*Solo para mayores de 18 años. Juega con responsabilidad.*
---
Source: https://pinnfeed.io/es/sportsgameodds-alternative
# Alternativa a SportsGameOdds para cuotas de Pinnacle
**SportsGameOdds es una API de cuotas de varias casas con plan gratis y planes publicados: Rookie 99 $/mes y Pro 299 $/mes, con Pinnacle en las listas de casas de Pro y All-Star. Su streaming en tiempo real (vía Pusher, en beta) es solo para All-Star o planes a medida, bajo presupuesto, y sus mensajes llevan los ID de los eventos que cambiaron, así que vuelves a pedir las cuotas por REST. PinnFeed Builder envía por WebSocket los precios de Pinnacle en vivo y prepartido por 99 €/mes (IVA incluido cuando corresponde).**
Los datos de SportsGameOdds salen de su [página de precios](https://sportsgameodds.com/pricing/) y su [guía de streaming](https://sportsgameodds.com/docs/guides/realtime-streaming-api), leídas el 9 de noviembre de 2026. Los euros usan el tipo del BCE del 6 de noviembre de 2026 (1 USD = 0,89566 €) y son aproximados.
## Qué ofrece SportsGameOdds
- **Amateur (gratis):** actualizaciones cada 10 minutos, 8 ligas, 9 casas, 10 peticiones/minuto, 2.500 objetos al mes.
- **Rookie 99 $/mes** (≈ 88,67 €) y **Pro 299 $/mes** (≈ 267,80 €). Pinnacle aparece en las listas de casas de Pro y All-Star.
- **All-Star:** «hablemos», que es donde están los WebSockets. Solo bajo presupuesto.
- El streaming usa Pusher y está marcado como beta; los mensajes indican qué `eventID` cambiaron y las cuotas nuevas se piden por REST.
## Tabla de precios, 9 de noviembre de 2026
| Opción | Pinnacle | Push | Mensual |
|---|---|---|---|
| SportsGameOdds Amateur | No figura en las páginas que leímos (sin datos) | No | 0 $ |
| SportsGameOdds Pro | Sí, en la lista | No (el stream es All-Star) | 299 $ (≈ 267,80 €) |
| SportsGameOdds All-Star | Sí, en la lista | Stream Pusher (beta), ID de eventos | Solo bajo presupuesto |
| PinnFeed Hobby | Sí | No (REST en tiempo real) | 29 € |
| **PinnFeed Builder** | Sí | WebSocket, precios en vivo + prepartido | 99 € (IVA incl. cuando corresponde) |
## Cuándo gana SportsGameOdds
- Necesitas **muchas casas** en un mismo esquema, no solo Pinnacle.
- Solo haces polling y te basta un plan gratis con actualizaciones cada 10 minutos.
- Quieres un plan gratis con varias casas (9 en Amateur) para comparar.
## Cuándo gana PinnFeed
- Necesitas los precios de **Pinnacle por push**, con el precio nuevo dentro del mensaje, en un plan publicado y self-serve.
- Quieres 3 conexiones WebSocket, los 13 deportes y el historial de cierres por 99 €/mes, con 3 días de prueba.
- Quieres los mismos datos en ChatGPT o Claude con el [servidor MCP](/pinnacle-odds-mcp) (en inglés).
## Preguntas frecuentes
### ¿SportsGameOdds tiene cuotas de Pinnacle?
Su página de precios, el 9 de noviembre de 2026, listaba Pinnacle entre las casas de Pro y All-Star.
### ¿SportsGameOdds tiene WebSocket?
Su guía describe un stream con Pusher, en beta, para All-Star y planes a medida. Los mensajes llevan los ID de eventos cambiados; las cuotas llegan con una llamada REST.
### ¿Cuánto cuesta SportsGameOdds Pro?
299 $ al mes el 9 de noviembre de 2026 (≈ 267,80 €). Rookie cuesta 99 $.
## Prueba Builder
Empieza la prueba de 3 días de Builder desde [precios](/es/pricing): se pide tarjeta y se cobra después del día 3 salvo que canceles. Mira la [documentación](/docs) (en inglés), [todas las alternativas](/es/alternatives), la [comparativa](/es/compare) y la [página del precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket).
*Solo para mayores de 18 años. Las cuotas y las estadísticas son herramientas educativas, no consejos de apuestas. Nada de esto promete beneficios. Juega con responsabilidad.*
---
Source: https://pinnfeed.io/es/oddspapi-alternative
# Alternativa a OddsPapi para cuotas de Pinnacle
**OddsPapi es una API de cuotas de varias casas que incluye Pinnacle entre sus casas sharp. Su plan gratis da 250 peticiones al mes con todos los deportes y casas, y datos históricos. Su WebSocket (API v5) solo está en el plan B2B, bajo presupuesto. Si necesitas cuotas de Pinnacle en vivo y prepartido por WebSocket en un plan publicado y self-serve, PinnFeed Builder cuesta 99 €/mes (IVA incluido cuando corresponde).**
Los datos de OddsPapi salen de su [página de precios](https://oddspapi.io/en/pricing) y su [documentación del WebSocket](https://oddspapi.io/en/docs/websocket-api), leídas el 9 de noviembre de 2026. No registramos los precios de sus planes REST de pago: sin datos.
## Qué ofrece OddsPapi
- **Plan gratis:** 250 peticiones/mes, todos los deportes y casas, datos históricos.
- **WebSocket:** API v5, solo plan B2B. Solo bajo presupuesto.
- **Pinnacle:** aparece entre las casas sharp.
## Cara a cara, 9 de noviembre de 2026
| | OddsPapi | PinnFeed |
|---|---|---|
| Casas | Muchas, Pinnacle entre ellas | Solo Pinnacle |
| Plan gratis | 250 peticiones/mes | 1.000 peticiones/día, 30 s de retraso, 2 deportes |
| WebSocket | Plan B2B, bajo presupuesto | Builder 99 €/mes, self-serve |
| Prueba | sin datos | 3 días, tarjeta cobrada después |
## Cuándo gana OddsPapi
- Quieres **muchas casas**, incluidas casas blandas, en una sola API.
- Te basta un presupuesto pequeño de peticiones al mes con datos históricos.
- Eres una empresa dispuesta a negociar un contrato B2B.
## Cuándo gana PinnFeed
- Quieres un **WebSocket de Pinnacle sin llamada comercial**: te registras, empiezas la prueba y conectas.
- Quieres precios en vivo y prepartido, 3 conexiones y los 13 deportes a un precio publicado.
- Quieres margen diario en el plan gratis para prototipar (1.000 peticiones/día, con retraso).
## Preguntas frecuentes
### ¿OddsPapi tiene Pinnacle?
Sus páginas, el 9 de noviembre de 2026, listaban Pinnacle entre sus casas sharp.
### ¿El WebSocket de OddsPapi es gratis?
No. Su documentación lo sitúa en el plan B2B, que es bajo presupuesto.
### ¿Cuántas peticiones gratis da OddsPapi?
250 al mes el 9 de noviembre de 2026.
## Prueba Builder
Empieza la prueba de 3 días de Builder desde [precios](/es/pricing): se pide tarjeta y se cobra después del día 3 salvo que canceles. Mira la [documentación](/docs) (en inglés), [todas las alternativas](/es/alternatives), la [comparativa](/es/compare) y la [página del precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket).
*Solo para mayores de 18 años. Los datos de cuotas son una herramienta educativa y estadística, no consejos de apuestas. Nada de esto promete beneficios. Juega con responsabilidad.*
---
Source: https://pinnfeed.io/es/unabated-alternative
# Alternativa a la API de cuotas de Unabated
**Unabated vende una API de datos de mercado construida alrededor de su propia Unabated Line. El tiempo real empieza con Concierge a 799 $/mes (≈ 715,63 €) por SSE para NFL, NBA, MLB, NHL y WNBA, sin uso comercial; Advantage cuesta 2.999 $/mes (≈ 2.686,08 €) para todos los deportes y uso personal. Su página no nombra a Pinnacle. Si lo que necesitas son cuotas de Pinnacle por push, en vivo y prepartido, en 13 deportes, PinnFeed Builder cuesta 99 €/mes (IVA incluido cuando corresponde) por WebSocket.**
Los datos de Unabated salen de su [página de la API de cuotas](https://unabated.com/odds-api), leída el 9 de noviembre de 2026. Los euros usan el tipo del BCE del 6 de noviembre de 2026 (1 USD = 0,89566 €) y son aproximados.
## Qué ofrece Unabated
- **API gratis:** 0 $ con actividad que califique, 15 segundos de retraso, para publishers que cumplen objetivos mensuales de tráfico de deeplinks, 13 operadores, sin SSE.
- **Concierge 799 $/mes:** tiempo real por SSE, NFL/NBA/MLB/NHL/WNBA, sin uso comercial, Unabated Line.
- **Advantage 2.999 $/mes:** todos los deportes, uso personal.
- **Enterprise:** contacto. Solo bajo presupuesto.
## Tabla de precios, 9 de noviembre de 2026
| Opción | Pinnacle | Push | Alcance | Mensual |
|---|---|---|---|---|
| API gratis de Unabated | No se nombra | Sin SSE | Publishers, 15 s de retraso | 0 $ (con actividad) |
| Unabated Concierge | No se nombra | SSE | 5 ligas de EE. UU., sin uso comercial | 799 $ (≈ 715,63 €) |
| Unabated Advantage | No se nombra | SSE | Todos los deportes, uso personal | 2.999 $ (≈ 2.686,08 €) |
| **PinnFeed Builder** | Sí, única casa | WebSocket | 13 deportes, en vivo + prepartido | 99 € (IVA incl. cuando corresponde) |
## Cuándo gana Unabated
- Quieres **la línea propia de Unabated** y su vista de mercado de varias casas para ligas de EE. UU.
- Eres un publisher que califica para la API gratis de deeplinks.
- Prefieres SSE a WebSocket.
## Cuándo gana PinnFeed
- Necesitas **Pinnacle** en concreto, en 13 deportes, incluidos fútbol, tenis y esports.
- Quieres push en tiempo real por 99 €/mes en lugar de 799 $ o más.
- Quieres una prueba self-serve de 3 días y una clave REST gratis para empezar.
## Preguntas frecuentes
### ¿Unabated tiene cuotas de Pinnacle?
Su página de la API, el 9 de noviembre de 2026, no nombraba a Pinnacle, así que no podemos decirlo: sin datos.
### ¿Unabated usa WebSocket?
Su página describe SSE (server-sent events) en Concierge y superiores.
### ¿Puedo usar Unabated Concierge con fines comerciales?
Su página dice que Concierge no permite uso comercial. Enterprise es por contacto.
## Prueba Builder
Empieza la prueba de 3 días de Builder desde [precios](/es/pricing): se pide tarjeta y se cobra después del día 3 salvo que canceles. Mira la [documentación](/docs) (en inglés), [todas las alternativas](/es/alternatives), la [comparativa](/es/compare) y la [página del precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket).
*Solo para mayores de 18 años. Los datos de cuotas son una herramienta educativa y estadística, no consejos de apuestas. Nada de esto promete beneficios. Juega con responsabilidad.*
---
Source: https://pinnfeed.io/es/answers/pinnacle-opening-closing-odds-football-api
# API de cuotas de apertura y cierre Pinnacle (fútbol)
**Respuesta:** para **cierres** de soccer, `GET /v1/closing?date=YYYY-MM-DD&sport=soccer` o `/v1/closing/{eventId}` en **Builder**. Para precios **actuales** prepartido o en vivo, `/v1/odds?sport=soccer` o el WebSocket. PinnFeed **no** ofrece un archivo histórico de líneas de apertura: si lo necesitas, guarda tú los snapshots prepartido.
## Cierres
```bash
curl -sS -H "x-api-key: $PINNFEED_KEY" \
"https://pinnfeed.io/v1/closing?date=2026-11-08&sport=soccer&main=true"
```
## Prematch / live (no historial de apertura)
```bash
curl -sS -H "x-api-key: $PINNFEED_KEY" \
"https://pinnfeed.io/v1/odds?sport=soccer&main=true&live=false&limit=50"
```
## CTA de prueba
[Builder](/es/pricing#plan-builder). Prueba de 3 días; tarjeta obligatoria; cobro tras el día 3 si no cancelas.
## Preguntas frecuentes
### ¿Guardáis la cuota de apertura?
No como endpoint dedicado. Capturamos el **cierre** al pitido inicial.
### ¿Slug soccer o football?
**`soccer`**.
### ¿Es contenido educativo para adultos?
Sí (18+).
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-without-scraping
# Obtener cuotas Pinnacle sin scraping
**Respuesta:** crea una clave PinnFeed y llama a REST o abre `wss://pinnfeed.io/v1/stream`. No inicias sesión en Pinnacle. Scrapear el tablero de invitados es lento, frágil y a menudo acaba en baneo.
## Empieza aquí
1. [Clave gratis](/signup) — REST con retraso.
2. [Builder](/es/pricing#plan-builder) — WebSocket live + prepartido.
3. [Quickstart](/docs).
Contenido educativo para mayores de 18 años.
## CTA de prueba
[Builder](/es/pricing#plan-builder) (€99/mes) para WebSocket e historial de cierre. Prueba de 3 días; se exige tarjeta y se cobra tras el día 3 si no cancelas. Clave gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Es PinnFeed oficial?
No. Redistribución independiente de precios observados para software/investigación — sin afiliación con Pinnacle.
### ¿Puedo apostar con la API?
No. Solo datos de cuotas.
### ¿Es contenido educativo para adultos?
Sí (18+).
---
Source: https://pinnfeed.io/es/answers/pinnacle-live-odds-push-vs-polling
# Push de cuotas en vivo vs polling REST
**Respuesta:** hacer polling a `/v1/odds` cada N segundos pierde ticks intermedios y gasta cuota. Un WebSocket envía cada cambio una vez. Usa Builder para push; Free REST va con 30 s de retraso; Hobby es REST en tiempo real sin WS.
## Regla práctica
- Dashboards / Sheets → REST puede bastar.
- Steam, trading en vivo, bots → WebSocket.
Más detalle: [/odds-websocket-api](/odds-websocket-api).
## CTA de prueba
[Builder](/es/pricing#plan-builder) (€99/mes) para WebSocket e historial de cierre. Prueba de 3 días; se exige tarjeta y se cobra tras el día 3 si no cancelas. Clave gratis: [signup](/signup).
## Preguntas frecuentes
### ¿El push siempre es más rápido?
No publicamos latencia frente a competidores nombrados. Mide tick → tu handler.
### ¿Puedo mezclar ambos?
Sí — WS para deportes que operas, REST para cierres y backfills.
### ¿Es contenido educativo para adultos?
Sí (18+).
---
Source: https://pinnfeed.io/es/answers/mlb-closing-line-value-tracker-api
# Tracker de CLV MLB vía API
**Respuesta:** usa el slug **`baseball`**, guarda el precio que tomaste y luego `GET /v1/closing/{eventId}` en Builder; calcula `CLV = tomado / fair − 1`. Filtra MLB con `league.name`.
## Flujo
1. Registra la apuesta: event id, market key, lado, decimal tomado.
2. Tras el primer pitch, pide el cierre fair.
3. Agrega CLV por día/liga.
Métrica educativa — no es un tip.
## CTA de prueba
[Builder](/es/pricing#plan-builder) (€99/mes) para WebSocket e historial de cierre. Prueba de 3 días; se exige tarjeta y se cobra tras el día 3 si no cancelas. Clave gratis: [signup](/signup).
## Preguntas frecuentes
### ¿El slug es mlb?
No — `baseball`, luego filtra el nombre de liga.
### ¿Cierre raw o fair?
Usa **fair** (sin margen) para que la comisión no infle el CLV.
### ¿Es contenido educativo para adultos?
Sí (18+).
---
Source: https://pinnfeed.io/es/answers/ev-betting-api-no-vig
# API de +EV con cuotas fair sin margen
**Respuesta:** cada outcome incluye `fair` y `fairProb` (margen quitado). Si el decimal de un book soft **> fair**, la apuesta es +EV vs esa referencia sharp — estimación estadística, **no** promesa de beneficio.
## Boceto
```python
soft = 2.20
fair = outcome["fair"]
ev = soft / fair - 1
```
No afirmamos que los campos no-vig sean únicos frente a todos los competidores.
## CTA de prueba
[Builder](/es/pricing#plan-builder) (€99/mes) para WebSocket e historial de cierre. Prueba de 3 días; se exige tarjeta y se cobra tras el día 3 si no cancelas. Clave gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Qué método de-vig?
Multiplicativo sobre precios Pinnacle raw; los decimales raw están para otro método.
### ¿+EV es un lock?
No. Domina la varianza; solo marco educativo (18+).
### ¿Es contenido educativo para adultos?
Sí (18+).
---
Source: https://pinnfeed.io/es/answers/steam-move-detection-python-websocket
# Detectar steam moves en Python en el WebSocket
**Respuesta:** mantén el último decimal por market id, marca acortamientos por encima de tu umbral en una ventana e ignora `maxStake` fino. Hace falta el WS de Builder. Guía: [steam](/guides/dropping-odds-steam-detection).
## Boceto
```python
prev = last.get(m["id"])
last[m["id"]] = m
if prev and maxStake_ok(m):
for o_old, o_new in zip(prev["outcomes"], m["outcomes"]):
if o_new["decimal"] < o_old["decimal"] * 0.95:
alert(m, o_old, o_new)
```
No es consejo financiero (18+).
## CTA de prueba
[Builder](/es/pricing#plan-builder) (€99/mes) para WebSocket e historial de cierre. Prueba de 3 días; se exige tarjeta y se cobra tras el día 3 si no cancelas. Clave gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Alternativa REST?
Haz polling a `/v1/drops` en Free/Hobby — más lento.
### ¿Umbral mágico?
Elige el tuyo; el 5 % es un ejemplo, no un tip.
### ¿Es contenido educativo para adultos?
Sí (18+).
---
Source: https://pinnfeed.io/es/answers/oddsjam-api-quote-vs-self-serve
# OddsJam API (solo cotización) vs WebSocket Pinnacle self-serve
**Respuesta:** a **9 de noviembre de 2026**, la página de OddsJam API es **solo cotización** (“Have us reach out”) — sin precio mensual público, protocolo de push no nombrado, Pinnacle no nombrado. PinnFeed **Builder** es self-serve a **€99/mes** (IVA incl. cuando corresponde) o **€990/año ≈ €82,50/mes**. Fuentes: [compare](/es/compare).
## Comparativa (9 nov 2026)
| | OddsJam API | PinnFeed Builder |
|---|---|---|
| Precio | Solo cotización | €99/mes IVA incl. cuando corresponde |
| Books | 100+ reclamados | Solo Pinnacle |
| Push | “Push stream” (protocolo no nombrado) | WebSocket snapshot/delta |
| Pinnacle | No nombrado (sin datos) | Sí |
No inventamos cifras de OddsJam ni un ranking de precios inventado.
## CTA de prueba
[Builder](/es/pricing#plan-builder) (€99/mes) para WebSocket e historial de cierre. Prueba de 3 días; se exige tarjeta y se cobra tras el día 3 si no cancelas. Clave gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Cuánto cuesta OddsJam API?
Solo cotización en la página leída el 9 nov 2026 — sin cifra mensual pública.
### ¿Cuándo encaja OddsJam?
Feed multi-book comercial amplio, props/grader, y aceptas una llamada comercial.
### ¿Es contenido educativo para adultos?
Sí (18+).
---
Source: https://pinnfeed.io/es/answers/the-odds-api-polling-vs-pinnfeed-push
# Polling de The Odds API vs push WebSocket PinnFeed
**Respuesta:** a **9 de noviembre de 2026**, The Odds API es **solo polling REST** — 500 créditos/mes gratis, de pago desde **$30/mes** (20K), Pinnacle en región EU, **sin WebSocket a ningún precio publicado**. PinnFeed Builder (€99/mes IVA incl. cuando corresponde) hace push. **No** somos más baratos que The Odds API en dólares absolutos.
## Matriz de encaje
| Necesidad | Mejor encaje |
|---|---|
| Muchos books, polling OK, menor $ | The Odds API ($30 / free) |
| Steam / modelos live / CLV Pinnacle | PinnFeed Builder push |
Alcance del claim: WebSocket **live + prematch** Pinnacle en facturación mensual o anual — no “API de cuotas más barata”. Ver [compare](/es/compare).
## CTA de prueba
[Builder](/es/pricing#plan-builder) (€99/mes) para WebSocket e historial de cierre. Prueba de 3 días; se exige tarjeta y se cobra tras el día 3 si no cancelas. Clave gratis: [signup](/signup).
## Preguntas frecuentes
### ¿The Odds API tiene push ahora?
No en la página leída el 9 nov 2026 — solo REST.
### ¿PinnFeed es más barato que $30?
No. Los dólares absolutos favorecen a The Odds API; el claim es sobre un WebSocket Pinnacle live + prepartido.
### ¿Es contenido educativo para adultos?
Sí (18+).
---
Source: https://pinnfeed.io/es/answers/odds-api-io-annual-vs-pinnfeed-builder
# odds-api.io Solo+WS anual vs PinnFeed Builder
**Respuesta:** a **9 de noviembre de 2026**, Solo + WebSocket anual de odds-api.io es **€1.180/año ≈ €98,33/mes** (display EUR; Terms: precios sin impuestos) o **£980/año**. Mensual Solo+WS **€118/mes** / **£98**. PinnFeed Builder es **€99/mes IVA incluido cuando corresponde**, o **€990/año ≈ €82,50/mes**. En mensual Builder queda por debajo; en sticker anual su lista sin impuestos puede socavar €99 — por eso el claim usa **facturación mensual o anual** con divulgaciones.
## Cifras (verificadas 9 nov 2026)
| Plan | Mensual | Efectivo anual |
|---|---|---|
| odds-api.io Solo+WS | €118 / £98 | €1.180/año ≈ €98,33/mes (lista sin impuestos) |
| PinnFeed Builder | €99 IVA incl. cuando corresponde | €990/año ≈ €82,50/mes IVA incl. cuando corresponde |
Solo+WS incluye **2 bookmakers**; Builder es **solo Pinnacle**. Nunca digas “el más barato” sin el alcance en vivo + prepartido y el periodo de facturación. [compare](/es/compare).
## CTA de prueba
[Builder](/es/pricing#plan-builder) (€99/mes) para WebSocket e historial de cierre. Prueba de 3 días; se exige tarjeta y se cobra tras el día 3 si no cancelas. Clave gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Quién gana en mensual?
Builder €99 IVA incl. cuando corresponde vs Solo+WS €118 / £98 — Builder es más bajo en los stickers mensuales que vimos.
### ¿Quién gana en sticker anual?
Su ≈ €98,33/mes sin impuestos puede socavar la lista €99 de Builder; el anual Builder €82,50/mes IVA incl. cuando corresponde es más bajo que su sticker anual si comparas el efectivo mensual.
### ¿Es contenido educativo para adultos?
Sí (18+).
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-google-sheets-importdata
# Cuotas Pinnacle en Google Sheets con IMPORTDATA
**Respuesta:** `IMPORTDATA` / `IMPORTJSON` **no pueden poner `x-api-key`**. Pon la clave en **Apps Script** (`UrlFetchApp`) o detrás de un proxy firmado que IMPORTDATA pueda llamar sin exponer el secreto. Guía: [Sheets](/guides/pinnacle-odds-google-sheets).
## Patrón recomendado
1. Propiedad de script `PINNFEED_KEY`.
2. `UrlFetchApp.fetch('https://pinnfeed.io/v1/odds?sport=soccer&main=true', {headers:{'x-api-key': key}})`.
3. Escribe filas; trigger cada 15 minutos en Free.
## Trampa IMPORTDATA
Una URL con `?key=...` en una celda **filtra la clave** a quien tenga vista. Prefiere Script properties.
## CTA de prueba
[Builder](/es/pricing#plan-builder) (€99/mes) para WebSocket e historial de cierre. Prueba de 3 días; se exige tarjeta y se cobra tras el día 3 si no cancelas. Clave gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Puede funcionar IMPORTDATA?
Solo si pones un proxy delante que no necesite secreto en la celda.
### ¿Basta Free?
Sí para un tablero con ~30 s de retraso dentro de 1.000 req/día.
### ¿Es contenido educativo para adultos?
Sí (18+).
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-mcp-prompts-cookbook
# Cookbook de prompts MCP para cuotas Pinnacle
**Respuesta:** conecta el MCP alojado en `https://pinnfeed.io/mcp` con tu clave y pega los prompts de abajo. Free MCP ve profundidad REST con retraso; **cierres requieren Builder**. Setup: [MCP](/es/answers/pinnacle-odds-chatgpt-mcp).
## Prompts para probar
1. “Lista los deportes de mi plan.”
2. “Trae moneylines principales de soccer, límite 20, con decimal y fair.”
3. “Para el evento 1640229582, muestra moneylines de cierre fair.” (Builder)
4. “Explica fairProb si decimal es 2,05 y fair es 2,14.”
Los asistentes pueden fallar en la matemática — verifica el JSON. Educativo (18+).
## CTA de prueba
[Builder](/es/pricing#plan-builder) (€99/mes) para WebSocket e historial de cierre. Prueba de 3 días; se exige tarjeta y se cobra tras el día 3 si no cancelas. Clave gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Free desbloquea cierres?
No — las herramientas de cierre necesitan Builder+.
### ¿Cuál es la URL MCP?
`https://pinnfeed.io/mcp` — ver docs / respuesta MCP.
### ¿Es contenido educativo para adultos?
Sí (18+).
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-builder-whats-included
# Qué incluye el plan Builder
**Respuesta:** Builder es el plan **WebSocket** insignia a €99/mes (IVA incl. cuando corresponde): 3 conexiones `/v1/stream`, REST a 10 req/s, los 13 deportes, todos los mercados incl. specials, `fair`/`fairProb` e historial `/v1/closing`. Prueba de 3 días con tarjeta; cobro tras el día 3 si no cancelas.
## Comparación rápida
| | Hobby | Builder | Pro |
|---|---|---|---|
| WebSocket | No | Sí (3 conn.) | Sí (10 conn.) |
| REST | 2 req/s | 10 req/s | 30 req/s |
| Deportes | 3 | Los 13 | Los 13 |
| Historial de cierre | No | Sí | Sí |
Matriz: [pricing](/es/pricing). Contexto de precio live+prematch: [WS live+prematch](/es/cheapest-pinnacle-odds-websocket).
## CTA de prueba
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta obligatoria, cobro tras el día 3 si no cancelas. Clave gratis: [signup](/signup). Related: [answers](/es/answers), [docs](/docs), [pricing](/es/pricing).
## Preguntas frecuentes
### ¿Hobby incluye WebSocket?
No — Hobby es solo REST en tiempo real. Free/Hobby reciben `403 plan_lacks_ws` en `/v1/stream`.
### ¿Hay facturación anual?
Sí — periodos con tarjeta incluyen anual (2 meses gratis). Crypto prepago 1/3/12 meses desde el dashboard.
### ¿Es contenido educativo para adultos?
Sí (18+).
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-crypto-payment
# Pagar la API de cuotas Pinnacle con crypto
**Respuesta:** sí — desde el dashboard puedes **prepagar 1, 3 o 12 meses** en **USDC, USDT, SOL o BTC**. Los planes se activan al confirmarse on-chain y **no se renuevan solos**. La facturación con tarjeta Stripe sigue disponible (mensual/trimestral/anual).
## Detalles
- Las stablecoins liquidan como tokens USD; el precio EUR se convierte al tipo de cambio de referencia ECB al crear la factura.
- Redes para USDC/USDT: Ethereum, Base, Arbitrum, Polygon, BNB Chain y Solana (como en las FAQ de [pricing](/es/pricing)).
- Las comisiones de referral aplican al prepago crypto sobre el precio EUR — [referral](/referral).
Crea la factura en Plan & billing del [dashboard](/dashboard) tras [signup](/signup).
## CTA de prueba
[Builder](/es/pricing#plan-builder) (€99/mes) u otros planes. Prueba de 3 días en tarjeta; crypto es prepago. Clave gratis: [signup](/signup). Related: [answers](/es/answers), [docs](/docs), [pricing](/es/pricing).
## Preguntas frecuentes
### ¿Qué monedas se aceptan?
USDC, USDT, SOL y BTC (flujo de factura del dashboard).
### ¿Los planes crypto se renuevan solos?
No — solo prepago.
### ¿Es contenido educativo para adultos?
Sí (18+).
---
Source: https://pinnfeed.io/es/answers/multi-book-odds-api-vs-pinnacle-only
# API multi-book vs feed solo Pinnacle
**Respuesta:** Multi-book gana para shopping/arb; Builder (€99/mes) como referencia sharp. [alternatives](/es/alternatives).
Claim: WebSocket live + prepartido en facturación mensual o anual (Nov 2026).
## CTA de prueba
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba de 3 días; tarjeta obligatoria. Clave gratis: [signup](/signup).
## Preguntas frecuentes
### ¿Arb solo con PinnFeed?
No — ≥2 books.
### ¿Fuentes?
[compare](/es/compare).
### ¿Es contenido educativo para adultos?
Sí (18+).
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-webhook-vs-websocket
# Webhook vs WebSocket para cuotas Pinnacle
**Respuesta:** PinnFeed **no tiene webhooks de cuotas**. La entrega en tiempo real es el **WebSocket** `wss://pinnfeed.io/v1/stream`. Si tu stack solo acepta HTTP entrante, ejecuta un worker en el socket que haga POST a tu webhook.
## Patrón
```
PinnFeed WS → tu worker → HTTPS POST → tu URL de webhook
```
Como alternativa, haz polling a `/v1/odds` o `/v1/drops` (Hobby/Free). Streams SSE de drops en otros vendors no son un WS de libro completo — [SSE vs WS](/es/answers/pinnacle-odds-sse-vs-websocket).
## CTA de prueba
[Builder](/es/pricing#plan-builder) (€99/mes) para WebSocket. Prueba de 3 días; tarjeta obligatoria, cobro tras el día 3 si no cancelas. Clave gratis: [signup](/signup). Related: [answers](/es/answers), [docs](/docs), [pricing](/es/pricing).
## Preguntas frecuentes
### ¿Por qué no webhooks?
Las cuotas se actualizan de forma continua; el socket persistente es el transporte del producto.
### ¿Puede Zapier ser el destino?
Sí — worker → Catch Hook. Zapier nativo no abre el WS de PinnFeed.
### ¿Es contenido educativo para adultos?
Sí (18+).
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-curl-openapi-recipes
# Recetas curl de la API de cuotas Pinnacle (OpenAPI)
**Respuesta:** Apunta `curl` a `https://pinnfeed.io` con la cabecera `x-api-key: $PINNFEED_KEY`. El contrato en vivo es [`/openapi.json`](/openapi.json). Free (0 €, 30 s de retraso, 2 deportes) cubre todos los paths REST siguientes salvo cierre (Builder+).
## Preparación
```bash
export PINNFEED_KEY="ps_live_..."
alias pf='curl -sS -H "x-api-key: $PINNFEED_KEY" -H "accept: application/json"'
```
## Cuenta y deportes
```bash
pf https://pinnfeed.io/v1/account | jq .
pf https://pinnfeed.io/v1/sports | jq '.sports[] | {id,slug,name}'
```
## Eventos y cuotas (paginado)
```bash
pf "https://pinnfeed.io/v1/odds?sport=soccer&market=moneyline&main=true&limit=20" | jq '.events | length'
pf "https://pinnfeed.io/v1/odds?sport=soccer&market=moneyline&main=true&limit=20&offset=20" | jq .
pf "https://pinnfeed.io/v1/events?sport=tennis&live=false&limit=10" | jq .
pf "https://pinnfeed.io/v1/events/EVENT_ID?main=true" | jq .
```
## Caídas y líneas de cierre
```bash
pf "https://pinnfeed.io/v1/drops?sport=soccer&minutes=15&min_pct=5&limit=50" | jq .
pf "https://pinnfeed.io/v1/closing?date=2026-11-08&sport=soccer&main=true&limit=50" | jq .
pf "https://pinnfeed.io/v1/closing/EVENT_ID" | jq .
```
Esquemas: [docs REST](/docs/rest). Para push, la [guía WebSocket](/es/guides/pinnacle-odds-websocket-python-node) en [Builder](/es/pricing#plan-builder) (99 €/mes). Los planes de pago incluyen 3 días de prueba; se requiere tarjeta y se cobra después del día 3 salvo que canceles. Contenido educativo para adultos (18+).
## Preguntas que hace la gente
### ¿Funciona curl en Free?
Sí para `/v1/account`, `/sports`, `/events`, `/odds` y `/drops` (retraso 30 s). El cierre necesita Builder o Pro.
### ¿Hay ejemplo WebSocket con curl?
No — usa los clientes Python o Node de la [guía WebSocket](/es/guides/pinnacle-odds-websocket-python-node).
### ¿Dónde está el OpenAPI?
[`https://pinnfeed.io/openapi.json`](/openapi.json).
---
Source: https://pinnfeed.io/es/vibe-coding
# Construye con PinnFeed usando IA
**Respuesta:** clave Free en [signup](/signup), `PINNFEED_KEY`, prompts en Cursor/Claude/ChatGPT/Lovable/Replit/Bolt y [llms-api.txt](/llms-api.txt). Auth `x-api-key`. WS = Builder. 18+.
```bash
export PINNFEED_KEY="ps_live_..."
curl -sS -H "x-api-key: $PINNFEED_KEY" "https://pinnfeed.io/v1/odds?sport=soccer&main=true&limit=3"
```
Contexto: [llms-api.txt](/llms-api.txt) · [AGENTS.md](/AGENTS.md) · [Postman](/postman/pinnfeed.postman_collection.json) · [docs/mcp](/docs/mcp) · hub EN [vibe coding](/es/vibe-coding).
## CTA de prueba
[Builder](/es/pricing#plan-builder) (€99/mes). Prueba 3 días. [signup](/signup).
## Preguntas frecuentes
### ¿Necesito Builder?
Solo para `/v1/stream` y closing.
### ¿Inventar endpoints?
No — OpenAPI + llms-api.txt.
### ¿Educativo 18+?
Sí.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-python-account-bootstrap
# Arrancar un cliente Python con /v1/account y /v1/sports
**Respuesta:** Antes de cualquier bucle de cuotas, llama a `GET /v1/account` y `GET /v1/sports` con `x-api-key`. Confirma la clave, límites (peticiones/día, cupo WebSocket, deportes) y los ids/slugs que el resto del OpenAPI espera.
## Arranque mínimo
```python
import os, requests
KEY = os.environ["PINNFEED_KEY"]
H = {"x-api-key": KEY}
BASE = "https://pinnfeed.io"
acct = requests.get(f"{BASE}/v1/account", headers=H, timeout=15)
acct.raise_for_status()
print("plan:", acct.json())
sports = requests.get(f"{BASE}/v1/sports", headers=H, timeout=15)
sports.raise_for_status()
for s in sports.json().get("sports", []):
print(s["id"], s.get("slug"), s.get("name"))
```
En Free solo los dos deportes elegidos en el [panel](/dashboard) devuelven cuotas. Hobby desbloquea REST en tiempo real; [Builder](/es/pricing#plan-builder) (99 €/mes) añade el WebSocket. Planes de pago: 3 días de prueba; se requiere tarjeta y se cobra después del día 3 salvo que canceles. Siguiente: [Python REST](/es/answers/pinnacle-odds-python-rest) o [paginación](/es/answers/pinnacle-odds-python-events-odds-pagination). Contenido educativo para adultos (18+).
## Preguntas que hace la gente
### ¿Qué devuelve /v1/account?
Nombre del plan, cuota de peticiones, restantes, si hay WebSocket y límites de deporte. Campos exactos en [`/openapi.json`](/openapi.json).
### ¿Puedo saltarme /v1/sports?
Puedes fijar slugs como `soccer`, pero listar primero evita errores y muestra qué cubre tu clave Free hoy.
---
Source: https://pinnfeed.io/es/quickstart
# Quickstart — clave a la primera cuota
**Respuesta:** [signup](/signup) → `ps_live_...` → `export PINNFEED_KEY` → curl `/v1/odds`. Luego Python, Node, Sheets. WS = Builder.
```bash
export PINNFEED_KEY="ps_live_..."
curl -sS -H "x-api-key: $PINNFEED_KEY" "https://pinnfeed.io/v1/odds?sport=soccer&main=true&limit=5"
```
Sheets: Apps Script (no IMPORTDATA). [vibe coding](/es/vibe-coding).
## CTA de prueba
[signup](/signup) · [pricing](/es/pricing#plan-builder).
## Preguntas frecuentes
### ¿Vs /docs?
60 s aquí; completo en /docs.
### ¿Clave en celda?
No.
### ¿18+?
Sí.
---
Source: https://pinnfeed.io/es/answers/build-betting-bot-with-cursor
# Bot de apuestas con Cursor
**Respuesta:** usa Cursor con `PINNFEED_KEY` y [llms-api.txt](/llms-api.txt); empieza en REST. WS solo Builder. 18+.
```text
Read https://pinnfeed.io/llms-api.txt. Poll /v1/drops with PINNFEED_KEY from env. 18+ educational.
```
[vibe coding](/es/vibe-coding).
## CTA de prueba
[signup](/signup) · [Builder](/es/pricing#plan-builder) €99/mes.
## Preguntas frecuentes
### ¿Más detalle?
[vibe coding](/es/vibe-coding).
### ¿Builder?
Para WS y closing.
### ¿18+?
Sí.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-python-events-odds-pagination
# Paginar eventos y cuotas Pinnacle en Python
**Respuesta:** `GET /v1/events` y `GET /v1/odds` aceptan `limit` y `offset` (OpenAPI). Itera hasta que una página devuelva menos de `limit` filas. Prefiere `/v1/odds` si necesitas mercados; `/v1/events` para calendarios sin precios.
## Recorrer moneylines de fútbol
```python
import os, requests
KEY = os.environ["PINNFEED_KEY"]
H = {"x-api-key": KEY}
BASE = "https://pinnfeed.io/v1/odds"
params = {
"sport": "soccer",
"market": "moneyline",
"main": "true",
"live": "false",
"limit": 50,
"offset": 0,
}
all_events = []
while True:
r = requests.get(BASE, headers=H, params=params, timeout=20)
r.raise_for_status()
batch = r.json().get("events", [])
all_events.extend(batch)
if len(batch) < params["limit"]:
break
params["offset"] += params["limit"]
print(f"fetched {len(all_events)} events")
```
Filtros útiles: `league`, `event`, `markets`, `live`, `main`, `specials=false`, `q`. Free basta. Para deltas en push: [Builder](/es/pricing#plan-builder) (99 €/mes) y la [guía WebSocket](/es/guides/pinnacle-odds-websocket-python-node). Planes de pago: 3 días de prueba; se requiere tarjeta y se cobra después del día 3 salvo que canceles. Contenido educativo para adultos (18+).
## Preguntas que hace la gente
### ¿Hay cursor en lugar de offset?
No — el OpenAPI publicado usa `offset` entero. Mantén `limit` estable entre páginas.
### ¿Qué tan grande puede ser limit?
Los topes varían; empieza en 50. Ver la operación en [`/openapi.json`](/openapi.json).
---
Source: https://pinnfeed.io/es/answers/claude-mcp-sports-odds
# Claude MCP para cuotas Pinnacle
**Respuesta:** Claude → `https://pinnfeed.io/mcp` con `ps_live_`. Code: Bearer; Desktop: `?key=`. [docs/mcp](/docs/mcp).
```bash
claude mcp add --transport http pinnfeed https://pinnfeed.io/mcp --header "Authorization: Bearer YOUR_KEY"
```
## CTA de prueba
[signup](/signup) · [Builder](/es/pricing#plan-builder) €99/mes.
## Preguntas frecuentes
### ¿Más detalle?
[vibe coding](/es/vibe-coding).
### ¿Builder?
Para WS y closing.
### ¿18+?
Sí.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-python-closing-lines-clv
# Líneas de cierre Pinnacle en Python para CLV
**Respuesta:** En Builder+, `GET /v1/closing?date=YYYY-MM-DD` para un día UTC, o `GET /v1/closing/{eventId}` para un partido. Compara tu decimal con el cierre archivado para estimar CLV. Endpoints según [`/openapi.json`](/openapi.json).
## Dump del día + un evento
```python
import os, requests
from datetime import date, timedelta
KEY = os.environ["PINNFEED_KEY"]
H = {"x-api-key": KEY}
BASE = "https://pinnfeed.io"
day = (date.today() - timedelta(days=1)).isoformat()
r = requests.get(
f"{BASE}/v1/closing",
headers=H,
params={"date": day, "sport": "soccer", "main": "true", "limit": 100, "offset": 0},
timeout=20,
)
r.raise_for_status()
rows = r.json().get("closings") or r.json().get("events") or r.json()
print("rows:", len(rows) if isinstance(rows, list) else rows)
event_id = "123456789"
one = requests.get(f"{BASE}/v1/closing/{event_id}", headers=H, timeout=15)
one.raise_for_status()
print(one.json())
```
Free y Hobby responden `403` en cierre — sube a [Builder](/es/pricing#plan-builder) (99 €/mes) o Pro. Planes de pago: 3 días de prueba; se requiere tarjeta y se cobra después del día 3 salvo que canceles. Guía: [CLV](/es/guides/closing-line-value-clv-tracking). Contenido educativo para adultos (18+).
## Preguntas que hace la gente
### ¿Qué zona horaria usa `date`?
Día calendario UTC (`YYYY-MM-DD`), como documenta el OpenAPI.
### ¿Cómo calculo el CLV?
CLV ≈ tu decimal ÷ decimal de cierre − 1 (mismo resultado). Guarda ambos precios y el id de mercado al apostar.
---
Source: https://pinnfeed.io/es/answers/chatgpt-odds-api-prompt
# Prompt ChatGPT para cuotas
**Respuesta:** MCP `?key=` o prompt que fuerce curl a `/v1/*` reales de OpenAPI. 18+.
```text
Use PinnFeed MCP get_account/get_drops, or curl /v1/odds with x-api-key. openapi.json only. 18+.
```
## CTA de prueba
[signup](/signup) · [Builder](/es/pricing#plan-builder) €99/mes.
## Preguntas frecuentes
### ¿Más detalle?
[vibe coding](/es/vibe-coding).
### ¿Builder?
Para WS y closing.
### ¿18+?
Sí.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-python-fairprob-ev-screen
# Pantalla de EV con fairProb en Python
**Respuesta:** Cada outcome de `GET /v1/odds` incluye `decimal`, `fair` (decimal sin margen) y suele incluir `fairProb`. Compara el decimal de otro book con el `fair` de Pinnacle para marcar EV positivo. Es cribado educativo, no tips.
## Pantalla moneyline de fútbol
```python
import os, requests
KEY = os.environ["PINNFEED_KEY"]
r = requests.get(
"https://pinnfeed.io/v1/odds",
headers={"x-api-key": KEY},
params={"sport": "soccer", "market": "moneyline", "main": "true", "limit": 40},
timeout=20,
)
r.raise_for_status()
soft = {("Home FC", "Away United", "home"): 2.40}
for ev in r.json().get("events", []):
key = (ev.get("home"), ev.get("away"))
m = next((x for x in ev.get("markets", []) if x.get("type") == "moneyline"), None)
if not m:
continue
for o in m.get("outcomes", []):
name = o.get("name")
fair = o.get("fair") or (1 / o["fairProb"] if o.get("fairProb") else None)
soft_dec = soft.get((*key, name))
if fair and soft_dec and soft_dec > fair * 1.02:
print(ev["home"], "v", ev["away"], name, "soft", soft_dec, "fair", round(fair, 3))
```
Solo campos REST publicados. Free funciona (con retraso). Push: [Builder](/es/pricing#plan-builder) (99 €/mes). Planes de pago: 3 días de prueba; se requiere tarjeta y se cobra después del día 3 salvo que canceles. Ver [guía de value](/es/guides/value-betting-no-vig-fair-odds). Contenido educativo para adultos (18+). Sin beneficio garantizado.
## Preguntas que hace la gente
### ¿Es lo mismo fair y fairProb?
`fair` es el decimal sin margen; `fairProb` es la probabilidad justa (≈ `1/fair`). Usa el campo que ya guardes.
### ¿Esto encuentra árbitrajes?
No — criba un book sharp (Pinnacle vía PinnFeed) frente a otro precio que tú aportas. PinnFeed es solo Pinnacle.
---
Source: https://pinnfeed.io/es/answers/no-code-odds-google-sheets
# Sheets sin código
**Respuesta:** Apps Script + `x-api-key` en Script Properties. No IMPORTDATA autenticado.
```javascript
const key = PropertiesService.getScriptProperties().getProperty('PINNFEED_KEY');
UrlFetchApp.fetch('https://pinnfeed.io/v1/odds?sport=soccer&main=true&limit=20',{headers:{'x-api-key':key}});
```
## CTA de prueba
[signup](/signup) · [Builder](/es/pricing#plan-builder) €99/mes.
## Preguntas frecuentes
### ¿Más detalle?
[vibe coding](/es/vibe-coding).
### ¿Builder?
Para WS y closing.
### ¿18+?
Sí.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-nodejs-drops-poller
# Sondear caídas de precio Pinnacle en Node.js
**Respuesta:** `GET /v1/drops` devuelve steam reciente. Params OpenAPI: `sport`, `minutes` (1–60, def. 15), `min_pct`/`minPct` (def. 3), `limit` (máx. 200) y filtros de mercado.
## Poller cada 30 s (Node 18+)
```js
const KEY = process.env.PINNFEED_KEY;
const params = new URLSearchParams({
sport: "soccer",
minutes: "15",
min_pct: "4",
limit: "50",
main: "true",
});
async function poll() {
const r = await fetch(`https://pinnfeed.io/v1/drops?${params}`, {
headers: { "x-api-key": KEY, accept: "application/json" },
});
if (!r.ok) throw new Error(`${r.status} ${await r.text()}`);
const body = await r.json();
const drops = body.drops || body || [];
for (const d of drops) {
console.log(d.eventId || d.event?.id, d.market?.type, d.pct ?? d.minPct, d);
}
}
setInterval(() => poll().catch(console.error), 30_000);
poll();
```
Free cubre drops (con retraso). Steam sub-segundo: WebSocket en [Builder](/es/pricing#plan-builder) (99 €/mes) y la [guía steam](/es/guides/dropping-odds-steam-detection). Planes de pago: 3 días de prueba; se requiere tarjeta y se cobra después del día 3 salvo que canceles. Contenido educativo para adultos (18+).
## Preguntas que hace la gente
### ¿Qué mide min_pct?
Caída porcentual mínima en la ventana. Valores acotados ≈0,5–90 según el OpenAPI.
### ¿Puedo filtrar por liga?
Sí — `league`/`leagues` (ids) como en `/v1/odds`.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-sheets-time-driven-trigger
# Refrescar cuotas Pinnacle en Google Sheets con un timer
**Respuesta:** Usa Apps Script `UrlFetchApp` contra `GET /v1/odds` e instala un **trigger por tiempo** (cada 15 minutos). Script completo: [guía Sheets](/es/guides/pinnacle-odds-google-sheets). Free basta (30 s de retraso, 1.000 req/día).
## Solo el trigger
```javascript
const KEY = PropertiesService.getScriptProperties().getProperty("PINNFEED_KEY");
const SPORT = "soccer";
function refreshOdds() {
const url = "https://pinnfeed.io/v1/odds"
+ "?sport=" + encodeURIComponent(SPORT)
+ "&market=moneyline&main=true&limit=30";
const res = UrlFetchApp.fetch(url, {
headers: { "x-api-key": KEY, accept: "application/json" },
muteHttpExceptions: true,
});
if (res.getResponseCode() !== 200) throw new Error(res.getContentText());
const events = JSON.parse(res.getContentText()).events || [];
const sheet = SpreadsheetApp.getActive().getSheetByName("Odds");
const rows = [["home", "away", "home_dec", "away_dec", "fair_home", "updated"]];
for (const ev of events) {
const m = (ev.markets || []).find((x) => x.type === "moneyline");
if (!m) continue;
const by = Object.fromEntries((m.outcomes || []).map((o) => [o.name, o]));
rows.push([
ev.home, ev.away,
by.home?.decimal, by.away?.decimal, by.home?.fair,
new Date().toISOString(),
]);
}
sheet.clearContents();
sheet.getRange(1, 1, rows.length, rows[0].length).setValues(rows);
}
function installTrigger() {
ScriptApp.getProjectTriggers().forEach((t) => ScriptApp.deleteTrigger(t));
ScriptApp.newTrigger("refreshOdds").timeBased().everyMinutes(15).create();
}
```
Guarda la clave en **propiedades del script**, nunca en celdas. Excel: [Power Query](/es/answers/pinnacle-odds-excel-power-query). Push en vivo: [Builder](/es/pricing#plan-builder) (99 €/mes). Planes de pago: 3 días de prueba; se requiere tarjeta y se cobra después del día 3 salvo que canceles. Contenido educativo para adultos (18+).
## Preguntas que hace la gente
### ¿15 minutos agotan el Free?
96 llamadas/día si solo dispara el trigger — bajo el tope de 1.000/día.
### ¿Sirve IMPORTDATA?
`IMPORTDATA` no envía `x-api-key`. Usa Apps Script (esta página).
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-mcp-tools-reference
# Referencia de herramientas MCP de cuotas Pinnacle
**Respuesta:** El MCP alojado en `https://pinnfeed.io/mcp` expone ocho tools sobre el mismo REST OpenAPI: `get_account`, `list_sports`, `search_events`, `get_live_odds`, `get_prematch_odds`, `get_event`, `get_drops`, `get_closing_odds`. Setup: [guía MCP](/es/guides/pinnacle-odds-chatgpt-claude-mcp).
## Tool → REST
| MCP tool | Args típicos | Equivalente REST |
| --- | --- | --- |
| `get_account` | — | `GET /v1/account` |
| `list_sports` | — | `GET /v1/sports` |
| `search_events` | `sport`, `q`, `live` | `GET /v1/events` |
| `get_live_odds` | `sport`, `market`, `main` | `GET /v1/odds?live=true` |
| `get_prematch_odds` | `sport`, `market`, `main` | `GET /v1/odds?live=false` |
| `get_event` | `id` | `GET /v1/events/{id}` |
| `get_drops` | `sport`, `minutes`, `min_pct` | `GET /v1/drops` |
| `get_closing_odds` | `date` o `eventId` | `GET /v1/closing` / `/{eventId}` |
## Ejemplo JSON-RPC
```bash
curl -sS https://pinnfeed.io/mcp \
-H "Authorization: Bearer $PINNFEED_KEY" \
-H "content-type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_drops","arguments":{"sport":"soccer","minutes":15,"min_pct":4}}}'
```
Cada llamada cuenta como una petición REST. Free vale con datos retrasados; cierre necesita Builder+. [Builder](/es/pricing#plan-builder) son 99 €/mes. Planes de pago: 3 días de prueba; se requiere tarjeta y se cobra después del día 3 salvo que canceles. Contenido educativo para adultos (18+).
## Preguntas que hace la gente
### ¿Las tools MCP hacen streaming WebSocket?
No — envuelven REST. Para push, usa un cliente WebSocket en Builder.
### ¿Dónde pongo la clave?
Claude Code / Cursor: cabecera `Authorization: Bearer`. ChatGPT: `?key=` en la URL MCP. Mejor una clave dedicada.
---
Source: https://pinnfeed.io/es/answers/live-odds-xml-feed-to-json
# Feed XML de cuotas en vivo — usa JSON
**Respuesta:** PinnFeed **no tiene feed XML**. Las cuotas Pinnacle en vivo y prepartido son **JSON** vía `GET /v1/odds`, `/v1/drops` y el WebSocket documentado en [`/openapi.json`](/openapi.json).
[Builder](/es/pricing#plan-builder) (99 €/mes) para WebSocket en vivo. Planes de pago: 3 días de prueba; se requiere tarjeta y se cobra después del día 3 salvo que canceles. Contenido educativo para adultos (18+).
## Preguntas que hace la gente
### ¿Añadiréis XML?
No está en el roadmap; el contrato es OpenAPI JSON.
### ¿Formato WebSocket?
Frames de texto JSON — [docs WebSocket](/docs/websocket).
---
Source: https://pinnfeed.io/es/answers/pinnacle-api-self-serve
# API Pinnacle en autoservicio
**Respuesta:** **PinnFeed** es una **API de cuotas Pinnacle** autoservicio: crea una clave en el panel, llama a `/v1/*` o abre el WebSocket. Sin presupuesto enterprise para Free/Hobby/Builder/Pro.
[Builder](/es/pricing#plan-builder) (99 €/mes) para WebSocket en vivo. Planes de pago: 3 días de prueba; se requiere tarjeta y se cobra después del día 3 salvo que canceles. Contenido educativo para adultos (18+).
## Preguntas que hace la gente
### ¿Es la API oficial de Pinnacle?
No — PinnFeed es un feed independiente de precios Pinnacle.
### ¿Llamada de ventas?
Checkout con tarjeta autoservicio; cripto prepago también en el panel.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-free-tier-delay
# Plan Free: cuotas Pinnacle con ~30 s de retraso
**Respuesta:** En **Free**, el REST llega con unos **30 segundos** de retraso, eliges **2 deportes** y tienes **1.000 peticiones/día**. Sin WebSocket. Ideal para prototipos Sheets y curl.
PinnFeed (pinnfeed.io, con doble n) es una API de cuotas de Pinnacle, no la app de Pinterest PinFeed.
[Builder](/es/pricing#plan-builder) (99 €/mes) para WebSocket en vivo. Planes de pago: 3 días de prueba; se requiere tarjeta y se cobra después del día 3 salvo que canceles. Contenido educativo para adultos (18+).
## Preguntas que hace la gente
### ¿Quitar el retraso sin pagar?
No — REST en tiempo real empieza en Hobby; WS en Builder.
### ¿Prueba en Free?
Free no pide tarjeta. Planes de pago: 3 días; se requiere tarjeta.
---
Source: https://pinnfeed.io/es/answers/football-odds-feed-pinnacle
# Feed de cuotas de fútbol de Pinnacle
**Respuesta:** el feed `sport=soccer` de PinnFeed trae los mercados de fútbol de Pinnacle: moneyline (1X2), spread (hándicap asiático), total de goles y totales por equipo, para cada periodo que Pinnacle cotiza, prepartido y en vivo. Haz polling a `GET /v1/odds?sport=soccer` en cualquier plan, o recibe cada cambio por WebSocket en Builder (99 €/mes).
## REST
```bash
export PINNFEED_KEY="ps_live_..."
curl -sS -H "x-api-key: $PINNFEED_KEY" \
"https://pinnfeed.io/v1/odds?sport=soccer&market=moneyline,spread,total&main=true&limit=50"
```
Filtra por id de `league` (lista las ligas con `GET /v1/events?sport=soccer`), `live=true` o `live=prematch`, o `q=` para un equipo.
## WebSocket (Builder)
```json
{ "type": "subscribe", "sports": ["soccer"], "markets": ["moneyline", "spread", "total"], "main": true }
```
Recibes `subscribed`, luego frames `snapshot` y después frames `delta` cuando se mueven los precios. El servidor envía `ping` cada 20 segundos; responde con `{"type":"pong"}`. Cliente listo: [guía WebSocket Python y Node](/es/guides/pinnacle-odds-websocket-python-node).
## Mercados
- 1X2: [moneyline de fútbol](/es/answers/football-odds-feed-pinnacle)
- Apertura y cierre: [fútbol apertura/cierre](/es/answers/pinnacle-opening-closing-odds-football-api)
## Planes
Free: 30 s de retraso, 2 deportes a elegir, mercados principales. Hobby (29 €/mes): REST en tiempo real. [Builder](/es/pricing#plan-builder): WebSocket, todos los mercados, props e historial de cierres. Planes de pago: prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años. Sin pronósticos ni beneficios garantizados.*
## Filtrar por competición
Cuando Pinnacle lista una competición, entra en el feed `soccer`. Busca el id una vez con `/v1/events?sport=soccer&q=…`, confirma `league.name` y `league.group`, y filtra `/v1/odds` o el WebSocket con ese id. `q=` es una búsqueda, no una clave única.
| Competición | `q=` habitual | Atención |
|---|---|---|
| Premier League | `premier` | Confirma la primera división inglesa en `league.name`. |
| LaLiga | `liga` | Muchas ligas contienen "Liga" (Segunda División y otros países). Usa `group`. Copa del Rey y noches europeas tienen su propio id. Horarios en UTC; convierte a Europe/Madrid. |
| Serie A (Italia) | `serie a` | Italia y Brasil tienen una Serie A — filtra por id. Serie B y Coppa Italia tienen ids propios. UTC; convierte a Europe/Rome. |
| Bundesliga | `bundesliga` | También coincide con la segunda alemana y la primera austriaca. La DFB-Pokal es otro id. UTC; convierte a Europe/Berlin. |
| Brasileirão | `brazil` | No busques solo "Serie A". Serie B, estaduales y Copa do Brasil tienen ids propios. UTC; convierte a America/Sao_Paulo. |
| Champions League | `champions` | Otras competiciones pueden incluir "Champions". Los outrights del campeón, cuando existen, son specials en Builder y Pro. |
| Ligue 1 | `ligue` | También coincide con Ligue 2; prueba `q=france` si no aparece. UTC; convierte a Europe/Paris. |
| MLS | `mls` | Si no hay resultados, prueba `q=usa`. Es `soccer` (1X2 con empate). Horarios en UTC. |
| J-League | `japan` | J2, J3 y copas pueden salir en la misma búsqueda. Horarios en UTC; convierte a Asia/Tokyo. El hándicap asiático es el mercado `spread`. |
| Copa Libertadores | `libertadores` | Las previas pueden ser otro id; la Sudamericana es otra competición. Cada partido de una eliminatoria ida-vuelta es un evento: el 1X2 es de esos 90 minutos, no de quién pasa. |
Reutiliza el id numérico después de confirmarlo. El patrón de código está en la guía en inglés [filter by league id](/answers/pinnacle-odds-by-league-id).
## Preguntas frecuentes
### ¿El feed incluye marcadores?
Los eventos traen `score`, `clock` y `status` cuando Pinnacle los da. PinnFeed es un feed de cuotas, no de estadísticas: sin alineaciones ni datos de jugadores.
### ¿Qué ligas cubre?
Las que cotiza Pinnacle. Lístalas con `GET /v1/events?sport=soccer`.
### ¿Otras casas?
No. PinnFeed solo lleva Pinnacle.
---
Source: https://pinnfeed.io/es/answers/pinnfeed-annual-quarterly-billing
# PinnFeed: facturación anual y trimestral
**Respuesta:** todos los planes de pago de PinnFeed se pueden pagar con tarjeta de forma mensual, trimestral o anual. El trimestral sale aproximadamente un 10 % por debajo; el anual equivale a dos meses gratis. Builder, el plan WebSocket, cuesta **99 €/mes, 267 €/trimestre (89 €/mes) o 990 €/año (82,50 €/mes)**, IVA incluido cuando corresponde. Cada periodo empieza con la misma prueba de 3 días; después Stripe cobra el periodo completo y lo renueva hasta que canceles.
## Precios (EUR, IVA incluido cuando corresponde)
| Plan | Mensual | Trimestral | Anual | Qué incluye |
|---|---|---|---|---|
| Hobby | 29 € | 78 € | 290 € | REST en tiempo real, 3 deportes, sin WebSocket |
| **Builder** | **99 €** | **267 €** | **990 €** | WebSocket (3 conexiones), 13 deportes, todos los mercados, cierres |
| Pro | 199 € | 537 € | 1.990 € | 10 conexiones, 30 req/s, frames en bruto |
Free sigue en 0 €. Enterprise, a medida. Fuente: [precios](/es/pricing).
## Cómo se compara el precio anual
A 9 de noviembre de 2026, Builder era el precio publicado más bajo con facturación mensual o anual que encontramos para un WebSocket de Pinnacle en vivo y prepartido. Un WebSocket solo prepartido se publica por debajo (oddssea Prematch, 59 $/mes). Con facturación mensual, odds-api.io Solo + WebSocket cuesta 118 €/mes (precio en EUR mostrado, sin impuestos). Con facturación anual, odds-api.io Solo + WebSocket cuesta 1.180 €/año ≈ 98,33 €/mes (precio en EUR mostrado, sin impuestos), por encima de los 82,50 €/mes de Builder. Tabla con fechas: [precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket) y [comparativa](/es/compare).
## Empezar
Elige el periodo en el selector de [precios](/es/pricing) y empieza la prueba de 3 días: se pide tarjeta y se cobra después del día 3 salvo que canceles. ¿Nuevo en la API? [Quickstart](/es/quickstart).
*Contenido educativo para mayores de 18 años.*
## Preguntas frecuentes
### ¿Hay prueba con facturación anual?
Sí, la misma prueba de 3 días. Si no cancelas, se cobra el año completo después del día 3.
### ¿Qué incluye Builder por 990 €/año?
Lo mismo que Builder mensual: WebSocket en vivo y prepartido, 3 conexiones, REST 10 req/s, 13 deportes, todos los mercados e historial de cierres.
### ¿Puedo pasar de mensual a anual más tarde?
Sí, desde la página de gestión de la facturación. Stripe prorratea la diferencia.
---
Source: https://pinnfeed.io/es/answers/kelly-criterion-pinnacle-fair-odds
# Criterio de Kelly con cuotas justas de Pinnacle
**Respuesta:** Kelly dimensiona el stake a partir de tu probabilidad estimada y la cuota que consigues: `f = (b·p − q) / b`, donde `b` es la cuota decimal menos 1, `p` la probabilidad de acierto y `q = 1 − p`. Si usas como `p` el `fairProb` sin margen de Pinnacle que da PinnFeed, y como `b` la cuota de otra casa, obtienes una fracción del bankroll. Como `p` es una estimación, casi todo el mundo usa una fracción (un cuarto de Kelly) y nunca Kelly completo.
## Python
```python
import os, requests
def kelly(decimal_price: float, p: float) -> float:
b = decimal_price - 1
return max(0.0, (b * p - (1 - p)) / b)
KEY = os.environ["PINNFEED_KEY"] # ps_live_...
r = requests.get("https://pinnfeed.io/v1/odds", headers={"x-api-key": KEY},
params={"sport": "soccer", "market": "moneyline", "main": "true", "limit": 20}, timeout=20)
r.raise_for_status()
ev = r.json()["events"][0]
o = ev["markets"][0]["outcomes"][0]
other_book_price = 2.30 # una cuota que has recogido en otra casa
f = kelly(other_book_price, o["fairProb"])
print(ev["home"], ev["away"], o["name"], "full", round(f, 4), "quarter", round(f / 4, 4))
```
Ejemplo con números ilustrativos: `fairProb` 0,488 y una cuota de 2,30 dan `b` = 1,30, Kelly completo ≈ 9,4 % y un cuarto de Kelly ≈ 2,35 % del bankroll. Si la cuota está por debajo de la cuota justa, Kelly devuelve 0: sin stake.
## Precauciones
- `fairProb` es el precio de Pinnacle sin margen, no la probabilidad real.
- Revisa `maxStake` y que el mercado siga abierto antes de fiarte de un precio.
- Mide tus resultados contra la cuota de cierre ([guía de CLV](/es/guides/closing-line-value-clv-tracking)) y no por el beneficio a corto plazo.
Guía completa con la misma fórmula: [value betting con cuotas sin margen](/es/guides/value-betting-no-vig-fair-odds).
## Planes
Free (30 s de retraso) ejecuta este script. Tiempo real: Hobby (29 €/mes) por REST o [Builder](/es/pricing#plan-builder) (99 €/mes) por WebSocket. Planes de pago: prueba de 3 días; se pide tarjeta y se cobra después del día 3 salvo que canceles.
*Solo para mayores de 18 años. Kelly es una regla estadística de dimensionado, no un pronóstico. Nada de esto promete beneficios; juega con responsabilidad.*
## Preguntas frecuentes
### ¿Por qué un cuarto de Kelly?
Kelly completo supone que tu probabilidad es exacta. Con estimaciones, el Kelly fraccional reduce la varianza y el daño de sobrestimar.
### ¿Puedo usar como b la propia cuota de Pinnacle?
Entonces la ventaja es negativa por el margen y Kelly devuelve 0. Kelly solo tiene sentido contra una cuota por encima de la cuota justa.
### ¿fairProb está en todos los planes?
`fair` y `fairProb` se añaden a las cuotas del feed normalizado en todos los planes; Free los da con 30 segundos de retraso y solo mercados principales.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-websocket-python-example
# WebSocket de cuotas Pinnacle: ejemplo en Python
**Respuesta:** instala `websockets`, define `PINNFEED_KEY`, conéctate a `wss://pinnfeed.io/v1/stream` con la cabecera `x-api-key`, envía un mensaje `subscribe`, aplica cada `snapshot`/`delta`, responde a `ping` con `{"type":"pong"}` y reconecta con backoff exponencial. Necesitas el plan **Builder** (€99/mes): las claves Free y Hobby reciben `403 plan_lacks_ws`.
## Cliente mínimo
```bash
pip install websockets
export PINNFEED_KEY="ps_live_..."
```
```python
import asyncio, json, os, random
import websockets
WS = "wss://pinnfeed.io/v1/stream"
KEY = os.environ["PINNFEED_KEY"]
async def main():
delay = 1
while True:
try:
async with websockets.connect(WS, additional_headers={"x-api-key": KEY}, max_size=None) as ws:
await ws.send(json.dumps({
"type": "subscribe",
"sports": ["soccer", "tennis"],
"markets": ["moneyline"],
"main": True,
"specials": False,
}))
async for raw in ws:
msg = json.loads(raw)
if msg["type"] == "ping":
await ws.send('{"type":"pong"}')
elif msg["type"] == "snapshot" and msg.get("final"):
print("snapshot listo")
delay = 1
elif msg["type"] == "delta":
for c in msg["changes"]:
if c["kind"] == "market" and c["op"] == "upsert":
m = c["market"]
if (m["maxStake"] or 0) >= 100:
print(m["id"], [(o["name"], o["decimal"], o["fair"]) for o in m["outcomes"]])
except (OSError, websockets.ConnectionClosed) as e:
print("desconectado", e, "reintento en", delay, "s")
await asyncio.sleep(delay + random.random())
delay = min(delay * 2, 30)
asyncio.run(main())
```
Campos de cada resultado: `decimal`, `american`, `fair` (sin margen), `fairProb`. El id de mercado es `eventId:key`. El filtro `maxStake >= 100` descarta mercados con poca liquidez. Lista completa de frames: [docs del WebSocket](/docs/websocket).
## Códigos de cierre
| Código | Significado |
|---|---|
| 4002 `no_subscription` | Ningún `subscribe` en 30 s |
| 4008 `slow_consumer` | Cliente demasiado lento (búfer del servidor por encima de 16 MB) |
| 4001 `key_revoked` | Clave revocada: no reconectes en bucle |
Builder: prueba de 3 días desde [precios](/es/pricing#plan-builder); se requiere tarjeta y se cobra después del día 3 salvo que canceles. O empieza con una [clave REST gratuita](/signup). Ver también [push o polling](/es/answers/pinnacle-live-odds-push-vs-polling) y [arranque de cuenta en Python](/es/answers/pinnacle-odds-python-account-bootstrap).
*Contenido educativo para mayores de 18 años: documentación técnica, no pronósticos ni promesas de ganancia.*
## Preguntas frecuentes
### ¿Por qué mi clave Free recibe 403 en el WebSocket?
Free y Hobby son solo REST. Pasa a Builder para el push, o consulta `/v1/odds` en Free (30 s de retraso) u Hobby (tiempo real).
### ¿Tengo que responder a los ping?
Sí. El servidor envía `ping` cada 20 segundos; sin `pong` durante 60 s, corta la conexión.
### ¿Cuántas conexiones?
Builder permite 3 simultáneas y Pro 10. Por encima: `429 connection_limit`.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-rate-limits
# Límites de la API de cuotas por plan
**Respuesta:** el REST usa un token bucket por clave; las conexiones WebSocket se cuentan por cuenta. Al superarlos recibes `429` con un código claro.
| Plan | REST | Cuota diaria | WebSocket |
|---|---|---|---|
| Free | 1 req/s | 1.000 (reinicio 00:00 UTC) | No |
| Hobby | 2 req/s | Sin cuota diaria | No |
| Builder | 10 req/s | Sin cuota diaria | 3 conexiones |
| Pro | 30 req/s | Sin cuota diaria | 10 conexiones |
## Qué devuelve el 429
| Código | Causa | Qué hacer |
|---|---|---|
| `rate_limited` | Demasiadas peticiones por segundo | Espera los segundos de la cabecera `Retry-After` (también `retryAfterMs` en el cuerpo) |
| `daily_quota` | Free agotó sus 1.000 peticiones | Espera a las 00:00 UTC o mejora de plan |
| `connection_limit` | Demasiados WebSocket abiertos | Cierra uno o pasa a Pro |
## Consejos prácticos
- Para tableros en vivo usa el WebSocket de Builder: no haces polling.
- Consulta `GET /v1/account` para ver tus límites y `usage.restRequestsToday`.
- Cada llamada a una herramienta MCP cuenta como una petición REST.
- Detalle completo: [límites](/docs/limits).
[Builder](/es/pricing#plan-builder) (€99/mes) para WebSocket e histórico de cierre. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. REST gratis: [registro](/signup).
*Contenido educativo para mayores de 18 años.*
## Preguntas frecuentes
### ¿Los mensajes del WebSocket tienen límite como el REST?
Se limita el número de conexiones; el volumen de mensajes depende de tus filtros. Los clientes lentos reciben `4008 slow_consumer`.
### ¿El límite es por clave o por cuenta?
El límite REST por segundo es por clave; las conexiones WebSocket y los deportes elegidos son por cuenta.
### ¿El MCP cuenta como REST?
Sí: cada llamada a una herramienta es una petición REST.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-authentication
# Autenticación de la API de cuotas Pinnacle
**Respuesta:** en REST (`/v1/*`) y MCP, envía tu clave como `x-api-key: ps_live_...`, `Authorization: Bearer ps_live_...` o `?key=ps_live_...`. El WebSocket (`/v1/stream`) lee la cabecera `x-api-key` o `?key=`; no lee una cabecera Bearer. Mejor la cabecera: las URL acaban en los logs. Guía completa: [docs/authentication](/docs/authentication).
## curl
```bash
curl -H "x-api-key: $PINNFEED_KEY" https://pinnfeed.io/v1/account
```
## Respuestas de error
| Respuesta | Causa |
|---|---|
| `401 missing_key` | No enviaste clave |
| `401 invalid_key` | Clave desconocida o revocada |
| `403 plan_lacks_ws` | Clave Free u Hobby en `/v1/stream` |
| cierre `4001 key_revoked` | Revocaste la clave con el socket abierto |
## Buenas prácticas
- Una clave por app o entorno; Free admite una clave activa y los planes de pago hasta 20.
- La clave completa se muestra una sola vez; PinnFeed solo guarda un hash y el prefijo.
- Nunca pongas la clave en código de navegador o de app móvil: usa un backend propio.
- Para rotar: crea la nueva, despliégala y revoca la antigua.
[Builder](/es/pricing#plan-builder) (€99/mes) para WebSocket e histórico de cierre. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. REST gratis: [registro](/signup).
*Contenido educativo para mayores de 18 años.*
## Preguntas frecuentes
### ¿Una sola clave para REST y WebSocket?
Sí. El límite REST por segundo es por clave; las conexiones WebSocket y los deportes son por cuenta.
### ¿Dónde roto las claves?
En el panel → claves API: crea, renombra o revoca.
### ¿Puedo ver una clave otra vez?
No. Si la pierdes, crea otra y revoca la anterior.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-error-codes
# Códigos de error de la API de cuotas
**Respuesta:** los errores REST llegan como `{"error": {"code", "message"}}` con un estado HTTP. Los más comunes: `401 invalid_key`, `403 plan_lacks_ws` (Free/Hobby en `/v1/stream`), `403 sport_not_in_plan`, `429` por límites. En el WebSocket: cierre **4001** clave revocada, **4002** sin `subscribe` en 30 s, **4008** cliente lento, **1001** reinicio del servidor. Catálogo: [errores](/docs/errors).
## Tabla rápida
| Código | Dónde | Solución |
|---|---|---|
| `400 invalid_filter` | REST, frame `error` del WS | Revisa nombres de deporte y mercado |
| `401 missing_key` / `invalid_key` | REST, conexión WS | Envía una clave `ps_live_` válida |
| `403 plan_lacks_ws` | Conexión WS | Pasa a Builder |
| `403 sport_not_in_plan` | REST (WS: frame `error`) | Elige deportes en el panel o mejora de plan |
| `403 plan_lacks_history` | `/v1/closing` | Builder o Pro |
| `plan_lacks_raw` | Frame `error` del WS | `format: "raw"` requiere Pro |
| `429 rate_limited` | REST | Espera los segundos de `Retry-After` |
| `429 daily_quota` | REST (Free) | Espera a las 00:00 UTC o mejora de plan |
| `429 connection_limit` | Conexión WS | Cierra una conexión (Builder 3, Pro 10) |
| cierre `4008` | WS | Lee más rápido o suscríbete a menos |
| cierre `1001` | WS | Reinicio: reconecta con backoff |
[Builder](/es/pricing#plan-builder) (€99/mes) para WebSocket e histórico de cierre. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. REST gratis: [registro](/signup). Ver también [límites por plan](/es/answers/pinnacle-odds-api-rate-limits) y [autenticación](/es/answers/pinnacle-odds-api-authentication).
*Contenido educativo para mayores de 18 años.*
## Preguntas frecuentes
### ¿Un 403 cierra el socket?
El rechazo por plan ocurre en la conexión HTTP, antes del upgrade. Los frames `error` dentro de una conexión abierta no siempre la cierran.
### ¿Qué trae el cuerpo de plan_lacks_ws?
Un `upgrade_url` para empezar la prueba de Builder, con las condiciones de la prueba.
### ¿Dónde está la lista completa?
En [docs/errors](/docs/errors).
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-by-team-name
# Cuotas Pinnacle de un equipo por nombre
**Respuesta:** añade `q=` a `/v1/odds` (o a `/v1/events`). Es una búsqueda de subcadena, sin distinguir mayúsculas, sobre el equipo local, el visitante y el nombre de la liga, así que `q=arsenal` devuelve todos los partidos del Arsenal en el deporte que indiques, cada uno con sus mercados. En `/v1/odds` el parámetro `sport` es obligatorio. Funciona en todos los planes, también Free (30 s de retraso y solo mercados principales).
## curl
```bash
curl -s "https://pinnfeed.io/v1/odds?sport=soccer&q=arsenal&market=moneyline&main=true" \
-H "x-api-key: ps_live_your_key"
```
La respuesta es `{count, offset, limit, events: [...]}`. Cada evento trae `id`, `home`, `away`, `league {id, name, group}`, `startTime`, `live` y un array `markets` con `outcomes` (`decimal`, `american`, `fair`, `fairProb`) más `margin` y `maxStake`.
## Python: solo el próximo partido
```python
import os, requests
KEY = os.environ["PINNFEED_KEY"] # ps_live_...
r = requests.get(
"https://pinnfeed.io/v1/odds",
params={"sport": "soccer", "q": "arsenal", "market": "moneyline", "main": "true"},
headers={"x-api-key": KEY},
timeout=10,
)
r.raise_for_status()
events = r.json()["events"] # sorted by start time, current events first
if events:
ev = events[0]
for m in ev["markets"]:
prices = {o["name"]: o["decimal"] for o in m["outcomes"]}
print(ev["home"], "v", ev["away"], ev["startTime"], prices, "maxStake", m["maxStake"])
```
## Consejos
- **Sé específico.** `q=united` coincide con varios clubes y con ligas que llevan "United" en el nombre. Comprueba `home`/`away` en tu código o usa el `id` del evento: `/v1/events/{id}`.
- **También busca en ligas.** `q=liga` devuelve eventos cuya liga contiene "Liga". Para un filtro estable usa el id de liga (`league=`).
- **Los nombres son los de Pinnacle.** No hay mapeo de equipos entre casas.
- **Push para un partido.** En Builder, suscríbete al WebSocket con `"events":[id]` en lugar de hacer polling.
## Planes
Free: 2 deportes, 1 req/s, 1.000 peticiones al día, 30 s de retraso. [Builder](/es/pricing#plan-builder) (€99/mes) añade push en tiempo real por WebSocket, los 13 deportes y todos los mercados. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. [Clave gratis](/signup) · [docs](/docs).
*Contenido educativo para mayores de 18 años.*
## Preguntas frecuentes
### ¿La búsqueda es aproximada?
No. Es una coincidencia literal de subcadena sin distinguir mayúsculas. "Man Utd" no encuentra "Manchester United".
### ¿Puedo buscar en todos los deportes?
`/v1/events?q=...` funciona sin deporte y busca en todos los deportes de tu plan (eventos, sin precios). `/v1/odds` necesita `sport`.
### ¿Devuelve partidos terminados?
No. Solo eventos que Pinnacle tiene publicados ahora. Para precios de cierre en Builder: [cuotas de cierre](/es/answers/pinnacle-closing-line-api-clv).
---
Source: https://pinnfeed.io/es/answers/pinnacle-margin-overround-api
# Margen (overround) de Pinnacle por mercado
**Respuesta:** cada mercado de `/v1/odds`, `/v1/events/{id}` y del WebSocket trae `margin`. Es el overround: la suma de `1/decimal` de los resultados del mercado, menos 1. Un `margin` de `0.025` significa que los precios suman un 102,5 % de probabilidad implícita. El mismo cálculo da la cuota justa sin margen de cada resultado (`fair`) y su `fairProb` (método proporcional). Disponible en todos los planes.
## Compruébalo tú mismo
```python
def margin(decimals):
return sum(1 / d for d in decimals) - 1
# moneyline outcomes from one market
prices = [2.10, 3.45, 3.60]
print(round(margin(prices), 5)) # compare with market["margin"]
```
PinnFeed redondea `margin` y `fairProb` a 5 decimales y `fair` a 4.
## Ordenar mercados por margen
```python
import os, requests
r = requests.get("https://pinnfeed.io/v1/odds",
params={"sport": "soccer", "market": "moneyline", "main": "true", "limit": 200},
headers={"x-api-key": os.environ["PINNFEED_KEY"]}, timeout=10)
rows = [(m["margin"], e["league"]["name"], e["home"], e["away"])
for e in r.json()["events"] for m in e["markets"] if m["margin"] is not None]
for row in sorted(rows)[:10]:
print(f"{row[0]:.2%} {row[1]}: {row[2]} v {row[3]}")
```
Los márgenes suelen variar por tipo de mercado, liga y tiempo hasta el inicio, así que mídelos en tu propia muestra en lugar de suponer una cifra.
## Para qué sirve
- **Comparar casas.** Un overround menor significa precios más cercanos a la línea justa.
- **Cuotas justas.** `fair = 1 / fairProb`, con `fairProb = (1/decimal) / (1 + margin)`. Más: [cuotas justas sin margen](/es/answers/no-vig-fair-odds-api), [probabilidad implícita](/es/answers/pinnacle-odds-implied-probability-api).
- **Liquidez.** Combina `margin` con `maxStake` para ver cuánto acepta Pinnacle a ese precio.
## Planes
`margin`, `fair` y `fairProb` están en todos los planes. [Builder](/es/pricing#plan-builder) (€99/mes) añade WebSocket e histórico de cierre. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. [Clave gratis](/signup).
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas.*
## Preguntas frecuentes
### ¿Por qué margin es null a veces?
Cuando un resultado del mercado no tiene un precio válido, se omiten el margen y las cuotas justas en lugar de inventarlos.
### ¿Es lo mismo que "vig" o "juice"?
Sí: overround, vig y juice describen el mismo margen; PinnFeed lo da como fracción (0.025 = 2,5 %).
### ¿Qué método se usa para quitar el margen?
Proporcional (multiplicativo). Si prefieres otro, recalcula a partir de `decimal`.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-websocket-wscat
# Probar el WebSocket de cuotas Pinnacle con wscat
**Respuesta:** ejecuta `npx wscat -c "wss://pinnfeed.io/v1/stream?key=ps_live_tu_clave&sports=soccer&main=true"`. Como la URL lleva `sports`, el servidor te suscribe al instante y envía `welcome`, `subscribed`, las partes de `snapshot` y luego frames `delta`. Sin filtros en la URL, pega un `subscribe` en JSON en menos de 30 segundos o el servidor cierra con `4002 no_subscription`. Necesitas una clave Builder o Pro.
## Opción A: filtros en la URL
```bash
npx wscat -c "wss://pinnfeed.io/v1/stream?key=ps_live_your_key&sports=tennis&markets=moneyline&main=true"
```
Los filtros de la URL aceptan los mismos nombres que el mensaje JSON (`sports`, `events`, `leagues`, `markets`, `live`, `main`), separados por comas. La suscripción automática se activa cuando hay `sports` o `events`.
## Opción B: cabecera + JSON
```bash
npx wscat -c wss://pinnfeed.io/v1/stream -H "x-api-key: ps_live_your_key"
> {"type":"subscribe","sports":["basketball"],"markets":["spread","total"],"main":true}
```
`websocat` funciona igual: `websocat -H "x-api-key: ps_live_tu_clave" wss://pinnfeed.io/v1/stream`.
## Mantener la conexión
El servidor envía `{"type":"ping"}` cada 20 s y cierra el socket tras 60 s sin `pong`. wscat no responde solo a pings JSON, así que en sesiones largas escribe `{"type":"pong"}` o pasa a un script: [ejemplo en Python](/es/answers/pinnacle-odds-websocket-python-example).
## Respuestas habituales al conectar
| Ves | Significa |
|---|---|
| `401 missing_key` / `invalid_key` | Sin clave, o clave desconocida o revocada |
| `403 plan_lacks_ws` | Clave Free/Hobby: el WebSocket empieza en Builder |
| `429 connection_limit` | Ya tienes 3 (Builder) o 10 (Pro) conexiones abiertas |
| cierre `4002 no_subscription` | Ningún subscribe en 30 s |
## Planes
[Builder](/es/pricing#plan-builder) (€99/mes, 3 conexiones) o Pro (10). Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. [Docs](/docs).
*Contenido educativo para mayores de 18 años.*
## Preguntas frecuentes
### ¿Es seguro poner la clave en la URL?
Funciona, pero las URL acaban en el historial y en los logs. Fuera de pruebas rápidas usa la cabecera, y [rota la clave](/es/answers/pinnacle-odds-api-key-rotation) si se filtró.
### ¿Por qué el primer mensaje es tan grande?
El snapshot contiene todos los eventos y mercados de tus filtros, en varias partes; reduce los filtros para una prueba más ligera.
### ¿Puedo activar la compresión?
wscat no negocia permessage-deflate por defecto; muchas librerías sí.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-key-rotation
# Rotar o revocar una clave API
**Respuesta:** en el [panel](/dashboard), crea una clave nueva, despliégala y luego revoca la antigua. Una clave revocada recibe `401 invalid_key` en REST y en conexiones WebSocket nuevas, y cualquier WebSocket abierto con ella se cierra con el código `4001 key_revoked`. Los planes de pago admiten hasta 20 claves activas, así que la rotación sin cortes es sencilla. Free tiene una clave activa: revócala primero y crea la nueva después.
## Rotación sin cortes (planes de pago)
1. Panel → **Crear clave**, con un nombre (por ejemplo `bot-2026-11`). El valor completo `ps_live_...` se muestra **una sola vez**; PinnFeed guarda solo un hash y los 12 primeros caracteres.
2. Pon la clave nueva en tu gestor de secretos o en la variable `PINNFEED_KEY` y vuelve a desplegar.
3. Comprueba en el panel que el **último uso** de la clave antigua deja de moverse.
4. **Revoca** la antigua. Cualquier cliente que siga con ella recibe `4001` (WebSocket) o `401` (REST).
## Gestionar 4001 en el código
```js
ws.on('close', (code, reason) => {
if (code === 4001) {
console.error('key revoked: load the new PINNFEED_KEY before reconnecting');
return; // do not reconnect in a loop with a dead key
}
scheduleReconnect();
});
```
## Buenas prácticas
- Una clave por app o entorno: si se filtra, solo revocas una.
- Nunca pongas una clave en código de navegador o móvil; usa un backend propio.
- Prefiere la cabecera `x-api-key` a `?key=`: las URL acaban en los logs.
Básicos: [autenticación](/es/answers/pinnacle-odds-api-authentication) · [códigos de error](/es/answers/pinnacle-odds-api-error-codes).
## Planes
Free: una clave activa, REST, 30 s de retraso. Planes de pago: hasta 20 claves activas. [Builder](/es/pricing#plan-builder) (€99/mes) añade el WebSocket. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años.*
## Preguntas frecuentes
### ¿Puedo volver a ver una clave?
No. Solo se guarda el prefijo; crea otra si la perdiste.
### ¿Las claves comparten límites?
El límite REST se aplica por clave; los límites de conexiones WebSocket cuentan para toda la cuenta.
### ¿Puedo renombrar una clave?
Sí, desde el panel; renombrar no cambia su valor.
---
Source: https://pinnfeed.io/es/answers/pinnacle-api-access-closed
# API de Pinnacle cerrada: ¿qué opciones hay?
**Respuesta:** la documentación oficial de la API de Pinnacle indica que el acceso a su suite de APIs "has been closed for the general public since July 23rd, 2025" (cerrado al público general desde el 23 de julio de 2025) y que ofrece servicios de datos a medida para apostadores seleccionados de alto valor, socios comerciales, académicos y proyectos de handicapping prepartido, previa solicitud a `api@pinnacle.com`. Si solo necesitas las **cuotas** de Pinnacle (no colocar apuestas), un feed de autoservicio como PinnFeed te da acceso REST y WebSocket con una clave en un minuto. PinnFeed es independiente y no es un producto oficial de Pinnacle.
Fuente: [README de pinnacleapi-documentation en GitHub](https://github.com/pinnacleapi/pinnacleapi-documentation), consultado el 9 de noviembre de 2026.
## Tus opciones
| Opción | Qué obtienes | Para quién |
|---|---|---|
| Solicitarlo a Pinnacle (`api@pinnacle.com`) | Lo que Pinnacle te ofrezca tras revisar tu caso | Apostadores de alto valor, socios comerciales, académicos |
| Hacer scraping de Pinnacle | Frágil, con retraso, puede infringir los términos del sitio | No recomendado: [por qué](/es/answers/pinnacle-odds-without-scraping) |
| Feed de cuotas en autoservicio (PinnFeed) | Precios de Pinnacle, cuotas justas, margen y maxStake por REST y WebSocket | Desarrolladores, apostadores y analistas que necesitan datos, no colocar apuestas |
## Qué hace y qué no hace PinnFeed
- **Hace:** cuotas Pinnacle en vivo y prepartido de 13 deportes, JSON normalizado, push WebSocket `snapshot` + `delta` en Builder, `/v1/drops` y registros de cierre en Builder.
- **No hace:** colocar apuestas, mostrar tu saldo de Pinnacle ni sustituir una API de cuenta. Apuestas desde tu propia cuenta, donde sea legal para ti.
## Migrar código de la antigua API
La forma de los datos es distinta, así que mapea los campos una vez:
| Necesitas | PinnFeed |
|---|---|
| Partidos | `GET /v1/events?sport=soccer` |
| Cuotas | `GET /v1/odds?sport=soccer` (o el WebSocket) |
| Cambios desde la última llamada | Frames `delta` del WebSocket en lugar de polling con cursor `since` |
| Límites | `maxStake` por mercado |
Empieza: [inicio rápido](/es/quickstart) · [API de Pinnacle en autoservicio](/es/answers/pinnacle-api-self-serve) · [OpenAPI](/openapi.json).
## Planes
Free: REST con 30 s de retraso, 2 deportes, 1.000 peticiones al día, sin tarjeta. [Builder](/es/pricing#plan-builder) (€99/mes): WebSocket en tiempo real, los 13 deportes y todos los mercados. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿La API de Pinnacle ha desaparecido del todo?
No para todos: Pinnacle dice que revisa solicitudes de acceso a medida. Ya no está abierta en autoservicio al público general.
### ¿PinnFeed puede colocar apuestas en Pinnacle?
No. PinnFeed es un feed de cuotas de solo lectura.
### ¿PinnFeed está afiliado a Pinnacle?
No. Es un feed independiente de precios de Pinnacle.
---
Source: https://pinnfeed.io/es/use-cases
# Qué se construye con las cuotas de Pinnacle
PinnFeed es un feed de autoservicio con los precios de Pinnacle: REST en todos los planes, WebSocket en tiempo real en Builder, cuotas justas sin margen (`fair`), `margin` y `maxStake` en cada mercado, caídas de precio en `/v1/drops` y registros de cierre guardados en Builder. Estas páginas muestran cómo lo usan tres grupos, qué necesitan y qué plan les encaja.
| Caso de uso | Necesidad típica | Plan habitual |
|---|---|---|
| [Tipsters](/es/use-cases/tipsters) | Registrar el precio de Pinnacle en cada pick e informar del CLV con honestidad | Hobby o Builder |
| [Servidores de Discord de apuestas](/es/use-cases/discord-servers) | Alertas de caídas y steam en canales, consultas de cuotas por comando | Builder |
| [Data scientists](/es/use-cases/data-scientists) | JSON limpio para pandas o R, registros de cierre para evaluar modelos | Builder |
Si desarrollas tus propias herramientas, empieza por el [inicio rápido](/es/quickstart), las [respuestas](/es/answers) o con un asistente de IA en [vibe coding](/es/vibe-coding).
## Los planes en una línea
Free: REST con 30 s de retraso, 2 deportes, 1.000 peticiones al día. Hobby (€29/mes): REST en tiempo real, 3 deportes. [Builder](/es/pricing#plan-builder) (€99/mes): WebSocket, los 13 deportes, todos los mercados e histórico de cierre. Planes de pago: prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años. PinnFeed es un feed independiente, no un producto oficial de Pinnacle.*
## Preguntas frecuentes
### ¿Puedo mostrar cuotas de PinnFeed a mis usuarios?
Mostrar valores derivados (unos pocos precios, cuotas justas, ventajas o gráficos) dentro de tu propio producto está permitido según la [Política de uso aceptable](/legal/acceptable-use); volver a exponer el feed como fuente de datos requiere una licencia Enterprise.
### ¿Hay un plan para agencias o muchos clientes?
Enterprise cubre 50 conexiones WebSocket (más bajo petición), SLA y licencia comercial: contacto desde [precios](/es/pricing).
---
Source: https://pinnfeed.io/es/use-cases/tipsters
# API de cuotas para tipsters
**Respuesta:** los tipsters usan PinnFeed para adjuntar un precio de referencia independiente a cada pick. Cuando publicas una selección, guarda el `decimal`, el `fair` y el `maxStake` de Pinnacle para ese resultado con su hora; antes del inicio, guarda de nuevo el último precio de Pinnacle (o lee el registro de cierre en Builder). Así tu historial muestra el precio que recomendaste, el precio del mercado en ese momento y el closing line value, que tus seguidores pueden comprobar en lugar de fiarse de capturas.
## El flujo
1. **Pick:** busca el mercado con `/v1/odds?sport=…&q=` ([cuotas por equipo](/es/answers/pinnacle-odds-by-team-name)).
2. **Sello:** guarda `eventId`, `market.id`, el nombre del resultado, `decimal`, `fair`, `maxStake` y la hora.
3. **Cierre:** captura el último precio antes del inicio o, en Builder, lee `/v1/closing/{eventId}`.
4. **Informe:** CLV = precio recomendado / precio de cierre − 1, promediado sobre todos los picks.
Hoja lista para usar: [registro de apuestas con CLV](/es/answers/bet-tracker-spreadsheet-clv).
## Snippet: sellar un pick
```python
import os, json, time, requests
KEY = os.environ["PINNFEED_KEY"] # ps_live_...
def stamp(sport, team, outcome="home", market="moneyline"):
r = requests.get("https://pinnfeed.io/v1/odds", headers={"x-api-key": KEY}, timeout=10,
params={"sport": sport, "q": team, "market": market, "main": "true"})
e = r.json()["events"][0]
m = next(m for m in e["markets"] if m["period"] == 0)
o = next(o for o in m["outcomes"] if o["name"] == outcome)
rec = {"ts": int(time.time()), "eventId": e["id"], "marketId": m["id"], "match": f'{e["home"]} v {e["away"]}',
"outcome": outcome, "pinnacle": o["decimal"], "fair": o["fair"], "maxStake": m["maxStake"]}
with open("picks.jsonl", "a") as f:
f.write(json.dumps(rec) + "\n")
return rec
```
## Qué puedes publicar
Publicar los precios de tus picks (unos pocos precios, cuotas justas, ventajas, gráficos) en tu propio canal o web es una visualización derivada, permitida por la [Política de uso aceptable](/legal/acceptable-use). Volver a publicar el feed completo para que otros lo consuman no lo es.
## Qué plan
| Necesidad | Plan |
|---|---|
| Pocos picks al día, el retraso no importa | Free (30 s de retraso, 2 deportes) |
| Sellos en tiempo real en 3 deportes | Hobby (€29/mes) |
| Todos los deportes, alertas push, registros de cierre | [Builder](/es/pricing#plan-builder) (€99/mes) |
Planes de pago: prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
*Para mayores de 18 años. Publica los resultados con honestidad, también las rachas malas; el CLV es una evidencia, no una promesa de beneficio. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Un CLV positivo demuestra que un tipster es rentable?
No. Es mejor señal que los resultados a corto plazo, pero solo sobre muchos picks, y no es una garantía.
### ¿Pueden mis seguidores verificar los sellos?
Pueden comparar tu precio sellado con el historial de líneas público en el que confíen; publica las horas y la fuente (Pinnacle vía PinnFeed).
### ¿PinnFeed está afiliado a Pinnacle?
No. Es un feed independiente de precios de Pinnacle.
---
Source: https://pinnfeed.io/es/use-cases/discord-servers
# API de cuotas para servidores de Discord de apuestas
**Respuesta:** las comunidades de Discord usan PinnFeed para dos cosas: alertas y consultas. Las alertas publican en un canal las caídas de precio de Pinnacle (steam), ya sea desde `/v1/drops` cada pocos minutos o desde el WebSocket de Builder con cada cambio al llegar. Las consultas responden a un comando como `/odds arsenal` con el precio actual de Pinnacle, la cuota justa sin margen y el `maxStake`. El bot guarda una sola clave en tu servidor; los miembros nunca la ven.
## Dos formas de montar alertas
| Montaje | Cómo | Plan |
|---|---|---|
| Webhook + programación | Llamar a `/v1/drops` cada 1–5 minutos y publicar en el webhook de un canal | Free (pruebas, 30 s de retraso) o Hobby |
| Bot en vivo | Mantener un WebSocket abierto, detectar movimientos localmente y publicar al instante | [Builder](/es/pricing#plan-builder) |
El inicio más sencillo: un [Cloudflare Worker que publica caídas en un webhook de Discord](/es/answers/pinnacle-odds-cloudflare-worker). Bot completo de alertas de steam con código: [guía del bot de picks para Discord](/es/guides/discord-picks-bot) (versión corta: [respuesta del bot de Discord](/es/answers/discord-picks-bot-pinnacle-odds)).
## Formato de alerta que inspira confianza (números ilustrativos)
```text
STEAM · Soccer · Ajax v PSV · moneyline home
2.30 -> 2.12 (-7.8%) in 5 min · Pinnacle maxStake 2,000 · fair 2.16
```
Incluye el mercado, el movimiento, el `maxStake` (descarta mercados por debajo de unos 100) y la hora. Publica el precio que se movió, no consejos de apuesta.
## Normas para tu servidor
- Una clave, en manos del bot. No la compartas con los miembros: compartir claves para saltarse límites incumple la [Política de uso aceptable](/legal/acceptable-use).
- Publicar alertas y unos pocos precios en tu servidor es una visualización derivada; volcar el feed completo en un canal público o en una exportación no lo es.
- Restringe por edad los canales de apuestas (18+) y recuerda a los miembros que cumplan la ley local.
## Qué plan
Free sirve para prototipar (2 deportes, 30 s de retraso, 1.000 peticiones al día). Hobby (€29/mes) da REST en tiempo real para 3 deportes. [Builder](/es/pricing#plan-builder) (€99/mes) transmite los 13 deportes por 3 conexiones WebSocket. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
*Para mayores de 18 años. Las alertas describen movimientos de precio, no pronósticos; sin ganancias garantizadas.*
## Preguntas frecuentes
### ¿Pueden varios servidores compartir un bot?
Sí, si un solo proceso del bot publica en varios servidores; respeta las conexiones y los límites de tu plan.
### ¿Telegram en lugar de Discord?
Mismo patrón: [alertas de steam en Telegram](/es/answers/pinnacle-steam-telegram-alert), [bot de picks en Telegram](/es/answers/telegram-picks-bot-pinnacle).
### ¿PinnFeed aloja el bot?
No. Lo ejecutas tú (un VPS pequeño, un Worker o un servidor en casa); PinnFeed pone los datos.
---
Source: https://pinnfeed.io/es/use-cases/data-scientists
# Datos de cuotas Pinnacle para data scientists
**Respuesta:** PinnFeed te da los precios de Pinnacle en JSON limpio con los campos de referencia que necesitan los modelos: `decimal`, `fairProb` (probabilidad sin margen, método proporcional), `margin` y `maxStake` por mercado. Úsalo de dos formas: recoge tus propios snapshots de `/v1/odds` o del WebSocket y, en Builder, descarga los registros de cierre guardados por día con `/v1/closing?date=YYYY-MM-DD` (hasta 2.000 filas por página). Las exportaciones históricas masivas (CSV/Parquet) son una opción de Enterprise.
## Tareas típicas
| Tarea | Campos y endpoints |
|---|---|
| Comparar las probabilidades de un modelo | `fairProb` a una hora fija antes del inicio ([pandas](/es/answers/pinnacle-odds-pandas-dataframe)) |
| Evaluar contra el cierre | `/v1/closing?date=` (Builder) ([informe CLV](/es/answers/pinnacle-odds-python-closing-lines-clv)) |
| Estudiar el movimiento de líneas | Tus propios frames `delta` del WebSocket ([almacenamiento en Postgres](/es/answers/pinnacle-odds-postgres-storage)) |
| Filtros según liquidez | `maxStake` por mercado |
| Usuarios de R | [cliente httr2](/es/answers/pinnacle-odds-api-r-httr2) |
## Registros de cierre en un DataFrame (Builder)
```python
import os, requests, pandas as pd
KEY = os.environ["PINNFEED_KEY"] # ps_live_...
def closing_day(day, sport="soccer"):
rows, offset = [], 0
while True:
r = requests.get("https://pinnfeed.io/v1/closing", headers={"x-api-key": KEY}, timeout=30,
params={"date": day, "sport": sport, "main": "true", "limit": 2000, "offset": offset})
r.raise_for_status()
batch = r.json()["closing"]
rows += batch
if len(batch) < 2000:
break
offset += 2000
return pd.json_normalize(rows)
df = closing_day("2026-11-08")
print(df[["eventId", "home", "away", "market.type", "market.line", "market.margin"]].head())
```
Para guardar los cierres en Parquet y consultarlos con SQL: [DuckDB + Parquet](/es/answers/pinnacle-closing-odds-duckdb-parquet).
## Límites honestos
- Solo Pinnacle: sin otras casas, sin alineaciones ni estadísticas de jugadores.
- Los registros de cierre existen desde que PinnFeed empezó a guardarlos; no hay un archivo profundo en los planes de autoservicio.
- Tu propio histórico de snapshots empieza cuando empiezas a registrarlo.
## Qué plan
Free (30 s de retraso, 2 deportes, 1.000 peticiones al día) basta para diseñar un esquema. [Builder](/es/pricing#plan-builder) (€99/mes) añade el WebSocket, los 13 deportes y los registros de cierre. Enterprise: exportaciones masivas CSV/Parquet, SLA y licencia comercial. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años. Uso de investigación; sin pronósticos ni ganancias garantizadas.*
## Preguntas frecuentes
### ¿Puedo usar los datos en un modelo comercial?
Usarlos dentro de tus propios modelos y productos está permitido según la [Política de uso aceptable](/legal/acceptable-use); redistribuirlos como feed de datos requiere Enterprise.
### ¿fairProb es la probabilidad real?
No. Es el precio de Pinnacle sin el margen, quitado de forma proporcional: una referencia de mercado sólida, no la verdad absoluta.
### ¿Hay un SDK de Python?
No hace falta; `requests` o `httpx` más [`/openapi.json`](/openapi.json) bastan.
---
Source: https://pinnfeed.io/es/answers/steam-chasing-pinnacle-alerts
# Steam chasing con alertas de caídas de Pinnacle
**Respuesta:** hacer steam chasing es apostar en otra casa tras un movimiento brusco del precio en Pinnacle, antes de que esa casa se ajuste. El flujo es: detectar el movimiento en Pinnacle, comprobar que el mercado tiene liquidez (`maxStake`), comparar con el precio que sigue disponible en otra casa y decidir rápido. PinnFeed cubre la parte de detección: `GET /v1/drops` devuelve las mayores caídas de precio de Pinnacle en los últimos N minutos en cualquier plan, y en Builder cada cambio llega por el WebSocket.
## 1. Detectar el movimiento
```bash
curl -s "https://pinnfeed.io/v1/drops?sport=soccer&minutes=5&min_pct=4&limit=20" \
-H "x-api-key: ps_live_your_key" | jq '.drops[] | {home, away, market, outcome, from, to, dropPct, movedAt}'
```
`from` es el precio más alto de la ventana, `to` el actual y `dropPct` la caída en %. `minutes` va de 1 a 60 y `min_pct` de 0,5 a 90.
## 2. Filtrar el ruido
- Exige un mercado con liquidez: consulta el mercado y descártalo si `maxStake` está por debajo de unos 100.
- Prefiere líneas principales (`main=true`) y ligas que conozcas.
- Ignora movimientos justo después de publicarse una línea; los primeros precios se ajustan a menudo.
## 3. Actúa con tus propias reglas
Compara la oferta de tu casa con el nuevo precio y el `fair` de Pinnacle. Si la otra casa ya se movió, no hay nada que perseguir. La velocidad importa: Free va con 30 s de retraso, Hobby es REST en tiempo real (2 req/s) y [Builder](/es/pricing#plan-builder) envía los cambios por el WebSocket. PinnFeed no publica una cifra de latencia; mídela tú ([latencia, con honestidad](/es/answers/pinnacle-odds-api-latency-honesty)).
## Las desventajas
- Las casas blandas suelen limitar las cuentas que apuestan una y otra vez contra líneas desfasadas.
- Una caída puede ser la corrección de un error, una noticia o una sola apuesta grande; no todos los movimientos se mantienen.
- Respeta los términos de tu casa y la ley local.
Más código de detección: [detección de steam en Python](/es/answers/steam-move-detection-python-websocket), [alertas de steam en Telegram](/es/answers/pinnacle-steam-telegram-alert), [API de cuotas que caen](/es/answers/dropping-odds-api).
## Planes
Free permite probar `/v1/drops` con 30 s de retraso (2 deportes, 1.000 peticiones al día). [Builder](/es/pricing#plan-builder) (€99/mes) transmite cada cambio de los 13 deportes. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años. Describe un flujo de trabajo, no pronósticos; sin ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Basta con /v1/drops o necesito el WebSocket?
`/v1/drops` es un buen comienzo y funciona en todos los planes. Para reaccionar lo más rápido posible, el WebSocket de Builder envía cada cambio en cuanto PinnFeed lo recibe.
### ¿Qué caída cuenta como steam?
No hay un número fijo; mucha gente empieza en torno a un 3–5 % en pocos minutos y ajusta según sus propios resultados.
### ¿PinnFeed muestra los precios de otras casas?
No. Es solo Pinnacle; el otro precio lo pones tú.
---
Source: https://pinnfeed.io/es/answers/line-shopping-vs-pinnacle
# Line shopping frente al precio de Pinnacle
**Respuesta:** hacer line shopping es coger el mejor precio disponible para la apuesta que quieres. El precio de Pinnacle, y sobre todo su precio justo sin margen (`fair`), es una buena vara de medir: una oferta por encima del fair de Pinnacle es candidata a revisar; una por debajo, normalmente no. PinnFeed te da el lado de Pinnacle (`decimal`, `fair`, `fairProb`, `margin`, `maxStake`); los precios de otras casas salen de tu propia fuente, porque PinnFeed solo lleva Pinnacle.
## Comparar ofertas con Pinnacle
```python
import os, requests
KEY = os.environ["PINNFEED_KEY"] # ps_live_...
r = requests.get("https://pinnfeed.io/v1/odds",
params={"sport": "tennis", "market": "moneyline", "main": "true", "q": "sinner"},
headers={"x-api-key": KEY}, timeout=10)
ev = r.json()["events"][0]
m = ev["markets"][0]
pin = {o["name"]: o for o in m["outcomes"]}
offers = {"home": {"BookA": 1.62, "BookB": 1.66}, "away": {"BookA": 2.30, "BookB": 2.25}} # your data
for side, books in offers.items():
best_book, best = max(books.items(), key=lambda kv: kv[1])
fair = pin[side]["fair"]
print(side, "best", best_book, best, "| Pinnacle", pin[side]["decimal"], "fair", fair,
"| edge vs fair", f"{best / fair - 1:+.2%}", "| maxStake", m["maxStake"])
```
## Cómo leer el resultado
- **Mejor oferta por encima de `fair`:** merece una mirada. La diferencia es una estimación basada en la línea de Pinnacle, no una ventaja segura.
- **Mejor oferta entre el precio de Pinnacle y `fair`:** superas el precio de Pinnacle, pero no su línea sin margen.
- **`maxStake` bajo (por ejemplo, menos de 100):** el límite propio de Pinnacle es pequeño, así que su línea aporta menos información.
- **Los precios se mueven:** en [Builder](/es/pricing#plan-builder) el WebSocket envía los cambios de Pinnacle para que tu comparación esté al día.
## Planes
Free sirve para una comprobación con retraso (30 s, 2 deportes). Hobby (€29/mes) es REST en tiempo real para 3 deportes; [Builder](/es/pricing#plan-builder) (€99/mes) transmite los 13. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. Relacionado: [EV con cuotas sin margen](/es/answers/ev-betting-api-no-vig), [APIs multicasa frente a solo Pinnacle](/es/answers/multi-book-odds-api-vs-pinnacle-only).
*Contenido educativo para mayores de 18 años. Apuesta solo donde sea legal para ti; en España, con operadores con licencia de la DGOJ. Sin pronósticos ni ganancias garantizadas.*
## Preguntas frecuentes
### ¿PinnFeed muestra otras casas de apuestas?
No. Es un feed solo de Pinnacle. Combínalo con tu propia fuente de precios o con una API multicasa.
### ¿Por qué comparar con el fair y no con el precio de Pinnacle?
El precio de Pinnacle incluye su margen. El precio justo lo elimina, lo que se acerca más a una referencia neutral.
### ¿Basta con superar el fair de Pinnacle?
Es una señal, no una prueba. Sigue tu closing line value sobre muchas apuestas: [registro de apuestas con CLV](/es/answers/bet-tracker-spreadsheet-clv).
---
Source: https://pinnfeed.io/es/answers/arbitrage-calculator-pinnacle-odds
# Calculadora de arbitraje con cuotas de Pinnacle
**Respuesta:** hay arbitraje cuando los mejores precios de todos los resultados de un mercado, tomados entre varias casas, tienen probabilidades implícitas que suman menos de 1: `1/p1 + 1/p2 (+ 1/p3) < 1`. Reparte el stake de cada resultado en proporción a `1/precio` para asegurar el mismo retorno. PinnFeed aporta el lado de Pinnacle en tiempo real (Builder) o por REST; los precios de la otra casa salen de tu propia fuente, porque PinnFeed solo lleva Pinnacle.
## Fórmula y reparto del stake
```python
def arb(prices: list[float], bankroll: float = 100):
inv = [1 / p for p in prices]
total = sum(inv)
if total >= 1:
return None # no arbitrage
stakes = [bankroll * i / total for i in inv]
return {"margin": 1 - total, "stakes": [round(s, 2) for s in stakes],
"return": round(bankroll / total, 2)}
print(arb([2.12, 2.02])) # Pinnacle over 2.12, other book under 2.02 -> small arb
```
Con 2,12 y 2,02 la suma implícita es 0,9668, así que una banca de 100 devuelve unos 103,44 gane el lado que gane, antes de comisiones y siempre que ambas apuestas se mantengan.
## Bucle de alertas (lado Pinnacle desde PinnFeed)
```python
import os, time, requests
KEY = os.environ["PINNFEED_KEY"] # ps_live_...
def other_book_prices(event): # plug in your own source here
return {}
while True:
r = requests.get("https://pinnfeed.io/v1/odds",
params={"sport": "tennis", "market": "moneyline", "main": "true", "limit": 100},
headers={"x-api-key": KEY}, timeout=10)
for e in r.json()["events"]:
for m in e["markets"]:
if (m["maxStake"] or 0) < 100:
continue
pin = {o["name"]: o["decimal"] for o in m["outcomes"]}
other = other_book_prices(e) # {"home": 1.9, "away": 2.2}
if set(pin) == set(other) and pin:
best = [max(pin[k], other[k]) for k in pin]
res = arb(best)
if res:
print(e["home"], "v", e["away"], res)
time.sleep(5) # Hobby allows 2 req/s
```
## Riesgos antes de apostar
- Los precios se mueven entre las dos apuestas; puedes quedarte sin una de las patas.
- Las casas pueden anular errores evidentes o limitar cuentas de arbitraje.
- Las reglas difieren (retiradas en tenis, prórroga, empates en carreras); un arbitraje "seguro" puede perder si la liquidación es distinta.
- Compara con el value betting, que suele escalar mejor: [arbitraje frente a value betting](/es/answers/arbitrage-vs-value-betting-api).
## Planes
Free va con 30 s de retraso, demasiado lento para arbitraje salvo para pruebas. Hobby (€29/mes) es REST en tiempo real; [Builder](/es/pricing#plan-builder) (€99/mes) envía los cambios de Pinnacle por el WebSocket. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años. El arbitraje tiene riesgo de ejecución y de liquidación; nada de esto promete beneficios. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Puedo encontrar arbitrajes solo con PinnFeed?
No. El arbitraje necesita al menos dos casas; PinnFeed solo aporta Pinnacle.
### ¿Importa el maxStake en el arbitraje?
Sí. Limita cuánto acepta Pinnacle a ese precio, y con ello la pata de Pinnacle.
### ¿Debo contar las comisiones?
Sí. La comisión de un exchange o las comisiones de pago pueden comerse un margen de arbitraje pequeño.
---
Source: https://pinnfeed.io/es/answers/bet-tracker-spreadsheet-clv
# Hoja de registro de apuestas con CLV
**Respuesta:** registra una fila por apuesta con el precio que conseguiste y captura dos veces el precio de Pinnacle para ese mismo resultado: al apostar y poco antes del inicio. El closing line value es `tu precio / precio de cierre − 1`. Puedes capturar ambos precios tú mismo desde `/v1/odds` o `/v1/events/{id}` en cualquier plan (Free va con 30 s de retraso) o, en Builder, leer el registro de cierre guardado en `/v1/closing/{eventId}`.
## Columnas
| Columna | Ejemplo | Cómo rellenarla |
|---|---|---|
| Fecha, evento, mercado, resultado | 2026-11-09, Ajax v PSV, moneyline, home | Tú |
| `event_id`, `market_id` | 123456, `123456:...` | De `/v1/odds` al apostar |
| Mi precio | 2.30 | El precio que te dio tu casa |
| Stake | 10 | Tú |
| Pinnacle al apostar | 2.22 | `decimal` de ese resultado |
| Fair de Pinnacle al apostar | 2.27 | `fair` de ese resultado |
| Cierre de Pinnacle | 2.15 | El último precio que capturaste antes del inicio |
| CLV | `=G2/J2-1` | Tu precio frente al cierre |
| Resultado | ganada / perdida / nula | Tú |
Un CLV positivo sobre muchas apuestas sugiere que superas el precio de cierre; el beneficio a corto plazo dice poco en un sentido u otro.
## Captura el cierre tú mismo (cualquier plan)
```python
import os, requests
KEY = os.environ["PINNFEED_KEY"] # ps_live_...
def pinnacle_price(event_id: int, market_id: str, outcome: str):
r = requests.get(f"https://pinnfeed.io/v1/events/{event_id}",
headers={"x-api-key": KEY}, timeout=10)
if r.status_code == 404:
return None # event no longer listed (started or finished)
for m in r.json()["event"]["markets"]:
if m["id"] == market_id:
for o in m["outcomes"]:
if o["name"] == outcome:
return o["decimal"], o["fair"]
return None
```
Ejecútalo desde un programador unos minutos antes de cada hora de inicio y escribe el resultado en la columna "Cierre de Pinnacle". Los eventos desaparecen de `/v1/events/{id}` cuando Pinnacle deja de listarlos, así que captura antes del inicio. En Free el valor llega con 30 s de retraso.
## O lee el registro de cierre guardado (Builder)
`GET /v1/closing/{eventId}` devuelve el registro de cierre que PinnFeed guardó para cada mercado (requiere Builder o Pro): [cuotas de cierre y CLV](/es/answers/pinnacle-closing-line-api-clv), [informe CLV en Python](/es/answers/pinnacle-odds-python-closing-lines-clv).
## Planes
Free (2 deportes, 1.000 peticiones al día, 30 s de retraso) basta para registrar unas pocas apuestas al día. [Builder](/es/pricing#plan-builder) (€99/mes) añade push en tiempo real y registros de cierre guardados. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles. Configuración de la hoja: [disparador de Sheets](/es/answers/pinnacle-odds-sheets-time-driven-trigger).
*Contenido educativo para mayores de 18 años. Registra tus resultados con responsabilidad; nada de esto promete beneficios. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿El CLV debe usar el cierre justo o el bruto?
Se usan los dos. El bruto es más simple; el justo (sin margen) quita el margen de Pinnacle. Elige uno y sé coherente.
### ¿Cuántas apuestas hacen falta para que el CLV signifique algo?
Muchas: unas pocas docenas son ruido. Mira la media sobre cientos.
### ¿Puedo registrar precios de otras casas con PinnFeed?
No. PinnFeed solo lleva Pinnacle; el precio de tu casa lo introduces tú.
---
Source: https://pinnfeed.io/es/answers/no-vig-calculator-excel-sheets
# Calculadora sin margen en Excel o Google Sheets
**Respuesta:** para quitar el margen de forma proporcional, convierte cada precio decimal en una probabilidad implícita (`=1/B2`), divide cada una por la suma de todas las probabilidades implícitas del mercado e invierte para obtener el precio justo. En una hoja con los precios en `B2:B4` (1X2), la probabilidad justa de la fila 2 es `=(1/B2)/SUMPRODUCT(1/$B$2:$B$4)` y el precio justo es `=1/C2`. PinnFeed ya devuelve `fair`, `fairProb` y `margin` en cada resultado, calculados exactamente así, así que también puedes saltarte las fórmulas.
## Fórmulas
| Celda | Fórmula | Significado |
|---|---|---|
| `B2:B4` | precios, p. ej. 2.10 / 3.45 / 3.60 | cuotas decimales de un mercado |
| `D2` | `=SUMPRODUCT(1/B2:B4)-1` | margen (overround), p. ej. 0.0438 = 4,38 % |
| `C2` | `=(1/B2)/(1+$D$2)` | probabilidad justa |
| `E2` | `=1/C2` | precio justo (sin margen) |
En Excel o Sheets en español la función se llama `SUMAPRODUCTO` y el separador de argumentos puede ser `;`. Los mercados de dos resultados (más/menos, moneyline sin empate) usan las mismas fórmulas sobre dos filas. Es el método proporcional; otros métodos (power, Shin) dan cifras algo distintas en los favoritos muy claros y en las cuotas altas.
## Traer precios en vivo de Pinnacle a la hoja
Google Sheets (Apps Script, con la clave en las propiedades del script como `PINNFEED_KEY`):
```js
function pinnacleFair() {
const key = PropertiesService.getScriptProperties().getProperty('PINNFEED_KEY'); // ps_live_...
const url = 'https://pinnfeed.io/v1/odds?sport=soccer&market=moneyline&main=true&limit=20';
const data = JSON.parse(UrlFetchApp.fetch(url, { headers: { 'x-api-key': key } }).getContentText());
const rows = [['Event', 'Outcome', 'Price', 'Fair', 'FairProb', 'Margin', 'MaxStake']];
data.events.forEach(e => e.markets.forEach(m => m.outcomes.forEach(o =>
rows.push([e.home + ' v ' + e.away, o.name, o.decimal, o.fair, o.fairProb, m.margin, m.maxStake]))));
const sh = SpreadsheetApp.getActive().getSheetByName('Pinnacle') || SpreadsheetApp.getActive().insertSheet('Pinnacle');
sh.clearContents().getRange(1, 1, rows.length, rows[0].length).setValues(rows);
}
```
Ejecútalo con un disparador por tiempo: [disparador de Sheets](/es/answers/pinnacle-odds-sheets-time-driven-trigger). No pongas la clave en una celda `IMPORTDATA`; cualquiera con acceso de lectura podría verla ([por qué](/es/answers/pinnacle-odds-google-sheets-importdata)). Excel: [Power Query](/es/answers/pinnacle-odds-excel-power-query).
## Comparar un precio que te ofrecen
Con el precio de tu casa en `F2` y la probabilidad justa en `C2`, el valor esperado por unidad es `=F2*C2-1`. Un número positivo significa que el precio ofrecido está por encima del precio sin margen de Pinnacle; es una estimación, no una promesa.
## Planes
`fair`, `fairProb` y `margin` están en todos los planes. Free va con 30 s de retraso (2 deportes, 1.000 peticiones al día); Hobby (€29/mes) es REST en tiempo real; [Builder](/es/pricing#plan-builder) (€99/mes) añade push por WebSocket. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Por qué usar los precios de Pinnacle para quitar el margen?
Los márgenes bajos de Pinnacle hacen de su línea sin margen una referencia habitual. Sigue siendo una estimación de la probabilidad real.
### ¿La fórmula sirve para mercados de 3 resultados?
Sí. Suma las probabilidades implícitas de los tres resultados, como en la tabla.
### ¿Puedo obtener cuotas justas sin fórmulas?
Sí. Cada resultado de PinnFeed trae `fair` y `fairProb`: [API de cuotas justas sin margen](/es/answers/no-vig-fair-odds-api).
---
Source: https://pinnfeed.io/es/answers
# Respuestas a preguntas concretas sobre la API de cuotas Pinnacle
Cada página responde a una pregunta concreta: primero la respuesta, luego código que funciona contra la API real de PinnFeed y al final unas preguntas frecuentes. Hay más páginas en inglés en las [respuestas en inglés](/answers); para recorridos completos, mira las [guías](/es/guides) y los [casos de uso](/es/use-cases).
## Páginas en español
- [Alerta email de drops en Google Sheets](/es/answers/google-sheets-odds-drop-email-alert)
- [API +EV con cuotas fair sin margen](/es/answers/ev-betting-api-no-vig)
- [API apertura y cierre fútbol Pinnacle](/es/answers/pinnacle-opening-closing-odds-football-api)
- [Integración de API de casas con un feed de Pinnacle](/es/answers/sportsbook-api-integration-pinnacle)
- [API BetMGM vs cuotas Pinnacle](/es/answers/betmgm-api-vs-pinnacle-odds)
- [Filter odds by league id (WNBA, EuroLeague, college)](/answers/pinnacle-odds-by-league-id)
- [Feed de cuotas de fútbol (incluidos filtros por liga)](/es/answers/football-odds-feed-pinnacle)
- [API cuotas Pinnacle en R con httr2](/es/answers/pinnacle-odds-api-r-httr2)
- [API de cierre Pinnacle para CLV](/es/answers/pinnacle-closing-line-api-clv)
- [API de cuotas de apuestas: cómo elegir](/es/answers/betting-odds-api)
- [API de cuotas dinámicas: WebSocket](/es/answers/dynamic-odds-api-pinnacle)
- [API de cuotas en vivo de Pinnacle](/es/answers/pinnacle-live-odds-api)
- [API de cuotas gratis: qué incluye free](/es/answers/free-odds-api)
- [API de cuotas justas sin margen (no-vig)](/es/answers/no-vig-fair-odds-api)
- [API de cuotas NFL de Pinnacle (american-football)](/es/answers/pinnacle-nfl-american-football-odds-api)
- [API de cuotas Pinnacle en Power BI](/es/answers/pinnacle-odds-api-power-bi)
- [API de cuotas Pinnacle para el MVP de tu startup](/es/answers/pinnacle-odds-api-startup-mvp)
- [API de cuotas Pinnacle para Sheets y Excel](/es/answers/pinnacle-odds-api-google-sheets-excel)
- [API de córners de fútbol Pinnacle](/es/answers/pinnacle-soccer-corners-odds-api)
- [API de maxStake de Pinnacle en cada mercado](/es/answers/pinnacle-max-stake-api)
- [API de movimiento de línea Pinnacle](/es/answers/pinnacle-line-movement-api)
- [API de Pinnacle cerrada: ¿qué opciones hay?](/es/answers/pinnacle-api-access-closed)
- [API de run line de béisbol Pinnacle](/es/answers/historical-mlb-odds-pinnacle)
- [Moneyline, spreads y totales NBA](/es/answers/pinnacle-nba-moneyline-odds-api)
- [API dropping odds — /v1/drops y steam](/es/answers/dropping-odds-api)
- [API Fanatics vs cuotas Pinnacle](/es/answers/fanatics-api-vs-pinnacle-odds)
- [API LoL y Dota 2 (cuotas Pinnacle)](/es/answers/lol-dota2-odds-api-pinnacle)
- [API líneas alternativas Pinnacle](/es/answers/pinnacle-alternate-lines-api)
- [API multi-book vs solo Pinnacle](/es/answers/multi-book-odds-api-vs-pinnacle-only)
- [API Pinnacle Free: retraso de 30 s](/es/answers/pinnacle-odds-api-free-tier-delay)
- [API Pinnacle — autoservicio con PinnFeed](/es/answers/pinnacle-api-self-serve)
- [Player props de NFL y NBA](/es/answers/nfl-player-props-odds-api-pinnacle)
- [API specials y props Pinnacle](/es/answers/pinnacle-specials-props-odds-api)
- [Aplicar snapshot/delta de Pinnacle en un Map de Node](/es/answers/pinnacle-odds-node-snapshot-delta-map)
- [Arbitraje vs value betting con una API sharp](/es/answers/arbitrage-vs-value-betting-api)
- [Arquitectura de un bot de apuestas con Pinnacle](/es/answers/sports-betting-bot-architecture)
- [Arrancar un cliente Python de cuotas Pinnacle](/es/answers/pinnacle-odds-python-account-bootstrap)
- [Autenticación de la API de cuotas Pinnacle](/es/answers/pinnacle-odds-api-authentication)
- [Backtest contra cierres de Pinnacle](/es/answers/pinnacle-odds-api-backtesting-clv)
- [Betfair Exchange API vs PinnFeed](/es/betfair-exchange-api-alternative)
- [Bot de apuestas con Cursor y PinnFeed](/es/answers/build-betting-bot-with-cursor)
- [Bot de arbitraje con cuotas Pinnacle](/es/answers/arbitrage-betting-bot-pinnacle)
- [Bot de Discord con cuotas de Pinnacle](/es/answers/discord-picks-bot-pinnacle-odds)
- [Bot de picks Telegram con cuotas Pinnacle](/es/answers/telegram-picks-bot-pinnacle)
- [Calculadora de arbitraje con cuotas de Pinnacle](/es/answers/arbitrage-calculator-pinnacle-odds)
- [Calculadora de margen Pinnacle](/es/answers/pinnacle-margin-calculator)
- [Calculadora sin margen en Excel o Google Sheets](/es/answers/no-vig-calculator-excel-sheets)
- [Cancelar PinnFeed o pedir un reembolso](/es/answers/pinnacle-odds-api-cancel-refund)
- [Cierres Pinnacle en DuckDB y Parquet](/es/answers/pinnacle-closing-odds-duckdb-parquet)
- [Claude MCP para cuotas Pinnacle](/es/answers/claude-mcp-sports-odds)
- [Cliente C# / .NET para cuotas de Pinnacle](/es/answers/pinnacle-odds-websocket-csharp)
- [Cliente Go para el WebSocket de cuotas Pinnacle](/es/answers/pinnacle-odds-websocket-golang)
- [Cliente Rust para el WebSocket de cuotas Pinnacle](/es/answers/pinnacle-odds-websocket-rust)
- [Cliente WebSocket TypeScript Pinnacle](/es/answers/pinnacle-odds-websocket-typescript)
- [Compresión del WebSocket de cuotas Pinnacle](/es/answers/pinnacle-odds-websocket-compression)
- [Criterio de Kelly con cuotas justas Pinnacle](/es/answers/kelly-criterion-pinnacle-fair-odds)
- [Cuotas de Pinnacle en n8n (HTTP Request)](/es/answers/pinnacle-odds-api-n8n)
- [Cuotas de Pinnacle en Python (REST)](/es/answers/pinnacle-odds-python-rest)
- [Cuotas de Pinnacle en Supabase (Edge Function)](/es/answers/pinnacle-odds-supabase-edge-function)
- [Cuotas de Pinnacle en un Cloudflare Worker](/es/answers/pinnacle-odds-cloudflare-worker)
- [Cuotas de Pinnacle en un DataFrame de pandas](/es/answers/pinnacle-odds-pandas-dataframe)
- [Cuotas Pinnacle con IMPORTDATA](/es/answers/pinnacle-odds-google-sheets-importdata)
- [Cuotas Pinnacle de un equipo por nombre (API)](/es/answers/pinnacle-odds-by-team-name)
- [Cuotas Pinnacle en ChatGPT y Claude por MCP](/es/answers/pinnacle-odds-chatgpt-mcp)
- [Cuotas Pinnacle en Excel Power Query](/es/answers/pinnacle-odds-excel-power-query)
- [Cuotas Pinnacle en JS del navegador (CORS)](/es/answers/pinnacle-odds-browser-javascript-cors)
- [Cuotas Pinnacle en Sheets sin código](/es/answers/no-code-odds-google-sheets)
- [Cuotas Pinnacle sin scraping](/es/answers/pinnacle-odds-without-scraping)
- [Cuotas Pinnacle: histórico o feed en vivo](/es/answers/pinnacle-odds-historical-vs-live)
- [Códigos de error de la API de cuotas Pinnacle](/es/answers/pinnacle-odds-api-error-codes)
- [Detectar steam moves con la API Pinnacle](/es/answers/detect-steam-moves-pinnacle-api)
- [Feed XML de cuotas en vivo — alternativa JSON](/es/answers/live-odds-xml-feed-to-json)
- [Frames raw de Pinnacle (Pro)](/es/answers/pinnacle-odds-websocket-raw-frames)
- [Guardar cuotas de Pinnacle en Postgres](/es/answers/pinnacle-odds-postgres-storage)
- [Guía Excel Power Query Pinnacle](/es/answers/pinnacle-odds-excel-power-query-guide)
- [Heartbeat ping/pong del WebSocket de Pinnacle](/es/answers/pinnacle-odds-websocket-ping-pong)
- [Histórico de player props (alcance Pinnacle)](/es/answers/historical-player-props-odds-pinnacle)
- [Hoja de registro de apuestas con CLV (Pinnacle)](/es/answers/bet-tracker-spreadsheet-clv)
- [Ids y slugs de deportes PinnFeed (13)](/es/answers/pinnacle-odds-api-sport-ids)
- [Latencia API de cuotas: mídela tú](/es/answers/pinnacle-odds-api-latency-honesty)
- [Line shopping frente al precio de Pinnacle (API)](/es/answers/line-shopping-vs-pinnacle)
- [Límites de la API de cuotas Pinnacle](/es/answers/pinnacle-odds-api-rate-limits)
- [Líneas de cierre Pinnacle en Python (CLV)](/es/answers/pinnacle-odds-python-closing-lines-clv)
- [Líneas de cierre Pinnacle — fútbol europeo](/es/answers/pinnacle-closing-lines-european-football-api)
- [Machine learning con cierres de Pinnacle](/es/answers/machine-learning-pinnacle-closing-odds)
- [Margen (overround) de Pinnacle por mercado](/es/answers/pinnacle-margin-overround-api)
- [Mejor API de deportes vs de cuotas](/es/answers/best-sports-api-vs-odds-api)
- [odds-api.io anual vs Builder](/es/answers/odds-api-io-annual-vs-pinnfeed-builder)
- [odds-api.io vs PinnFeed — €118 vs €99](/es/odds-api-io-alternative)
- [OddsJam API: cotización vs self-serve](/es/answers/oddsjam-api-quote-vs-self-serve)
- [OddsJam vs PinnFeed — cotización vs €99](/es/oddsjam-alternative)
- [oddssea vs PinnFeed — $59 pre vs €99 live](/es/answers/oddssea-vs-pinnfeed)
- [OpticOdds vs PinnFeed — SSE vs WS](/es/opticodds-alternative)
- [Paginar cuotas Pinnacle en Python (REST)](/es/answers/pinnacle-odds-python-events-odds-pagination)
- [Pago con crypto en la API de cuotas PinnFeed](/es/answers/pinnacle-odds-api-crypto-payment)
- [Pantalla de EV con fairProb en Python](/es/answers/pinnacle-odds-python-fairprob-ev-screen)
- [PinnFeed: facturación anual y trimestral](/es/answers/pinnfeed-annual-quarterly-billing)
- [Plan Builder de PinnFeed — qué incluye](/es/answers/pinnacle-odds-api-builder-whats-included)
- [Precio de APIs de cuotas: por petición o plana](/es/answers/odds-api-pricing-per-request-vs-flat)
- [Precio WebSocket oddssea — $59 / $149](/es/answers/oddssea-websocket-price)
- [Prematch solo vs WS live+prematch](/es/answers/pinnacle-prematch-vs-live-websocket)
- [Probabilidad implícita vía fairProb](/es/answers/pinnacle-odds-implied-probability-api)
- [Probar el WebSocket de cuotas con wscat](/es/answers/pinnacle-odds-websocket-wscat)
- [Prompt ChatGPT para API de cuotas](/es/answers/chatgpt-odds-api-prompt)
- [Prompts MCP para cuotas Pinnacle](/es/answers/pinnacle-odds-mcp-prompts-cookbook)
- [Proxy FastAPI para cuotas Pinnacle](/es/answers/pinnacle-odds-fastapi-proxy)
- [Prueba gratis de la API de cuotas Pinnacle](/es/answers/pinnacle-odds-api-free-trial)
- [Push en vivo vs polling REST](/es/answers/pinnacle-live-odds-push-vs-polling)
- [Recetas curl de la API de cuotas Pinnacle](/es/answers/pinnacle-odds-curl-openapi-recipes)
- [Referencia de herramientas MCP de PinnFeed](/es/answers/pinnacle-odds-mcp-tools-reference)
- [Rotar o revocar una clave API de PinnFeed](/es/answers/pinnacle-odds-api-key-rotation)
- [Sondear caídas de cuotas Pinnacle en Node.js](/es/answers/pinnacle-odds-nodejs-drops-poller)
- [SportsDataIO vs PinnFeed](/es/sportsdataio-alternative)
- [SSE drops vs WebSocket Pinnacle](/es/answers/pinnacle-odds-sse-vs-websocket)
- [Steam chasing con alertas de caídas de Pinnacle](/es/answers/steam-chasing-pinnacle-alerts)
- [Steam de Pinnacle a Telegram](/es/answers/pinnacle-steam-telegram-alert)
- [Steam moves en Python (WebSocket)](/es/answers/steam-move-detection-python-websocket)
- [The Odds API polling vs push PinnFeed](/es/answers/the-odds-api-polling-vs-pinnfeed-push)
- [The Odds API vs PinnFeed — poll vs push](/es/the-odds-api-alternative)
- [Tracker CLV MLB vía API Pinnacle](/es/answers/mlb-closing-line-value-tracker-api)
- [Trigger temporal de cuotas Pinnacle en Sheets](/es/answers/pinnacle-odds-sheets-time-driven-trigger)
- [Vibe-codea un escáner +EV educativo](/es/answers/vibe-coding-ev-scanner)
- [Webhook vs WebSocket para cuotas Pinnacle](/es/answers/pinnacle-odds-webhook-vs-websocket)
- [WebSocket cuotas Pinnacle en Kotlin (OkHttp)](/es/answers/pinnacle-odds-websocket-kotlin)
- [WebSocket de cuotas Pinnacle en Node.js](/es/answers/pinnacle-odds-websocket-nodejs-reconnect)
- [WebSocket de cuotas Pinnacle: ejemplo Python](/es/answers/pinnacle-odds-websocket-python-example)
- [WebSocket de Pinnacle: snapshot y delta](/es/answers/pinnacle-odds-websocket-snapshot-delta)
- [WS Pinnacle: precios stale y reconexión](/es/answers/pinnacle-websocket-stale-price-reconnect)
- [¿Mejor API de datos de apuestas?](/es/answers/best-sports-betting-data-api)
- [¿The Odds API tiene WebSocket?](/es/answers/the-odds-api-websocket)
- [¿Uso comercial de los datos Pinnacle?](/es/answers/pinnacle-odds-api-commercial-use)
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas.*
## Preguntas frecuentes
### ¿Por qué hay menos páginas que en inglés?
Traducimos primero las preguntas más buscadas. El resto está en las [respuestas en inglés](/answers), con el mismo código.
### ¿Por dónde empiezo?
Por el [inicio rápido](/es/quickstart) y la [clave gratis](/signup); después, [límites por plan](/es/answers/pinnacle-odds-api-rate-limits) y [autenticación](/es/answers/pinnacle-odds-api-authentication).
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-api-free-trial
# Prueba gratis de la API de cuotas Pinnacle: cómo funciona
**Respuesta:** todos los planes de pago de PinnFeed (Hobby, Builder, Pro) empiezan con una prueba gratis de 3 días, con facturación mensual, trimestral o anual. Se pide tarjeta al pagar y se cobra automáticamente después del día 3 salvo que canceles antes. Hay una prueba por cliente: otra cuenta con el mismo email o la misma tarjeta no recibe otra. Si solo quieres ver los datos, el plan Free no pide tarjeta.
PinnFeed (pinnfeed.io, con doble n) es una API de cuotas de Pinnacle, no la app de Pinterest PinFeed.
## ¿Prueba o plan Free?
| | Plan Free | Prueba de un plan de pago (3 días) |
|---|---|---|
| Tarjeta | No hace falta | Obligatoria; se cobra tras el día 3 salvo que canceles |
| Datos | REST con 30 s de retraso, 2 deportes, mercados principales, 1.000 peticiones/día | El plan completo que elijas desde el primer minuto |
| WebSocket | No | Builder (3 conexiones) y Pro (10) |
| Registros de cierre | No | Builder y Pro |
| Termina | Nunca | Pasa al plan de pago tras el día 3 |
## Aprovecha los 3 días
1. **Día 1:** conecta el WebSocket con la [prueba con wscat](/es/answers/pinnacle-odds-websocket-wscat) y luego un cliente real: [Python](/es/answers/pinnacle-odds-websocket-python-example) o [Node.js con reconexión](/es/answers/pinnacle-odds-websocket-nodejs-reconnect).
2. **Día 2:** monta tu caso real: [alertas de steam](/es/answers/steam-chasing-pinnacle-alerts), un [filtro de EV](/es/answers/pinnacle-odds-python-fairprob-ev-screen) o un [bot](/es/answers/sports-betting-bot-architecture).
3. **Día 3:** revisa los registros de cierre con `/v1/closing?date=` (Builder) y decide. Mide la latencia tú mismo en tu red ([por qué no publicamos una cifra](/es/answers/pinnacle-odds-api-latency-honesty)).
## Cómo empezar
Elige plan en [precios](/es/pricing#plan-builder): Builder cuesta €99/mes, Hobby €29/mes (solo REST) y Pro €199/mes. Cualquier error de la API que un plan superior resolvería incluye un `upgrade_url` que arranca la prueba de ese plan. Trimestral y anual: [periodos de facturación](/es/answers/pinnfeed-annual-quarterly-billing).
*Contenido educativo para mayores de 18 años. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Puedo cancelar durante la prueba?
Sí. Si cancelas antes de que termine, no se cobra la tarjeta. Gestionas la suscripción desde el portal de facturación del panel.
### ¿Por qué piden tarjeta?
La prueba pasa sola al plan de pago, así que el checkout pide la tarjeta al principio. Si aún no quieres dar una tarjeta, usa el plan Free.
### Ya tuve una prueba. ¿Puedo tener otra?
No. Si el email o la tarjeta ya usaron una prueba, la nueva suscripción termina la prueba al instante y se cobra el plan.
---
Source: https://pinnfeed.io/es/answers/pinnacle-odds-historical-vs-live
# Cuotas de Pinnacle: datos históricos o feed en vivo
**Respuesta:** un feed en vivo responde a "cuál es el precio ahora y cuándo se mueve"; los datos históricos, a "cuál era el precio entonces". PinnFeed es ante todo un feed en vivo: snapshots REST en todos los planes y push por WebSocket en Builder y Pro. Para el histórico, Builder y Pro guardan además **registros de cierre** (los precios prepartido que PinnFeed tenía cuando detectó cada inicio) en `/v1/closing/{eventId}` y `/v1/closing?date=`. Esos registros solo llegan hasta la fecha en que PinnFeed empezó a guardarlos; no hay un archivo de varias temporadas en los planes self-serve. Si necesitas cada tick intermedio, guarda el stream tú mismo desde el primer día.
## ¿Qué necesitas?
| Objetivo | Feed en vivo | Registros de cierre | Tu propio log |
|---|---|---|---|
| Alertas, bots, pantallas en vivo | Sí | — | Opcional |
| CLV de las apuestas que hagas desde ahora | Precio al apostar | Cierre por mercado | Guarda tu precio |
| Backtest de temporadas pasadas | — | Solo desde el inicio de PinnFeed | Solo desde tu inicio |
| Gráficos de movimiento por partido | Push o `/v1/drops` | Solo el cierre | Cada delta que guardes |
Los archivos históricos profundos son otro producto. Varios proveedores venden cuotas históricas o datasets de cierre de Pinnacle; compáralos en sus propios términos. PinnFeed no afirma tener más ni mejor histórico que ellos.
## Cómo es un registro de cierre
`GET /v1/closing?date=2026-11-08&sport=soccer&main=true&limit=2000` devuelve `{date, offset, limit, count, closing: [...]}`. Cada fila trae `eventId`, `sportId`, `league {id, name}`, `home`, `away`, `startTime`, `capturedAt` y un `market` con `key`, `type`, `period`, `line`, `main`, `margin`, `maxStake` y `outcomes`. Pagina con `offset` mientras `count` sea igual a `limit`. Free y Hobby reciben `403 plan_lacks_history`.
## Construye tu propio histórico
- **Snapshots:** consulta `/v1/odds` con un horario y guárdalo en Postgres: [patrón de almacenamiento](/es/answers/pinnacle-odds-postgres-storage).
- **Cada cambio:** escribe los frames `delta` del WebSocket en disco o en una tabla: [snapshot + delta](/es/answers/pinnacle-odds-websocket-snapshot-delta).
- **Cierres en bloque:** un job diario a Parquet: [DuckDB + Parquet](/es/answers/pinnacle-closing-odds-duckdb-parquet).
- **Exportaciones masivas (CSV/Parquet):** Enterprise.
## Planes
Free: REST en vivo con 30 s de retraso. Hobby (€29/mes): REST en tiempo real. [Builder](/es/pricing#plan-builder) (€99/mes): WebSocket y registros de cierre. Prueba de 3 días; se requiere tarjeta y se cobra después del día 3 salvo que canceles.
*Contenido educativo para mayores de 18 años. Sin pronósticos ni ganancias garantizadas. En España, apuesta solo con operadores con licencia de la DGOJ.*
## Preguntas frecuentes
### ¿Puedo descargar las cuotas de Pinnacle de la temporada pasada?
No en los planes self-serve, salvo que PinnFeed ya guardara cierres de esas fechas. Comprueba `/v1/closing?date=` para los días que necesitas durante la prueba.
### ¿Los registros de cierre son el cierre oficial de Pinnacle?
Son los precios prepartido que PinnFeed tenía al detectar el inicio, con su `capturedAt`. PinnFeed es independiente de Pinnacle.
### ¿Incluye cuotas de apertura?
No como campo aparte. Guarda el primer precio que veas de cada mercado si necesitas aperturas.
---
Source: https://pinnfeed.io/es/guides/pinnacle-odds-websocket-python-node
# Cuotas de Pinnacle en tiempo real por WebSocket con Python y Node
En esta guía construyes un cliente que mantiene en memoria una copia viva de los precios de Pinnacle: se conecta, se suscribe, carga el snapshot, aplica cada delta, responde a los latidos y reconecta solo. Las demás guías (alertas de steam, value betting, el bot de Telegram) se apoyan en él.
Necesitas una clave de PinnFeed en el plan **Builder** (el plan WebSocket, 99 €/mes, 3 días gratis). Con una clave Free o Hobby puedes seguir los ejemplos REST de la [documentación](/docs/rest) (en inglés).
## Paso 1 — Consigue una clave y guárdala en el entorno
Crea una clave en el [panel](/dashboard) y expórtala, para que nunca acabe dentro de tu código:
```bash
export PINNFEED_KEY="ps_live_..."
```
## Paso 2 — Entiende los frames
Después de conectarte y enviar `subscribe`, el servidor manda:
1. `subscribed` y luego un **snapshot** por partes (`part`, `parts`, `final`) con todos los eventos y mercados que cumplen tus filtros;
2. frames **delta**, cada uno con una lista de `changes`: `upsert` trae el objeto nuevo completo y `remove` solo su id;
3. un **ping** cada 20 segundos. Responde con `{"type":"pong"}` o el servidor cerrará el socket tras 60 segundos de silencio.
Los mercados se identifican por `id` (`eventId:key`), así que un diccionario es todo el estado que necesitas. Cada resultado lleva `decimal`, `american`, `fair` (cuota justa sin margen) y `fairProb`. La [referencia del WebSocket](/docs/websocket) (en inglés) lista todos los campos.
## Paso 3 — El cliente en Python
Instala la única dependencia con `pip install websockets` (Python 3.9+). Guárdalo como `pinnfeed_stream.py`; las guías de steam y de Telegram lo importan.
```python
# pinnfeed_stream.py: mantiene una copia en vivo del libro de Pinnacle desde el WebSocket de PinnFeed.
# pip install websockets (Python 3.9+)
import asyncio, json, os, random
import websockets
WS_URL = os.environ.get("PINNFEED_WS", "wss://pinnfeed.io/v1/stream")
KEY = os.environ["PINNFEED_KEY"]
SIDES = {"home", "away", "draw", "over", "under"}
class Book:
"""Eventos y mercados por id, actualizados con los frames snapshot + delta."""
def __init__(self):
self.events, self.markets = {}, {}
def apply(self, msg, on_market=None):
if msg["type"] == "snapshot":
for e in msg["events"]:
self.events[e["id"]] = e
for m in msg["markets"]:
self.markets[m["id"]] = m
elif msg["type"] == "delta":
for c in msg["changes"]:
if c["kind"] == "event" and c["op"] == "upsert":
self.events[c["event"]["id"]] = c["event"]
elif c["kind"] == "event" and c["op"] == "remove":
self.events.pop(c["id"], None)
for mid in [k for k, m in self.markets.items() if m["eventId"] == c["id"]]:
del self.markets[mid]
elif c["kind"] == "market" and c["op"] == "upsert":
old = self.markets.get(c["market"]["id"])
self.markets[c["market"]["id"]] = c["market"]
if on_market:
on_market(old, c["market"], self.events.get(c["market"]["eventId"]))
elif c["kind"] == "market" and c["op"] == "remove":
self.markets.pop(c["id"], None)
async def stream(subscription, on_market=None, on_ready=None):
"""Conecta, se suscribe y mantiene el libro al día; reconecta con backoff indefinidamente."""
delay = 1
while True:
book = Book()
try:
async with websockets.connect(WS_URL, additional_headers={"x-api-key": KEY}, max_size=None) as ws:
await ws.send(json.dumps({"type": "subscribe", **subscription}))
async for raw in ws:
msg = json.loads(raw)
if msg["type"] == "ping":
await ws.send('{"type":"pong"}')
elif msg["type"] == "error":
print("server error:", msg["code"], msg["message"])
elif msg["type"] in ("snapshot", "delta"):
book.apply(msg, on_market if msg["type"] == "delta" else None)
if msg["type"] == "snapshot" and msg.get("final") and on_ready:
on_ready(book)
delay = 1
except (OSError, websockets.ConnectionClosed) as e:
print(f"disconnected ({e}); reconnecting in {delay}s")
await asyncio.sleep(delay + random.random())
delay = min(delay * 2, 30)
if __name__ == "__main__":
def ready(book):
print(f"book ready: {len(book.events)} events, {len(book.markets)} markets")
def moved(old, new, event):
if old and event:
for o_old, o_new in zip(old["outcomes"], new["outcomes"]):
if o_new["name"] in SIDES and o_old["decimal"] != o_new["decimal"]:
print(f'{event["home"]} v {event["away"]} {new["type"]} {o_new["name"]}: '
f'{o_old["decimal"]} -> {o_new["decimal"]} (fair {o_new["fair"]})')
asyncio.run(stream({"sports": ["soccer"], "markets": ["moneyline"], "main": True, "specials": False}, moved, ready))
```
Ejecútalo con `python pinnfeed_stream.py`. Verás `book ready: N events, M markets` y después una línea por cada movimiento de precio.
## Paso 4 — El cliente en Node
La misma lógica en Node 18+ con `npm install ws`. Guárdalo como `stream.mjs` y ejecuta `node stream.mjs`.
```javascript
// stream.mjs: libro de Pinnacle en vivo desde el WebSocket de PinnFeed (Node 18+).
// npm install ws
import WebSocket from 'ws';
const WS_URL = process.env.PINNFEED_WS || 'wss://pinnfeed.io/v1/stream';
const KEY = process.env.PINNFEED_KEY;
const SIDES = new Set(['home', 'away', 'draw', 'over', 'under']);
const events = new Map();
const markets = new Map();
function connect(delay = 1000) {
const ws = new WebSocket(WS_URL, { headers: { 'x-api-key': KEY }, perMessageDeflate: true });
ws.on('open', () => {
delay = 1000;
ws.send(JSON.stringify({ type: 'subscribe', sports: ['soccer', 'tennis'], markets: ['moneyline'], main: true, specials: false }));
});
ws.on('message', (raw) => {
const msg = JSON.parse(raw);
if (msg.type === 'ping') return ws.send('{"type":"pong"}');
if (msg.type === 'error') return console.error('server error:', msg.code, msg.message);
if (msg.type === 'snapshot') {
if (msg.part === 1) { events.clear(); markets.clear(); }
msg.events.forEach((e) => events.set(e.id, e));
msg.markets.forEach((m) => markets.set(m.id, m));
if (msg.final) console.log(`book ready: ${events.size} events, ${markets.size} markets`);
}
if (msg.type === 'delta') {
for (const c of msg.changes) {
if (c.kind === 'event') c.op === 'upsert' ? events.set(c.event.id, c.event) : events.delete(c.id);
if (c.kind === 'market' && c.op === 'remove') markets.delete(c.id);
if (c.kind === 'market' && c.op === 'upsert') {
const old = markets.get(c.market.id);
markets.set(c.market.id, c.market);
const ev = events.get(c.market.eventId);
if (!old || !ev) continue;
c.market.outcomes.forEach((o, i) => {
const prev = old.outcomes[i];
if (prev && SIDES.has(o.name) && prev.decimal !== o.decimal) console.log(`${ev.home} v ${ev.away} ${o.name}: ${prev.decimal} -> ${o.decimal} (fair ${o.fair})`);
});
}
}
}
});
ws.on('close', (code) => {
const wait = Math.min(delay * 2, 30000);
console.log(`closed (${code}); reconnecting in ${wait / 1000}s`);
setTimeout(() => connect(wait), wait + Math.random() * 1000);
});
ws.on('error', (e) => console.error('ws error:', e.message));
}
connect();
```
## Paso 5 — Acota la suscripción
Los filtros se aplican en el servidor, así que solo recibes y procesas lo que pides:
```json
{ "type": "subscribe", "sports": ["tennis"], "live": true, "markets": ["moneyline", "total"], "main": true }
```
- `sports`: slugs o ids; `leagues` y `events`: listas de ids.
- `live`: `true` solo en vivo, `false` solo prepartido; si lo omites, ambos.
- `main: true` deja solo el ganador, el hándicap y el total principales de cada evento.
- Volver a enviar `subscribe` sustituye la suscripción y envía un snapshot nuevo.
## Lista de comprobación para producción
- **Reconecta con backoff y jitter** (los dos clientes lo hacen: 1 s, 2 s, 4 s, hasta 30 s) y reconstruye desde el nuevo snapshot.
- **Activa la compresión**: `websockets` de Python negocia `permessage-deflate` por defecto; en Node pasa `perMessageDeflate: true`. Los snapshots se reducen entre 5 y 10 veces.
- **Lee rápido.** Si se acumulan más de 16 MB para un cliente lento, el servidor lo cierra con el código `4008`. Haz el trabajo pesado fuera del bucle del socket.
- **Usa `seq` para logs, no para detectar huecos**: los filtros se saltan los lotes a los que no estás suscrito.
## Preguntas frecuentes
### ¿Qué plan necesito para el WebSocket?
Builder (99 €/mes) o superior. Las claves Free y Hobby reciben `403 plan_lacks_ws` en el WebSocket y pueden usar REST.
### ¿Cuántas conexiones puedo abrir?
Builder permite 3 conexiones WebSocket por cuenta, Pro 10, y Enterprise 50 (más bajo petición).
### ¿Por qué algunos resultados tienen ids de participante en vez de home o away?
Los especiales y algunos futuros listan participantes en lugar de local y visitante. Suscríbete con `"specials": false` y filtra por `home`, `away`, `draw`, `over` y `under` si solo quieres líneas de partido, como hacen los ejemplos.
---
Source: https://pinnfeed.io/es/guides/dropping-odds-steam-detection
# Detecta caídas de cuotas y movimientos steam en Pinnacle en tiempo real
Un **movimiento steam** es una bajada de precio rápida y fuerte en una casa que marca el mercado, como Pinnacle, normalmente porque ha entrado dinero sharp en un lado. Las casas blandas suelen ir segundos o minutos por detrás, y por eso las alertas de steam están entre las señales más útiles que puedes sacar de un feed en vivo. En esta guía construyes un detector sobre el WebSocket de PinnFeed. Es una herramienta estadística, no un sistema de pronósticos.
## Paso 1 — Define qué es un steam
Una definición práctica que puedes ajustar:
- la cuota decimal de un resultado **baja al menos un 5%** desde su máximo de los últimos **2 minutos**;
- la **apuesta máxima** del mercado es de al menos 100, porque Pinnacle sube los límites a medida que confía más en un precio, así que los movimientos en mercados finos tienen más ruido;
- avisas **una vez por resultado y ventana**, no en cada tick.
## Paso 2 — Recibe el libro en streaming
Usa el cliente Python de la [guía de Python y Node](/es/guides/pinnacle-odds-websocket-python-node). Guárdalo como `pinnfeed_stream.py` junto al script de abajo; llama a `on_market(old, new, event)` cada vez que cambia un mercado.
## Paso 3 — Sigue el máximo móvil de cada resultado
Guarda una deque corta de `(timestamp, price)` por mercado y resultado, descarta lo que sea más antiguo que la ventana y compara el precio actual con el máximo de la ventana:
```python
# steam.py: detecta movimientos steam de Pinnacle (caídas de precio rápidas y fuertes) en el WebSocket en vivo.
# Usa pinnfeed_stream.py de la guía de Python/Node. pip install websockets
import asyncio, collections, os, time
from pinnfeed_stream import stream, SIDES
WINDOW_S = int(os.environ.get("WINDOW_S", 120)) # ventana hacia atrás
MIN_DROP = float(os.environ.get("MIN_DROP", 0.05)) # alerta cuando la cuota baja un 5% o más dentro de la ventana
MIN_STAKE = float(os.environ.get("MIN_STAKE", 100)) # ignora mercados con poca liquidez: la apuesta máxima de Pinnacle es una señal de confianza
history = collections.defaultdict(collections.deque) # (id de mercado, resultado) -> deque[(ts, decimal)]
alerted = {}
def on_market(old, new, event):
if not event or (new.get("maxStake") or 0) < MIN_STAKE:
return
now = time.time()
for o in new["outcomes"]:
if o["name"] not in SIDES:
continue
h = history[(new["id"], o["name"])]
h.append((now, o["decimal"]))
while h and now - h[0][0] > WINDOW_S:
h.popleft()
high = max(p for _, p in h)
drop = 1 - o["decimal"] / high
key = (new["id"], o["name"])
if drop >= MIN_DROP and now - alerted.get(key, 0) > WINDOW_S:
alerted[key] = now
pts = o.get("points")
line = "" if pts is None else f" {pts:g}" if new["type"] == "total" else f" {pts:+g}"
print(f'STEAM {event["sport"]} | {event["home"]} v {event["away"]} | {new["type"]}{line} {o["name"]}: '
f'{high:.3f} -> {o["decimal"]:.3f} (-{drop:.1%} in {WINDOW_S}s) fair {o["fair"]:.3f} max stake {new["maxStake"]}')
asyncio.run(stream({"sports": ["soccer", "tennis", "basketball"], "markets": ["moneyline", "spread", "total"],
"main": True, "specials": False}, on_market))
```
Ejecútalo con `python steam.py`. Los umbrales son variables de entorno; por ejemplo, `MIN_DROP=0.03 WINDOW_S=300 python steam.py` para un 3% en cinco minutos. Una línea típica:
```text
STEAM tennis | Sebastian Baez v Daniil Glinka | moneyline away: 2.260 -> 2.050 (-9.3% in 120s) fair 2.143 max stake 975
```
## Paso 4 — O pregunta al endpoint REST
Si solo necesitas una lista periódica, `GET /v1/drops` devuelve las mayores caídas en una ventana móvil, calculadas en el servidor:
```bash
curl -H "x-api-key: $PINNFEED_KEY" "https://pinnfeed.io/v1/drops?sport=soccer&live=true&minutes=10&min_pct=5"
```
Cada fila trae el evento, el mercado, la línea, el resultado, `from`, `to`, `dropPct` y `movedAt`. Funciona en todos los planes, también en Free con sus 30 segundos de retraso.
## Paso 5 — De alertas a picks
- **Compara con casas blandas.** Un steam solo sirve donde el precio blando aún no se ha movido. La [guía de value betting](/es/guides/value-betting-no-vig-fair-odds) muestra cómo cuantificar esa ventaja con las cuotas justas de Pinnacle.
- **Prefiere el prepartido para el retraso de las casas blandas**; en vivo, los movimientos suelen deberse al marcador más que a dinero sharp.
- **Mídete** con el [valor de la línea de cierre](/es/guides/closing-line-value-clv-tracking): si tus picks de steam baten el cierre de media, la señal es real.
- **Publícalos**: el [bot de picks para Telegram](/es/guides/telegram-picks-bot) y el [bot de picks para Discord](/es/guides/discord-picks-bot) envían estas alertas a un canal.
## Preguntas frecuentes
### ¿Qué diferencia hay entre caída de cuotas y steam?
Una caída de cuotas es cualquier bajada de precio. El steam es una caída rápida y significativa en una casa sharp, normalmente provocada por dinero informado, que después tiende a contagiarse a otras casas.
### ¿Por qué usar Pinnacle para detectar steam?
Pinnacle acepta límites altos y mueve sus precios con la acción sharp, así que sus movimientos son la mejor señal del mercado. Las casas blandas los copian o van por detrás.
### ¿Puedo hacerlo sin el WebSocket?
Sí, haciendo polling a `/v1/drops`, que funciona en todos los planes. El WebSocket ve cada movimiento cuando ocurre; el polling solo lo ve en tu siguiente petición.
---
Source: https://pinnfeed.io/es/guides/value-betting-no-vig-fair-odds
# Value betting frente a casas blandas con las cuotas justas de Pinnacle
Los precios de Pinnacle son lo más parecido a una probabilidad real que tiene el mercado de apuestas. Si les quitas el margen obtienes una **cuota justa**; cualquier casa blanda que pague más que esa cuota ofrece una apuesta con valor esperado positivo (+EV). PinnFeed calcula la cuota justa en cada mercado, así que la cuenta se reduce a una multiplicación. +EV es un concepto estadístico a largo plazo, no una garantía de ganar.
## Paso 1 — Entiende la cuota justa
Para un mercado con cuotas decimales `d_i`:
```text
implied_i = 1 / d_i
margin = Σ implied_i − 1
fairProb_i = implied_i / Σ implied_j (método multiplicativo)
fair_i = 1 / fairProb_i
```
Cada resultado de la API ya trae `fair` y `fairProb`, y cada mercado trae `margin`. También van los precios en bruto, por si prefieres aplicar tú el método de potencia o el de Shin.
## Paso 2 — Calcula el valor esperado
Si una casa blanda ofrece la cuota decimal `S` en un resultado cuya probabilidad justa es `p`:
```text
EV = S × p − 1
```
Con `S = 2.30` y `p = 0.488` (cuota justa 2.049), el EV es +12,3%: a largo plazo esperas 12,3 céntimos por cada euro apostado. La mayoría fija un umbral del 1–3% para absorber el ruido y el tiempo que tardas en colocar la apuesta.
## Paso 3 — Calcula el stake
Kelly completo (`(S·p − 1) / (S − 1)`) es demasiado agresivo con probabilidades estimadas. Un cuarto de Kelly es un compromiso habitual y es lo que imprime el script.
## Paso 4 — Ejecuta el script
Rellena `SOFT` con las cuotas que hayas recogido de una casa blanda (a mano, de un comparador o de otra API), con los nombres de los equipos tal y como los escribe PinnFeed. Instala `requests` y ejecuta `python value.py`:
```python
# value.py: encuentra cuotas +EV en una casa blanda usando las cuotas justas sin margen de Pinnacle.
# pip install requests
import os, requests
BASE = os.environ.get("PINNFEED_BASE", "https://pinnfeed.io")
KEY = os.environ["PINNFEED_KEY"]
# Cuotas que has recogido de una casa blanda: (local, visitante, resultado) -> cuota decimal.
SOFT = {
("Osasuna", "Malaga", "home"): 1.95,
("Colon", "Defensor Sporting", "away"): 2.30,
}
MIN_EV = 0.02 # ventaja del 2%
def kelly(price, p, fraction=0.25):
"""Stake de Kelly fraccional como parte del bankroll."""
return max(0.0, fraction * (price * p - 1) / (price - 1))
r = requests.get(f"{BASE}/v1/odds", headers={"x-api-key": KEY},
params={"sport": "soccer", "market": "moneyline", "main": "true", "limit": 1000}, timeout=20)
r.raise_for_status()
for ev in r.json()["events"]:
for m in ev["markets"]:
for o in m["outcomes"]:
soft = SOFT.get((ev["home"], ev["away"], o["name"]))
if not soft:
continue
ev_pct = soft * o["fairProb"] - 1 # valor esperado por unidad apostada
flag = "VALUE" if ev_pct >= MIN_EV else "no edge"
print(f'{flag:8} {ev["home"]} v {ev["away"]} {o["name"]}: soft {soft} vs Pinnacle {o["decimal"]} '
f'(fair {o["fair"]:.3f}, margin {m["margin"]:.1%}) EV {ev_pct:+.1%} '
f'kelly/4 {kelly(soft, o["fairProb"]):.2%}')
```
La salida es así:
```text
VALUE Colon v Defensor Sporting away: soft 2.3 vs Pinnacle 1.8065 (fair 2.049, margin 13.4%) EV +12.3% kelly/4 2.36%
```
La llamada REST funciona en todos los planes; en Free los precios tienen 30 segundos. Para valor en directo los quieres en vivo: haz la misma comparación dentro del cliente WebSocket de la [guía de Python y Node](/es/guides/pinnacle-odds-websocket-python-node), con Builder.
## Paso 5 — Contrástalo con el CLV
A corto plazo los resultados son sobre todo varianza. La respuesta honesta más rápida es el **valor de la línea de cierre**: ¿el precio que cogiste batió la cuota justa de cierre de Pinnacle? La [guía de CLV](/es/guides/closing-line-value-clv-tracking) registra cada apuesta y la mide.
## Preguntas frecuentes
### ¿Por qué usar Pinnacle como referencia?
Pinnacle trabaja con márgenes bajos y límites altos y mueve sus precios con el dinero sharp, así que su precio sin margen se usa mucho como la mejor estimación pública de la probabilidad real.
### ¿Qué método usa PinnFeed para quitar el margen?
El método multiplicativo (proporcional). Cada resultado incluye las cuotas decimales y americanas en bruto, así que puedes usar otro método.
### ¿PinnFeed da cuotas de casas blandas?
No. PinnFeed lleva solo Pinnacle. Combínalo con tus propias cuotas de casas blandas o con una API de varias casas como The Odds API.
---
Source: https://pinnfeed.io/es/guides/closing-line-value-clv-tracking
# Mide tu valor de la línea de cierre frente al cierre de Pinnacle
El **valor de la línea de cierre (CLV)** compara el precio que cogiste con el último precio del mercado antes del inicio. Batir de forma constante la cuota justa de cierre de Pinnacle es la señal temprana más sólida de que tu proceso tiene ventaja, mucho antes de que tus pérdidas y ganancias puedan demostrarlo, aunque nunca es una garantía de beneficio. PinnFeed guarda el precio de cierre de Pinnacle de cada mercado cuando empieza el evento y lo sirve desde `/v1/closing`.
## Paso 1 — La fórmula
```text
CLV = price_taken / closing_fair_price − 1
```
Usa el precio de cierre **sin margen**, no el bruto: batir un precio que aún contiene el margen de Pinnacle es más fácil y exagera tu ventaja. Si cogiste 2.10 y el mercado cerró a una cuota justa de 1.95, tu CLV es +7,7%.
## Paso 2 — Registra cada apuesta
Cada apuesta necesita el id del evento, la clave del mercado y el resultado. Los tres salen de la API: el `id` del evento, la `key` del mercado (`s;0;m` es el ganador del partido completo, `s;0;ou;2.5` el total 2.5 del partido) y el `name` del resultado (`home`, `away`, `draw`, `over`, `under`).
## Paso 3 — Ejecuta el tracker
Instala `requests`, guarda el script como `clv.py` y registra las apuestas a medida que las haces:
```python
# clv.py: registra tus apuestas y mide el valor de la línea de cierre (CLV) frente al cierre sin margen de Pinnacle.
# pip install requests Uso:
# python clv.py bet p. ej. bet 1640141281 "s;0;m" home 2.10
# python clv.py report
import os, sqlite3, sys, requests
BASE = os.environ.get("PINNFEED_BASE", "https://pinnfeed.io")
KEY = os.environ["PINNFEED_KEY"]
db = sqlite3.connect(os.environ.get("CLV_DB", "bets.db"))
db.execute("CREATE TABLE IF NOT EXISTS bets (event_id INTEGER, market_key TEXT, outcome TEXT, price REAL, "
"close_fair REAL, placed_at TEXT DEFAULT CURRENT_TIMESTAMP)")
def closing_fair(event_id, market_key, outcome):
r = requests.get(f"{BASE}/v1/closing/{event_id}", headers={"x-api-key": KEY}, timeout=20)
if r.status_code == 404:
return None # aún sin cierre (o nunca capturado)
r.raise_for_status()
for rec in r.json()["markets"]:
if rec["market"]["key"] == market_key:
for o in rec["market"]["outcomes"]:
if o["name"] == outcome:
return o["fair"]
return None
if sys.argv[1:2] == ["bet"]:
_, _, event_id, market_key, outcome, price = sys.argv
db.execute("INSERT INTO bets (event_id, market_key, outcome, price) VALUES (?,?,?,?)",
(int(event_id), market_key, outcome, float(price)))
db.commit()
print("logged")
else:
rows = db.execute("SELECT rowid, event_id, market_key, outcome, price, close_fair FROM bets").fetchall()
clvs = []
for rowid, event_id, key, outcome, price, close in rows:
if close is None:
close = closing_fair(event_id, key, outcome)
if close:
db.execute("UPDATE bets SET close_fair=? WHERE rowid=?", (close, rowid))
if close:
clv = price / close - 1
clvs.append(clv)
print(f"{event_id} {key} {outcome}: took {price}, closed fair {close:.3f} -> CLV {clv:+.2%}")
else:
print(f"{event_id} {key} {outcome}: took {price}, waiting for close")
db.commit()
if clvs:
print(f"average CLV over {len(clvs)} bets: {sum(clvs) / len(clvs):+.2%}")
```
```bash
python clv.py bet 1640229582 "s;0;m" home 2.10
python clv.py report
```
```text
1640229582 s;0;m home: took 2.1, closed fair 3.181 -> CLV -33.99%
999 s;0;m home: took 1.9, waiting for close
average CLV over 1 bets: -33.99%
```
Lanza `report` desde cron después de los inicios; el precio de cierre de cada apuesta se pide una vez y se guarda.
## Paso 4 — Interpreta el resultado
- Sobre unos cientos de apuestas, un CLV medio de **+2% o más** es un indicio fuerte de una ventaja real.
- CLV negativo con beneficio positivo suele ser suerte. Lo normal es que se diluya.
- Separa el CLV por deporte, mercado y antelación de la apuesta: te dice de dónde sale de verdad tu ventaja.
## Paso 5 — Descarga un día entero
Para investigación o backtests, pide todas las líneas de cierre de un día UTC:
```bash
curl -H "x-api-key: $PINNFEED_KEY" "https://pinnfeed.io/v1/closing?date=2026-11-08&sport=soccer&main=true"
```
## Preguntas frecuentes
### ¿Qué plan incluye las cuotas de cierre?
El historial de cuotas de cierre está incluido desde Builder (99 €/mes) y en Pro y Enterprise.
### ¿Cuándo se captura el precio de cierre?
Cuando empieza el evento: se guarda el último precio prepartido de cada mercado con la hora de captura.
### ¿Hasta cuándo llega el archivo?
Empieza el día en que se lanzó el servicio y crece cada día. Los planes Enterprise pueden exportarlo en bloque en CSV o Parquet.
---
Source: https://pinnfeed.io/es/guides/telegram-picks-bot
# Crea un bot de picks para Telegram con cuotas de Pinnacle en vivo
Este bot vigila los precios de Pinnacle en el WebSocket de PinnFeed y publica un mensaje en un canal de Telegram cada vez que un mercado hace steam, es decir, cuando su cuota baja un 5% o más en dos minutos en un mercado con una apuesta máxima razonable. Es un solo archivo de unas 70 líneas, sin librería de Telegram: llama directamente a la Bot API.
## Paso 1 — Crea el bot
1. En Telegram, abre **@BotFather**, envía `/newbot` y sigue las instrucciones. Copia el token.
2. Crea un canal y añade el bot como **administrador** con permiso para publicar.
3. Usa el nombre público del canal (`@mychannel`) como chat id, o el id numérico para un chat privado.
## Paso 2 — Configura el entorno
```bash
export PINNFEED_KEY="ps_live_..." # plan Builder (WebSocket)
export TELEGRAM_TOKEN="123456:ABC..." # de @BotFather
export TELEGRAM_CHAT="@mychannel"
npm install ws
```
Si dejas `TELEGRAM_TOKEN` sin definir, el bot funciona en **modo de prueba**: imprime los mensajes en vez de enviarlos.
## Paso 3 — El bot
Guárdalo como `telegram-picks-bot.mjs`:
```javascript
// telegram-picks-bot.mjs: publica los movimientos steam de Pinnacle en un canal de Telegram como "picks".
// npm install ws Node 18+ (global fetch)
// entorno: PINNFEED_KEY, TELEGRAM_TOKEN (de @BotFather), TELEGRAM_CHAT (p. ej. @mychannel o un id de chat)
import WebSocket from 'ws';
const WS_URL = process.env.PINNFEED_WS || 'wss://pinnfeed.io/v1/stream';
const { PINNFEED_KEY, TELEGRAM_TOKEN, TELEGRAM_CHAT } = process.env;
const MIN_DROP = Number(process.env.MIN_DROP || 0.05); // bajada del 5%...
const WINDOW_MS = Number(process.env.WINDOW_MS || 120000); // ...en menos de 2 minutos
const SIDES = new Set(['home', 'away', 'draw', 'over', 'under']);
const events = new Map();
const highs = new Map(); // "marketId|outcome" -> [{t, p}]
const sent = new Map(); // "marketId|outcome" -> hora de la última alerta
async function post(text) {
if (!TELEGRAM_TOKEN) return console.log('[dry run]', text);
const r = await fetch(`https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage`, {
method: 'POST', headers: { 'content-type': 'application/json' },
body: JSON.stringify({ chat_id: TELEGRAM_CHAT, text, disable_web_page_preview: true }),
});
if (!r.ok) console.error('telegram', r.status, await r.text());
}
function check(m) {
const ev = events.get(m.eventId);
if (!ev || (m.maxStake ?? 0) < 100) return;
const now = Date.now();
for (const o of m.outcomes) {
if (!SIDES.has(o.name)) continue;
const k = `${m.id}|${o.name}`;
const h = (highs.get(k) || []).filter((x) => now - x.t < WINDOW_MS);
h.push({ t: now, p: o.decimal });
highs.set(k, h);
const high = Math.max(...h.map((x) => x.p));
const drop = 1 - o.decimal / high;
if (drop < MIN_DROP || now - (sent.get(k) || 0) < WINDOW_MS) continue;
sent.set(k, now);
const pick = o.name === 'home' ? ev.home : o.name === 'away' ? ev.away : o.name;
const line = o.points == null ? '' : m.type === 'total' ? ` ${o.points}` : ` ${o.points > 0 ? '+' : ''}${o.points}`;
post(`📉 ${ev.sport.toUpperCase()} · ${ev.league?.name ?? ''}\n${ev.home} v ${ev.away}\n` +
`Pick: ${pick} (${m.type}${line})\nPinnacle ${high.toFixed(2)} → ${o.decimal.toFixed(2)} (−${(drop * 100).toFixed(1)}%)\n` +
`Fair now ${o.fair.toFixed(2)} · max stake ${m.maxStake}`);
}
}
function connect(delay = 1000) {
const ws = new WebSocket(WS_URL, { headers: { 'x-api-key': PINNFEED_KEY }, perMessageDeflate: true });
ws.on('open', () => {
delay = 1000;
ws.send(JSON.stringify({ type: 'subscribe', sports: ['soccer', 'tennis', 'basketball'], markets: ['moneyline', 'spread', 'total'], main: true, specials: false }));
});
ws.on('message', (raw) => {
const msg = JSON.parse(raw);
if (msg.type === 'ping') return ws.send('{"type":"pong"}');
if (msg.type === 'snapshot') msg.events.forEach((e) => events.set(e.id, e));
if (msg.type === 'delta') for (const c of msg.changes) {
if (c.kind === 'event') c.op === 'upsert' ? events.set(c.event.id, c.event) : events.delete(c.id);
if (c.kind === 'market' && c.op === 'upsert') check(c.market);
}
});
ws.on('close', () => setTimeout(() => connect(Math.min(delay * 2, 30000)), delay));
ws.on('error', (e) => console.error('ws error:', e.message));
}
connect();
```
## Paso 4 — Ejecútalo y pruébalo
```bash
node telegram-picks-bot.mjs
```
Un mensaje tiene este aspecto:
```text
📉 SOCCER · Italy - Serie A
Udinese v Fiorentina
Pick: Udinese (spread +0.25)
Pinnacle 1.88 → 1.70 (−9.5%)
Fair now 1.83 · max stake 150
```
Ajusta el volumen con `MIN_DROP` y `WINDOW_MS`; por ejemplo, `MIN_DROP=0.08` para menos alertas y más fuertes.
## Paso 5 — Mantenlo en marcha
- Ejecútalo con `systemd`, `pm2` o un contenedor que se reinicie si falla; el bot se reconecta solo al WebSocket.
- Telegram permite unos 20 mensajes por minuto por grupo o canal. Sube `MIN_DROP` si recibes respuestas `429`.
- Publica tu historial con honestidad: registra cada pick y mídelo con el [valor de la línea de cierre](/es/guides/closing-line-value-clv-tracking).
## Preguntas frecuentes
### ¿Qué plan de PinnFeed necesita el bot?
Builder (99 €/mes) o superior, porque usa el WebSocket. Para un bot más lento en Free o Hobby, haz polling a `/v1/drops` cada minuto.
### ¿Puedo publicar los picks en Discord?
Sí. Sustituye la función `post` por un POST a la URL de un webhook de Discord con el cuerpo `{"content": text}`. El bot completo (embeds, cola y control de 429) está en la [guía del bot de picks para Discord](/es/guides/discord-picks-bot).
### ¿Es legal publicar picks?
Las normas sobre pronósticos y publicidad de apuestas cambian según el país (en España, por ejemplo, la publicidad del juego está regulada). Revisa las normas de donde estés tú y tu audiencia, dirígete solo a mayores de 18 años y nunca presentes los picks como seguros.
---
Source: https://pinnfeed.io/es/guides/pinnacle-odds-chatgpt-claude-mcp
# Cuotas de Pinnacle en vivo dentro de ChatGPT y Claude con MCP
PinnFeed tiene un servidor [Model Context Protocol](https://modelcontextprotocol.io) alojado. Lo añades una vez a tu asistente y este puede consultar cuotas de Pinnacle en vivo y prepartido, caídas, cuotas justas y cuotas de cierre cuando se lo pidas. No pegas datos ni escribes código.
## Paso 1 — Una clave para el asistente
Crea una clave aparte en el [panel](/dashboard) con el nombre del asistente (por ejemplo, "claude"), para poder revocarla sola. Cada llamada a una herramienta cuenta como una petición REST de tu plan; Free funciona con datos con 30 segundos de retraso.
## Paso 2 — Añade el servidor
**Claude Code**
```bash
claude mcp add --transport http pinnfeed https://pinnfeed.io/mcp --header "Authorization: Bearer YOUR_KEY"
```
**Claude (web y escritorio):** Settings → Connectors → Add custom connector, URL `https://pinnfeed.io/mcp?key=YOUR_KEY`.
**ChatGPT:** Settings → Apps & Connectors → Advanced → activa Developer mode y crea un conector con la URL de servidor `https://pinnfeed.io/mcp?key=YOUR_KEY` y sin autenticación.
**Cursor** (`~/.cursor/mcp.json`):
```json
{ "mcpServers": { "pinnfeed": { "url": "https://pinnfeed.io/mcp", "headers": { "Authorization": "Bearer YOUR_KEY" } } } }
```
Los fragmentos para VS Code Copilot y Codex CLI están en la [documentación de MCP](/docs/mcp) (en inglés).
## Paso 3 — Pregunta
El asistente elige la herramienta. Prompts que funcionan bien (puedes escribirlos en español):
- "¿Qué cuotas de fútbol han bajado más en Pinnacle en los últimos 15 minutos?" (`get_drops`)
- "Muéstrame los ganadores de tenis en vivo con la cuota justa sin margen y el margen." (`get_live_odds`)
- "¿Cuál es la cuota justa del Liverpool - Manchester United y cuál es la apuesta máxima?" (`search_events` y luego `get_event`)
- "Una casa blanda ofrece 2.30 al visitante en Colon - Defensor Sporting. ¿Es +EV frente a Pinnacle?" (`get_event` y el asistente hace la cuenta)
- "Dame las cuotas de cierre del evento 1640229582." (`get_closing_odds`, Builder y superiores)
## Paso 4 — Pruébalo sin asistente
El servidor es JSON-RPC sobre HTTP, así que puedes probar cualquier herramienta con curl:
```bash
curl -s https://pinnfeed.io/mcp -H "Authorization: Bearer $PINNFEED_KEY" \
-H "content-type: application/json" -H "accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_drops","arguments":{"sport":"soccer","minutes":15}}}'
```
El resultado es un bloque de texto JSON con las caídas: evento, mercado, línea, resultado, `from`, `to`, `dropPct` y `movedAt`.
## Paso 5 — Pasa al código
Cuando una pregunta se convierte en estrategia, llévala al código: la [guía de steam](/es/guides/dropping-odds-steam-detection) y la [guía de value betting](/es/guides/value-betting-no-vig-fair-odds) hacen lo mismo de forma continua sobre el WebSocket.
## Preguntas frecuentes
### ¿Qué herramientas expone el servidor MCP de PinnFeed?
`get_account`, `list_sports`, `search_events`, `get_live_odds`, `get_prematch_odds`, `get_event`, `get_drops` y `get_closing_odds`.
### ¿El servidor MCP necesita un plan de pago?
No. Funciona en todos los planes con los límites de cada uno: Free tiene 30 segundos de retraso y 1.000 peticiones al día. Las cuotas de cierre requieren Builder o superior.
### ¿Es seguro poner mi clave en una URL?
Trátala como una contraseña. Usa una clave dedicada por asistente y revócala desde el panel si se filtra.
---
Source: https://pinnfeed.io/es/guides/pinnacle-odds-google-sheets
# Cuotas de Pinnacle en Google Sheets
Esta guía escribe los 1X2 de fútbol de Pinnacle en una hoja de Google Sheets: una fila por partido, con cuotas decimales, cuotas justas sin margen y el margen del mercado. Un activador por tiempo actualiza la pestaña cada 15 minutos. El script usa la API REST de PinnFeed, así que funciona en el plan **Free** (0 €, 30 segundos de retraso, 1.000 peticiones/día).
## Paso 1 — Consigue una clave Free
1. Crea una cuenta en [pinnfeed.io](/signup) y abre el [panel](/dashboard).
2. Crea una clave y cópiala. Las claves tienen la forma `ps_live_…`.
3. En Free, elige hasta dos deportes en el panel. El script usa fútbol (`soccer`) por defecto; cambia `SPORT` si elegiste otro.
No necesitas Builder para Sheets. Builder (99 €/mes, el plan WebSocket) es para clientes push en tiempo real como los de la [guía de Python y Node](/es/guides/pinnacle-odds-websocket-python-node).
## Paso 2 — Crea la hoja de cálculo
1. Crea una hoja nueva de Google Sheets.
2. Renombra la primera pestaña a **Odds** (nombre exacto; el script la busca así).
3. Abre **Extensiones → Apps Script**. Borra la función de ejemplo `myFunction` y deja el proyecto vacío para el siguiente paso.
## Paso 3 — Pega el script y define las propiedades
Pega esto en `Code.gs`:
```javascript
// Google Apps Script: Extensiones → Apps Script, pega este archivo.
// Propiedades del script (Configuración del proyecto → Propiedades del script):
// PINNFEED_BASE = https://pinnfeed.io
// PINNFEED_KEY = ps_live_...
// Crea una pestaña llamada "Odds", ejecuta refreshOdds una vez y añade un activador cada 15 minutos.
const PROPS = PropertiesService.getScriptProperties();
const BASE = PROPS.getProperty('PINNFEED_BASE') || 'https://pinnfeed.io';
const KEY = PROPS.getProperty('PINNFEED_KEY');
const SPORT = 'soccer'; // cámbialo a basketball, tennis, … (tiene que estar en tu plan)
function refreshOdds() {
if (!KEY) {
console.error('Set script property PINNFEED_KEY first');
return;
}
const url = BASE + '/v1/odds'
+ '?sport=' + encodeURIComponent(SPORT)
+ '&market=moneyline&main=true&live=false&limit=500';
const res = UrlFetchApp.fetch(url, {
headers: { 'x-api-key': KEY },
muteHttpExceptions: true,
});
const code = res.getResponseCode();
if (code !== 200) {
console.warn('PinnFeed HTTP ' + code + ': ' + res.getContentText().slice(0, 300));
return; // si falla la llamada, no toca la pestaña
}
const data = JSON.parse(res.getContentText());
const rows = [];
for (const ev of data.events || []) {
const ml = (ev.markets || []).find((m) => m.type === 'moneyline' && m.main);
if (!ml) continue;
const byName = {};
for (const o of ml.outcomes || []) byName[o.name] = o;
const home = byName.home || {};
const draw = byName.draw || {};
const away = byName.away || {};
rows.push([
ev.startTime ? new Date(ev.startTime) : '',
(ev.league && ev.league.name) || '',
ev.home || '',
ev.away || '',
home.decimal || '',
draw.decimal || '',
away.decimal || '',
home.fair || '',
draw.fair || '',
away.fair || '',
ml.margin != null ? ml.margin : '',
ev.id,
]);
}
const sheet = SpreadsheetApp.getActive().getSheetByName('Odds');
if (!sheet) {
console.error('Create a tab named Odds first');
return;
}
sheet.clearContents();
sheet.appendRow([
'Starts', 'League', 'Home', 'Away',
'1', 'X', '2',
'Fair 1', 'Fair X', 'Fair 2',
'Margin', 'Event id',
]);
if (rows.length) {
sheet.getRange(2, 1, rows.length, 12).setValues(rows);
}
console.log('Wrote ' + rows.length + ' moneyline rows for ' + SPORT);
}
```
Después abre el engranaje del proyecto (**Configuración del proyecto**) y, en **Propiedades del script**, añade:
| Propiedad | Valor |
|---|---|
| `PINNFEED_KEY` | tu clave (`ps_live_…`) |
| `PINNFEED_BASE` | `https://pinnfeed.io` (opcional; es el valor por defecto) |
Nunca pegues la clave en las celdas de la hoja ni compartas públicamente el proyecto de Apps Script.
## Paso 4 — Ejecútalo una vez y autorízalo
1. Elige `refreshOdds` en el desplegable de funciones y pulsa **Ejecutar**.
2. Google te pedirá permiso para conectarse a un servicio externo y editar la hoja. Acéptalo para tu cuenta.
3. Recarga la hoja. La pestaña Odds debería mostrar las columnas `Starts`, `League`, `Home`, `Away`, `1`, `X`, `2`, las tres cuotas justas, `Margin` y `Event id`.
Si una llamada falla (clave incorrecta, límite de peticiones, deporte fuera de tu plan), el script registra un aviso y **deja las filas anteriores como estaban**, así que un mal minuto nunca vacía el tablero.
## Paso 5 — Añade un activador cada 15 minutos
1. En Apps Script, abre **Activadores** (icono del reloj) → **Añadir activador**.
2. Función: `refreshOdds`. Fuente del evento: **Según tiempo**. Tipo: **Temporizador por minutos**. Intervalo: **Cada 15 minutos**.
3. Guarda.
Son 96 llamadas al día para un deporte, muy por debajo de las 1.000 peticiones/día y 1 req/s del plan Free. Dos deportes cada 30 minutos también son 96. Consulta [planes y límites](/docs/limits) (en inglés).
| Activador | Llamadas / día | ¿Cabe en Free? |
|---|---|---|
| Cada 15 min, 1 deporte | 96 | sí |
| Cada 30 min, 2 deportes | 96 | sí |
| Cada 15 min, 2 deportes | 192 | sí |
| Cada 1 min, 1 deporte | 1.440 | no — necesita Hobby o superior (sin cuota diaria) |
Apps Script tiene además sus propias cuotas; el activador por tiempo más corto es de un minuto.
## Paso 6 — Lee las cuotas justas y los márgenes
Cada fila de 1X2 lleva los campos sin margen de PinnFeed descritos en el [esquema](/docs/schema):
- `Fair 1` / `Fair X` / `Fair 2` — la cuota decimal `fair` de cada resultado (margen eliminado, método multiplicativo).
- `Margin` — el `margin` del mercado (sobrerredondeo = suma de probabilidades implícitas − 1).
Usa esas columnas cuando compares una cuota de una casa blanda en otra pestaña: el valor esperado es `soft × (1 / fair) − 1`, la misma cuenta de la [guía de value betting](/es/guides/value-betting-no-vig-fair-odds). Para los movimientos steam en vivo, Sheets no es la herramienta: usa el WebSocket de Builder y la [guía de detección de steam](/es/guides/dropping-odds-steam-detection).
## Preguntas frecuentes
### ¿Qué plan de PinnFeed necesito?
Free basta para un tablero con retraso que se actualiza cada pocos minutos. Hobby (29 €/mes) quita la cuota diaria y los 30 segundos de retraso, pero sigue siendo solo REST. El push en tiempo real necesita [Builder](/es/pricing#plan-builder) (99 €/mes).
### ¿Por qué el script usa `x-api-key` en vez de un parámetro en la URL?
Es la cabecera de autenticación recomendada en la [documentación](/docs/authentication). `UrlFetchApp` de Apps Script puede enviar cabeceras, así que no hay motivo para poner la clave en la URL (donde puede acabar en los logs).
### ¿Puedo hacer un gráfico del histórico de precios?
Sí. Deja la pestaña Odds como tablero en vivo (se borra y reescribe en cada ejecución). Añade una segunda pestaña que solo agregue filas tras cada actualización e inserta un gráfico de líneas. No borres la pestaña del histórico.
### ¿Es contenido educativo para mayores de edad?
Sí. Los datos de cuotas y las herramientas de hoja de cálculo son material educativo para mayores de 18 años. Nada de esto es un pronóstico, una apuesta segura ni una promesa de beneficios.
## Relacionado
- [Referencia de la API REST](/docs/rest) (en inglés) — filtros y paginación de `/v1/odds`
- [Value betting con cuotas justas sin margen](/es/guides/value-betting-no-vig-fair-odds)
- [Bot de picks para Telegram](/es/guides/telegram-picks-bot) — si la hoja se te queda corta
- [Precios](/es/pricing)
---
Source: https://pinnfeed.io/es/guides/discord-picks-bot
# Crea un bot de picks para Discord con cuotas de Pinnacle en vivo
Este bot vigila los precios de Pinnacle en el WebSocket de PinnFeed y publica un embed en un canal de Discord cada vez que un mercado hace steam: su cuota baja un 5% o más en dos minutos en un mercado con una apuesta máxima de al menos 100. Es un solo archivo de unas 90 líneas. No necesita librería de Discord ni cuenta de bot, porque publica mediante un **webhook entrante** del canal.
Es el gemelo en Discord del [bot de picks para Telegram](/es/guides/telegram-picks-bot). La regla de detección es la que explica la [guía de detección de steam](/es/guides/dropping-odds-steam-detection). Es una herramienta educativa para mayores de 18 años, no pronósticos.
## Paso 1 — Crea el webhook
1. En tu servidor de Discord, abre **Ajustes del servidor → Integraciones → Webhooks** y elige **Nuevo webhook**.
2. Ponle nombre, elige el canal donde publicará y usa **Copiar URL del webhook**.
3. Trata esa URL como una contraseña: quien la tenga puede publicar en el canal. Si se filtra, borra el webhook y crea otro.
## Paso 2 — Configura el entorno
```bash
export PINNFEED_KEY="ps_live_..." # plan Builder (WebSocket)
export DISCORD_WEBHOOK="https://discord.com/api/webhooks/..." # del paso 1
npm install ws
```
Si dejas `DISCORD_WEBHOOK` sin definir, el bot funciona en **modo de prueba**: imprime cada alerta en vez de publicarla.
El stream necesita **Builder** (99 €/mes) o superior. Las claves Free y Hobby reciben `403 plan_lacks_ws` en `/v1/stream`; consulta los [precios](/es/pricing).
## Paso 3 — El bot
Guárdalo como `discord-picks-bot.mjs`:
```javascript
// discord-picks-bot.mjs: post Pinnacle steam moves to a Discord channel through an incoming webhook.
// npm install ws Node 18+ (global fetch)
// env: PINNFEED_KEY (Builder or higher), DISCORD_WEBHOOK (channel webhook URL; unset = dry run)
import WebSocket from 'ws';
const WS_URL = process.env.PINNFEED_WS || 'wss://pinnfeed.io/v1/stream';
const { PINNFEED_KEY, DISCORD_WEBHOOK } = process.env;
const MIN_DROP = Number(process.env.MIN_DROP || 0.05); // 5% shortening...
const WINDOW_MS = Number(process.env.WINDOW_MS || 120000); // ...inside 2 minutes
const MIN_STAKE = Number(process.env.MIN_STAKE || 100); // skip thin markets
const SIDES = new Set(['home', 'away', 'draw', 'over', 'under']);
const events = new Map();
const highs = new Map(); // "marketId|outcome" -> [{t, p}]
const sent = new Map(); // "marketId|outcome" -> last alert time
const queue = []; // embeds waiting to be posted
let busy = false;
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
// One worker drains the queue, so a slow or rate-limited webhook never blocks the stream.
async function drain() {
if (busy) return;
busy = true;
while (queue.length) {
const embed = queue.shift();
if (!DISCORD_WEBHOOK) { console.log('[dry run]', embed.title, '|', embed.description.replace(/\n/g, ' | ')); continue; }
for (let attempt = 0; attempt < 3; attempt++) {
const r = await fetch(DISCORD_WEBHOOK, {
method: 'POST', headers: { 'content-type': 'application/json' },
body: JSON.stringify({ embeds: [embed], allowed_mentions: { parse: [] } }),
}).catch((e) => ({ ok: false, status: 0, text: async () => e.message }));
if (r.status === 429) { const b = await r.json().catch(() => ({})); await sleep(1000 * (b.retry_after ?? 1)); continue; }
if (!r.ok) console.error('discord', r.status, await r.text());
break;
}
}
busy = false;
}
function post(embed) {
queue.push(embed);
if (queue.length > 50) queue.shift(); // an alert from minutes ago is no longer news
drain();
}
function check(m) {
const ev = events.get(m.eventId);
if (!ev || (m.maxStake ?? 0) < MIN_STAKE) return;
const now = Date.now();
for (const o of m.outcomes) {
if (!SIDES.has(o.name)) continue;
const k = `${m.id}|${o.name}`;
const h = (highs.get(k) || []).filter((x) => now - x.t < WINDOW_MS);
h.push({ t: now, p: o.decimal });
highs.set(k, h);
const high = Math.max(...h.map((x) => x.p));
const drop = 1 - o.decimal / high;
if (drop < MIN_DROP || now - (sent.get(k) || 0) < WINDOW_MS) continue;
sent.set(k, now);
const pick = o.name === 'home' ? ev.home : o.name === 'away' ? ev.away : o.name;
const line = o.points == null ? '' : m.type === 'total' ? ` ${o.points}` : ` ${o.points > 0 ? '+' : ''}${o.points}`;
post({
title: `📉 ${ev.home} v ${ev.away}`,
description: `**${pick}** (${m.type}${line})\nPinnacle ${high.toFixed(2)} → ${o.decimal.toFixed(2)} (−${(drop * 100).toFixed(1)}%)\n` +
`Fair now ${o.fair.toFixed(2)} · max stake ${m.maxStake}`,
color: 0xe8590c,
footer: { text: `${ev.sport.toUpperCase()} · ${ev.league?.name ?? ''} · 18+ · not a tip` },
timestamp: new Date(now).toISOString(),
});
}
}
function connect(delay = 1000) {
const ws = new WebSocket(WS_URL, { headers: { 'x-api-key': PINNFEED_KEY }, perMessageDeflate: true });
ws.on('open', () => {
delay = 1000;
ws.send(JSON.stringify({ type: 'subscribe', sports: ['soccer', 'tennis', 'basketball'], markets: ['moneyline', 'spread', 'total'], main: true, specials: false }));
});
ws.on('message', (raw) => {
const msg = JSON.parse(raw);
if (msg.type === 'ping') return ws.send('{"type":"pong"}');
if (msg.type === 'snapshot') msg.events.forEach((e) => events.set(e.id, e));
if (msg.type === 'delta') for (const c of msg.changes) {
if (c.kind === 'event') c.op === 'upsert' ? events.set(c.event.id, c.event) : events.delete(c.id);
if (c.kind === 'market' && c.op === 'upsert') check(c.market);
}
});
ws.on('close', () => setTimeout(() => connect(Math.min(delay * 2, 30000)), delay));
ws.on('error', (e) => console.error('ws error:', e.message));
}
connect();
```
Qué hace, en orden:
- **Se suscribe** a las líneas principales (moneyline, hándicap, total) de fútbol, tenis y baloncesto. Cambia `sports` por cualquiera de los 13 deportes de tu plan; el [protocolo WebSocket](/docs/websocket) (en inglés) lista todos los filtros.
- **Guarda una ventana de 2 minutos** por mercado y resultado, y marca una caída de `MIN_DROP` respecto al máximo de la ventana. Los mercados por debajo de `MIN_STAKE` se ignoran, porque un movimiento con un límite bajo dice poco.
- **Encola la publicación.** Un único proceso envía los embeds al webhook, así un webhook lento o limitado nunca bloquea el stream. Si hay más de 50 alertas esperando, se descarta la más antigua.
- **Respeta los 429.** Discord responde a las ráfagas con `429` y un valor `retry_after` en segundos en el cuerpo JSON. El bot espera ese tiempo y reintenta, hasta tres intentos.
- **Sin menciones.** `allowed_mentions: { parse: [] }` impide que un nombre de equipo o jugador mencione a alguien en el canal.
## Paso 4 — Ejecútalo y pruébalo
```bash
node discord-picks-bot.mjs
```
En modo de prueba, una alerta se imprime así:
```text
[dry run] 📉 Udinese v Fiorentina | **Udinese** (spread +0.25) | Pinnacle 1.88 → 1.70 (−9.6%) | Fair now 1.75 · max stake 150
```
En Discord la misma alerta es un embed: el partido como título, el lado y el movimiento de cuota en el cuerpo, la cuota justa sin margen y la apuesta máxima en la última línea, y deporte, liga y la nota «18+ · not a tip» en el pie.
Ajusta el volumen con variables de entorno; por ejemplo, `MIN_DROP=0.08` para menos alertas y más fuertes, o `MIN_STAKE=500` para quedarte solo con mercados más profundos.
## Paso 5 — Mantenlo en marcha
- Ejecútalo con `systemd`, `pm2` o un contenedor que se reinicie si falla. El bot se reconecta solo al WebSocket con backoff y reconstruye su lista de eventos desde el nuevo snapshot.
- Basta un webhook por canal. Si quieres fútbol y tenis en canales distintos, ejecuta dos copias con otros `sports` y webhooks; una clave Builder permite 3 conexiones WebSocket.
- Lleva el historial con honestidad: registra cada alerta y mídela con el [valor de la línea de cierre](/es/guides/closing-line-value-clv-tracking), no con el porcentaje de aciertos.
- Para ver qué publicar y cómo moderar un servidor, consulta el [caso de uso de servidores de Discord](/es/use-cases/discord-servers).
## Preguntas frecuentes
### ¿Qué plan de PinnFeed necesita el bot de Discord?
Builder (99 €/mes) o superior, porque lee el WebSocket. Mira la [página del precio del WebSocket en vivo + prepartido](/es/cheapest-pinnacle-odds-websocket) para comparar. Los planes de pago tienen 3 días de prueba gratis; se pide tarjeta y se cobra tras el día 3 salvo que canceles.
### ¿Puedo usarlo en el plan Free?
Tal cual, no. Free es solo REST con 30 segundos de retraso. Para un bot más lento en Free o Hobby, haz polling a `/v1/drops` una vez por minuto y publica el resultado en el mismo webhook; consulta la [documentación REST](/docs) (en inglés).
### ¿Necesito una cuenta de bot de Discord o discord.js?
No. Un webhook entrante acepta un `POST` JSON simple, así que el bot solo necesita `fetch`. Usa una cuenta de bot con discord.js solo si quieres comandos de barra o respuestas.
### ¿Cómo evito saturar el canal?
Sube `MIN_DROP` o `MIN_STAKE`, reduce `sports` y mantén el enfriamiento por resultado (una alerta por lado de mercado cada `WINDOW_MS`). El límite de la cola descarta alertas viejas en lugar de publicarlas tarde.
### ¿Es legal publicar picks en un servidor de Discord?
Las normas sobre pronósticos y publicidad del juego cambian según el país (en España, por ejemplo, la publicidad del juego está regulada), y Discord tiene sus propias normas de comunidad. Revisa las normas de donde estéis tú y tus miembros, mantén el servidor solo para mayores de 18 años y nunca presentes las alertas como ganancias seguras.