Docs/Authentification

Authentification

L'API s'authentifie avec une clé API d'équipe transmise en tant que jeton porteur (bearer token). Chaque clé est limitée à une seule équipe et à un seul environnement.

Clés d'API

Générez des clés dans Équipes → Clés API. Une clé n'est affichée en entier qu'une seule fois — seul un hachage SHA-256 est conservé de notre côté. Transmettez-la en tant que jeton porteur dans l'en-tête indiqué ci-dessous :

curl https://api.seeitlive.io/v1/sessions \
  -H "Authorization: Bearer sil_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Environnements

Chaque clé appartient à l'un des deux environnements, identifié par son préfixe :

PréfixeEnvironnementUsage
sil_live_ProductionSessions clients réelles.
sil_test_Bac à sableDéveloppement et tests.

Les sessions créées avec une clé héritent de l'environnement et de l'équipe de cette clé.

Sécuriser une clé

Chaque clé peut être restreinte afin qu'une clé divulguée soit inutilisable depuis un autre endroit :

  • Sources autorisées Restreignez une clé par IP, plage CIDR ou nom d'hôte — un par ligne. Les noms d'hôte sont résolus par DNS et comparés à l'IP de l'appelant. Ajoutez une étiquette en ligne après # ou ;, par ex. 1.2.3.4/24 # serveur 1.
  • ExpirationDonnez à une clé une date d'expiration. Une fois celle-ci passée, les requêtes utilisant cette clé sont rejetées.
  • RévoquerDésactivez une clé instantanément — les requêtes en cours commencent à échouer immédiatement.
Faites tourner immédiatement les clés divulguées
Si une clé est exposée, révoquez-la et restreignez son remplacement avec une liste de sources autorisées avant de la redistribuer.

Signature des requêtes

La signature est optionnelle et s'ajoute à l'authentification par clé — l'en-tête Authorization: Bearer reste obligatoire sur chaque requête. Activez-la, faites-la tourner ou désactivez-la pour une clé depuis Équipe → Clés API → la clé → Sécurité ; l'activation ou la rotation révèle le secret de signature une seule fois, alors enregistrez-le immédiatement.

Une fois activée, signez chaque requête en calculant HMAC_SHA256(signingSecret, "TIMESTAMP.METHOD.PATH.sha256hex(body)"), encodé en hexadécimal, où :

VariableDescription
TIMESTAMPL'horodatage unix en secondes — la même valeur envoyée dans l'en-tête X-SeeItLive-Timestamp.
METHODLa méthode HTTP, en majuscules (par ex. POST).
PATHLe chemin de la requête relatif à la racine de version de l'API — ce que vous ajoutez à l'URL de base, par ex. /sessions ou /keys?teamId=x. Pas l'URL complète, et sans le préfixe /api/v1. Incluez la chaîne de requête.
sha256hex(body)SHA-256 en hexadécimal minuscule des octets exacts du corps de la requête ; le hachage d'une chaîne vide en l'absence de corps.

Envoyez la signature et l'horodatage en tant qu'en-têtes sur chaque requête signée :

En-têteValeur
X-SeeItLive-Signaturesha256= suivi de la signature encodée en hexadécimal.
X-SeeItLive-TimestampLe même horodatage unix (en secondes) utilisé dans la signature.
SIGNING_SECRET=your-signing-secret   # shown once when you enable signing
TS=$(date +%s)
BODY='{"channel":"demo"}'
BODY_HASH=$(printf '%s' "$BODY" | openssl dgst -sha256 | sed 's/^.* //')
SIG=$(printf '%s' "$TS.POST./sessions.$BODY_HASH" | openssl dgst -sha256 -hmac "$SIGNING_SECRET" | sed 's/^.* //')
curl https://api.seeitlive.io/v1/sessions \
  -H "Authorization: Bearer sil_live_xxxxxxxx" \
  -H "X-SeeItLive-Timestamp: $TS" \
  -H "X-SeeItLive-Signature: sha256=$SIG" \
  -H "Content-Type: application/json" \
  -d "$BODY"
Fenêtre anti-rejeu de 300 secondes
Les requêtes sont rejetées si l'horodatage s'écarte de plus de 300 secondes de l'horloge du serveur, ou si la signature ne correspond pas.

Limites de débit

L'API autorise 100 requêtes par minute et par clé. Les points de terminaison de création de session et d'envoi d'invitation ont des limites plus strictes. Dépasser une limite renvoie 429 — consultez la référence des erreurs complète pour tous les codes de statut renvoyés par l'API.

StatutSignification
401Clé manquante ou invalide.
403Clé non autorisée depuis cette IP ou cette origine, ou permission manquante.
402Limite du forfait atteinte (sessions, sièges) — mise à niveau requise.
400Erreur de validation.
429Limite de débit dépassée.
Authentification