API Docs · v4.0.0
Comprobando...
http://localhost:8080
General
Introducción Autenticación Errores
Auth
POSTregister POSTlogin GETme POSTchange-password
2FA
POST2fa/setup POST2fa/verify
Tickets
GETtickets POSTtickets POSTtickets/:id/messages PATCHtickets/:id
Sesiones
GETsessions/my POSTsessions/log
API Keys
GETapikeys POSTapikeys
Webhooks
GETwebhooks POSTwebhooks
Red
POSTdns POSTports POSTping POSTwol
Admin
GETadmin/stats GETusers GETstatus
Billing
POSTbilling/checkout POSTbilling/start-trial GETbilling/trial-status POSTbilling/validate-coupon GETbilling/fiscal-data PUTbilling/fiscal-data POSTbilling/cancel POSTbilling/cancel-recurring GETbilling/recurring-status POSTbilling/refund/:invoiceId
Admin: Coupons
GETadmin/coupons POSTadmin/coupons DELadmin/coupons/:code
Admin: PayPal
GETadmin/paypal PUTadmin/paypal
Admin: Email
POSTemail/test-connection GETemail/stats GETemail/history GETemail/preview/:templateId GETemail/templates PUTemail/templates/:id DELemail/templates/:id POSTemail/preview-custom
Email Prefs
GETemail/unsubscribe GETemail/preferences PUTemail/preferences
Security
GETintegrity/status POSTintegrity/check POSTintegrity/baseline GETintegrity/incidents POSTintegrity/restore POSTintegrity/full-test POSTintegrity/upload-agent GETlockdown/status POSTlockdown/reactivate GETgroq/status PUTgroq/config POSTsecurity/analyze
WebSocket
Protocolo WS
← Volver a la App

API Reference

API REST + WebSocket para TerminalServer.es. Base URL: https://terminalserver.es

🔑 Bearer token:

Introducción

La API de TerminalServer.es sigue convenciones REST estándar. Todas las respuestas son JSON.

BASE URL
https://terminalserver.es/api/
http://localhost:8080/api/    ← desarrollo
MétodoDescripción
GETLeer un recurso
POSTCrear un recurso
PUTReemplazar un recurso completamente
PATCHActualizar campos específicos
DELETEEliminar un recurso

Autenticación

La API usa JWT Bearer tokens. Incluye el token en el header Authorization o en el header X-API-Key (para API Keys).

HTTP
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

# O con API Key:
X-API-Key: ts_abc123def456...

Obtén tu token haciendo POST a /api/auth/login. Los tokens de usuario expiran en 24h (o 30 días si usas remember: true). Los tokens de admin no expiran por defecto.

Códigos de error

CódigoSignificado
200OK — solicitud exitosa
201Created — recurso creado
400Bad Request — parámetros inválidos
401Unauthorized — token inválido o expirado
403Forbidden — sin permisos para esta acción
404Not Found — recurso no encontrado
409Conflict — recurso ya existe (ej: email duplicado)
429Too Many Requests — rate limit alcanzado
500Internal Server Error
JSON
{ "error": "Mensaje descriptivo del error" }

Auth

POST /api/auth/register Registrar nueva cuenta Público

Crea una nueva cuenta de usuario. El plan inicial siempre es free.

Body (JSON)

CampoTipoReq.Descripción
namestringReqNombre completo
emailstringReqEmail único
passwordstringReqMínimo 8 caracteres
cURL
curl -X POST http://localhost:8080/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{"name":"Juan García","email":"juan@example.com","password":"MiPass123!"}'
⚡ Probar
POST /api/auth/login Iniciar sesión Público
CampoTipoReq.Descripción
emailstringReqEmail de la cuenta
passwordstringReqContraseña
rememberbooleanOptSi true, el token dura 30 días
⚡ Probar
GET /api/auth/me Perfil del usuario autenticado Auth

Devuelve los datos del usuario cuyo token se envía en el header Authorization.

⚡ Probar
POST /api/auth/change-password Cambiar contraseña Auth
CampoTipoReq.Descripción
currentstringReqContraseña actual
newPasswordstringReqNueva contraseña (min 8 chars)
⚡ Probar

2FA — Autenticación en dos pasos

POST /api/auth/2fa/setup Iniciar configuración de 2FA Auth

Genera un secreto TOTP y devuelve el URI para el código QR. Compatible con Google Authenticator, Authy y cualquier app TOTP.

RESPONSE
{
  "secret": "JBSWY3DPEHPK3PXP",
  "otpUri": "otpauth://totp/TerminalServer.es:user@example.com?secret=..."
}
⚡ Probar
POST /api/auth/2fa/verify Verificar y activar 2FA Auth
CampoTipoDescripción
codestringCódigo TOTP de 6 dígitos de la app autenticadora

Tickets de soporte

GET /api/tickets Listar tickets Auth

Los usuarios ven sus propios tickets. Los admins ven todos.

