Ir al contenido

API de OLT

El router controla sus OLT mediante el driver de fabricante licenciado que se entrega con él. Esta página cubre:

  • Operaciones — POST /olt/{op}: una operación en una OLT (leer su estado, agregar una ONT, etiquetar una VLAN, …).
  • El registro — /olts: las OLT que este router conoce por nombre, con sus credenciales selladas en el router.
  • Sincronización de planes — /olt/sync: los planes del router enviados a cada OLT registrada como perfiles y tablas de velocidad.
  • Respaldos — /olt/backup, /olt/backups, /olt/diff: el historial de configuración de las OLT.

La URL base, la autenticación (X-API-Key), el formato de errores y la API de acciones se describen en la descripción general de la API.

Toda operación necesita una OLT. El router la elige en este orden:

  1. olt en el cuerpo (o el encabezado X-OLT-Name) — una OLT registrada, por nombre. Un nombre desconocido da 404.
  2. host, user, pass en el cuerpo (o los encabezados X-OLT-Host, X-OLT-User, X-OLT-Pass), con protocol opcional (telnet o ssh, por defecto telnet; encabezado X-OLT-Protocol) y port (el puerto TCP de la OLT; encabezado X-OLT-Port). password se acepta como alias de pass.
  3. Nada — cuando hay exactamente una OLT registrada, esa.

En cualquier otro caso la respuesta es 400 (“name a registered OLT (olt) or send host, user and pass on this call”: indique una OLT registrada (olt) o envíe host, user y pass en esta llamada).

Un port numérico en el cuerpo es el puerto TCP de la OLT; un puerto PON como "0/1/3" en port es un argumento de la operación. pon se acepta como alias del puerto PON.

Nombre En Tipo Notas
olt body string El nombre de una OLT registrada (vea arriba).
host, user, pass body string Credenciales de uso único en lugar de olt.
protocol body string telnet (por defecto) o ssh.
vendor body string Fabricante del driver para credenciales de uso único; por defecto huawei. Una OLT registrada usa el suyo.
timeout body integer Segundos, 10–300. Por defecto 40; 180 para config, plan-sync e init.
raw body boolean Devuelve además cada comando enviado y la respuesta de la OLT (raw). Siempre se incluye en caso de fallo.
dry_run body boolean Las operaciones de escritura que lo admiten solo planifican el cambio y devuelven lo que harían.
force body boolean Anula una protección cuando la operación lo permite (vea OLT compartidas).

Toda operación responde con el mismo sobre:

{
"ok": true,
"code": 200,
"op": "info",
"olt": { "host": "XXX.XXX.XXX.10", "name": "olt-1" },
"took_ms": 1790,
"result": { },
"error": null
}
  • code es 200 si tiene éxito, 401 cuando la OLT rechazó el inicio de sesión, 502 para cualquier otro fallo (el error de la OLT está en error, y raw contiene la transcripción). Una operación desconocida da 404 con la lista de operaciones en ops.
  • Tras una escritura exitosa (salvo save y las ejecuciones de prueba) la respuesta incluye "note": "not saved to the OLT's flash yet — run op \"save\" when done" (aún no guardado en la flash de la OLT; ejecute la operación “save” al terminar).

Las operaciones de escritura necesitan la función de escritura de la licencia, se ejecutan de una en una por OLT y, una vez enviadas, nunca se reintentan por otro transporte. Cada llamada se registra en el router (operación, OLT, resultado — nunca credenciales).

Una OLT registrada puede llevar la S-VLAN de este router (svlan) y estar marcada como de otra empresa (operator). En una OLT así, el router solo toca lo que es suyo: las operaciones de VLAN sobre otra S-VLAN se rechazan salvo con force=true; las operaciones de ONT rechazan una ONT cuyos service-ports estén en otra S-VLAN (force nunca anula esto); exec necesita force=true. Los objetos que crea el router se nombran con su prefijo (por defecto dtvsol, o s<svlan> cuando hay una S-VLAN configurada).

Lista las operaciones, cuáles de ellas modifican la OLT y cómo llamarlas. No se contacta ninguna OLT.

