OAuth 2.0 + Token
Flujo completo de autenticación para REST API y WebSocket. Usá las mismas credenciales de tu cuenta IOL.
Flujo de autenticación
El mismo token sirve para REST API y WebSocket. Obtenerlo una vez, usarlo en ambos.
REST API
POST /auth/tokenToken JWT
access_tokenUsar en
REST + WebSocketPaso 1: Obtener token
Enviá tus credenciales de IOL (las mismas que usás en la app) para obtener un access_token.
/auth/tokenimport requests
API_URL = "https://api.iolinversiones.com"
# Autenticación
response = requests.post(f"{API_URL}/auth/token", json={
"grant_type": "password",
"username": "TU_USUARIO", # 👈 Mismo de la app IOL
"password": "TU_PASSWORD"
})
data = response.json()
token = data["data"]["access_token"]
print(f"Token obtenido: {token[:20]}...")Respuesta exitosa
{ "success": true, "data": { "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...", "token_type": "bearer", "expires_in": 86400, "refresh_token": "def50200b9c7f8e..." }}Paso 2: Usar en REST API
Incluí el token en el header Authorization de cada request.
GET /broker/accounts HTTP/1.1Host: api.iolinversiones.comAuthorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...Paso 3: Usar en WebSocket
El mismo token funciona para autenticarte en el WebSocket de market data. Enviá el mensaje de autenticación inmediatamente después de conectar.
Mensaje de autenticación:
{ "action": "auth_token", "token": "eyJhbGciOiJSUzI1NiIs..."}Respuesta exitosa:
{ "type": "Success", "code": 200, "msg": "Connected"}Renovar token (Refresh)
Los tokens expiran en 24 horas. Usá el refresh_tokenpara obtener uno nuevo sin pedir credenciales de nuevo.
POST /auth/token HTTP/1.1Host: api.iolinversiones.comContent-Type: application/json { "grant_type": "refresh_token", "refresh_token": "def50200b9c7f8e..."}Tiempo de vida de tokens
- access_token: 24 horas
- refresh_token: 30 días
Errores comunes
Usuario o contraseña incorrectos. Verificá que estés usando las mismas credenciales de tu cuenta IOL.
El access_token ya no es válido. Usá el refresh_token para obtener uno nuevo, o volvé a autenticar con credenciales.
El campo grant_type debe ser "password" para autenticación inicial o "refresh_token" para renovar.
Buenas prácticas
- Guardá el refresh_token de forma segura - No lo expongas en código cliente o logs.
- Renová antes de que expire - Implementá lógica para renovar el token antes de las 24 horas.
- Usá variables de entorno - Nunca hardcodees credenciales en el código fuente.
- Manejá errores de auth - Capturá 401 y re-autenticá automáticamente cuando sea posible.