Query paramTipoDescripción
statusstringopen | in-progress | resolved | closed
prioritystringlow | normal | high | urgent
searchstringBuscar en el asunto
pagenumberPágina (default: 1)
limitnumberPor página (default: 20, max: 100)
⚡ Probar
POST /api/tickets Crear ticket Auth
CampoTipoReq.Descripción
subjectstringReqAsunto del ticket
messagestringReqDescripción del problema
categorystringOptsoporte-tecnico | facturacion | cuenta | bug | feature | otro
prioritystringOptlow | normal | high | urgent (default: normal)
⚡ Probar
POST /api/tickets/:id/messages Añadir mensaje a ticket Auth
CampoTipoDescripción
textstringTexto del mensaje
PATCH /api/tickets/:id Actualizar estado del ticket Auth

Los usuarios solo pueden cerrar sus propios tickets. Los admins pueden cambiar todos los campos.

CampoAdmin onlyDescripción
statusNoopen | in-progress | resolved | closed
prioritylow | normal | high | urgent
assignedToEmail del agente asignado

Sesiones remotas

GET /api/sessions/my Mis sesiones recientes Auth
⚡ Probar
POST /api/sessions/log Registrar inicio de sesión Auth
CampoTipoDescripción
codestringCódigo de 6 dígitos de la sala
rolestringhost | client

Utilidades de red

POST /api/dns DNS Lookup Auth
CampoTipoDescripción
hoststringDominio o IP a consultar
typestringA | AAAA | MX | TXT | NS | CNAME (default: A)
⚡ Probar
POST /api/ports Escanear puertos TCP Auth
CampoTipoDescripción
hoststringHostname o IP a escanear
portsstringLista separada por comas: "80,443,3306"
timeoutnumberTimeout por puerto en ms (default: 2000)
⚡ Probar
POST /api/ping Ping a host Auth
CampoTipoDescripción
hoststringIP o dominio (default: 8.8.8.8)
countnumberNúmero de pings (default: 8, max: 20)
POST /api/wol Wake on LAN — enviar Magic Packet Auth
CampoTipoDescripción
macstringDirección MAC (formato: AA:BB:CC:DD:EE:FF)
broadcaststringIP de broadcast (default: 255.255.255.255)

Admin

GET /api/admin/stats Estadísticas del sistema Admin
⚡ Probar
GET /api/users Listar todos los usuarios Admin
Query paramDescripción
searchBuscar por nombre o email
roleadmin | user
page, limitPaginación
⚡ Probar
GET /api/status Estado del servidor (público) Público
RESPONSE
{
  "status": "online",
  "rooms": 2,
  "clients": 4,
  "uptime": 86400,
  "version": "4.0.0",
  "users": 12,
  "tickets": 3
}
⚡ Probar

Billing & Payments

POST /api/billing/checkout Unified checkout (Stripe/PayPal) Auth

Inicia un proceso de pago unificado compatible con Stripe y PayPal.

CampoTipoReq.Descripción
planstringReqPlan a contratar
methodstringReqMétodo de pago: stripe | paypal
couponstringOptCódigo de cupón de descuento
POST /api/billing/start-trial Iniciar prueba gratuita de 14 días Auth

Activa una prueba gratuita de 14 días para el usuario autenticado.

GET /api/billing/trial-status Comprobar elegibilidad de trial Auth

Devuelve si el usuario puede iniciar una prueba gratuita.

POST /api/billing/validate-coupon Validar código de descuento Auth
CampoTipoReq.Descripción
codestringReqCódigo del cupón a validar
GET /api/billing/fiscal-data Obtener datos fiscales del usuario Auth

Devuelve los datos fiscales almacenados del usuario autenticado.

PUT /api/billing/fiscal-data Actualizar datos fiscales Auth
CampoTipoReq.Descripción
nifstringOptNIF / CIF
razonSocialstringOptRazón social
direccionstringOptDirección fiscal
POST /api/billing/cancel Cancelar suscripción Auth

Cancela la suscripción activa del usuario.

POST /api/billing/cancel-recurring Cancelar renovación automática Auth

Desactiva la renovación automática sin cancelar inmediatamente la suscripción.

GET /api/billing/recurring-status Estado de renovación automática Auth

Devuelve el estado actual de la renovación automática de la suscripción.

POST /api/billing/refund/:invoiceId Procesar reembolso Admin

Procesa un reembolso para la factura indicada. Solo administradores.

Admin: Coupons

GET /api/admin/coupons Listar todos los cupones Admin

Devuelve la lista completa de cupones de descuento.

POST /api/admin/coupons Crear cupón Admin
CampoTipoReq.Descripción
codestringReqCódigo del cupón
typestringReqTipo de descuento (porcentaje, fijo, etc.)
valuenumberReqValor del descuento
maxUsesnumberOptNúmero máximo de usos
validUntilstringOptFecha de expiración (ISO 8601)
DELETE /api/admin/coupons/:code Eliminar cupón Admin

Elimina el cupón identificado por su código.

Admin: PayPal

GET /api/admin/paypal Obtener configuración de PayPal Admin