Ventana de terminal
curl -H "X-API-Key: YOUR_API_KEY" "http://ROUTER-IP:8880/olt"
{
"ops": ["info", "autofind", "onus", "vlans", "serviceports", "profiles", "config", "run", "audit",
"boards", "pon-ports", "port-optical", "counters", "exec", "vlan-add", "vlan-del",
"port-vlan", "profile-add", "profile-del", "ont-add", "ont-del", "ont-reboot", "ont-desc",
"ont-optical", "ntp", "sysname", "save", "plan-sync", "init", "ont-activate",
"ont-deactivate", "ont-replan"],
"write_ops": ["exec", "vlan-add", "vlan-del", "port-vlan", "profile-add", "profile-del", "ont-add",
"ont-del", "ont-reboot", "ont-desc", "ntp", "sysname", "save", "plan-sync", "init",
"ont-activate", "ont-deactivate", "ont-replan"],
"usage": "POST /olt/{op} with JSON {host, user, pass, [port], [protocol: telnet|ssh], ...op args}; ..."
}

El producto de la OLT, versión de software y parche, tiempo de actividad, nombre de sistema, tarjetas, reloj y estado de NTP.

Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1"}' "http://ROUTER-IP:8880/olt/info"
{
"ok": true,
"code": 200,
"op": "info",
"olt": { "host": "XXX.XXX.XXX.10", "name": "olt-1" },
"took_ms": 1790,
"result": {
"product": "MA5608T",
"version": "V800R018C10",
"uptime": "35 day(s), 4 hour(s)",
"sysname": "olt-1",
"boards": [ { "slot": 0, "board": "GPFD", "status": "Normal" } ],
"time": "2026-09-28 12:00:00+00:00",
"ntp": "synchronized"
},
"error": null
}

Con credenciales de uso único en lugar de un nombre registrado:

Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"host": "XXX.XXX.XXX.10", "user": "admin", "pass": "OLT_PASSWORD", "protocol": "ssh"}' \
"http://ROUTER-IP:8880/olt/info"

Las ONT que la OLT ve pero que aún no están registradas (puerto PON, serie, fabricante, cuándo se vieron). Resultado: {"count": N, "onts": [...]}.

Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1"}' "http://ROUTER-IP:8880/olt/autofind"

Las ONT registradas: id, serie, estado de ejecución/configuración/coincidencia. Resultado: {"count": N, "onts": [...]}.

Nombre En Tipo Notas
port body string Puerto PON opcional frame/slot/port, p. ej. 0/1/3. Sin él, todas las tarjetas PON.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "port": "0/1/3"}' "http://ROUTER-IP:8880/olt/onus"

La tabla de VLAN de la OLT y las VLAN etiquetadas en cada puerto de uplink. Resultado: {"count": N, "vlans": [...], "uplink_ports": {"0/3/0": {"vlans": [100, 101], "native": null}}}.

Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1"}' "http://ROUTER-IP:8880/olt/vlans"

Los service-ports (flujos de suscriptores). Resultado: {"count": N, "service_ports": [...]}.

Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1"}' "http://ROUTER-IP:8880/olt/serviceports"

Los perfiles DBA, de línea y de servicio. Resultado: {"dba": [...], "line": [...], "service": [...]}.

Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1"}' "http://ROUTER-IP:8880/olt/profiles"

La configuración en ejecución completa de la OLT como texto. Resultado: {"lines": N, "config": "..."}. Tiempo de espera por defecto 180 s.

Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1"}' "http://ROUTER-IP:8880/olt/config"

Ejecuta un comando display … de solo lectura y devuelve su salida sin procesar. Todo lo que no sea un comando display se rechaza (use exec para la configuración). Resultado: {"command": "...", "output": "..."}.

Nombre En Tipo Notas
command body string Obligatorio. Debe comenzar con display.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "command": "display ont info 0 1 3 all"}' "http://ROUTER-IP:8880/olt/run"

Solo lectura: lo que la OLT tiene para este router en su S-VLAN — si la VLAN existe y su tipo, los uplinks en los que está etiquetada, sus service-ports con sus límites de velocidad, las tablas de velocidad, si la opción 82 de DHCP está habilitada, y las ONT de los puertos PON indicados. La usa el doctor del router.

