← Documentación

API de OXIOLT Smart: conecta tu WISPA (u otro sistema) por X-Token

OXIOLT Smart · Documentación GPON


OXIOLT Smart es el ejecutor de red. Tu sistema de facturación (por ejemplo WISPA), un script o cualquier software manejan tus OLTs, ONUs y routers MikroTik llamando a esta API. OXIOLT Smart no guarda clientes ni decide cortes: solo ejecuta comandos por serial de ONU o IP/usuario PPPoE. El match cliente↔ONU vive en quien factura. Los paths y la autenticación imitan a SmartOLT: un cliente escrito para SmartOLT funciona apuntando a OXIOLT Smart cambiando solo la URL base.

1 · Autenticación

Toda petición lleva el header X-Token: TU_TOKEN. El token se genera y se rota en tu panel, en Ajustes → API (/app/api). Se muestra una sola vez; OXIOLT Smart solo guarda su sha256. Sin token válido responde HTTP 401: { "status": false, "error": "Token ausente (header X-Token)." }.

2 · URL base

https://tu-cuenta.oltixa.com/api

La URL exacta también aparece en Ajustes → API.

3 · Formato de respuesta

Éxito y error usan el mismo envoltorio estilo SmartOLT:

{ "status": true, ... }
{ "status": false, "error": "motivo del fallo" }

Códigos: 200 ok · 400 datos inválidos · 401 token · 404 no encontrado · 409 OLT ocupada (lock) · 500 error del equipo. Las mutaciones aceptan una clave de idempotencia (X-Idempotency-Key) para no repetir la acción al reintentar.

4 · Identificar la ONU

La mayoría de endpoints reciben {onu_id} en la ruta. OXIOLT Smart acepta dos formas:

  • La interfaz, ej. gpon-onu_1/2/1:6 (URL-encodeada: gpon-onu_1%2F2%2F1%3A6).
  • El número de serie (SN), ej. ZTEGD77B968E (en los endpoints *_by_sn).

Los listados devuelven interface, sn y unique_external_id para que WISPA guarde el match cliente↔ONU con la clave que prefiera.

5 · Flujos clave para WISPA

a) Traer el inventario de ONUs

curl "$BASE/api/onu/get_all_onus_details" -H "X-Token: $TOKEN"

Sin autorizar: /api/onu/get_all_unconfigured_onus.

b) Autorizar una ONU nueva

curl -X POST "$BASE/api/onu/authorize_onu" -H "X-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"pon":"1/2/1","sn":"ZTEGD77B968E","onu_type":"ZTE-F670L","vlan":100}'

Body: { olt_id?, pon, onu_id?, sn, onu_type, vlan }. Sin onu_id, el driver elige el índice libre.

c) Cortar y reconectar (mora)

curl -X POST "$BASE/api/onu/disable/12345" -H "X-Token: $TOKEN"   # corta, conserva config
curl -X POST "$BASE/api/onu/enable/12345"  -H "X-Token: $TOKEN"   # reconecta

En lote: bulk_disable / bulk_enable con {"onu_ids":[...]}.

d) Cambio de paquete (velocidad)

curl "$BASE/api/system/get_speed_profiles" -H "X-Token: $TOKEN"   # 1. catálogo de planes

curl -X POST "$BASE/api/onu/update_onu_speed_profiles/12345" -H "X-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"upload_speed_profile_name":"UP-30M","download_speed_profile_name":"DOWN-30M"}'

Acepta también speed_profile_id (id del catálogo), o los alias tcont_profile/traffic_profile, o upload_speed/download_speed. En lote: bulk_update_speed_profiles.

Cobertura por marca del cambio de paquete: builder real en ZTE (verificado en equipo), Huawei, VSOL, BDCOM y C-Data (comandos con fuente, a verificar en equipo). En Huawei/VSOL/C-Data los perfiles son los nativos del equipo (ont-lineprofile / line-profile / dba+traffic); en BDCOM los parámetros son kbps (rate-limit directo). Nokia y Fiberhome devuelven error honesto: su comando por-ONU no está confirmado con fuente y no se emite.

6 · Referencia — Sistema y catálogos

GET /api/system/get_oltsOLTs de la cuenta
GET /api/system/get_devicesEquipos de la cuenta (OLT + router)
GET /api/system/get_speed_profilesCatálogo de planes de velocidad
GET /api/system/get_onu_types · get_onu_types_by_pon_type/{pon_type}Catálogo de tipos de ONU
GET /api/system/get_olt_cards_details/{olt_id}Tarjetas del chasis
GET /api/system/get_olt_uplink_ports_details/{olt_id}Uplinks
GET /api/system/get_outage_pons/{olt_id}Offline por PON (snapshot)
POST /api/system/save_configGuardar config (write a flash)

