Pular para o conteúdo

API de OLT

O roteador controla suas OLTs por meio do driver licenciado do fabricante que acompanha o roteador. Esta página cobre:

  • Operações — POST /olt/{op}: uma operação em uma OLT (ler seu estado, adicionar uma ONT, marcar uma VLAN, …).
  • O cadastro — /olts: as OLTs que este roteador conhece pelo nome, com suas credenciais protegidas no roteador.
  • Sincronização de planos — /olt/sync: os planos do roteador enviados a cada OLT cadastrada como perfis e tabelas de velocidade.
  • Backups — /olt/backup, /olt/backups, /olt/diff: o histórico de configuração das OLTs.

URL base, autenticação (X-API-Key), formato de erro e a action API estão descritos na visão geral da API.

Toda operação precisa de uma OLT. O roteador a escolhe nesta ordem:

  1. olt no corpo (ou cabeçalho X-OLT-Name) — uma OLT cadastrada, pelo nome. Um nome desconhecido gera 404.
  2. host, user, pass no corpo (ou cabeçalhos X-OLT-Host, X-OLT-User, X-OLT-Pass), com protocol opcional (telnet ou ssh, padrão telnet; cabeçalho X-OLT-Protocol) e port (a porta TCP da OLT; cabeçalho X-OLT-Port). password é aceito como alias de pass.
  3. Nada — quando há exatamente uma OLT cadastrada, essa.

Caso contrário, a resposta é 400 (“name a registered OLT (olt) or send host, user and pass on this call”).

Um port numérico no corpo é a porta TCP da OLT; uma porta PON como "0/1/3" em port é um argumento da operação. pon é aceito como alias da porta PON.

Nome Em Tipo Observações
olt body string O nome de uma OLT cadastrada (veja acima).
host, user, pass body string Credenciais avulsas em vez de olt.
protocol body string telnet (padrão) ou ssh.
vendor body string Fabricante do driver para credenciais avulsas; padrão huawei. Uma OLT cadastrada usa o seu próprio.
timeout body integer Segundos, 10–300. Padrão 40; 180 para config, plan-sync e init.
raw body boolean Devolve também cada comando enviado e a resposta da OLT (raw). Sempre incluído em caso de falha.
dry_run body boolean As operações de escrita que o suportam apenas planejam a mudança e devolvem o que fariam.
force body boolean Ignora uma proteção quando a operação permite (veja OLTs compartilhadas).

Toda operação responde com o mesmo envelope:

{
"ok": true,
"code": 200,
"op": "info",
"olt": { "host": "XXX.XXX.XXX.10", "name": "olt-1" },
"took_ms": 1790,
"result": { },
"error": null
}
  • code é 200 em caso de sucesso, 401 quando a OLT recusou o login, 502 para qualquer outra falha (o erro da OLT está em error, e raw contém a transcrição). Uma operação desconhecida gera 404 com a lista de operações em ops.
  • Após uma escrita bem-sucedida (exceto save e simulações), a resposta traz "note": "not saved to the OLT's flash yet — run op \"save\" when done".

As operações de escrita exigem o recurso de escrita da licença, rodam uma de cada vez por OLT e nunca são repetidas por outro transporte depois de enviadas. Cada chamada é registrada no roteador (operação, OLT, resultado — nunca as credenciais).

Uma OLT cadastrada pode levar a S-VLAN deste roteador (svlan) e ser marcada como de outra empresa (operator). Em uma OLT assim, o roteador só mexe no que é seu: operações de VLAN em outra S-VLAN são recusadas a menos que force=true; operações de ONT recusam uma ONT cujos service-ports estão em outra S-VLAN (force nunca contorna isso); exec exige force=true. Os objetos que o roteador cria recebem o seu prefixo (padrão dtvsol, ou s<svlan> quando há uma S-VLAN definida).

Lista as operações, quais delas alteram a OLT e como chamá-las. Nenhuma OLT é contatada.

Janela do 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}; ..."
}

O produto da OLT, versão de software e patch, uptime, nome do sistema, placas, relógio e estado do NTP.

Janela do 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
}

Com credenciais avulsas em vez de um nome cadastrado:

Janela do 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"

As ONTs que a OLT enxerga mas que ainda não estão registradas (porta PON, serial, fabricante, quando foram vistas). Resultado: {"count": N, "onts": [...]}.

Janela do 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"

As ONTs registradas: id, serial, estado de run/config/match. Resultado: {"count": N, "onts": [...]}.

Nome Em Tipo Observações
port body string Porta PON opcional frame/slot/port, p. ex. 0/1/3. Sem ela, todas as placas PON.
Janela do 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"