Nombre En Tipo Notas
svlan body integer Obligatorio. La S-VLAN a auditar.
ports body array Puertos PON opcionales cuyas ONT listar, p. ej. ["0/1/3"].
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "svlan": 400, "ports": ["0/1/3"]}' "http://ROUTER-IP:8880/olt/audit"
{
"ok": true,
"code": 200,
"op": "audit",
"result": {
"svlan": 400,
"exists": true,
"type": "smart",
"attribute": "stacking",
"uplinks": [ { "port": "0/3/0", "native_vlan": 1, "state": "up" } ],
"service_ports": [ { "index": 12, "state": "up", "pon": "0/1/3", "ont_id": 0, "gem": 1,
"flow_type": "vlan", "user_vlan": 100, "inner_vlan": 100,
"car": { "in": 11, "out": 10 } } ],
"option82": true,
"rates": { "10": { "cir": 112640, "pir": 112640 } },
"onts": [],
"plan_prefix": "dtvsol"
}
}

Las tarjetas de la OLT (ranura, tipo, estado).

Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1"}' "http://ROUTER-IP:8880/olt/boards"

Los puertos PON y su estado.

Nombre En Tipo Notas
port body string Opcional: un puerto PON frame/slot/port; por defecto todos los puertos.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1"}' "http://ROUTER-IP:8880/olt/pon-ports"

Las lecturas ópticas de los transceptores propios de los puertos PON.

Nombre En Tipo Notas
port body string Opcional: un puerto PON; por defecto todos los puertos.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "port": "0/1/3"}' "http://ROUTER-IP:8880/olt/port-optical"

Contadores de tráfico de los puertos, o de las ONT.

Nombre En Tipo Notas
port body string Opcional: un puerto PON.
ont_id body integer Opcional: los contadores de una ONT (necesita port).
uplinks body boolean Incluye los puertos de uplink.
onts body boolean Contadores por ONT para cada ONT (de port si se indica) en lugar de los de los propios puertos.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "uplinks": true}' "http://ROUTER-IP:8880/olt/counters"

Las lecturas ópticas de una ONT: potencia de recepción/transmisión, temperatura, voltaje. Resultado: {"port": "0/1/3", "onts": [...]}.

Nombre En Tipo Notas
port body string Obligatorio. Puerto PON frame/slot/port.
ont_id body integer or "all" Opcional; por defecto todas las ONT del puerto.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "port": "0/1/3", "ont_id": 0}' "http://ROUTER-IP:8880/olt/ont-optical"

Nada de lo siguiente se guarda en la flash de la OLT hasta POST /olt/save. Los ids de VLAN van de 1 a 4094.

Normalmente usted aprovisiona un suscriptor con POST /services (vea la API de servicios), que llama a esta operación por usted y además configura el lado del router.

Nombre En Tipo Notas
port body string Obligatorio. Puerto PON, p. ej. 0/1/3 (también se acepta pon).
sn body string Obligatorio. El número de serie de la ONT como 16 dígitos hexadecimales.
vlan body integer Obligatorio. La VLAN del puerto PON.
user_vlan body integer La VLAN que envía la ONT; por defecto vlan.
description body string Descripción de la ONT.
plan body string Un plan de este router: se usan sus perfiles y límites de velocidad (las velocidades incluyen el margen de OLT del router, por defecto ×1.10). 404 si el plan no existe.
down_kbps, up_kbps body integer Límites de velocidad explícitos en lugar de plan.
line_profile, srv_profile, profile_id body integer Ids de perfil explícitos (profile_id fija ambos; por defecto la vlan).
svlan body integer VLAN externa; si se omite, se usa la svlan de una OLT registrada.
iptv body boolean Con una OLT registrada: agrega la VLAN de IPTV de la OLT (iptv_vlan) para este suscriptor.
iptv_vlan body integer La VLAN de IPTV, de forma explícita.
eth_ports body integer Por defecto 1.
gemport body integer Por defecto 1.
dry_run body boolean Solo planificar.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "port": "0/1/3", "sn": "ABCD123456789012", "vlan": 100, "plan": "plan_100_50", "description": "router-1 sub 42"}' \
"http://ROUTER-IP:8880/olt/ont-add"
{
"ok": true,
"code": 200,
"op": "ont-add",
"olt": { "host": "XXX.XXX.XXX.10", "name": "olt-1" },
"result": { "port": "0/1/3", "sn": "ABCD123456789012", "ont_id": 0, "vlan": 100, "cvlan": 100, "user_vlan": 100 },
"error": null,
"note": "not saved to the OLT's flash yet — run op \"save\" when done"
}
Nombre En Tipo Notas
port body string Obligatorio. Puerto PON.
ont_id body integer Obligatorio.
force body boolean Actúa también sobre una ONT que no tiene ningún service-port.
expect_svlan body integer Una S-VLAN más que se cuenta como de este router para esta ONT.
dry_run body boolean Solo planificar.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "port": "0/1/3", "ont_id": 0}' "http://ROUTER-IP:8880/olt/ont-del"

