API de Dispositivos
Referência completa da área action=dispositivo: leitura da topologia de monitoramento, CRUD de grupos, dispositivos e sensores, descoberta SNMP de interfaces e consulta ao catálogo de sensores.
Visão geral Novo na 7.2
A API de Dispositivos permite que sistemas externos do provedor (ERP, scripts de automação, painéis próprios, outro servidor Ravi usado como fonte remota de dashboard) consultem e gerenciem a árvore de monitoramento sem abrir a interface web. Com ela você pode:
- Ler a topologia completa (grupos, dispositivos e sensores) com status e valores atuais.
- Criar, editar e excluir grupos, dispositivos e sensores.
- Pausar e retomar sensores, por exemplo para silenciar alertas durante uma manutenção programada.
- Fazer descoberta SNMP de interfaces por API e criar sensores de tráfego das portas escolhidas.
- Consultar o catálogo de sensores (categorias e modelos) para saber qual
model_idusar na criação. - Obter um resumo de status (contagem de sensores por estado) para integrar em painéis externos.
- Ler um grupo em profundidade, um sensor em detalhe e o histórico de leituras de um sensor.
- Buscar em toda a árvore por nome e consultar o histórico de alertas.
Na 7.2 esta área passou a usar o mesmo núcleo de código da tela nativa de Dispositivos. Um sensor criado pela API é um sensor de verdade: a consulta SNMP é validada na hora, as condições de alerta são avaliadas e a interface reflete a mudança imediatamente. Também são novidades da 7.2 as operações edit_sensor, edit_device, edit_group, sensor_descobrir, sensor_categorias, sensor_modelos e delete_all_sensors. Completam a área as leituras get_group, get_sensor, get_sensor_history, alerts e search.
Pré-requisitos
- Chave de API com a permissão Acesso a Dispositivos marcada (veja Criar uma chave de API). Sem a permissão a chamada recebe HTTP 403 com
{"status":"error","message":"Access denied for dispositivo"}. - Não há exigência de plano nem distinção entre Master e Admin: a chave dá acesso ao módulo inteiro.
- Para operações que consultam SNMP (
add_sensorde modelos SNMP esensor_descobrir), o dispositivo precisa de SNMP configurado e alcançável a partir do servidor Ravi.
Ao marcar as permissões na modal da chave, confira a posição do checkbox: na versão atual o segundo item da grade é o de Dispositivos, mesmo que o rótulo exibido se pareça com o de Concentradoras (o terceiro item é o de Concentradoras). A ordem dos checkboxes é o que vale.
Endereço e forma de chamada
Todas as operações usam o endpoint único da API, com action=dispositivo e a operação em operation. Os parâmetros podem ir por GET ou POST (prefira POST em produção para o token não ficar em logs de URL).
GET/POST https://SEU-SERVIDOR/api/api.php?token=CHAVE&action=dispositivo&operation=NOME_DA_OPERACAO&...
A resposta é sempre application/json; charset=utf-8. Erros do gateway chegam com HTTP 400 (sem token ou ação), 401 (token inválido) e 403 (sem permissão). Erros dentro do módulo, porém, costumam voltar com HTTP 200 e o erro no corpo.
Formatos de resposta
O corpo da resposta varia conforme a operação; cada card de referência abaixo mostra o formato exato. Para o tratamento de erros no seu cliente, trate os dois casos: considere erro qualquer HTTP maior ou igual a 400, corpo com "msg" ou corpo com "status":"error".
| Formato | Operações | Sucesso | Erro |
|---|---|---|---|
| Objeto direto | list_groups, list_devices, list_sensors, get_group, get_device, get_sensor, get_sensor_history, alerts, search, add_group, add_device, pause_sensor, resume_sensor, delete_sensor, delete_device, delete_group, status_summary, topology |
Corpo direto com os dados, ou {"msg":"ok", ...} nas escritas |
{"msg":"texto do erro"} (HTTP 200) |
Envelope status |
add_sensor, sensor_categorias, sensor_modelos, sensor_descobrir, delete_all_sensors, edit_sensor, edit_device, edit_group |
{"status":"success", ...} |
{"status":"error","message":"..."} |
Operação inexistente ou grafada errada devolve {"msg":"Invalid device operation"}.
Conceitos
| Conceito | O que é |
|---|---|
| Grupo | Nó da árvore de monitoramento. Grupos podem conter subgrupos e dispositivos. parent_id = 0 significa raiz. |
| Dispositivo | Equipamento monitorado (IP + marca). Pertence a um grupo (group_id) e tem um código de marca (equipment). |
| Sensor | Métrica monitorada dentro de um dispositivo. Cada sensor nasce de um modelo do catálogo e tem um status numérico (tabela abaixo). |
| Modelo de sensor | Entrada do catálogo que define o que coletar. O catálogo é organizado em categorias. Para criar um sensor via API é preciso informar o model_id: descubra-o com sensor_categorias e sensor_modelos. |
| Protocolos de modelo | 1 = SNMP (subtipo 1 = consulta simples; subtipo 2 = interface, exige descoberta antes), 2 = ping, 8 = agregador (soma de outros sensores). Outros protocolos do catálogo não são suportados pela criação via API. |
| Cascata SNMP | A configuração SNMP usada segue a mesma cascata da tela: padrão do sistema, sobrescrito pelo SNMP próprio do grupo (se ativo), sobrescrito pelo SNMP próprio do dispositivo (se ativo). |
Grupo de sensores (grupo_sensor_id) | Agrupamento visual de sensores no painel do dispositivo. A API só atribui o sensor a um grupo existente; a gestão desses grupos é feita pela interface. |
Status de sensor
Os campos status e status_text das listagens usam estes códigos:
| Código | status_text | Significado |
|---|---|---|
| 1 | Offline | Sensor sem resposta. |
| 2 | Pausado | Pausado manualmente; não é testado nem alerta. |
| 3 | Alerta | Condição de alerta atingida. |
| 4 | Crítico | Condição crítica atingida. |
| 5 | Não testado | Sensor novo ou retomado, aguardando o primeiro ciclo de coleta. |
| 6 | OK | Normal. |
| 20 | Falha SNMP | O equipamento respondeu, mas a consulta SNMP falhou. |
Existem sub-estados internos (7 a 14, variações de alerta e crítico). Na operação topology eles já vêm colapsados nos códigos 3 e 4; nas demais listagens o código cru é devolvido.
Endpoints transversais de leitura
Além das operações organizadas por grupo, dispositivo e sensor, a área oferece duas leituras que atravessam toda a árvore: o histórico de alertas e a busca global. As duas respondem com o objeto direto dos dados.
/api/api.php?action=dispositivo&operation=alerts
Lista os alertas registrados, do mais recente para o mais antigo, com o dispositivo e o sensor de origem, os canais de notificação disparados e a duração de cada ocorrência.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
limit | int | não (padrão 100) | Máximo de alertas retornados. |
only_active | bool | não (padrão false) | "true" traz só os alertas ainda não resolvidos. |
group_id | int | não | Filtra os alertas pelos dispositivos de um grupo. |
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=alerts&only_active=true&limit=50"
{"alerts":[{"id":9012,"date":"2026-07-04 09:15:00","sensor_id":8623,"sensor_name":"Tráfego sfp-sfpplus1",
"device_id":5,"device_name":"RB Borda","device_ip":"10.0.0.1","type":3,"type_text":"Alerta","tag":"ifMikrotik",
"messages":["Tráfego acima do limite"],
"notifications":{"telegram":1,"email":1,"whatsapp":0,"push":0},
"resolved":false,"resolved_date":null,
"duration":{"days":0,"hours":1,"minutes":23,"seconds":11,"total_seconds":4991,"formatted":"01:23:11"}}],
"total":1,"active_count":1}O campo type usa estes códigos, com o rótulo correspondente em type_text; qualquer outro valor volta com type_text Desconhecido:
type | type_text |
|---|---|
| 1 | Offline |
| 2 | Pausado |
| 3 | Alerta |
| 4 | Crítico |
| 5 | Não testado |
| 7 | Warning |
| 10 | Crítico |
resolvedindica se o alerta já foi resolvido; nesse casoresolved_datetraz a data edurationé o tempo total. Para alertas ativos, a duração é contada até o momento da consulta.duration.formattedvem comoHH:MM:SS, prefixado pela contagem de dias quando houver: por exemplo"06:35:20"para menos de um dia e"2d 05:30:45"a partir de um dia.- Os quatro campos de
notifications(telegram,email,whatsapp,push) são números, não booleanos:0= não enviado,1= enviado quando o problema surgiu,2= enviado na resolução do problema,3= falha no envio. totalé quantos alertas vieram na resposta;active_count, quantos deles seguem ativos.
/api/api.php?action=dispositivo&operation=search
Busca por texto em toda a árvore de monitoramento e devolve os grupos, dispositivos e sensores que casam com o termo. Útil para uma barra de busca em um painel externo. O termo é comparado por trecho (contém), sem diferenciar maiúsculas: grupos pelo nome, dispositivos pelo nome ou pelo IP e sensores pelo nome ou pela tag.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
query | string | sim | Termo de busca (mínimo 2 caracteres). |
type | string | não (padrão all) | Restringe o tipo: all, groups, devices ou sensors. |
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=search&query=borda&type=all"
{"results":{
"groups":[{"id":12,"name":"POP Centro","parent_id":0}],
"devices":[{"id":5,"name":"RB Borda","ip":"10.0.0.1","group_id":12,"equipment":"Mikrotik"}],
"sensors":[{"id":8623,"name":"Tráfego sfp-sfpplus1","device_id":5,"device_name":"RB Borda",
"status":6,"status_text":"OK","tag":"ifMikrotik"}]}}Com type diferente de all, apenas a lista correspondente é preenchida; as demais vêm vazias. Cada lista devolve no máximo 50 resultados por tipo: se alguma vier com 50 itens, refine o termo de busca. Nos dispositivos, equipment vem como o nome da marca (diferente do list_devices, que devolve o código numérico). Erro: Search query must be at least 2 characters.
Grupos
Operações sobre os nós da árvore de monitoramento: listar por nível, criar, editar (inclusive SNMP próprio, posição no mapa e automações) e excluir.
/api/api.php?action=dispositivo&operation=list_groups
Lista os grupos de um nível da árvore. Não é recursivo: devolve apenas o nível pedido, na ordem em que aparecem na tela.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
parent_id | int | não (padrão 0) | ID do grupo pai. 0 lista os grupos da raiz. |
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=list_groups&parent_id=0"
{"groups":[{"id":12,"name":"POP Centro","parent_id":0},{"id":15,"name":"Backbone","parent_id":0}]}/api/api.php?action=dispositivo&operation=get_group
Novo na 7.2
Devolve um grupo com sua subárvore completa e um resumo de status. Diferente do list_groups (que traz só um nível), esta operação desce recursivamente pelos subgrupos e, por padrão, inclui os dispositivos e os sensores de cada nível.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
group_id | int | sim | Grupo raiz da consulta. |
include_devices | bool | não (padrão true) | "false" omite a lista de dispositivos de cada grupo (traz só a estrutura de grupos). |
include_sensors | bool | não (padrão true) | "false" omite os sensores de cada dispositivo. |
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=get_group&group_id=12"
{"group":{"id":12,"name":"POP Centro","parent_id":0,
"subgroups":[{"id":18,"name":"Sala técnica","parent_id":12,"subgroups":[],"devices":[],"stats":{}}],
"devices":[{"id":5,"name":"RB Borda","ip":"10.0.0.1","group_id":12,"equipment":"Mikrotik",
"sensors":[{"id":301,"name":"Carga de CPU","device_id":5,"status":6,"status_text":"OK",
"value":"12%","tag":"cpuMikrotik","unit":"%","schedule":"1m"}],
"status":{"total_sensors":1,"sensors_ok":1,"sensors_alert":0,"sensors_error":0,
"sensors_offline":0,"sensors_paused":0,"overall":"ok"}}],
"stats":{"total_devices":8,"total_sensors":64,"sensors_ok":60,"sensors_alert":1,
"sensors_error":0,"sensors_offline":2,"sensors_paused":1}}}- Cada nó de
subgroupsrepete a mesma estrutura (subgroups,devices,stats), de forma recursiva. - Nos dispositivos,
equipmentvem como o nome da marca (por exemplo"Mikrotik","Outro"). Jálist_deviceseget_devicedevolvem o código numérico da marca (tabela doadd_device). - Cada sensor traz
id,name,device_id,status,status_text,value(formatado),tag,uniteschedule. Os camposunitescheduleaparecem só aqui: olist_sensorsnão devolve esses dois. - Cada dispositivo traz também um bloco
statusque resume o equipamento (campos na tabela abaixo). - O bloco
statsconta os sensores da subárvore por estado (sensors_ok,sensors_alert,sensors_error,sensors_offline,sensors_paused), útil para um resumo por POP.
Bloco status de cada dispositivo
| Campo | Conteúdo |
|---|---|
total_sensors | Total de sensores do dispositivo. |
sensors_ok | Sensores OK. |
sensors_alert | Sensores em alerta (status 3 e 7). |
sensors_error | Sensores em erro (status 4 e 20). |
sensors_offline | Sensores offline (status 1). |
sensors_paused | Sensores pausados (status 2). |
overall | Resumo do dispositivo, com precedência: error se houver sensor em erro, senão alert, senão offline, senão ok. Quando nenhum sensor se encaixa (por exemplo todos não testados), vem unknown. |
Erros: Group ID is required, Group not found.
/api/api.php?action=dispositivo&operation=add_group
Cria um grupo. O grupo novo entra no fim da ordem do nível. Nome duplicado no mesmo nível é bloqueado (em níveis diferentes pode repetir).
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | sim | Nome do grupo. Caracteres HTML são convertidos em entidades. |
parent_id | int | não (padrão 0) | Grupo pai. 0 cria na raiz. |
curl -s -d "token=CHAVE&action=dispositivo&operation=add_group&name=POP Norte" https://ravi.exemplo.com/api/api.php
{"msg":"ok","group_id":77}Erros: Group name is required, Group already exists at this level.
/api/api.php?action=dispositivo&operation=edit_group
Novo na 7.2
Edita um grupo existente com semântica PATCH: só altera o que for enviado; campos omitidos ficam como estão.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
group_id | int | sim | Grupo a editar. |
name | string | não | Novo nome. |
parent_id | int | não | Move o grupo para outro pai. |
ativasnmp | int | não | 2 = o grupo passa a ter SNMP próprio (herdado pelos dispositivos filhos que herdam); outro valor = usa o padrão do sistema. |
snmp_version | int | não | Versão SNMP do grupo: 1, 2 ou 3. |
snmp_community | string | não | Community (v1/v2c) ou usuário (v3). |
snmp_port | int | não | Porta SNMP. |
snmp_seclevel / snmp_authproto / snmp_cryptoproto / snmp_authpass / snmp_cryptopass | string | não | Parâmetros SNMPv3: nível de segurança, protocolo de autenticação, protocolo de criptografia e as duas senhas. |
latitude / longitude | decimal | não | Posição no mapa. Valores vazios ou não numéricos são gravados como nulos. |
autosensor | string | não | Template de auto-sensor do grupo (mesmo valor usado pela tela; criação automática de sensores nos dispositivos do grupo). |
autoscan | int | não | Liga ou desliga a Detecção Automática (varredura de rede) do grupo. |
curl -s -d "token=CHAVE&action=dispositivo&operation=edit_group&group_id=77&name=POP Norte 2&ativasnmp=2&snmp_version=2&snmp_community=publica&snmp_port=161" https://ravi.exemplo.com/api/api.php
{"status":"success","group":{"id":77,"nome":"POP Norte 2","idGrupoPai":0}}Erros: group_id is required, Group not found.
/api/api.php?action=dispositivo&operation=delete_group
Exclui um grupo. Só funciona em grupo vazio: sem subgrupos e sem dispositivos. Esvazie antes, movendo o conteúdo com edit_device e edit_group.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
group_id | int | sim | Grupo a excluir. |
curl -s -d "token=CHAVE&action=dispositivo&operation=delete_group&group_id=77" https://ravi.exemplo.com/api/api.php
{"msg":"ok"}Erros: Group ID is required, Group not found, Cannot delete group with subgroups, Cannot delete group with devices.
Dispositivos
Operações sobre os equipamentos monitorados: listagem, consulta detalhada, criação, edição (incluindo SNMP e SSH próprios), exclusão, resumo de status e a topologia completa em uma chamada.
/api/api.php?action=dispositivo&operation=list_devices
Lista os dispositivos de um grupo. Não é recursivo.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
group_id | int | não (padrão 0) | Grupo dono. 0 lista os dispositivos soltos na raiz. |
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=list_devices&group_id=12"
{"devices":[{"id":5,"name":"RB Borda","ip":"10.0.0.1","group_id":12,"equipment":2}]}/api/api.php?action=dispositivo&operation=get_device
Devolve um dispositivo com todos os seus sensores (mesmo formato de sensor do list_sensors).
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
device_id | int | sim | Dispositivo a consultar. |
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=get_device&device_id=5"
{"device":{"id":5,"name":"RB Borda","ip":"10.0.0.1","group_id":12,"equipment":2,
"sensors":[{"id":301,"name":"Carga de CPU","device_id":5,"status":6,"status_text":"OK","value":"12%","tag":"cpuMikrotik"}]}}Erros: Device ID is required, Device not found.
/api/api.php?action=dispositivo&operation=status_summary
Contadores de status para painéis externos: total de dispositivos, total de sensores e sensores por estado.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
group_id | int | não | Se enviado, considera só os dispositivos diretamente dentro desse grupo (não desce em subgrupos). Sem ele, o sistema inteiro. |
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=status_summary"
{"total_devices":42,"total_sensors":310,
"status_counts":{"offline":2,"paused":5,"alert":1,"critical":0,"untested":3,"ok":299}}Observação: os sub-estados internos (7 a 14 e 20) não entram nos 6 contadores, então a soma pode ficar ligeiramente abaixo de total_sensors em cenários com falha SNMP.
/api/api.php?action=dispositivo&operation=topology
Devolve a árvore completa em uma única chamada: grupos com dispositivos e sensores, dispositivos da raiz e ainda as listas de OLTs, concentradoras, DNS e exportadores de Flow ativos. É a operação usada pelo Ambiente Dashboards para fontes remotas. Não recebe parâmetros.
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=topology"
{"topology":{
"groups":[{"id":12,"name":"POP Centro","parent_id":0,
"devices":[{"id":5,"name":"RB Borda","group_id":12,
"sensors":[{"id":301,"name":"Carga de CPU","status":6}]}]}],
"devices":[],
"olts":[{"id":1,"name":"OLT Central","ip":"10.0.0.9","status":1}],
"concentradoras":[{"id":1,"name":"BNG-01","ip":"10.0.0.8","status":1}],
"dns":[{"id":1,"name":"DNS Recursivo","primario":"10.0.0.53","secundario":"10.0.0.54"}],
"flow":[{"id":0,"name":"Visão geral","ip":""},{"id":3,"name":"NE8000","ip":"10.0.0.7"}]
}}- Os grupos vêm achatados, todos com
parent_id; o cliente monta a hierarquia. - O status dos sensores já vem colapsado nos códigos 1 a 6.
- Só aparecem OLTs e concentradoras ativas e exportadores de Flow ativos. O item de Flow com
id=0é sintético e representa a visão geral de todos os exportadores. - Em bases grandes a resposta é volumosa: faça cache no cliente em vez de chamar em loop curto.
/api/api.php?action=dispositivo&operation=add_device
Cria um dispositivo. Ele nasce sem sensores: crie-os em seguida com add_sensor ou ligue o auto-sensor do dispositivo ou do grupo.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | sim | Nome do dispositivo. |
ip | string | sim | IP válido (IPv4 ou IPv6). |
group_id | int | não (padrão 0) | Grupo dono. 0 cria na raiz. |
equipment | int | não (padrão 100) | Código da marca (tabela abaixo). |
curl -s -d "token=CHAVE&action=dispositivo&operation=add_device&name=RB Borda&ip=10.0.0.1&group_id=77&equipment=2" https://ravi.exemplo.com/api/api.php
{"msg":"ok","device_id":123}Erros: Device name and IP are required, Invalid IP address, Device with this name or IP already exists. A checagem de duplicidade é global: mesmo nome ou mesmo IP em qualquer grupo bloqueia a criação.
Códigos de marca (equipment)
Mesmos códigos da tela de dispositivo. A marca importa: a descoberta automática de sensores e a filtragem de modelos do catálogo são dirigidas por ela.
| Código | Marca | Código | Marca |
|---|---|---|---|
| 1 | Ubiquiti | 12 | Cambium Networks |
| 2 | Mikrotik | 13 | Ceragon |
| 3 | Cisco | 14 | VOLT |
| 4 | Juniper | 15 | XPS |
| 5 | Huawei | 16 | ALGcom |
| 6 | Fiberhome | 17 | Rondotec |
| 7 | ZTE | 18 | Linux |
| 8 | Intelbras | 19 | DATACOM |
| 9 | PARKS | 20 | JFA |
| 10 | v-Solution | 21 | a10 |
| 11 | Mimosa | 100 | Outro |
/api/api.php?action=dispositivo&operation=edit_device
Novo na 7.2
Edita um dispositivo com semântica PATCH: só o que for enviado muda. Após salvar, o sistema reprocessa em segundo plano os auto-sensores do dispositivo e regenera a proteção SNMP do servidor, os mesmos efeitos do salvar da tela.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
device_id | int | sim | Dispositivo a editar. |
name | string | não | Novo nome. |
ip | string | não | Novo IP (validado; inválido devolve Invalid IP address). |
group_id | int | não | Move o dispositivo para outro grupo. |
equipment | int | não | Muda a marca (códigos do add_device). |
herdar_snmp | int | não | 2 = o dispositivo usa SNMP próprio (campos snmp_* abaixo); outro valor = herda do grupo ou do sistema. |
snmp_version | int | não | 1, 2 ou 3. |
snmp_community | string | não | Community (v1/v2c) ou usuário (v3). |
snmp_port | int | não | Porta SNMP. |
snmp_seclevel / snmp_authproto / snmp_cryptoproto / snmp_authpass / snmp_cryptopass | string | não | Credenciais SNMPv3. |
herdar_ssh | int | não | Análogo ao SNMP, para credenciais SSH próprias. |
ssh_user / ssh_pass / ssh_port | string | não | Credenciais SSH do dispositivo (usadas no terminal por dispositivo, backups etc.). |
limit_snmpget | int | não | Limite de OIDs por consulta SNMP, para equipamentos que não aceitam consultas grandes. |
inf | string | não | Campo Informações (anotações livres). |
inf_sigilosas | string | não | Campo Informações sigilosas (visível conforme permissão na tela). |
auto_sensor | int | não | 0 desliga a criação automática de sensores deste dispositivo; 1 ou 2 liga. |
curl -s -d "token=CHAVE&action=dispositivo&operation=edit_device&device_id=123&herdar_snmp=2&snmp_version=2&snmp_community=noc&snmp_port=161" https://ravi.exemplo.com/api/api.php
{"status":"success","device":{"id":123,"nome":"RB Borda","ip":"10.0.0.1","idGrupoPai":12}}Erros: device_id is required, Device not found, Invalid IP address.
/api/api.php?action=dispositivo&operation=delete_device
Exclui o dispositivo e todos os seus sensores.
A exclusão é irreversível. Esta operação remove as linhas de sensores, mas não faz a limpeza completa de históricos e arquivos auxiliares: para zerar um dispositivo por completo, rode delete_all_sensors antes de excluí-lo.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
device_id | int | sim | Dispositivo a excluir. |
curl -s -d "token=CHAVE&action=dispositivo&operation=delete_device&device_id=123" https://ravi.exemplo.com/api/api.php
{"msg":"ok"}Erros: Device ID is required, Device not found.
Sensores
Operações sobre as métricas monitoradas: listar, criar (com validação SNMP real), editar, pausar, retomar e excluir (individual ou em massa).
/api/api.php?action=dispositivo&operation=list_sensors
Lista os sensores de um dispositivo. O campo value já vem formatado como na tela (número + unidade do catálogo, por exemplo "87.5 mbps"); para sensores pausados, offline ou novos vem o texto do estado (Pausado, Offline, Sensor não testado).
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
device_id | int | sim | Dispositivo dono. |
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=list_sensors&device_id=5"
{"sensors":[{"id":301,"name":"Carga de CPU","device_id":5,"status":6,"status_text":"OK","value":"12%","tag":"cpuMikrotik"}]}Erro: Device ID is required.
/api/api.php?action=dispositivo&operation=get_sensor
Novo na 7.2
Detalha um sensor: identificação, status, valores atuais (crus e médias por coletor), unidade, cronograma, o modelo de catálogo de origem e, quando há uma condição de alerta ativa, o campo context com as condições que dispararam. É a leitura mais completa de um sensor individual.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
sensor_id | int | sim | Sensor a consultar. |
curl "https://SEU-SERVIDOR/api/api.php?action=dispositivo&operation=get_sensor&sensor_id=8623&token=SEU_TOKEN"
{"sensor":{"id":8623,"name":"Tráfego sfp-sfpplus1","device_id":5,"device_name":"RB Borda",
"device_ip":"10.0.0.1","status":6,"status_text":"OK","tag":"ifMikrotik","unit":"mbps",
"schedule":"1m","error_count":0,
"values":[{"name":"Download","raw_value":"87500000","extension":"mbps","average":"84.2"},
{"name":"Upload","raw_value":"12300000","extension":"mbps","average":"11.8"}],
"raw_values":{"value1":"87500000","value2":"12300000","value3":"","value4":""},
"averages":{"avg1":"84.2","avg2":"11.8","avg3":"","avg4":""},
"model":{"id":45,"name":"Tráfego de interface","protocol":1,"type":2}}}valuestraz um item por coletor ativo, cada um comname,raw_value,extension(unidade) eaverage;raw_valueseaveragesexpõem os quatro campos crus (value1..4eavg1..4).statussegue a tabela de status da Visão geral;status_texté o rótulo no idioma do sistema.modelidentifica o modelo de catálogo de origem.- O campo
contextsó aparece quando o sensor tem uma condição de alerta ativa: é a lista das condições que dispararam, cada item com a descrição do problema (campodescricao) e os dados da condição. Sensor normal (sem mensagem ativa) vem sem o campocontext.
Erros: Sensor ID is required, Sensor not found.
/api/api.php?action=dispositivo&operation=get_sensor_history
Novo na 7.2
Devolve o histórico de leituras de um sensor em um intervalo de datas, com estatísticas opcionais por coletor. Serve para gráficos externos e relatórios.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
sensor_id | int | sim | Sensor a consultar. |
start_date | date | não (padrão hoje) | Data inicial no formato YYYY-MM-DD. |
end_date | date | não (padrão hoje) | Data final no formato YYYY-MM-DD. |
include_stats | bool | não (padrão true) | "false" omite o bloco statistics. |
limit | int | não (padrão 0) | Máximo de registros retornados em data. 0 = sem limite. |
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=get_sensor_history&sensor_id=8623&start_date=2026-07-01&end_date=2026-07-04"
{"sensor_id":8623,"sensor_name":"Tráfego sfp-sfpplus1","sensor_tag":"ifMikrotik",
"start_date":"2026-07-01","end_date":"2026-07-04",
"data":[{"timestamp":"2026-07-01 00:01:00","status":6,"status_text":"OK",
"values":[{"name":"Download","value":"84.2","unit":"mbps"},
{"name":"Upload","value":"11.8","unit":"mbps"}]}],
"total_records":5760,"returned_records":5760,
"statistics":{"total_records":5760,"status_summary":{"6":5740,"3":20},
"values_stats":{"Download":{"min":"0.4","max":"120.7","average":"84.2","unit":"mbps",
"count":5760,"min_date":"2026-07-02 04:12:00","max_date":"2026-07-03 21:33:00"}}}}- Cada item de
datatraz otimestamp, ostatus/status_textda leitura e osvaluespor coletor (nome, valor e unidade). total_recordsé quanto existe no período;returned_recordsé quanto veio depois de aplicar olimit.- Em
statistics.values_stats, cada chave é um coletor do sensor, com mínimo, máximo, média, unidade, contagem e as datas do mínimo e do máximo.status_summaryconta os registros por código de status.
O histórico vem das leituras diárias armazenadas no servidor. Períodos antigos podem estar compactados; o endpoint lê os dois formatos de forma transparente, então intervalos longos podem levar mais tempo para responder.
Erros: Sensor ID is required, Invalid date format. Use YYYY-MM-DD.
/api/api.php?action=dispositivo&operation=add_sensor
Novo na 7.2
Cria um ou mais sensores a partir de um modelo do catálogo. Reformulada na 7.2: a criação é real, com consulta SNMP validada na hora. Os parâmetros extras dependem do protocolo do modelo (descubra-o com sensor_modelos).
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
device_id | int | sim | Dispositivo dono. |
model_id | int | sim | Modelo do catálogo (aceita o alias idSensor). |
grupo_sensor_id | int | não | Grupo de sensores (aba) onde o sensor entra no painel do dispositivo. |
alvos | JSON array | só ping | Vários alvos de uma vez: [{"ip":"8.8.8.8","nome":"Google"}]. |
ping_ip / ping_nome | string | só ping (alternativa) | Um único alvo. Sem alvo nenhum, o ping é criado contra o IP do próprio dispositivo. Nome vazio usa o nome do modelo. |
nome | string | só agregador | Nome do sensor agregador. |
ids | string CSV | só agregador | IDs dos sensores-fonte (mínimo 2, todos do mesmo tipo). |
itens | JSON array | só interface | Itens vindos de sensor_descobrir: [{"index":"7","nome":"sfp-sfpplus1","valor1":"..."}]. |
O que acontece por tipo de modelo:
- SNMP simples (protocolo 1, tipo 1): a API faz uma consulta SNMP real nos OIDs do modelo usando a cascata SNMP. Se qualquer OID falhar, o sensor não é criado. As condições de alerta são avaliadas na hora: o sensor nasce com status 6 (OK) ou 3 (Alerta).
- Interface (protocolo 1, tipo 2): exige
itens(fluxo:sensor_descobrir, escolher,add_sensor). Cria um sensor por item, com status inicial 5 (Não testado). Semitens, falha com "Nenhuma interface informada (use sensor_descobrir)". - Ping (protocolo 2): cria com status 5 e parâmetros padrão de ping. Deduplicação por IP: se já existe ping para aquele IP no dispositivo, o item conta como duplicado.
- Agregador (protocolo 8): soma os valores dos sensores-fonte. Deduplicação por conjunto de IDs e por nome. Falhas possíveis: "Selecione ao menos 2 sensores", "Sensores de tipos diferentes", "Sensores nao encontrados".
curl -s -d 'token=CHAVE&action=dispositivo&operation=add_sensor&device_id=123&model_id=45&itens=[{"index":"7","nome":"sfp-sfpplus1"}]' https://ravi.exemplo.com/api/api.php{"status":"success","message":"criados=3 duplicados=1 falhas=0",
"criados":[{"id":501,"nome":"sfp-sfpplus1","statusAlert":"5","idDispositivo":123}],
"duplicados":[{"error":"Ja existe um ping para este IP"}],
"falhas":[]}A resposta sempre traz os três conjuntos criados, duplicados e falhas; o status é success se pelo menos um sensor foi criado. Falhas típicas dentro de falhas: SNMP nao configurado, Falha na consulta SNMP, mensagens de OID (com o OID problemático no campo oid), Modelo sem coletores, Protocolo nao suportado: N. Erros diretos: device_id and model_id are required, Device not found.
/api/api.php?action=dispositivo&operation=edit_sensor
Novo na 7.2
Edita propriedades de um sensor com semântica PATCH, com uma exceção importante para sensores de ping (veja o aviso abaixo).
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
sensor_id | int | sim | Sensor a editar. |
nome | string | não | Novo nome (não pode ser vazio se enviado). |
valor | string | não | Campo "valor" do sensor (índice da interface, IP do ping etc.). Cuidado ao alterar. |
cronograma | string | não | Intervalo de coleta: 30s, 1m (padrão recomendado), 5m, 15m, 1h, 1d, 7d. |
falhas | string | não | (Sensores que não são ping) limite de falhas antes de alarmar. |
ping_tamanho | int | ver aviso | (Só ping) tamanho do pacote em bytes. Padrão 32. |
ping_quantidade | int | ver aviso | (Só ping) quantidade de pacotes. Padrão 20. |
ping_delay | int | ver aviso | (Só ping) intervalo entre pacotes. Padrão 1. |
ping_falhas | int | ver aviso | (Só ping) falhas toleradas. Padrão 2. |
display_tipo | int | não | 1 = exibir 1 valor; 2 = exibir 2 valores (por exemplo down/up). |
display_separador | string | não | Separador entre os 2 valores (máximo 4 caracteres, padrão " / "). |
display_valor1 / display_valor2 | int | não | Qual coletor (1 a 4) aparece em cada posição. |
Sensores de ping: ao editar qualquer coisa de um sensor de ping, os quatro parâmetros ping_* que não forem reenviados voltam aos padrões (32/20/1/2). Sempre reenvie ping_tamanho, ping_quantidade, ping_delay e ping_falhas juntos ao editar um sensor de ping.
curl -s -d "token=CHAVE&action=dispositivo&operation=edit_sensor&sensor_id=501&nome=Uplink SFP+1&cronograma=1m" https://ravi.exemplo.com/api/api.php
{"status":"success"}Erros: sensor_id is required, Sensor not found, nome obrigatorio.
/api/api.php?action=dispositivo&operation=pause_sensor
Pausa um sensor (status 2). Sensor pausado não é coletado nem gera alerta. Útil para silenciar por script durante manutenções.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
sensor_id | int | sim | Sensor a pausar. |
curl -s -d "token=CHAVE&action=dispositivo&operation=pause_sensor&sensor_id=501" https://ravi.exemplo.com/api/api.php
{"msg":"ok"}Erros: Sensor ID is required, Sensor not found.
/api/api.php?action=dispositivo&operation=resume_sensor
Retoma um sensor pausado: ele volta ao status 5 (Não testado) e assume o status real no próximo ciclo de coleta.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
sensor_id | int | sim | Sensor a retomar. |
curl -s -d "token=CHAVE&action=dispositivo&operation=resume_sensor&sensor_id=501" https://ravi.exemplo.com/api/api.php
{"msg":"ok"}Erros: Sensor ID is required, Sensor not found.
/api/api.php?action=dispositivo&operation=delete_sensor
Exclui um sensor. Esta operação simples não limpa históricos e arquivos auxiliares; para a limpeza completa de um dispositivo use delete_all_sensors.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
sensor_id | int | sim | Sensor a excluir. |
curl -s -d "token=CHAVE&action=dispositivo&operation=delete_sensor&sensor_id=501" https://ravi.exemplo.com/api/api.php
{"msg":"ok"}Erros: Sensor ID is required, Sensor not found.
/api/api.php?action=dispositivo&operation=delete_all_sensors
Novo na 7.2
Exclui todos os sensores de um dispositivo em uma única chamada, espelhando o botão equivalente da tela: remove os sensores, os registros de histórico e alertas associados e os caches de dados em disco. A limpeza é tolerante a falhas parciais nos históricos.
Operação irreversível: os históricos de coleta dos sensores excluídos são apagados junto e não podem ser recuperados.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
device_id | int | sim | Dispositivo cujos sensores serão todos excluídos. |
curl -s -d "token=CHAVE&action=dispositivo&operation=delete_all_sensors&device_id=123" https://ravi.exemplo.com/api/api.php
{"status":"success","excluidos":14,"message":"14 sensor(es) excluído(s)"}Dispositivo sem sensores devolve excluidos: 0 ainda com sucesso. Erros: device_id is required, Device not found.
Descoberta e catálogo Novo na 7.2
Estas três operações dão suporte à criação de sensores. O fluxo recomendado é sempre: sensor_categorias para achar a categoria, sensor_modelos para achar o model_id e o protocolo, sensor_descobrir se o modelo for de interface e, por fim, add_sensor. Não use um model_id "chutado".
/api/api.php?action=dispositivo&operation=sensor_categorias
Lista as categorias do catálogo de sensores (incluindo os grupos de marca), já no idioma do sistema.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
device_id | int | não | Se enviado, devolve também o IP do dispositivo (útil para pré-preencher o alvo de ping). |
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=sensor_categorias&device_id=123"
{"status":"success","lang":1,"cats":[{"id":4,"nome":"Mikrotik"},{"id":9,"nome":"Ping"}],"hostIp":"10.0.0.1"}lang indica o idioma do sistema (1 = português, 2 = inglês, 3 = espanhol); os nomes das categorias já vêm nesse idioma.
/api/api.php?action=dispositivo&operation=sensor_modelos
Lista os modelos do catálogo por categoria e/ou termo de busca. Os campos que interessam para criar um sensor são o id (vira o model_id) e o par protocolo/tipo, que define quais parâmetros o add_sensor exige.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
group_id | int | não | ID da categoria (vindo de sensor_categorias). Atenção: aqui group_id é categoria de catálogo, não grupo da árvore. |
term | string | não | Busca por nome, descrição ou tag (nos 3 idiomas). Sem categoria e com term, a busca é global e limitada a 80 resultados. |
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=sensor_modelos&group_id=4&term=trafego"
{"status":"success","models":[{"id":45,"nome_pt":"Tráfego de interface","tag":"ifMikrotik","protocolo":1,"tipo":2}]}/api/api.php?action=dispositivo&operation=sensor_descobrir
Descoberta SNMP de interfaces para modelos de interface (protocolo 1, tipo 2, como tráfego de portas). Roda um SNMP walk síncrono no equipamento e devolve as interfaces encontradas, prontas para serem repassadas ao add_sensor no parâmetro itens.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
device_id | int | sim | Dispositivo alvo. |
model_id | int | sim | Modelo de interface do catálogo. |
timeout | int | não (padrão 60) | Segundos (mínimo 5, máximo 240). Se estourar, devolve o que coletou com truncado: true. |
curl -s -d "token=CHAVE&action=dispositivo&operation=sensor_descobrir&device_id=123&model_id=45&timeout=120" https://ravi.exemplo.com/api/api.php
{"status":"success","itens":[{"index":"7","nome":"sfp-sfpplus1","valor1":"..."}],"total":48,"truncado":false}- O
indexpode ser composto (por exemplo"idx|id2") em modelos que usam dois índices: repasse o valor exatamente como veio. - A chamada HTTP fica aberta até o walk terminar (até 240 segundos). Ajuste o timeout do seu cliente HTTP para um valor maior que o
timeoutpedido.
Erros: device_id and model_id are required, Device not found, Sem retorno da descoberta (timeout ou SNMP) (equipamento não respondeu dentro do prazo, SNMP errado ou modelo sem dados).
Exemplos práticos
Provisionar um POP completo: grupo, dispositivo e sensores de interface
O exemplo cria um grupo, cadastra uma Mikrotik nele, descobre as interfaces por SNMP e cria os sensores de tráfego.
# 1) Criar o grupo curl -s -d "token=CHAVE&action=dispositivo&operation=add_group&name=POP Norte" \ https://ravi.exemplo.com/api/api.php # → {"msg":"ok","group_id":77} # 2) Criar o dispositivo (equipment=2 é Mikrotik) curl -s -d "token=CHAVE&action=dispositivo&operation=add_device&name=RB Borda&ip=10.0.0.1&group_id=77&equipment=2" \ https://ravi.exemplo.com/api/api.php # → {"msg":"ok","device_id":123} # 3) Descobrir as interfaces do modelo 45 curl -s -d "token=CHAVE&action=dispositivo&operation=sensor_descobrir&device_id=123&model_id=45&timeout=120" \ https://ravi.exemplo.com/api/api.php # 4) Criar os sensores das interfaces escolhidas curl -s -d 'token=CHAVE&action=dispositivo&operation=add_sensor&device_id=123&model_id=45&itens=[{"index":"7","nome":"sfp-sfpplus1"}]' \ https://ravi.exemplo.com/api/api.php
<?php $base = 'https://ravi.exemplo.com/api/api.php'; $token = 'CHAVE'; function ravi($base, $params) { $ch = curl_init($base); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 300); // maior que o timeout da descoberta $out = json_decode(curl_exec($ch), true); curl_close($ch); // erro nos dois formatos: "msg" != ok ou status=error if (isset($out['msg']) && $out['msg'] !== 'ok') throw new Exception($out['msg']); if (($out['status'] ?? '') === 'error') throw new Exception($out['message']); return $out; } $grupo = ravi($base, ['token'=>$token, 'action'=>'dispositivo', 'operation'=>'add_group', 'name'=>'POP Norte']); $disp = ravi($base, ['token'=>$token, 'action'=>'dispositivo', 'operation'=>'add_device', 'name'=>'RB Borda', 'ip'=>'10.0.0.1', 'group_id'=>$grupo['group_id'], 'equipment'=>2]); $desc = ravi($base, ['token'=>$token, 'action'=>'dispositivo', 'operation'=>'sensor_descobrir', 'device_id'=>$disp['device_id'], 'model_id'=>45, 'timeout'=>120]); ravi($base, ['token'=>$token, 'action'=>'dispositivo', 'operation'=>'add_sensor', 'device_id'=>$disp['device_id'], 'model_id'=>45, 'itens'=>json_encode($desc['itens'])]);
import requests, json BASE = "https://ravi.exemplo.com/api/api.php" TOKEN = "CHAVE" def ravi(**params): params.update(token=TOKEN, action="dispositivo") r = requests.post(BASE, data=params, timeout=300) # > timeout da descoberta out = r.json() # erro nos dois formatos: "msg" != ok ou status=error if out.get("msg") not in (None, "ok") or out.get("status") == "error": raise RuntimeError(out.get("msg") or out.get("message")) return out grupo = ravi(operation="add_group", name="POP Norte") disp = ravi(operation="add_device", name="RB Borda", ip="10.0.0.1", group_id=grupo["group_id"], equipment=2) desc = ravi(operation="sensor_descobrir", device_id=disp["device_id"], model_id=45, timeout=120) ravi(operation="add_sensor", device_id=disp["device_id"], model_id=45, itens=json.dumps(desc["itens"]))
Janela de manutenção: pausar e retomar sensores por script
# Antes da manutenção: pausar (repita para cada sensor da lista de list_sensors) curl -s -d "token=CHAVE&action=dispositivo&operation=pause_sensor&sensor_id=501" https://ravi.exemplo.com/api/api.php # Depois da manutenção: retomar (volta como "Não testado" até o próximo ciclo) curl -s -d "token=CHAVE&action=dispositivo&operation=resume_sensor&sensor_id=501" https://ravi.exemplo.com/api/api.php
Ping contra um alvo externo
Ache um modelo de ping (protocolo 2) com sensor_modelos e crie o sensor apontando para o IP desejado. Sem ping_ip, o ping é criado contra o IP do próprio dispositivo.
curl -s -d "token=CHAVE&action=dispositivo&operation=add_sensor&device_id=123&model_id=12&ping_ip=8.8.8.8&ping_nome=Google" \ https://ravi.exemplo.com/api/api.php
Painel externo com o resumo de status
curl -s "https://ravi.exemplo.com/api/api.php?token=CHAVE&action=dispositivo&operation=status_summary"
# → {"total_devices":42,"total_sensors":310,"status_counts":{"offline":2,"paused":5,"alert":1,"critical":0,"untested":3,"ok":299}}Boas práticas: uma chave por integração, POST + HTTPS em produção, cache no cliente para topology, e sempre delete_all_sensors antes de excluir um dispositivo que você quer zerar por completo. As edições são PATCH, então mande só o que muda, com a exceção dos quatro parâmetros ping_* do edit_sensor.
Solução de problemas
Sintomas comuns nas integrações com a área de Dispositivos e suas causas prováveis.
| Sintoma | Causa provável e solução |
|---|---|
Invalid token (401) |
Chave errada ou revogada. Lembre que a exibição na tela é mascarada após 2 horas, mas a chave continua válida; confira se copiou a chave certa. Veja também os cuidados com a edição de chaves em Criar uma chave de API. |
Access denied for dispositivo (403) |
Chave sem a permissão de Dispositivos marcada. Ajuste a chave em Configurações, aba Integrações. |
{"msg":"Invalid device operation"} |
operation grafada errada, ou tentativa de usar uma operação que não existe nesta versão. Para leituras use topology, get_device e as operações list_*. |
add_sensor devolve falhas com "SNMP nao configurado" |
Nenhuma community, porta ou versão foi resolvida pela cascata (sistema, grupo, dispositivo). Configure o SNMP padrão do sistema ou os campos snmp_* do dispositivo com herdar_snmp=2. |
add_sensor devolve "Falha na consulta SNMP" ou erro de OID |
Equipamento inalcançável, community errada, porta bloqueada, ou o modelo do catálogo não se aplica àquele hardware (o OID problemático volta no campo oid). |
sensor_descobrir devolve "Sem retorno da descoberta (timeout ou SNMP)" |
O walk demorou mais que o timeout sem produzir nada, ou o SNMP está errado. Aumente o timeout (até 240) e valide o SNMP criando antes um sensor de modelo simples. |
sensor_descobrir responde com truncado: true |
O walk estourou o tempo mas retornou resultados parciais. Em equipamentos com muitas interfaces, aumente o timeout. |
| Criei o dispositivo mas ele "não monitora nada" | add_device não cria sensores. Crie-os com add_sensor ou ligue o auto-sensor do dispositivo ou do grupo. |
Device with this name or IP already exists |
A checagem de duplicidade é global: mesmo nome ou mesmo IP em qualquer grupo bloqueia a criação. |
| Editei um ping por API e os parâmetros de ping mudaram sozinhos | Comportamento do edit_sensor com sensores de ping: reenvie sempre ping_tamanho, ping_quantidade, ping_delay e ping_falhas juntos. |
status_summary de um grupo veio "zerado" mas há dispositivos em subgrupos |
O resumo por group_id não é recursivo: só conta dispositivos diretamente naquele grupo. |
Uma operação respondeu {"msg": ...} e outra {"status": ...} |
Comportamento esperado: coexistem os dois formatos de resposta (veja a Visão geral). Trate os dois no cliente e não confie só no código HTTP. |
delete_group falha com "Cannot delete group with..." |
O grupo não está vazio. Mova os subgrupos com edit_group e os dispositivos com edit_device antes de excluir. |
Outros pontos de atenção:
- A busca global de modelos (
sensor_modeloscomterme sem categoria) é limitada a 80 resultados: refine o termo. - Nomes e textos passam por sanitização HTML na criação (caracteres especiais viram entidades): evite HTML em nomes.
- A API não pagina as listagens; em bases muito grandes, prefira cachear
topologyno cliente. - A chave dá acesso de escrita total ao módulo (não há chave somente leitura). Trate a chave como senha, use HTTPS e prefira POST para não deixar o token em logs de URL.
- Toda operação de escrita via API entra no Histórico de ações do sistema (por exemplo "Dispositivo adicionado via API: RB Borda (10.0.0.1)"), visível na interface.
- Sensores criados via API entram no ciclo normal de coleta e de alertas (Telegram, WhatsApp, e-mail, conforme a configuração do sistema); nada extra a configurar.