Pronósticos y sesiones por API
Cómo subir las ventas, entrenar y esperar el resultado, y leer pronósticos, precisión y resultados de una sesión.
En esta página
Una sesión es una actualización del pronóstico: unas ventas, una configuración y el resultado de entrenarla. La app trabaja con la sesión activa, la que devuelve GET /planning en active_session_id. Las sesiones nunca se borran: DELETE /sessions/{id} las archiva y POST /sessions/{id}/restore las devuelve.
El ciclo nocturno completo
Este es el trabajo que la mayoría de las integraciones necesita: reemplazar el archivo de ventas, reentrenar y esperar.
#!/usr/bin/env bash
set -euo pipefail
API=https://app.stockai.es/api/v1
AUTH="Authorization: Bearer $STOCKAI_KEY"
# 1. Replace the sales file in place (same source id, same column mapping)
curl -sf -X POST "$API/data-sources/$SOURCE_ID/file" -H "$AUTH" -F "file=@/exports/sales.csv"
# 2. Which session is active right now (ask every time, never hard-code it)
SESSION=$(curl -sf "$API/planning" -H "$AUTH" | jq -r '.data.active_session_id')
# 3. Retrain (skip this if the session has a schedule: it retrains when the file changes)
curl -sf -X POST "$API/sessions/$SESSION/train" -H "$AUTH" \
-H "Content-Type: application/json" -d '{}'
# 4. Wait while it is QUEUED or RUNNING. Watching only RUNNING exits on the first pass.
while :; do
ST=$(curl -sf "$API/sessions/$SESSION/train/status" -H "$AUTH" | jq -r '.data.status')
case "$ST" in QUEUED|RUNNING) sleep 10 ;; *) break ;; esac
done
echo "Training finished: $ST"- Busca una vez el
idde tu fuente de ventas conGET /data-sources(oGET /datasets) y guárdalo en tu configuración: ese id no cambia. - Cada noche reemplaza el archivo con
POST /data-sources/{id}/file(multipart, campofile). La fuente conserva su id y su mapeo de columnas. Acepta.csv,.xlsx,.xls,.parquety.json. - Pide la sesión activa con
GET /planning. - Si la sesión tiene una tarea programada, StockAI reentrena solo cuando el archivo cambia y puedes saltarte este paso. Si no, encola el entrenamiento con
POST /sessions/{id}/train. - Consulta
GET /sessions/{id}/train/statuscada pocos segundos mientras digaQUEUEDoRUNNING. Termina enCOMPLETEDoFAILED.
{
"session_id": "sess_cc9ab9137953",
"status": "RUNNING",
"job_id": "job_fe6d1a76b4f2",
"job": {
"status": "RUNNING",
"created_by": "usr_97c71ad04a86",
"progress": { "step": "ml_training", "message": "Training ML models", "percent": 27 },
"error": null
}
}Fuentes de datos y datasets
| Método y ruta | Qué hace | Llave |
|---|---|---|
GET /data-sources | Lista tus fuentes (archivos y bases SQL). | lectura |
POST /data-sources/file | Crea una fuente nueva a partir de un archivo. | escritura |
POST /data-sources/{id}/file | Reemplaza el archivo de una fuente, conservando id y mapeo. El anterior no se borra: se guarda aparte. | escritura |
GET /data-sources/{id}/preview, /analyze | Vista previa y análisis de la fuente. | lectura |
POST /data-sources/sql, .../execute-query, .../materialize | Fuentes SQL: crear, consultar y guardar el resultado como dataset. | escritura |
DELETE /data-sources/{id} | Borra una fuente. Se rechaza con data_source_in_use si alguna sesión (incluso archivada) la usa. | escritura |
GET /datasets, POST /datasets, GET /datasets/{id} | Los datasets de entrenamiento. | lectura / escritura |
Sesiones y configuración
| Método y ruta | Qué hace |
|---|---|
GET /sessions, GET /sessions/summary, GET /sessions/{id} | Listar y leer sesiones. |
POST /sessions | Crea una sesión en borrador (name obligatorio; description, tags). |
POST /sessions/{id}/dataset, POST /sessions/{id}/upload | Adjunta un dataset existente o sube uno nuevo. |
/sessions/{id}/configure/columns, /features, /models, /validation | Los pasos del asistente de entrenamiento (GET para leer, POST para guardar). |
GET /sessions/{id}/data-gate, POST .../configure/remediations | El control de calidad de datos y tus respuestas a él. |
POST /sessions/{id}/train | Encola el entrenamiento (opcionales: user_horizon_days, user_granularity). |
POST /sessions/{id}/reforecast | Crea una sesión NUEVA que pronostica con los modelos guardados sobre ventas más recientes, sin reentrenar. |
POST /sessions/{id}/backtest | Lanza una prueba hacia atrás. Las sesiones de backtest nunca mueven la planificación. |
GET /jobs/active, GET /jobs/{id}, GET /jobs/{id}/logs, DELETE /jobs/{id} | Los trabajos en cola: verlos, leer su log y cancelarlos. |
Reentrenar con horario
curl -X POST https://app.stockai.es/api/v1/sessions/$SESSION/schedule \
-H "Authorization: Bearer $STOCKAI_KEY" -H "Content-Type: application/json" \
-d '{"cron_expr":"0 6 * * 1","enabled":true}'cron_expr es una expresión cron (en el ejemplo: lunes a las 6:00). GET /schedules lista todas, GET /schedules/history sus corridas y DELETE /sessions/{id}/schedule quita el horario. Es lo mismo que la pestaña «Tareas programadas» de Automatización.
Leer el pronóstico
Ruta (GET) | Qué devuelve |
|---|---|
/sessions/{id}/forecast-series/{sku} | Historia y pronóstico de un SKU con sus cuantiles (p10, p50, p90…). Opcional: model. |
/sessions/{id}/forecast-total | Todo el catálogo sumado como una serie (granularity). |
/sessions/{id}/results | Pronósticos y resultados por modelo (level). |
/sessions/{id}/accuracy | Precisión contra los modelos de referencia, por SKU y total (threshold). |
/sessions/{id}/metrics, /routing, /warnings | Métricas, qué modelo se eligió para cada SKU y avisos de la corrida. |
/sessions/{id}/sku-intelligence/{sku}, /decomposition/{sku} | Ficha de un SKU y su descomposición (tendencia, estacionalidad). |
/sessions/{id}/forecast-vs-actual | Lo pronosticado contra lo vendido. |
/sessions/{id}/reports/{format} | Descarga un informe (antes, POST .../reports/generate y GET .../reports/status). |
curl "https://app.stockai.es/api/v1/sessions/$SESSION/forecast-series/SKU-001" \
-H "Authorization: Bearer $STOCKAI_KEY"
# "data": {
# "sku": "SKU-001", "model": "ets", "available_models": ["ets"],
# "historical": [{ "date": "2024-01-01", "value": 25.0 }, ...],
# "forecast": [{ "date": "2025-04-01", "value": 40.67,
# "p10": 35.53, "p50": 40.67, "p90": 45.81,
# "lower": 34.07, "upper": 47.26 }, ...]
# }Datasets para BI
Para Power BI, Excel o Looker hay tablas planas pensadas para leerse enteras: /datasets/forecast-points, /datasets/inventory-status, /datasets/accuracy, /datasets/purchase-order-lines, /datasets/receptions y /datasets/committed-demand; /datasets/schema describe sus columnas. Aceptan format, page, limit y session_id. Como muchas herramientas de BI no dejan poner Authorization, usa X-API-Key.
curl "https://app.stockai.es/api/v1/datasets/forecast-points?format=csv&page=1" \
-H "X-API-Key: $STOCKAI_KEY" -o forecast-points.csv