A tabela de VLANs da OLT e as VLANs marcadas em cada porta de uplink. Resultado: {"count": N, "vlans": [...], "uplink_ports": {"0/3/0": {"vlans": [100, 101], "native": null}}}.

Janela do 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"

Os service-ports (fluxos dos assinantes). Resultado: {"count": N, "service_ports": [...]}.

Janela do 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"

Os perfis DBA, de linha e de serviço. Resultado: {"dba": [...], "line": [...], "service": [...]}.

Janela do 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"

A configuração em execução completa da OLT, como texto. Resultado: {"lines": N, "config": "..."}. Timeout padrão de 180 s.

Janela do 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"

Executa um comando somente leitura display … e devolve sua saída bruta. Qualquer coisa que não seja um comando display é recusada (use exec para configuração). Resultado: {"command": "...", "output": "..."}.

Nome Em Tipo Observações
command body string Obrigatório. Deve começar com display.
Janela do 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"

Somente leitura: o que a OLT mantém para este roteador na sua S-VLAN — se a VLAN existe e seu tipo, os uplinks em que está marcada, seus service-ports com os limites de velocidade, as tabelas de velocidade, se a option 82 do DHCP está habilitada, e as ONTs das portas PON informadas. Usado pelo doctor do roteador.

Nome Em Tipo Observações
svlan body integer Obrigatório. A S-VLAN a auditar.
ports body array Portas PON opcionais cujas ONTs listar, p. ex. ["0/1/3"].
Janela do 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"
}
}

As placas da OLT (slot, tipo, estado).

Janela do 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"

As portas PON e seu estado.

Nome Em Tipo Observações
port body string Opcional: uma porta PON frame/slot/port; padrão todas as portas.
Janela do 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"

As leituras ópticas dos próprios transceptores das portas PON.

Nome Em Tipo Observações
port body string Opcional: uma porta PON; padrão todas as portas.
Janela do 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áfego das portas, ou das ONTs.

Nome Em Tipo Observações
port body string Opcional: uma porta PON.
ont_id body integer Opcional: os contadores de uma ONT (exige port).
uplinks body boolean Inclui as portas de uplink.
onts body boolean Contadores por ONT para todas as ONTs (de port, se informado) em vez dos contadores das próprias portas.
Janela do 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"

As leituras ópticas de uma ONT: potência de recepção/transmissão, temperatura, tensão. Resultado: {"port": "0/1/3", "onts": [...]}.

Nome Em Tipo Observações
port body string Obrigatório. Porta PON frame/slot/port.
ont_id body integer ou "all" Opcional; padrão todas as ONTs da porta.
Janela do 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 do que vem abaixo é salvo na flash da OLT até POST /olt/save. Os ids de VLAN vão de 1 a 4094.

Normalmente você provisiona um assinante com POST /services (veja a API de serviços), que chama esta operação por você e também configura o lado do roteador.

Nome Em Tipo Observações
port body string Obrigatório. Porta PON, p. ex. 0/1/3 (pon também é aceito).
sn body string Obrigatório. O serial da ONT com 16 dígitos hexadecimais.
vlan body integer Obrigatório. A VLAN da porta PON.
user_vlan body integer A VLAN que a ONT envia; padrão vlan.
description body string Descrição da ONT.
plan body string Um plano deste roteador: são usados seus perfis e limites de velocidade (as velocidades incluem a folga de OLT do roteador, padrão ×1,10). 404 se o plano não existir.
down_kbps, up_kbps body integer Limites de velocidade explícitos em vez de plan.
line_profile, srv_profile, profile_id body integer Ids de perfil explícitos (profile_id define os dois; padrão a vlan).
svlan body integer VLAN externa; quando omitida, é usada a svlan de uma OLT cadastrada.
iptv body boolean Com uma OLT cadastrada: adiciona a VLAN de IPTV da OLT (iptv_vlan) para este assinante.
iptv_vlan body integer A VLAN de IPTV, explicitamente.
eth_ports body integer Padrão 1.
gemport body integer Padrão 1.
dry_run body boolean Apenas planeja.
Janela do 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"
}
Nome Em Tipo Observações
port body string Obrigatório. Porta PON.
ont_id body integer Obrigatório.
force body boolean Atua também sobre uma ONT que não tem nenhum service-port.
expect_svlan body integer Mais uma S-VLAN considerada deste roteador para esta ONT.
dry_run body boolean Apenas planeja.
Janela do 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": [...]}.

