Iniciar sesión

Licencias

API de validación y activación de licencias y gestión de dispositivos

Gestiona la validación y activación de licencias y el seguimiento de dispositivos.

Límite de frecuencia: los endpoints de licencias tienen un límite de frecuencia por IP en una ventana fija de 60 segundos. Si superas el límite, se devuelve 429 Too Many Requests con una cabecera Retry-After: 60 hasta que se reinicie la ventana.

Validar licencia

Valida y activa una clave de licencia. Este endpoint tiene un límite de 5 solicitudes por minuto por dirección IP.

Endpoint: POST /api/licenses/validate

ParámetroTipoObligatorioDescripción
license_keystringSíClave de licencia que se va a validar
device_idstringSíIdentificador estable y único del dispositivo que se activa. Envía siempre el mismo valor para un mismo dispositivo: es lo que reclama y vuelve a reclamar el puesto de ese dispositivo
curl -X POST "$BASE_URL/api/licenses/validate" \
  -H "Content-Type: application/json" \
  -d '{"license_key":"XXXX-XXXX-XXXX-XXXX","device_id":"device_abc123"}'

Respuesta (éxito):

{
  "valid": true,
  "license": {
    "id": "uuid",
    "status": "active",
    "product": { "id": "uuid", "name": "studio", "features": ["client_api", "api_keys"] },
    "activation_date": "2024-01-01T00:00:00Z",
    "expiration_date": "2025-12-31T23:59:59Z",
    "current_activations": 1
  }
}

Respuesta (error):

{
  "statusCode": 400,
  "statusMessage": "Invalid licence key or validation failed"
}
EstadoCuándo
400Falta license_key o device_id, está vacío o es demasiado largo, o la clave es desconocida, está inactiva o ha caducado
409Todos los puestos de la licencia ya están ocupados por otro dispositivo y ninguno ha estado inactivo el tiempo suficiente para recuperarlo
429Se ha superado el límite de frecuencia, consulta Límites de frecuencia
Por seguridad, todos los errores de validación de licencias devuelven el mismo mensaje genérico para evitar ataques de enumeración. Por tanto, un 400 nunca indica qué campo ha fallado: comprueba que license_key y device_id estén presentes y no vacíos antes de reintentar.

Desactivar licencia

Autenticación requerida

Requiere la cookie de sesión session_token del propietario de la licencia (consulta Autenticación): solo puedes desactivar una licencia que te pertenezca.

Desactiva una licencia en un dispositivo concreto o en todos los dispositivos.

Endpoint: POST /api/licenses/deactivate

ParámetroTipoObligatorioDescripción
license_keystringSíClave de licencia que se va a desactivar
device_idstring
No
Dispositivo concreto que se va a desactivar (omítelo para desactivar todos los dispositivos)
curl -X POST "$BASE_URL/api/licenses/deactivate" \
  -b cookies.txt \
  -H "Content-Type: application/json" \
  -d '{"license_key":"XXXX-XXXX-XXXX-XXXX","device_id":"device_abc123"}'

Respuesta:

{
  "success": true,
  "message": "Device deactivated successfully",
  "deactivated_count": 1,
  "remaining_activations": 4
}
A pesar de su nombre, remaining_activations es el número de puestos aún en uso tras la desactivación, es decir, el número de dispositivos distintos que siguen activos en la licencia. No es el número de puestos libres. Por tanto, desactivar todos los dispositivos devuelve 0. Calcula los puestos libres como activation_limit - remaining_activations, usando el activation_limit de GET /api/licenses/status. Sin device_id, el mensaje es «All devices deactivated successfully»; deactivated_count es el número de puestos que ha liberado esta llamada.

Estado de la licencia

Autenticación requerida

Requiere la cookie de sesión session_token del propietario de la licencia (consulta Autenticación): solo puedes consultar una licencia que te pertenezca.

Comprueba el estado actual de una licencia. Tiene un límite de 30 solicitudes por minuto por IP.

Endpoint: GET /api/licenses/status

ParámetroTipoObligatorioDescripción
license_keyquerySíClave de licencia que se va a comprobar
curl -X GET "$BASE_URL/api/licenses/status?license_key=XXXX-XXXX-XXXX-XXXX" \
  -b cookies.txt

Respuesta:

{
  "license": {
    "id": "uuid",
    "license_key": "XXXX-XXXX-XXXX-XXXX",
    "status": "active",
    "purchase_date": "2024-01-01T00:00:00Z",
    "activation_date": "2024-01-01T00:00:00Z",
    "expiration_date": "2025-12-31T23:59:59Z",
    "days_until_expiration": 365,
    "activation_limit": 5,
    "current_activations": 2,
    "available_activations": 3,
    "is_expired": false,
    "is_active": true,
    "product": { "id": "uuid", "name": "Studio 8K", "description": "...", "features": [] },
    "user": { "id": "uuid", "first_name": "Jane", "last_name": "Doe", "email": "user@example.com" }
  },
  "active_devices": [
    {
      "id": "uuid",
      "device_id": "device_abc123",
      "device_name": "Studio Mac",
      "platform": "macos",
      "app_version": "3.1.2",
      "activated_at": "2024-01-01T00:00:00Z",
      "last_seen_at": "2024-01-02T09:00:00Z",
      "ip_address": "192.168.1.1"
    }
  ]
}

Ciclo de vida de la licencia

Límites de frecuencia

Los endpoints de licencias tienen un límite de frecuencia por IP en una ventana fija de 60 segundos. Con un 429, se devuelve una cabecera:

CabeceraDescripción
Retry-AfterSegundos hasta que se reinicia la ventana (siempre 60)

Límites por endpoint

EndpointSolicitudes / 60 sNivel
/api/licenses/validate5Estricto
/api/licenses/status30Estándar
/api/licenses/deactivate30Estándar

POST /api/licenses/validate aplica el límite Estricto dos veces: una por IP y otra asociada a la license_key enviada, de modo que no se pueda bombardear una misma clave desde muchas IP.

Superar un límite devuelve 429 Too Many Requests durante el resto de la ventana de 60 segundos. No hay ninguna duración de bloqueo progresiva ni creciente.

Tipos de licencia

Cada licencia corresponde a uno de los niveles de plan actuales. El conjunto de funciones y límites de referencia de cada nivel es el que muestra la página de precios: consulta Comparar planes.

NivelPara quién esNovedades destacadas respecto al nivel inferior
freePlan gratuito permanente, sin tarjeta y sin caducidadUn control remoto para presentaciones sencillo: una sala, un presentador, pantalla compartida con marca de agua y Stream Deck; todas las demás funciones están bloqueadas
presenterPresentadoresTimer Pro, chat, dibujo, varios anfitriones y NDI
pro (Studio HD)Productores en solitarioLlamantes, salas personalizadas, compartir vídeo y lo esencial de Studio
ultra (Studio 4K)Usuarios avanzados y streamersSalas ilimitadas, temas de colores de marca guardados, capas, grabación ISO, repetición y el conjunto ampliado de herramientas de Studio
studio (Studio 8K)Equipos de producciónDiseñador de disposición de salas, marca blanca, la Client API, claves de API, dominios personalizados y licencias de equipo compartidas por puesto
enterpriseGrandes organizaciones y departamentos de comprasSSO, SCIM y roles de equipo personalizados, contratos anuales por puesto
Es posible que las licencias más antiguas sigan teniendo nombres de producto heredados. Conservan los derechos con los que se compraron, y la API las asigna a los niveles anteriores.