StandardCWMP · API
← Volver

Documentación de la API

Dos APIs REST de StandardCWMP, siempre en JSON con la forma { "ok": true|false, ... }: la API de gestión (para integrar tu software/CRM) y la API del cliente (la que usa la app móvil).

🔌 API de gestión — para tu software

Base URLhttps://acs.standardcwmp.com/api/empresa
AutenticaciónAPI key (Bearer). Genérala en Empresa → Configuración → API.
EncabezadoAuthorization: Bearer sk_...
GET /planes 🔒 API key

Lista los planes de velocidad de tu empresa (para elegir uno al crear un cliente).

Petición
(sin cuerpo)
Respuesta
{
  "ok": true,
  "planes": [
    { "id": 1, "nombre": "<nombre del plan>", "bajada_mbps": 30, "subida_mbps": 8 }
  ]
}
POST /clientes 🔒 API key

Crea un cliente (contrato) y DEVUELVE sus credenciales CWMP para configurar el router. El plan se indica por "plan_id" o por "plan" (nombre).

Petición
{
  "codigo_contrato": "<número de contrato>",
  "primer_nombre": "<primer nombre>",
  "primer_apellido": "<primer apellido>",
  "documento": "<documento NIT/CC>",
  "celular": "<celular>",
  "codigo_pais": "57",
  "plan": "<nombre del plan>"
}
Respuesta
{
  "ok": true,
  "cliente": { "codigo_contrato": "<número de contrato>", "plan": "<nombre del plan>", "activo": true },
  "cwmp": {
    "acs_url": "https://acs.standardcwmp.com/acs",
    "usuario": "<usuario CWMP>",
    "clave": "<contraseña CWMP>"
  }
}
GET /clientes 🔒 API key

Lista todos tus clientes con sus credenciales CWMP.

Petición
(sin cuerpo)
Respuesta
{
  "ok": true,
  "clientes": [ { "codigo_contrato": "<número de contrato>", "cwmp": { "usuario": "<usuario CWMP>", "clave": "<contraseña CWMP>" } } ]
}
GET /clientes/{codigo} 🔒 API key

Obtiene un cliente por su código de contrato, con sus credenciales CWMP.

Petición
(sin cuerpo)
Respuesta
{
  "ok": true,
  "cliente": { "codigo_contrato": "<número de contrato>", "cwmp": { "acs_url": "...", "usuario": "<usuario CWMP>", "clave": "<contraseña CWMP>" } }
}
POST /clientes/{codigo}/regenerar 🔒 API key

Regenera las credenciales CWMP de un cliente (invalida las anteriores).

Petición
(sin cuerpo)
Respuesta
{
  "ok": true,
  "cwmp": { "acs_url": "...", "usuario": "<usuario CWMP>", "clave": "<contraseña CWMP>" }
}

📱 API del cliente — app móvil

La que usa la app del suscriptor. Normalmente no la necesitas para integrar tu software.

Información general

Base URLhttps://acs.standardcwmp.com/api/cliente
FormatoJSON (Content-Type: application/json)
AutenticaciónToken Bearer (se obtiene en /verificar)
Vigencia token90 días

Autenticación

Los endpoints protegidos requieren la cabecera:

Authorization: Bearer <token>

Flujo: identificar → (OTP por SMS) → verificar devuelve el token. Guárdalo y envíalo en cada petición protegida.

Endpoints

POST /identificar Público

Valida el número de contrato + documento y envía un código OTP por SMS al celular del titular. Devuelve una referencia "pendiente" para el siguiente paso.

Petición
{
  "codigo_contrato": "<número de contrato>",
  "documento": "<documento NIT/CC>"
}
Respuesta
{
  "ok": true,
  "pendiente": "<referencia temporal>",
  "telefono": "+57 ******XXXX",
  "vigencia": 5
}
POST /verificar Público

Verifica el código OTP. Si es correcto, emite el token de sesión (Bearer) y devuelve el panel inicial.

Petición
{
  "pendiente": "<referencia temporal>",
  "codigo": "<código OTP de 6 dígitos>"
}
Respuesta
{
  "ok": true,
  "token": "<token de sesión>",
  "panel": { /* ver objeto panel */ }
}
POST /reenviar Público

Reenvía un nuevo código OTP usando la referencia "pendiente".

Petición
{
  "pendiente": "<referencia temporal>"
}
Respuesta
{
  "ok": true
}
GET /panel 🔒 Requiere token

Devuelve el panel completo del cliente: contrato, router, consumo 24h y dispositivos conectados.

Petición
(sin cuerpo)
Respuesta
{
  "ok": true,
  "panel": { /* ver objeto panel */ }
}
POST /wifi 🔒 Requiere token

Cambia el nombre de red (SSID) y/o la contraseña del WiFi del cliente. Puedes enviar uno o ambos.

Petición
{
  "ssid": "Mi-WiFi",
  "clave": "nueva-clave-8+"
}
Respuesta
{
  "ok": true,
  "mensaje": "Cambios aplicándose...",
  "panel": { /* ... */ }
}
POST /refrescar 🔒 Requiere token

Pide al router una actualización de datos (SSID y dispositivos) y despierta el equipo.

Petición
(sin cuerpo)
Respuesta
{
  "ok": true,
  "panel": { /* ... */ }
}
POST /salir 🔒 Requiere token

Revoca el token de sesión actual (cerrar sesión).

Petición
(sin cuerpo)
Respuesta
{
  "ok": true
}

Objeto panel

{
  "contrato": {
    "codigo": "",
    "titular": "",
    "primer_nombre": "",
    "documento": "",
    "plan_nombre": "",
    "plan_bajada": 30, "plan_subida": 8,
    "fecha_contrato": "DD/MM/AAAA"
  },
  "empresa":  { "nombre": "", "logo_url": "https://.../logo.png" },
  "router":   {
    "conectado": true, "fabricante": "", "en_linea": true,
    "sync_iso": "2026-01-01T15:24:00+00:00",
    "ssid": "", "clave_wifi": "********"
  },
  "consumo":  {
    "labels": ["2026-01-01T10:59:00+00:00", "..."],
    "descarga": [0.0, 0.47], "subida": [0.18, 0.71],
    "totalDescargaGb": 0.47, "totalSubidaGb": 0.71, "totalGb": 1.18
  },
  "hosts": [ { "nombre": "", "ip": "192.168.0.x", "mac": "XX:XX:XX:XX:XX:XX", "tipo": "DHCP" } ]
}

Errores

Los errores devuelven ok: false con un mensaje legible y el código HTTP correspondiente:

{ "ok": false, "mensaje": "El código expiró. Solicita uno nuevo." }
401Sin token o token inválido/expirado
403Servicio del cliente inactivo
422Datos inválidos (contrato, documento u OTP)
429Demasiadas solicitudes (throttle)