# Gestiona licencias con la API de Licensing Programáticamente

> Aprende a usar la API REST de licencias SecureMailMerge para asignar y desasignar licencias programáticamente con claves API.

El servidor de licencias ofrece una API REST que te permite asignar y desasignar licencias de forma programática. Esto es útil para revendedores que gestionan múltiples clientes, equipos de TI que automatizan la incorporación o cualquier persona que integre la gestión de licencias en sus propias herramientas.
## Autenticación y URL base

Todas las solicitudes API se autentican usando una clave API. La clave API es un GUID que incluyes en el cuerpo de la solicitud (no en un encabezado).

Todos los endpoints de la API están disponibles en:

```
https://licensing.solinventum.com/api/manage/{subscriptionType}/{subscriptionID}
```

Donde:
- `subscriptionType` es uno de: `Paddle`, `Azure`, o `Manual`
- `subscriptionID` es el GUID de tu suscripción

No necesitas construir esta URL tú mismo. En el servidor de licencias, ve a la página "Asignar licencias" de tu suscripción y selecciona la pestaña **Asignar licencias vía API**. Ahí verás la URL base completa, tu clave API y un payload JSON listo para usar para tu suscripción.

### Regenerar tu clave API

Si tu clave API se ve comprometida, puedes regenerarla desde la misma página. La clave antigua se invalida inmediatamente. Solo el propietario de la suscripción puede regenerar claves API. Siempre usa HTTPS al llamar a la API y mantén tu clave API en secreto: cualquiera con tu clave API puede asignar y desasignar licencias en tu suscripción.

[Abrir el servidor de licencias →](https://licensing.solinventum.com/app/)
## Asignar licencias

Agrega asignaciones de licencias a una o más direcciones de correo electrónico.

```
PUT /api/manage/{subscriptionType}/{subscriptionID}
Content-Type: application/json
```

### Cuerpo de la solicitud

```json
{
  "apiKey": "4024d0d8-9a7d-4ac3-9e61-efaeb7c278df",
  "emails": ["user1@example.com", "user2@example.com"]
}
```

| Campo | Tipo | Descripción |
|-------|------|-------------|
| `apiKey` | string (GUID) | Tu clave API de suscripción |
| `emails` | array de strings | Direcciones de correo electrónico a las que asignar licencias |

### Respuesta

**Éxito (200):**

```json
{
  "success": true,
  "errors": [],
  "assignmentStats": {
    "availableLicenses": 10,
    "assignedLicenses": 7
  }
}
```

**Licencias insuficientes (402):**

Se devuelve cuando intentas asignar más licencias de las disponibles en tu suscripción.

**Solicitud incorrecta (400):**

Se devuelve por errores de validación como formato de correo inválido, correos duplicados o campos faltantes.

### Reglas de validación

- Debe proporcionarse al menos una dirección de correo electrónico
- Cada correo debe tener un formato válido y no superar los 256 caracteres
- Se rechazan correos duplicados dentro de la misma solicitud
- No puedes asignar más licencias de las que tu suscripción tiene disponibles

### Ejemplos

#### cURL

```bash
curl -X PUT \
  https://licensing.solinventum.com/api/manage/Paddle/ff3d3cf5-5388-40a0-915f-970c1d2d972f \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "4024d0d8-9a7d-4ac3-9e61-efaeb7c278df",
    "emails": ["newuser@example.com"]
  }'
```

#### PowerShell

```powershell
$body = @{
    apiKey = "4024d0d8-9a7d-4ac3-9e61-efaeb7c278df"
    emails = @("newuser@example.com")
} | ConvertTo-Json

Invoke-RestMethod `
  -Method Put `
  -Uri "https://licensing.solinventum.com/api/manage/Paddle/ff3d3cf5-5388-40a0-915f-970c1d2d972f" `
  -ContentType "application/json" `
  -Body $body
```
## Desasignar licencias

Quita las asignaciones de licencias de una o más direcciones de correo electrónico.

```
DELETE /api/manage/{subscriptionType}/{subscriptionID}
Content-Type: application/json
```

### Cuerpo de la solicitud

```json
{
  "apiKey": "4024d0d8-9a7d-4ac3-9e61-efaeb7c278df",
  "emails": ["user1@example.com"]
}
```

El formato del cuerpo de la solicitud es el mismo que para asignar licencias.

### Respuesta

**Éxito (200):**

```json
{
  "success": true,
  "errors": [],
  "assignmentStats": {
    "availableLicenses": 10,
    "assignedLicenses": 6
  }
}
```

**Solicitud incorrecta (400):**

Se devuelve si las direcciones de correo electrónico especificadas no están actualmente asignadas a la suscripción.

### Ejemplo

```bash
curl -X DELETE \
  https://licensing.solinventum.com/api/manage/Paddle/ff3d3cf5-5388-40a0-915f-970c1d2d972f \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "4024d0d8-9a7d-4ac3-9e61-efaeb7c278df",
    "emails": ["olduser@example.com"]
  }'
```
## Manejo de errores

| Código de estado | Significado |
|------------------|------------|
| 200 | Solicitud exitosa |
| 400 | Solicitud inválida (revisa el arreglo `errors` en la respuesta) |
| 402 | Licencias insuficientes disponibles |
| 404 | Suscripción no encontrada o la clave API no coincide |

Siempre revisa el campo `success` y el arreglo `errors` en el cuerpo de la respuesta para detalles sobre qué salió mal.
