API de promociones
Cómo funcionan las promociones: Promociones. El equivalente en la CLI es dtvsol promo ….
Autenticación y errores: consulte la descripción general de la API.
GET /promotions
Sección titulada «GET /promotions»Todas las promociones (activas ahora o no) y la velocidad actual de cada plan — o en otro momento con at.
| Nombre | En | Tipo | Notas |
|---|---|---|---|
at |
query | string | YYYY-MM-DD HH:MM (hora local del router): las velocidades en ese momento, como vista previa. |
curl -s "http://ROUTER-IP:8880/promotions" -H "X-API-Key: YOUR_API_KEY"{ "ok": true, "at": "2026-10-03 sat 23:30", "preview": false, "promotions": [ {"name": "nights", "enabled": true, "down": 3.0, "up": 1.0, "max_mbps": 1000, "days": [], "from": "22:00", "to": "06:00", "start": null, "end": null, "plans": [], "comment": "", "active": true, "words": "×3 down ×1 up, up to 1000 Mb/s, every day, 22:00–06:00, all plans"} ], "plans": { "plan_100_100": {"down_mbps": 300, "up_mbps": 100, "base_down_mbps": 100, "base_up_mbps": 100, "promotions": ["nights"]} }, "applied": {"speeds": {"plan_100_100": [300, 100]}, "at": "2026-10-03 23:30:00", "router_shaped": 12}}POST /promotions
Sección titulada «POST /promotions»Agrega una promoción, o cambia la que tiene ese nombre (solo cambian los campos indicados).
| Nombre | En | Tipo | Notas |
|---|---|---|---|
name |
body | string | 1–40 letras, dígitos, -, _. Obligatorio. |
down, up |
body | number | Multiplicadores de 1 a 10 (1 = sin cambio). Al menos uno mayor que 1. |
max_mbps |
body | integer | El tope en Mbit/s; 0 o null = ninguno. |
days |
body | array or string | sun mon tue wed thu fri sat; vacío o all = todos los días. |
from, to |
body | string | HH:MM, ambos o ninguno (ninguno = el día completo). |
start, end |
body | string | YYYY-MM-DD, el primer y el último día. |
plans |
body | array or string | Nombres de planes; vacío = todos los planes. |
enabled |
body | boolean | Predeterminado true; false la conserva sin ponerla en marcha. |
comment |
body | string | Hasta 120 caracteres. |
curl -s -X POST "http://ROUTER-IP:8880/promotions" -H "X-API-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name": "saturday", "down": 2, "up": 2, "days": ["sat"]}'{"ok": true, "message": "promotion saturday: ×2, sat, all plans", "promotion": {…}, "active": false, "applied": {"changed": false}}; 400 para un valor que no es válido, 404 para un plan desconocido.
DELETE /promotions/{name}
Sección titulada «DELETE /promotions/{name}»Elimina una promoción; las velocidades vuelven de inmediato. 404 cuando no existe ninguna con ese nombre.
GET /plan-tables
Sección titulada «GET /plan-tables»Cada servicio en cada OLT registrada, y si su service-port está en las tablas de velocidad propias de su plan (que una promoción puede aumentar solo para ese plan).
| Nombre | En | Tipo | Notas |
|---|---|---|---|
olt |
query | string | Solo esta OLT. |
{ "ok": true, "olts": { "olt-1": { "shared": 1, "services": [ {"id": "svc_1a2b3c4d", "name": "…", "plan": "plan_100_100", "pon": "0/1/3", "ont_id": 5, "download_table": "dtvsol-r107520", "upload_table": "dtvsol-r107520", "own_tables": false} ] } }}POST /plan-tables/move
Sección titulada «POST /plan-tables/move»Ejecuta plan-sync en la OLT y luego mueve cada servicio que aún está en una tabla compartida a las tablas propias de su plan, uno tras otro.
| Nombre | En | Tipo | Notas |
|---|---|---|---|
olt |
body | string | La OLT. Obligatorio. |
confirm |
body | boolean | Sin él, solo la lista de lo que se movería (dry_run: true, would_move). |
{"ok": true, "moved": ["svc_…"], "failed": []}; 502 con los servicios que fallaron.
POST /promotions/{name}
Sección titulada «POST /promotions/{name}»Igual que POST /promotions con el nombre en la ruta; con {"delete": true} elimina la
promoción, como lo hace DELETE /promotions/{name}.
Este sitio fue escrito con ayuda de IA y revisado por nuestro equipo.