POST /session/login
Abre una sesión de trabajo y obtiene el token JWT necesario para llamar a los demás endpoints.
Request
POST {{BASE_URL}}/session/login
api-key: {tu-api-key}
secret-key: {tu-clave-secreta}
Content-Type: application/json
{
"body": {
"code": "f957f8b8f9664832e6051e3389864682624a8e2b9aaf4dd80fb2aaea7af58940"
}
}
El campo code debe calcularse dinámicamente en cada llamada al login. No es una contraseña estática — es un hash que incluye la fecha del día, por lo que cambia cada 24 horas.
Generación del code (HMAC-SHA256)
El code es un hash HMAC-SHA256 que se calcula con tus propias credenciales. No se transmite ningún secreto como texto plano.
Insumos necesarios:
| Insumo | Tipo / formato | Descripción |
|---|---|---|
| API Key | UUID | Tu api-key — el mismo que va en el header de todos los endpoints. |
| Fecha actual | string · YYYY-MM-DD | La fecha del día en que haces el login. El código cambia cada día. |
| Seed | string | Tu Código de semilla. Se usa como llave criptográfica del HMAC — no se concatena al mensaje ni se envía en ningún header. |
Algoritmo paso a paso:
Paso 1 — Concatenar API Key + Fecha (sin separador):
API Key: 30170525-6ba7-4606-98e3-1391f38662d3
Fecha: 2025-07-07
Mensaje: 30170525-6ba7-4606-98e3-1391f38662d32025-07-07
Paso 2 — Calcular HMAC-SHA256:
code = HMAC_SHA256(
message = "{api-key}{YYYY-MM-DD}",
key = "{seed}"
)
Paso 3 — Resultado: un hash hexadecimal de 64 caracteres. Ese es el valor de body.code.
Ejemplo con valores de referencia:
API Key: 30170525-6ba7-4606-98e3-1391f38662d3
Fecha: 2025-07-07
Seed: UKEUY-90122904
code resultante:
f957f8b8f9664832e6051e3389864682624a8e2b9aaf4dd80fb2aaea7af58940
Ejemplo de implementación
const crypto = require('crypto');
function generarCode(apiKey, seed) {
const fecha = new Date().toISOString().split('T')[0]; // YYYY-MM-DD
const mensaje = apiKey + fecha;
return crypto.createHmac('sha256', seed).update(mensaje).digest('hex');
}
import hmac, hashlib
from datetime import date
def generar_code(api_key: str, seed: str) -> str:
fecha = date.today().isoformat() # YYYY-MM-DD
mensaje = (api_key + fecha).encode('utf-8')
return hmac.new(seed.encode('utf-8'), mensaje, hashlib.sha256).hexdigest()
function generarCode(string $apiKey, string $seed): string {
$fecha = date('Y-m-d');
$mensaje = $apiKey . $fecha;
return hash_hmac('sha256', $mensaje, $seed);
}
Response — 200 OK
{
"status": {
"code": "YP-0000",
"description": "Se ha realizado la ejecución del servicio correctamente"
},
"body": {
"token": "eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0...",
"state": "OPEN",
"open_at": "2026-06-24T08:02:15.126"
}
}
| Campo | Tipo | Descripción |
|---|---|---|
body.token | string · JWT | Token de sesión — inclúyelo en el header authorization de los demás endpoints. Sin prefijo Bearer. |
body.state | string | Estado de la sesión. Valor esperado: OPEN. |
body.open_at | string · ISO 8601 | Fecha y hora de apertura de la sesión. |
El token es válido por 24 horas desde su generación. Después de ese tiempo recibirás Unauthorized y deberás hacer login nuevamente.
Cómo usar el token
Incluye el token en el header authorization de todos los demás endpoints. No uses el prefijo “Bearer”, se envía el JWT directamente:
POST {{BASE_URL}}/movement/history
api-key: {tu-api-key}
secret-key: {tu-clave-secreta}
authorization: eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0...
Content-Type: application/json
Errores posibles
| Código | Significado |
|---|---|
YP-0006 | Sesión expirada o error al procesar el login. Regenera el code y reintenta. |
YP-0008 | Faltan los headers api-key o secret-key. |
YP-0002 | Error genérico de plataforma. Reintenta nuevamente. |