Resultado: {"port": "0/1/3", "ont_id": 0, "deleted": true, "service_ports_removed": [...]}.

Los mismos parámetros que ont-del (port, ont_id, force, expect_svlan). Resultado: {"port": "0/1/3", "ont_id": 0, "rebooted": true}.

Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "port": "0/1/3", "ont_id": 0}' "http://ROUTER-IP:8880/olt/ont-reboot"

Parámetros: port, ont_id, force, expect_svlan. Resultado: {"port": "0/1/3", "ont_id": 0, "active": true}. Reanudar un servicio (POST /services/{id}/resume) llama a esta operación por usted.

Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "port": "0/1/3", "ont_id": 0}' "http://ROUTER-IP:8880/olt/ont-activate"

Parámetros: port, ont_id, force, expect_svlan. Resultado: {"port": "0/1/3", "ont_id": 0, "active": false}. Suspender un servicio (POST /services/{id}/suspend) llama a esta operación por usted.

Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "port": "0/1/3", "ont_id": 0}' "http://ROUTER-IP:8880/olt/ont-deactivate"
Nombre En Tipo Notas
port body string Obligatorio.
ont_id body integer Obligatorio.
description body string La nueva descripción (vacía la borra).
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "port": "0/1/3", "ont_id": 0, "description": "sub 42"}' \
"http://ROUTER-IP:8880/olt/ont-desc"

Cambiar el plan de un servicio (POST /services/{id} con plan) llama a esta operación por usted.

Nombre En Tipo Notas
port body string Obligatorio.
ont_id body integer Obligatorio.
plan body string Obligatorio. El nombre del plan.
down_kbps, up_kbps body integer Obligatorio. Los nuevos límites de velocidad.
vlan body integer Obligatorio. La VLAN interna.
user_vlan body integer Por defecto vlan.
svlan body integer En una OLT compartida debe ser la S-VLAN de este router.
expect_svlan body integer Como en ont-del.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "port": "0/1/3", "ont_id": 0, "plan": "plan_300_150", "down_kbps": 337920, "up_kbps": 168960, "vlan": 100, "svlan": 400}' \
"http://ROUTER-IP:8880/olt/ont-replan"
Nombre En Tipo Notas
vlan body integer Obligatorio.
type body string smart (por defecto), standard, mux o super.
attribute body string common, stacking o qinq.
description body string Opcional.
uplinks body array or string Puertos de uplink en los que etiquetarla, p. ej. ["0/3/0"] o "0/3/0,0/3/1".
force body boolean Necesario para una VLAN distinta de la S-VLAN de este router en una OLT compartida.
dry_run body boolean Solo planificar.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "vlan": 100, "uplinks": "0/3/0", "description": "PON 0/1/3"}' \
"http://ROUTER-IP:8880/olt/vlan-add"
Nombre En Tipo Notas
vlan body integer Obligatorio.
uplinks body array or string Puertos de uplink de los que quitarle primero la etiqueta.
force body boolean Como en vlan-add.
dry_run body boolean Solo planificar.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "vlan": 100, "uplinks": ["0/3/0"]}' "http://ROUTER-IP:8880/olt/vlan-del"
Nombre En Tipo Notas
vlan body integer Obligatorio.
port body string Obligatorio. El puerto, p. ej. 0/3/0.
remove body boolean Quitar la etiqueta en lugar de etiquetar.
force body boolean Como en vlan-add.
dry_run body boolean Solo planificar.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "vlan": 100, "port": "0/3/0"}' "http://ROUTER-IP:8880/olt/port-vlan"

