Market Data en tiempo real
Recibí cotizaciones, trades y order books al instante. Conectá tu bot de trading o dashboard con datos en vivo del mercado argentino y USA.
Tiempo real
Trades, quotes y order books al instante
Autenticación segura
Credenciales o token OAuth 2.0
Multi-activo
Acciones, CEDEARs, Bonos y Cripto
Heartbeat automático
Conexión persistente sin interrupciones
Formato de activos
Todos los activos se especifican con el formato:
SYMBOL|MARKET|TERMEjemplos:
GGAL|BCBA|T0(Acción)AL30|BCBA|T0(Bono)AAPL|BCBA|T0(CEDEAR)Para empezar necesitás:
Autenticación
Antes de suscribirte a datos, debés autenticarte. Podés usar tus credenciales de IOL o un token OAuth. La autenticación debe hacerse inmediatamente después de conectar.
Ver código completo en Python, JavaScript y más →Autenticación con credenciales
WSEnviá tu usuario y contraseña de IOL para autenticarte. Es el método más simple.
| Parameter | Type | Required | Description |
|---|---|---|---|
action | string | Yes | Debe ser "auth" |
username | string | Yes | Usuario de tu cuenta IOL |
password | string | Yes | Contraseña de tu cuenta IOL |
1{2 "action": "auth",3 "username": "tu_usuario",4 "password": "tu_password"5}Autenticación con token
WS(recomendado para producción)Usá un token OAuth previamente obtenido desde la REST API. Más seguro para aplicaciones en producción.
| Parameter | Type | Required | Description |
|---|---|---|---|
action | string | Yes | Debe ser "auth_token" |
token | string | Yes | Token de autenticación OAuth |
1{2 "action": "auth_token",3 "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."4}Ciclo de vida
El ciclo de vida de una conexión WebSocket incluye conexión, autenticación, suscripción y mantenimiento mediante heartbeats.
Ver implementación completa con manejo de heartbeat →Flujo de conexión
Conectar
wss://stream-marketdata.invertironline.com
Autenticar
Enviá tus credenciales o token inmediatamente después de conectar.
Suscribir
Suscribite a los activos que te interesan.
Recibir datos
El servidor envía pings periódicos. Respondé con pong para mantener la conexión.
PING - Heartbeat
WSPara mantener la conexión activa, el servidor envía mensajes de ping. Debés responder con pong.
1{2 "action": "ping"3}DISCONNECT
WSDesconexiónCerrá la conexión WebSocket de forma ordenada. El servidor confirmará la desconexión antes de cerrar el socket.
1{2 "action": "disconnect"3}Operaciones
Las operaciones te permiten suscribirte y desuscribirte de diferentes tipos de datos de mercado.
Ver ejemplo de suscripción en Python, JavaScript y más →tradesCada operación ejecutada
quotesMejor compra/venta (BBO)
order_bookProfundidad del mercado
SUBSCRIBE
WSSuscribirse a datosSuscribite a uno o más activos para recibir actualizaciones en tiempo real. Podés combinar múltiples tipos de datos en una sola request.
| Parameter | Type | Required | Description |
|---|---|---|---|
action | string | Yes | Debe ser "subscribe" |
trades | string[] | No | Array de activos para recibir trades |
quotes | string[] | No | Array de activos para recibir quotes |
order_book | string[] | No | Array de activos para recibir order books |
1{2 "action": "subscribe",3 "trades": ["GD30|BCBA|T0"],4 "quotes": ["ALUA|BCBA|T0", "PAMP|BCBA|T0"]5}Límite de suscripciones
Máximo 50 títulos simultáneos por conexión. Si necesitás más, abrí conexiones adicionales.
UNSUBSCRIBE
WSDesuscribirse de activos específicosCancelá la suscripción a activos específicos cuando ya no necesites recibir sus actualizaciones.
| Parameter | Type | Required | Description |
|---|---|---|---|
action | string | Yes | Debe ser "unsubscribe" |
trades | string[] | No | Array de activos a desuscribir de trades |
quotes | string[] | No | Array de activos a desuscribir de quotes |
order_book | string[] | No | Array de activos a desuscribir de order books |
1{2 "action": "unsubscribe",3 "quotes": ["CLDR|BCBA|T0"]4}UNSUBSCRIBE_ALL
WSDesuscribirse de todoCancelá todas las suscripciones activas de una vez. Útil antes de desconectar o para empezar de cero.
1{2 "action": "unsubscribe_all"3}Schemas de datos
Formatos de los mensajes que recibís del WebSocket.
TRADE - Trade
type: TCada operación ejecutada en el mercado.
Estructura del mensaje (objeto msg):
SstringSímbolo del activoMstringMercado (ej: BCBA)TstringPlazo (ej: T0, T1)PnumberPrecio de la operaciónXnumberCantidad operadaTSnumberVolumen nominal acumulado (total de acciones/unidades operadas hoy)TPnumberVolumen monetario acumulado (monto total operado en moneda hoy)DstringTimestamp ISO 8601Ejemplo:
1{2 "type": "T",3 "code": 200,4 "msg": {5 "S": "GD30",6 "M": "BCBA",7 "T": "T0",8 "P": 28861.0,9 "X": 5596,10 "TS": 13654168.0,11 "TP": 3931492332.82,12 "D": "2023-10-17T18:39:54.569641+00:00"13 }14}QUOTE - Quote
type: QMejor oferta de compra y venta (BBO).
Estructura del mensaje (objeto msg):
SstringSímbolo del activoMstringMercado (ej: BCBA)TstringPlazo (ej: T0, T1)VarrayArray de niveles del order book (quotes)DstringTimestamp ISO 8601Estructura del objeto V (Values):
TstringTipo de quote: "BID" (compra) o "OFFER" (venta)XnumberCantidad disponible a este precioPnumberPrecio del bid u offerEjemplo:
1{2 "type": "Q",3 "code": 200,4 "msg": {5 "S": "GD30",6 "M": "BCBA",7 "T": "T0",8 "V": [9 { "T": "BID", "X": 22006.0, "P": 28861.0 },10 { "T": "BID", "X": 5720.0, "P": 28860.5 },11 { "T": "OFFER", "X": 12409.0, "P": 28978.5 }12 ],13 "D": "2023-10-17T18:39:57.7727723Z"14 }15}Errores
Códigos de error que podés recibir y cómo manejarlos.
Argument Error
Falta un parámetro requerido o el formato es inválido.
1{2 "type": "Error",3 "code": 400,4 "msg": "Argument Error"5}Authentication Error
Credenciales inválidas o token expirado.
1{2 "type": "Error",3 "code": 401,4 "msg": "Authentication Error"5}Forbidden
No tenés permisos para acceder a este recurso.
1{2 "type": "Error",3 "code": 403,4 "msg": "Forbidden"5}Not Found
El activo solicitado no existe.
1{2 "type": "Error",3 "code": 404,4 "msg": "Not Found"5}Rate Limit
Demasiadas requests en poco tiempo.
1{2 "type": "Error",3 "code": 429,4 "msg": "Too Many Requests"5}Server Error
Error interno del servidor.
1{2 "type": "Error",3 "code": 500,4 "msg": "Internal Server Error"5}Mejores prácticas
- Implementá manejo de errores para cada operación que enviés al WebSocket.
- Usá reintentos con backoff exponencial para errores temporales (500).
- Logueá todos los errores para facilitar el debugging y monitoreo.
- No reintentes automáticamente errores 401 - requiere intervención del usuario.