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#
<script>
fetch('https://pinnfeed.io/v1/odds?sport=tennis&market=moneyline&main=true&limit=5', {
headers: { 'x-api-key': 'ps_live_your_key' } // visible to anyone who opens this page
}).then(r => r.json()).then(d => console.log(d.events));
</script>
Sitio público: patrón proxy#
// 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, Cloudflare Worker, Supabase Edge.
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.
CTA#
Builder (€99/mes). Prueba de 3 días; tarjeta requerida. REST gratis: signup. ¿Clave filtrada? Rótel a.
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.