Devuelve la configuración actual de las credenciales de PayPal.

PUT /api/admin/paypal Actualizar credenciales de PayPal Admin

Actualiza las credenciales de integración con PayPal.

Admin: Email

POST /api/admin/email/test-connection Probar conexión SMTP Admin

Verifica que la configuración SMTP es correcta enviando un test de conexión.

GET /api/admin/email/stats Estadísticas de email Admin

Devuelve estadísticas de envío de emails (enviados, fallidos, etc.).

GET /api/admin/email/history Historial de emails (paginado) Admin

Devuelve el historial de emails enviados con paginación.

GET /api/admin/email/preview/:templateId Previsualizar plantilla de email Admin

Genera una vista previa de la plantilla de email indicada.

GET /api/admin/email/templates Listar plantillas personalizadas Admin

Devuelve la lista de plantillas de email personalizadas.

PUT /api/admin/email/templates/:id Guardar plantilla personalizada Admin

Guarda o actualiza una plantilla de email personalizada.

DELETE /api/admin/email/templates/:id Restaurar plantilla original Admin

Elimina la personalización y restaura la plantilla original.

POST /api/admin/email/preview-custom Previsualizar contenido personalizado Admin

Genera una vista previa con contenido personalizado antes de guardar.

Email Preferences

GET /api/email/unsubscribe Cancelar suscripción a emails Público

Permite al usuario cancelar la suscripción a emails mediante un enlace con token.

GET /api/email/preferences Obtener preferencias de email Auth

Devuelve las preferencias de notificaciones por email del usuario.

PUT /api/email/preferences Actualizar preferencias de email Auth

Actualiza las preferencias de notificaciones por email.

Security & Integrity

GET /api/security/integrity/status Estado de integridad de archivos Admin

Devuelve el estado actual del sistema de verificación de integridad de archivos.

POST /api/security/integrity/check Ejecutar verificación de integridad Admin

Lanza una verificación de integridad de archivos contra el baseline actual.

POST /api/security/integrity/baseline Crear nuevo baseline Admin

Genera un nuevo baseline de hashes para la verificación de integridad de archivos.

GET /api/security/integrity/incidents Listar incidentes Admin

Devuelve la lista de incidentes de integridad detectados.

POST /api/security/integrity/restore Restaurar archivos desde backup Admin

Restaura archivos modificados o eliminados desde la copia de seguridad.

POST /api/security/integrity/full-test Test completo para reactivación Admin

Ejecuta un test completo de integridad necesario antes de la reactivación del sistema.

POST /api/security/integrity/upload-agent Subir nuevo archivo de agente Admin

Sube un nuevo archivo de agente para reemplazar el existente.

GET /api/security/lockdown/status Estado de lockdown Admin

Devuelve si el sistema está actualmente en modo lockdown.

POST /api/security/lockdown/reactivate Reactivar web tras lockdown Admin

Reactiva el servicio web después de un lockdown de seguridad.

GET /api/security/groq/status Estado de Groq AI Security Admin

Devuelve el estado de la integración con Groq para análisis de seguridad con IA.

PUT /api/security/groq/config Actualizar API key de Groq Admin

Actualiza la clave de API de Groq para el módulo de seguridad.

POST /api/security/analyze Analizar texto con IA Admin

Envía texto para ser analizado por IA en busca de amenazas de seguridad.

WebSocket — Protocolo de señalado

El servidor WebSocket en wss://terminalserver.es/ws gestiona el intercambio de SDP/ICE para establecer conexiones WebRTC P2P.

Mensajes del cliente → servidor

JSON
// Crear sala (anfitrión)
{ "type": "create-room", "code": "482719" }

// Unirse a sala (cliente)
{ "type": "join-room", "code": "482719" }

// Enviar señal WebRTC (SDP offer/answer, ICE candidate)
{ "type": "signal", "data": { "type": "offer", "sdp": "..." } }

// Chat (sin conexión P2P)
{ "type": "chat", "msg": "Hola" }

// Ping de latencia
{ "type": "ping", "ts": 1700000000000 }

Mensajes servidor → cliente

JSON
// Bienvenida al conectar
{ "type": "welcome", "clientId": "abc123", "ts": 1700000000000 }

// Sala creada
{ "type": "room-created", "code": "482719", "expires": 1700000600000 }

// Cliente unido
{ "type": "joined", "code": "482719" }

// Nuevo cliente en la sala (al host)
{ "type": "client-joined", "clientId": "def456" }

// Señal WebRTC recibida
{ "type": "signal", "from": "host", "data": { ... } }

// Chat
{ "type": "chat", "from": "abc123", "msg": "Hola", "ts": ... }

// Host desconectado
{ "type": "host-disconnected" }

// Código expirado
{ "type": "room-expired" }

// Pong
{ "type": "pong", "ts": 1700000000000, "serverTs": ... }

// Error
{ "type": "error", "msg": "Código no encontrado" }
TerminalServer.es API v4.0.0
WebAppAdmin