API para integradores
Autenticación, formato de respuesta, paginación y límites de la API pública de Valwisp para integraciones externas.
Valwisp expone una API REST pensada para que sistemas externos (tu ERP, un bot de mensajería, una red de cobro, tu propio portal) se integren con tu ISP sin tocar el dashboard. Es una API distinta de la que usa internamente el dashboard/app móvil — más pequeña, más estable, y con su propio modelo de autenticación pensado para terceros.
Cómo leer esta sección: cada grupo de endpoints trae una etiqueta — 🟢 Disponible (ya puedes usarlo hoy) o 🟡 Próximamente (está especificado y en construcción, todavía no responde en producción). Esta sección documenta el diseño completo de la API, incluyendo lo que está en camino, para que puedas planificar tu integración con anticipación.
Base URL
https://api.valwisp.com/api/v1/externalTodas las rutas de esta sección cuelgan de ese prefijo — distinto del que usa el dashboard internamente, para que un cambio en la app web nunca rompa tu integración.
Autenticación
Cada tenant genera API keys desde Ajustes → API en el dashboard 🟡. Una key se envía como header estándar, nunca en el cuerpo de la petición:
Authorization: Bearer vw_live_51H8x...- Cada key tiene un scope:
read(solo lectura) owrite(lectura + escritura), y puede limitarse a recursos específicos (por ejemplo, una key que solo pueda crear pagos, sin acceso a clientes). - Las keys son revocables individualmente y no expiran salvo que las revoques — pero puedes configurar expiración automática si tu integración lo requiere.
- Hay un entorno de sandbox (
https://api.valwisp.com/api/v1/external/sandbox) con datos de prueba, para integrar sin tocar clientes reales.
Formato de respuesta
Igual que el resto de la plataforma — una sola forma de respuesta en toda la API, sin excepciones por endpoint:
// Éxito
{ "success": true, "data": { ... }, "timestamp": "2026-08-05T14:00:00.000Z" }
// Error
{ "success": false, "message": "Cliente no encontrado", "statusCode": 404, "timestamp": "2026-08-05T14:00:00.000Z" }Paginación
Todo endpoint de listado usa el mismo esquema, sin importar el recurso:
GET /clients?page=1&limit=25{
"success": true,
"data": {
"data": [ ... ],
"total": 342,
"page": 1,
"limit": 25,
"pages": 14
}
}Límites de uso
🟡 300 peticiones/minuto por API key. Al superarlo, la API responde 429 Too Many Requests con un header Retry-After. Si tu integración necesita más volumen (por
ejemplo, una conciliación masiva), contáctanos para ajustar el límite de tu tenant.
Idempotencia
Los endpoints de escritura que registran dinero (pagos, reversos) aceptan un
identificador externo (referencia_externa o secuencial, según el endpoint) para que
reintentar la misma petición no duplique el efecto — ver
Pagos externos.
El ciclo de vida de un suscriptor
Un cliente no se crea directamente por API. Existe un único camino, en orden:
Registro → Instalación → ClienteVer Registro para el detalle completo de por qué está diseñado así.
Grupos de endpoints
| Grupo | Cubre | Estado |
|---|---|---|
| Registro | Captar el interés de un suscriptor nuevo (paso 1) | 🟡 Próximamente |
| Instalaciones | Trabajo técnico que activa al cliente (paso 2) | 🟡 Próximamente |
| Clientes | Consultar, actualizar, activar/suspender un cliente ya existente | 🟢 Disponible |
| Facturación | Crear, listar, cobrar, anular facturas | 🟢 Disponible |
| Pagos externos | Integración con redes de cobro (bancos, cajeros, kioscos) | 🟡 Próximamente |
| Tickets | Crear, cerrar, listar soporte | 🟢 Disponible |
| Notificaciones | Enviar SMS/WhatsApp/correo a un cliente | 🟡 Próximamente |
| Webhooks | Eventos salientes (factura pagada, cliente suspendido, ...) | 🟡 Próximamente |
¿Vienes migrando desde otro sistema? Los nombres de recursos usan inglés en la URL
(/clients, /invoices) siguiendo la convención REST estándar, pero toda la
documentación está en español.