Se connecter

Licences

API de validation et d'activation des licences et de gestion des appareils

Gérez la validation et l'activation des licences ainsi que le suivi des appareils.

Limitation de débit : les points de terminaison de licence sont soumis à une limitation de débit par IP sur une fenêtre fixe de 60 secondes. Tout dépassement de la limite renvoie 429 Too Many Requests avec un en-tête Retry-After: 60 jusqu'à la réinitialisation de la fenêtre.

Valider une licence

Validez et activez une clé de licence. Ce point de terminaison est limité à 5 requêtes par minute par adresse IP.

Point de terminaison : POST /api/licenses/validate

ParamètreTypeObligatoireDescription
license_keystringOuiClé de licence à valider
device_idstringOuiIdentifiant stable et unique de l'appareil à activer. Envoyez toujours la même valeur pour un appareil donné : c'est elle qui attribue et réattribue le poste de cet appareil
curl -X POST "$BASE_URL/api/licenses/validate" \
  -H "Content-Type: application/json" \
  -d '{"license_key":"XXXX-XXXX-XXXX-XXXX","device_id":"device_abc123"}'

Réponse (succès) :

{
  "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
  }
}

Réponse (erreur) :

{
  "statusCode": 400,
  "statusMessage": "Invalid licence key or validation failed"
}
StatutCas
400license_key ou device_id est absent, vide ou trop long, ou la clé est inconnue, inactive ou expirée
409Tous les postes de la licence sont déjà occupés par d'autres appareils, et aucun n'est resté inactif assez longtemps pour être récupéré
429Limite de débit dépassée, voir Limitation de débit
Par sécurité, toutes les erreurs de validation de licence renvoient le même message générique afin d'empêcher les attaques par énumération. Une erreur 400 n'indique donc jamais quel champ est en cause : vérifiez que license_key et device_id sont tous deux présents et non vides avant de réessayer.

Désactiver une licence

Authentification requise

Nécessite le cookie de session session_token du propriétaire de la licence (voir Authentification) : vous ne pouvez désactiver qu'une licence qui vous appartient.

Désactivez une licence sur un appareil précis ou sur tous les appareils.

Point de terminaison : POST /api/licenses/deactivate

ParamètreTypeObligatoireDescription
license_keystringOuiClé de licence à désactiver
device_idstringNonAppareil précis à désactiver (à omettre pour tous les appareils)
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"}'

Réponse :

{
  "success": true,
  "message": "Device deactivated successfully",
  "deactivated_count": 1,
  "remaining_activations": 4
}
Malgré son nom, remaining_activations correspond au nombre de postes encore utilisés après la désactivation, c'est-à-dire au nombre d'appareils distincts toujours actifs sur la licence. Il ne s'agit pas du nombre de postes libres. La désactivation de tous les appareils renvoie donc 0. Calculez les postes libres avec activation_limit - remaining_activations, en utilisant la valeur activation_limit renvoyée par GET /api/licenses/status. Sans device_id, le message est « All devices deactivated successfully » ; deactivated_count correspond au nombre de postes libérés par cet appel.

Statut de la licence

Authentification requise

Nécessite le cookie de session session_token du propriétaire de la licence (voir Authentification) : vous ne pouvez consulter qu'une licence qui vous appartient.

Vérifiez le statut actuel d'une licence. Limité à 30 requêtes par minute par IP.

Point de terminaison : GET /api/licenses/status

ParamètreTypeObligatoireDescription
license_keyqueryOuiClé de licence à vérifier
curl -X GET "$BASE_URL/api/licenses/status?license_key=XXXX-XXXX-XXXX-XXXX" \
  -b cookies.txt

Réponse :

{
  "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"
    }
  ]
}

Cycle de vie d'une licence

Limitation de débit

Les points de terminaison de licence sont soumis à une limitation de débit par IP sur une fenêtre fixe de 60 secondes. En cas de 429, un en-tête est renvoyé :

En-têteDescription
Retry-AfterNombre de secondes avant la réinitialisation de la fenêtre (toujours 60)

Limites de débit par point de terminaison

Point de terminaisonRequêtes / 60 sNiveau
/api/licenses/validate5Strict
/api/licenses/status30Standard
/api/licenses/deactivate30Standard

POST /api/licenses/validate applique deux fois la limite Strict : une fois par IP, et une fois par license_key soumise, de sorte qu'une même clé ne puisse pas être bombardée de requêtes depuis de nombreuses IP.

Tout dépassement d'une limite renvoie 429 Too Many Requests pendant le reste de la fenêtre de 60 secondes. Il n'existe aucune durée de blocage progressive ou croissante.

Types de licences

Chaque licence correspond à l'un des niveaux d'offre actuels. L'ensemble de référence des fonctionnalités et des limites de chaque niveau est celui qu'affiche la page des tarifs, voir Comparer les offres.

NiveauPublic viséPrincipaux ajouts par rapport au niveau inférieur
freeOffre gratuite permanente, sans carte bancaire, sans expirationUne simple télécommande de présentation : une salle, un présentateur, le partage d'écran avec filigrane et Stream Deck ; toutes les autres fonctionnalités sont verrouillées
presenterPrésentateursTimer Pro, chat, dessin, multi-hôte et NDI
pro (Studio HD)Producteurs indépendantsAppelants, salles personnalisées, partage vidéo et les essentiels de Studio
ultra (Studio 4K)Utilisateurs avancés et streamersSalles illimitées, thèmes de couleurs de marque enregistrés, calques, enregistrement ISO, replay et la panoplie élargie d'outils Studio
studio (Studio 8K)Équipes de productionConcepteur de disposition des salles, marque blanche, la Client API, les clés API, les domaines personnalisés, les licences d'équipe mutualisées par poste
enterpriseGrandes organisations et services achatsSSO, SCIM et rôles d'équipe personnalisés, contrats annuels par poste
Les licences plus anciennes peuvent encore porter d'anciens noms de produit. Elles conservent les droits avec lesquels elles ont été achetées, et l'API les fait correspondre aux niveaux ci-dessus.