Resultado: {"vlan": 100, "port": "0/3/0", "tagged": true}.

Nombre En Tipo Notas
vlan body integer Obligatorio.
dba body integer Id del perfil DBA; por defecto 5.
eth_ports body integer Por defecto 1.
profile_id body integer Por defecto la vlan.
force body boolean Anula la protección de propiedad en una OLT compartida.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "vlan": 100, "dba": 5, "eth_ports": 1}' "http://ROUTER-IP:8880/olt/profile-add"
Nombre En Tipo Notas
profile_id body integer Obligatorio.
force body boolean Anula la protección de propiedad en una OLT compartida.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "profile_id": 100}' "http://ROUTER-IP:8880/olt/profile-del"

En una OLT compartida necesita force=true. Un comando que contenga ? se rechaza. Resultado: {"executed": N, "steps": [{"cmd": "...", "output": "..."}]}.

Nombre En Tipo Notas
commands body array or string Obligatorio. Una lista, o un solo texto con los comandos separados por saltos de línea o comas.
force body boolean Obligatorio en una OLT compartida.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "commands": ["vlan desc 100 description PON-0-1-3"]}' \
"http://ROUTER-IP:8880/olt/exec"
Nombre En Tipo Notas
server body string Obligatorio. Dirección del servidor NTP.
remove body boolean Eliminar en lugar de establecer.
timezone body string Zona horaria opcional que se establece junto con él.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "server": "10.0.0.1"}' "http://ROUTER-IP:8880/olt/ntp"

Resultado: {"server": "10.0.0.1", "set": true}.

Nombre En Tipo Notas
name body string Obligatorio. Letras, dígitos, ., _, -.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "name": "olt-1"}' "http://ROUTER-IP:8880/olt/sysname"

Resultado: {"saved": true, "output": "..."}.

Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1"}' "http://ROUTER-IP:8880/olt/save"

Cuando no se indica plans, se envían los planes propios del router y su margen de OLT (y la iptv_vlan de una OLT registrada). Para sincronizar todas las OLT registradas a la vez use POST /olt/sync.

Nombre En Tipo Notas
dry_run body boolean Solo lista los comandos que ejecutaría.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "dry_run": true}' "http://ROUTER-IP:8880/olt/plan-sync"

Con una OLT registrada, los valores que faltan provienen del registro (svlan, iptv_vlan, operator), el nombre de sistema toma por defecto el nombre registrado de la OLT, el NTP la dirección propia del router hacia la OLT, y los planes, los planes del router. En una OLT registrada como de otra empresa (operator) no se tocan los ajustes globales de la OLT.

Nombre En Tipo Notas
apply body boolean Aplica los cambios; por defecto false (ejecución de prueba).
svlan body integer La S-VLAN de este router.
iptv_vlan body integer VLAN de IPTV.
uplinks body array or string Puertos de uplink a usar.
sysname body string Nombre de sistema.
ntp body string Servidor NTP.
timezone body string Zona horaria.
operator body boolean Tratar la OLT como de otra empresa.
router_parent body string La interfaz del router por la que viajan las S-VLAN de la OLT.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "svlan": 400, "uplinks": "0/3/0"}' "http://ROUTER-IP:8880/olt/init"

Resultado (ejecución de prueba, recortado): {"dry_run": true, "svlan": 400, "pon_ports": ["0/1/0", "0/1/1"], "uplinks": ["0/3/0"], "steps": [{"cmd": "..."}]}.

Una OLT a la vez. El mismo trabajo se ejecuta por sí solo en segundo plano después de cada cambio de plan y de forma periódica. También responde a GET con los parámetros en la cadena de consulta.