Mesmos parâmetros de ont-del (port, ont_id, force, expect_svlan). Resultado: {"port": "0/1/3", "ont_id": 0, "rebooted": true}.

Janela do 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}. Retomar um serviço (POST /services/{id}/resume) chama esta operação por você.

Janela do 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 um serviço (POST /services/{id}/suspend) chama esta operação por você.

Janela do 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"
Nome Em Tipo Observações
port body string Obrigatório.
ont_id body integer Obrigatório.
description body string A nova descrição (vazia a apaga).
Janela do 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"

Alterar o plano de um serviço (POST /services/{id} com plan) chama esta operação por você.

Nome Em Tipo Observações
port body string Obrigatório.
ont_id body integer Obrigatório.
plan body string Obrigatório. O nome do plano.
down_kbps, up_kbps body integer Obrigatório. Os novos limites de velocidade.
vlan body integer Obrigatório. A VLAN interna.
user_vlan body integer Padrão vlan.
svlan body integer Deve ser a S-VLAN deste roteador em uma OLT compartilhada.
expect_svlan body integer Como em ont-del.
Janela do 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"
Nome Em Tipo Observações
vlan body integer Obrigatório.
type body string smart (padrão), standard, mux ou super.
attribute body string common, stacking ou qinq.
description body string Opcional.
uplinks body array ou string Portas de uplink em que marcá-la, p. ex. ["0/3/0"] ou "0/3/0,0/3/1".
force body boolean Necessário para uma VLAN diferente da S-VLAN deste roteador em uma OLT compartilhada.
dry_run body boolean Apenas planeja.
Janela do 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"
Nome Em Tipo Observações
vlan body integer Obrigatório.
uplinks body array ou string Portas de uplink das quais desmarcá-la antes.
force body boolean Como em vlan-add.
dry_run body boolean Apenas planeja.
Janela do 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"
Nome Em Tipo Observações
vlan body integer Obrigatório.
port body string Obrigatório. A porta, p. ex. 0/3/0.
remove body boolean Desmarca em vez de marcar.
force body boolean Como em vlan-add.
dry_run body boolean Apenas planeja.
Janela do 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}.

Nome Em Tipo Observações
vlan body integer Obrigatório.
dba body integer Id do perfil DBA; padrão 5.
eth_ports body integer Padrão 1.
profile_id body integer Padrão a vlan.
force body boolean Ignora a proteção de propriedade em uma OLT compartilhada.
Janela do 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"
Nome Em Tipo Observações
profile_id body integer Obrigatório.
force body boolean Ignora a proteção de propriedade em uma OLT compartilhada.
Janela do 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"

Em uma OLT compartilhada exige force=true. Um comando que contenha ? é recusado. Resultado: {"executed": N, "steps": [{"cmd": "...", "output": "..."}]}.

Nome Em Tipo Observações
commands body array ou string Obrigatório. Uma lista, ou um texto com comandos separados por quebras de linha ou vírgulas.
force body boolean Obrigatório em uma OLT compartilhada.
Janela do 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"
Nome Em Tipo Observações
server body string Obrigatório. Endereço do servidor NTP.
remove body boolean Remove em vez de definir.
timezone body string Fuso horário opcional a definir junto.
Janela do 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}.

Nome Em Tipo Observações
name body string Obrigatório. Letras, dígitos, ., _, -.
Janela do 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": "..."}.

Janela do 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"

Quando plans não é informado, são enviados os planos e a folga de OLT do próprio roteador (e a iptv_vlan de uma OLT cadastrada). Para sincronizar todas as OLTs cadastradas de uma vez, use POST /olt/sync.

Nome Em Tipo Observações
dry_run body boolean Apenas lista os comandos que executaria.
Janela do 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"

Com uma OLT cadastrada, os valores ausentes vêm do cadastro (svlan, iptv_vlan, operator), o nome do sistema assume por padrão o nome cadastrado da OLT, o NTP o próprio endereço do roteador voltado para a OLT, e os planos os planos do roteador. Em uma OLT cadastrada como de outra empresa (operator), as configurações globais da OLT não são tocadas.

Nome Em Tipo Observações
apply body boolean Aplica as mudanças; padrão false (simulação).
svlan body integer A S-VLAN deste roteador.
iptv_vlan body integer VLAN de IPTV.
uplinks body array ou string Portas de uplink a usar.
sysname body string Nome do sistema.
ntp body string Servidor NTP.
timezone body string Fuso horário.
operator body boolean Trata a OLT como de outra empresa.
router_parent body string A interface do roteador sobre a qual trafegam as S-VLANs da OLT.
Janela do 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 (simulação, resumido): {"dry_run": true, "svlan": 400, "pon_ports": ["0/1/0", "0/1/1"], "uplinks": ["0/3/0"], "steps": [{"cmd": "..."}]}.

