Skip to main content
El feed de precios transmite actualizaciones de mercado y del libro de órdenes como mensajes JSON sobre una conexión WebSocket en bruto.

Ping/Pong

Ambos feeds admiten el ping/pong estándar de WebSocket. Puedes enviar ping() de forma proactiva en un intervalo y seguir el pong para comprobar que la conexión sigue viva.

Suscripciones

Por defecto, un cliente conectado recibe todas las actualizaciones de mercado de todos los deportes y ligas. Para restringir el flujo, envía uno de los siguientes comandos como un frame de texto JSON después de que el socket esté open. Los comandos rigen durante toda la vida de la conexión. Un cliente que nunca envía un comando de suscripción permanece en modo de difusión total, de modo que las integraciones existentes siguen funcionando sin cambios.

Suscribirse por gameID, liga o deporte

Instala un filtro. Los gameIDs son cadenas hexadecimales ObjectID de Mongo de 24 caracteres; los leagueIDs son códigos cortos como NBA / MLB / EPL; los sportIDs son tokens en minúsculas como basketball / baseball / soccer.
  • replace: true borra las suscripciones existentes de esta conexión e instala las listas nuevas. Pasa la conexión a modo filtrado.
  • replace: false añade las claves nuevas a aquello a lo que la conexión ya está suscrita.
Recibirás una actualización si su gameID, parentGameID, league o sport coincide con alguna de tus suscripciones.

Cancelar suscripción

Quita claves concretas. La conexión permanece en su modo actual (filtrado o suscripción total).

Suscribirse a todo

Comodín explícito. Útil si antes restringiste con subscribe y quieres volver a ampliar sin reconectar. Borra las suscripciones por clave de la conexión.

Semántica de enrutado

  • Una suscripción por gameID también recibe actualizaciones de juegos hijo cuyo parentGameID coincida (p. ej. los derivados F5-MLB llegan a los suscriptores del juego padre).
  • Los IDs de liga no distinguen mayúsculas — mlb y MLB son equivalentes.
  • Los IDs de deporte no distinguen mayúsculas — baseball y Baseball son equivalentes.
  • Las cadenas vacías dentro de los arrays se ignoran.
  • subscribe con replace: false y arrays vacíos no tiene efecto (un cliente con un error no puede vaciar su propio flujo por accidente al enviar un subscribe aditivo vacío).
  • subscribe con replace: true y arrays vacíos es la vía legítima de «borrar todas mis suscripciones»: la conexión entra en modo filtrado con cero suscripciones y no recibe nada hasta que vuelvas a suscribirte o envíes subscribeAll.

Mensajes

Cada mensaje en /price-stream llega como una 2-tupla [type, payload]. Se difunden tres tipos de mensaje.

orderUpdate

Se emite cada vez que cambia una orden en cualquier mercado (nueva, editada, cruzada o cancelada). El payload solo incluye los sideOrders que el usuario receptor puede ver (sus propias órdenes más las contrapartes cruzables). Las entradas de sideOrders de órdenes colocadas con orderType: "postArb" incluyen isPostArb: true; en el resto de casos el campo se omite.

orderUpdate en mercados moneyline1x2

En moneyline1x2 (fútbol a 3 vías: local / empate / visitante), la selección se identifica por el par market + side en lugar de participantID / OU:
  • market — el resultado del que trata el mercado: un hex ObjectID de participante (equipo local o visitante) o la cadena literal "draw".
  • side — "yes" o "no" sobre ese resultado.
  • OU, total y spread no están, y participantID está vacío — usa market + side.
Ambos campos aparecen a nivel de actualización (identifican qué lado del libro cambió) y en cada entrada de sideOrders.

gameUpdate

Se emite cuando se crea un juego o cambia su estado (apertura o cierre de mercados, actualizaciones de hora de inicio). El payload es el juego renderizado completo.
Valores conocidos de messageType: marketOpen, marketClosed. Trata el campo como extensible e ignora los valores desconocidos.

matchedVolumeUpdate

Se emite cuando cambia el volumen total cruzado de un juego.