Nombre En Tipo Notas
olt body or query string Solo esta OLT registrada.
dry_run body or query boolean Solo lista los comandos por OLT.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"olt": "olt-1", "dry_run": true}' "http://ROUTER-IP:8880/olt/sync"
{
"ok": true,
"code": 200,
"dry_run": true,
"plans": [ { "name": "plan_100_50", "down_mbps": 100, "up_mbps": 50 } ],
"headroom": 1.1,
"olts": {
"olt-1": {
"ok": true,
"error": null,
"in_sync": false,
"executed": 0,
"dry_run": true,
"commands": ["..."],
"changes": { },
"notes": []
}
}
}

502 cuando alguna OLT falló; 404 cuando no hay ninguna OLT registrada o la indicada es desconocida.

Igual que POST /olt/sync, con olt y dry_run en la cadena de consulta.

Ventana de terminal
curl -H "X-API-Key: YOUR_API_KEY" "http://ROUTER-IP:8880/olt/sync?dry_run=1"

Las configuraciones de las OLT se conservan en el router como un historial (una entrada por cambio). El router las respalda por sí solo después de los cambios; estas llamadas leen el historial o hacen un respaldo en el momento. olt puede omitirse cuando hay exactamente una OLT registrada (en caso contrario, 404). Cada una acepta también POST con los parámetros en el cuerpo.

Se rechaza con 409 para una OLT registrada como de otra empresa (operator).

Nombre En Tipo Notas
olt body or query string La OLT registrada.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" "http://ROUTER-IP:8880/olt/backup?olt=olt-1"
{
"code": 200,
"olt": "olt-1",
"ok": true,
"changed": true,
"commit": "3f2a9c1",
"lines": 2140
}

502 cuando no se pudo leer la configuración (o parecía incompleta — en ese caso no se guarda nada).

El historial de respaldos de una OLT, del más reciente al más antiguo, y su estado de mantenimiento.

Nombre En Tipo Notas
olt query string La OLT registrada.
n query integer Cuántas entradas; por defecto 30, 1–500.
Ventana de terminal
curl -H "X-API-Key: YOUR_API_KEY" "http://ROUTER-IP:8880/olt/backups?olt=olt-1&n=10"
{
"ok": true,
"code": 200,
"olt": "olt-1",
"state": { },
"backups": [
{ "commit": "3f2a9c1", "at": "2026-09-28 12:00:00", "what": "olt-1: on request — 1 file changed, 3 insertions(+), 1 deletion(-)" }
]
}

Qué cambió en la configuración de una OLT: en un respaldo (por defecto el más reciente), o entre dos.

Nombre En Tipo Notas
olt query string La OLT registrada.
rev query string El id de commit de un respaldo (4–40 dígitos hexadecimales); por defecto el más reciente.
to query string Un segundo id de commit: la diferencia entre rev y to.
Ventana de terminal
curl -H "X-API-Key: YOUR_API_KEY" "http://ROUTER-IP:8880/olt/diff?olt=olt-1&rev=3f2a9c1"
{ "ok": true, "code": 200, "olt": "olt-1", "diff": "3f2a9c1 2026-09-28 12:00:00\n...\n" }

Si aún no hay respaldo: "diff": "" y "note": "no backup yet" (aún no hay respaldo). 400 para un id de commit mal formado, 404 para uno desconocido.

Las OLT registradas. Las contraseñas nunca se devuelven (has_pass siempre es true); del acceso SNMP solo se muestra su versión. Cada entrada incluye el resultado de su última sincronización de planes.

Ventana de terminal
curl -H "X-API-Key: YOUR_API_KEY" "http://ROUTER-IP:8880/olts"
{
"count": 1,
"olts": [
{
"name": "olt-1",
"vendor": "huawei",
"protocol": "telnet",
"host": "XXX.XXX.XXX.10",
"port": null,
"user": "admin",
"svlan": 400,
"iptv_vlan": 200,
"comment": "",
"product": "MA5608T",
"added": "2026-09-01 10:00:00",
"updated": "2026-09-20 09:00:00",
"has_pass": true,
"snmp": "v3",
"last_sync": { "at": "2026-09-28 11:45:00", "ok": true, "in_sync": true }
}
],
"headroom": 1.1,
"plans": 2
}