Uma OLT de cada vez. O mesmo trabalho roda sozinho em segundo plano após cada mudança de plano e por um temporizador. Também responde a GET com os parâmetros na query string.

Nome Em Tipo Observações
olt body ou query string Apenas esta OLT cadastrada.
dry_run body ou query boolean Apenas lista os comandos por OLT.
Janela do 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 quando alguma OLT falhou; 404 quando nenhuma OLT está cadastrada ou a informada é desconhecida.

O mesmo que POST /olt/sync, com olt e dry_run na query string.

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

As configurações das OLTs são mantidas no roteador como um histórico (uma entrada por mudança). O roteador faz o backup delas sozinho após as mudanças; estas chamadas leem o histórico ou fazem um backup agora. olt pode ser omitido quando há exatamente uma OLT cadastrada (404 caso contrário). Cada uma também aceita POST com os parâmetros no corpo.

Recusado com 409 para uma OLT cadastrada como de outra empresa (operator).

Nome Em Tipo Observações
olt body ou query string A OLT cadastrada.
Janela do 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 quando não foi possível ler a configuração (ou ela parecia incompleta — nesse caso nada é armazenado).

O histórico de backups de uma OLT, do mais recente para o mais antigo, e seu estado de manutenção.

Nome Em Tipo Observações
olt query string A OLT cadastrada.
n query integer Quantas entradas; padrão 30, 1–500.
Janela do 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(-)" }
]
}

O que mudou na configuração de uma OLT: em um backup (padrão o mais recente), ou entre dois.

Nome Em Tipo Observações
olt query string A OLT cadastrada.
rev query string O id de commit de um backup (4–40 dígitos hexadecimais); padrão o mais recente.
to query string Um segundo id de commit: o diff entre rev e to.
Janela do 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" }

Sem nenhum backup ainda: "diff": "" e "note": "no backup yet". 400 para um id de commit malformado, 404 para um desconhecido.

As OLTs cadastradas. As senhas nunca são devolvidas (has_pass é sempre true); do acesso SNMP só é mostrada a versão. Cada entrada traz o resultado da sua última sincronização de planos.

Janela do 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
}

A menos que force=true, o login é testado antes (e um novo acesso SNMP recebe sua própria leitura de teste); um teste com falha gera 502 e nada é armazenado. Para uma OLT que pertence a este roteador (não operator), o roteador também define a fonte de relógio da OLT.

Nome Em Tipo Observações
name body string Obrigatório. Letras minúsculas, dígitos, ., _, -, máx. 32; começa com letra ou dígito.
host body string Obrigatório. Endereço IP ou nome de host.
user body string Obrigatório.
pass body string Obrigatório.
protocol body string telnet (padrão) ou ssh.
port body integer Porta TCP, se não for a padrão do protocolo.
svlan body integer A S-VLAN deste roteador na OLT (1–4094, ou null/"none").
iptv_vlan body integer VLAN de IPTV (1–4094, ou null/"none").
operator body boolean A OLT pertence a outra empresa; ali o roteador gerencia apenas sua própria S-VLAN e seus perfis.
parent body string A interface do roteador sobre a qual trafegam as S-VLANs da OLT (deve existir).
comment body string Texto livre.
snmp body object Acesso SNMP opcional para o driver licenciado (version v3 com usuário e configurações auth/priv, ou v2c/v1 com uma community). null o remove.
force body boolean Armazena sem o teste de login.
Janela do 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)"
}

Erros: 400 para campos inválidos, 409 quando o nome já existe, 502 quando o teste de login falha (“send force=true to store anyway”).

Os mesmos campos de POST /olts (exceto name, que vem do caminho). O login é testado novamente a menos que force=true. Responde 200 com "message": "OLT updated: olt-1"; 404 para um nome desconhecido.

Janela do 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"

O nome também pode ser informado no corpo como name (com DELETE /olts).

Janela do 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"
}

A action API recebe seus parâmetros na query string. Como isso coloca as credenciais em uma URL, prefira as rotas REST acima; com uma OLT cadastrada, basta olt=<name>.

Ação Parâmetros de query Equivale a
action=olt-<op> (p. ex. action=olt-info) olt, ou host/user/pass; mais os argumentos da operação 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 alterar POST /olts/{name}
action=olts-del name DELETE /olts/{name}

Este site foi escrito com a ajuda de IA e revisado pela nossa equipe.