7 · Referencia — ONU (lectura)

GET /api/onu/get_all_onus_detailsInventario completo
GET /api/onu/get_all_unconfigured_onusONUs sin autorizar
GET /api/onu/get_onu_signal/{onu_id} · get_onus_signalsSeñal óptica (dBm, atenuación, distancia)
GET /api/onu/get_onu_details/{onu_id}Detalle de una ONU
GET /api/onu/get_onu_status/{onu_id} · get_onus_statusesEstado online/offline
GET /api/onu/get_onu_speed_profiles/{onu_id}Plan actual de la ONU
GET /api/onu/get_onus_details_by_sn/{sn}Detalle por SN
GET /api/onu/get_running_config/{onu_id}Running-config en vivo

8 · Referencia — ONU (ciclo de vida y servicio)

POST /api/onu/authorize_onuAutorizar ONU nueva
POST /api/onu/reboot/{onu_id}Reiniciar
POST /api/onu/disable/{onu_id} · enable/{onu_id}Cortar / reconectar
POST /api/onu/bulk_disable · bulk_enableCorte / reconexión en lote
POST /api/onu/delete/{onu_id} · delete_onus · delete_all_onusBaja de ONU(s)
POST /api/onu/resync_config/{onu_id}Re-aplicar servicio
POST /api/onu/update_onu_speed_profiles/{onu_id}Cambio de paquete (ZTE live · Huawei/VSOL/BDCOM/C-Data con fuente · Nokia/Fiberhome stub)
POST /api/onu/bulk_update_speed_profilesCambio de paquete en lote
POST /api/onu/update_onu_name/{onu_id}Nombre y datos del cliente → se guardan en la BD de OXIOLT Smart (se ven y se buscan en la lista); nombre y dirección se empujan a la OLT best-effort. Body: { name?, address?, phone?, pppoe_username?, ip? } (al menos uno)
POST /api/onu/update_main_vlan/{onu_id}Cambiar VLAN principal
POST /api/onu/move/{onu_id}Mover de puerto
POST /api/onu/change_onu_type · update_sn · update_service_port · update_onu_mode · restore_factory_defaultsConfig avanzada de ciclo de vida

9 · Referencia — CPE avanzado (superficie SmartOLT)

Estos endpoints existen con la firma exacta de SmartOLT: WAN (set_onu_wan_mode_*), IP de gestión (set_onu_mgmt_ip_*), puertos Ethernet/WiFi (set_ethernet_port_*, set_wifi_port_*), CATV (enable_catv…), IPTV (enable_iptv…), VoIP (enable_onu_voip_port…), TR-069 (enable_tr069…), seguridad DHCP (enable_dhcp_option82, *_ip_dhcp_snooping, *_ip_source_guard), change_custom_profile, update_attached_vlans y más. El núcleo está live en ZTE; el CPE avanzado por marca se va habilitando desde nuestros comandos documentados. Un endpoint aún sin builder devuelve un error honesto y no toca el equipo.

10 · Referencia — OLT y Router MikroTik

GET /api/olt/get_vlans · /{olt_id}VLANs de la OLT
GET /api/olt/get_olts_uptime_and_env_temperatureUptime y temperatura
POST /api/olt/save_configGuardar config a flash
GET /api/router/resource · identity · interfaces · networkEstado del router (extra sobre SmartOLT)
GET /api/router/ppp · ppp/statusSecretos PPPoE
POST /api/router/ppp/add · ppp/deleteAlta / baja PPPoE
POST /api/router/vlan/ensure · pool/ensureAsegurar VLAN / pool de IPs
POST /api/router/execProxy genérico RouterOS

11 · Todo queda registrado

Cada comando enviado al OLT y su respuesta cruda quedan en tu registro de comandos (Red → Registro de comandos), etiquetado por marca/modelo y con ok/error. Para las marcas aún sin verificar en laboratorio, la orden viaja igual y su respuesta real queda ahí, para afinar el driver con el comportamiento de tu firmware — sin entrar por SSH.

12 · Cómo lo usa tu WISPA

En WISPA vas a Ajustes → Integración OXIOLT Smart, eliges proveedor oltixa, pegas la URL base y el X-Token, y pruebas la conexión (llama a /api/system/get_olts). WISPA trae el inventario de ONUs, guarda el match cliente↔ONU/IP y llama a esta API: disable/enable para corte por mora, update_onu_speed_profiles para el cambio de paquete, authorize_onu para altas. OXIOLT Smart solo ejecuta la orden contra el equipo — incluso si la OLT está detrás de NAT sin IP pública, porque la alcanza por su Puente (VPN).


¿Cansado de la consola? Gestiona tu OLT con OXIOLT Smart — gratis 30 días.