Salvo con force=true, primero se prueba el inicio de sesión (y un nuevo acceso SNMP recibe su propia lectura de prueba); una prueba fallida da 502 y no se guarda nada. Para una OLT que es de este router (no operator), el router además configura la fuente de reloj de la OLT.

Nombre En Tipo Notas
name body string Obligatorio. Letras minúsculas, dígitos, ., _, -, máximo 32; comienza con una letra o un dígito.
host body string Obligatorio. Dirección IP o nombre de host.
user body string Obligatorio.
pass body string Obligatorio.
protocol body string telnet (por defecto) o ssh.
port body integer Puerto TCP, si no es el predeterminado del protocolo.
svlan body integer La S-VLAN de este router en la OLT (1–4094, o null/"none").
iptv_vlan body integer VLAN de IPTV (1–4094, o null/"none").
operator body boolean La OLT pertenece a otra empresa; ahí el router solo gestiona su propia S-VLAN y sus perfiles.
parent body string La interfaz del router por la que viajan las S-VLAN de la OLT (debe existir).
comment body string Texto libre.
snmp body object Acceso SNMP opcional para el driver licenciado (version v3 con usuario y ajustes auth/priv, o v2c/v1 con una comunidad). null lo elimina.
force body boolean Guardar sin la prueba de inicio de sesión.
Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"name": "olt-1", "host": "XXX.XXX.XXX.10", "user": "admin", "pass": "OLT_PASSWORD", "protocol": "ssh", "svlan": 400, "iptv_vlan": 200}' \
"http://ROUTER-IP:8880/olts"
{
"ok": true,
"code": 201,
"message": "OLT registered: olt-1",
"olt": { "name": "olt-1", "host": "XXX.XXX.XXX.10", "protocol": "ssh", "svlan": 400, "has_pass": true, "snmp": null },
"probe": { "product": "MA5608T" },
"ntp": { },
"next": "dtvsol olt sync --olt olt-1 (pushes the router's plans to it)"
}

Errores: 400 para campos no válidos, 409 cuando el nombre ya existe, 502 cuando falla la prueba de inicio de sesión (“send force=true to store anyway”: envíe force=true para guardarla de todos modos).

Los mismos campos que POST /olts (excepto name, que viene de la ruta). El inicio de sesión se vuelve a probar salvo con force=true. Responde 200 con "message": "OLT updated: olt-1"; 404 para un nombre desconocido.

Ventana de terminal
curl -X POST -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"svlan": 500, "comment": "rack 2"}' "http://ROUTER-IP:8880/olts/olt-1"

El nombre también puede indicarse en el cuerpo como name (con DELETE /olts).

Ventana de terminal
curl -X DELETE -H "X-API-Key: YOUR_API_KEY" "http://ROUTER-IP:8880/olts/olt-1"
{
"ok": true,
"code": 200,
"message": "OLT removed: olt-1",
"note": "its profiles on the OLT itself are left as they are"
}

La API de acciones toma sus parámetros en la cadena de consulta. Como eso coloca credenciales en una URL, prefiera las rutas REST anteriores; con una OLT registrada, solo se necesita olt=<name>.

Acción Parámetros de consulta Equivale a
action=olt-<op> (p. ej. action=olt-info) olt, o host/user/pass; más los argumentos de la operación POST /olt/{op}
action=olt-sync olt, dry_run POST /olt/sync
action=olt-backup olt POST /olt/backup
action=olt-backups olt, n GET /olt/backups
action=olt-diff olt, rev, to GET /olt/diff
action=olts-list — GET /olts
action=olts-add name, host, user, pass, protocol, port, svlan, iptv_vlan, … POST /olts
action=olts-set name, campos a cambiar POST /olts/{name}
action=olts-del name DELETE /olts/{name}

Este sitio fue escrito con ayuda de IA y revisado por nuestro equipo.