Authentification

L'API TeamDay utilise des jetons d'accès personnels (PAT) pour l'authentification. Toutes les requêtes API doivent inclure un jeton valide dans l'en-tête Authorization.


Obtenir votre jeton d'accès

Étape 1 : Générer un jeton

  1. Connectez-vous à votre compte TeamDay sur cc.teamday.ai
  2. Naviguez vers Paramètres → Accès API
  3. Cliquez sur Générer un nouveau jeton
  4. Définissez optionnellement une expiration personnalisée (7-365 jours, par défaut : 90 jours)
  5. Copiez votre jeton immédiatement - vous ne pourrez plus le voir !

Étape 2 : Stocker en sécurité

Votre jeton ressemblera à ceci :

td_AbCdEfGhIjKlMnOpQrStUvWxYz0123456789AbCdE

Format du jeton :

  • Préfixe : td_ (identifie les jetons TeamDay)
  • Longueur : 43 caractères alphanumériques après le préfixe
  • Encodage : Base64url (compatible URL)

Stockez dans des variables d'environnement :

# Unix/Linux/macOS
export TEAMDAY_TOKEN="td_votre-jeton-actuel-ici"

# Windows (PowerShell)
$env:TEAMDAY_TOKEN="td_votre-jeton-actuel-ici"

# Ou dans un fichier .env (pour le développement local)
TEAMDAY_TOKEN=td_votre-jeton-actuel-ici

Utiliser votre jeton

Incluez votre jeton dans l'en-tête Authorization avec le schéma Bearer :

Authorization: Bearer td_votre-jeton-actuel-ici

Exemples de requêtes

Lister les agents :

curl https://cc.teamday.ai/api/v1/agents \
  -H "Authorization: Bearer $TEAMDAY_TOKEN"

Créer un agent :

curl -X POST https://cc.teamday.ai/api/v1/agents \
  -H "Authorization: Bearer $TEAMDAY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Assistant de recherche",
    "role": "Recherche et analyse",
    "systemPrompt": "Vous êtes un assistant de recherche utile.",
    "visibility": "private"
  }'

Obtenir les détails d'une exécution :

curl https://cc.teamday.ai/api/v1/executions/exec_123 \
  -H "Authorization: Bearer $TEAMDAY_TOKEN"

Fonctionnalités de sécurité du jeton

Chiffrement au repos

Les jetons sont protégés par une sécurité de niveau entreprise :

  • Hachage : Hachage SHA-256 stocké dans la base de données (irréversible)
  • Chiffrement : Chiffrement AES-256-GCM pour les métadonnées du jeton
  • Pas de stockage en clair : Le jeton original n'est jamais stocké après création

Validation automatique

Chaque requête API valide :

  1. Format du jeton - Préfixe et longueur corrects
  2. Recherche du hachage - Le jeton existe dans la base de données
  3. Expiration - Le jeton n'est pas expiré
  4. Portée de l'organisation - L'utilisateur appartient à l'organisation
  5. Suivi de la dernière utilisation - Mis à jour à chaque requête

Portée

Chaque jeton est lié à :

  • Utilisateur : Le jeton appartient à un utilisateur spécifique (créateur)
  • Organisation : Hérite de l'appartenance à l'organisation de l'utilisateur
  • Permissions : Utilise le rôle et les permissions de l'utilisateur

Important : Les jetons héritent des permissions de l'utilisateur qui les a créés. Si l'accès d'un utilisateur est révoqué, ses jetons cessent immédiatement de fonctionner.


Gestion des jetons

Afficher les jetons actifs

Consultez tous vos jetons actifs dans Paramètres → Accès API :

  • Nom du jeton (étiquette optionnelle)
  • Date de création
  • Horodatage de dernière utilisation
  • Date d'expiration
  • Portée des permissions

Révoquer les jetons

Révoquer immédiatement un jeton :

  1. Allez dans Paramètres → Accès API
  2. Trouvez le jeton dans votre liste
  3. Cliquez sur Révoquer
  4. Confirmez la suppression

Quand révoquer :

  • Jeton compromis ou exposé
  • Membre de l'équipe quittant l'organisation
  • Jeton non utilisé
  • Rotation des identifiants (bonne pratique de sécurité)

Expiration du jeton

Expiration par défaut : 90 jours

Expiration personnalisée :

  • Minimum : 7 jours
  • Maximum : 365 jours

Que se passe-t-il à l'expiration :

  • Les requêtes API retournent 401 Unauthorized
  • Message d'erreur : "Token expired"
  • Le jeton est automatiquement nettoyé (suppression logique)

Renouvellement automatique : Non supporté. Générez un nouveau jeton avant l'expiration.


Réponses d'erreur

Jeton manquant

Requête :

curl https://cc.teamday.ai/api/v1/agents

Réponse :

{
  "error": true,
  "statusCode": 401,
  "statusMessage": "Unauthorized",
  "message": "Authorization header required"
}

Jeton invalide

Requête :

curl https://cc.teamday.ai/api/v1/agents \
  -H "Authorization: Bearer invalid_token"

Réponse :

{
  "error": true,
  "statusCode": 401,
  "statusMessage": "Unauthorized",
  "message": "Invalid or expired token"
}

Jeton expiré

Requête :

curl https://cc.teamday.ai/api/v1/agents \
  -H "Authorization: Bearer td_expired_token"

Réponse :

{
  "error": true,
  "statusCode": 401,
  "statusMessage": "Unauthorized",
  "message": "Token expired"
}

Bonnes pratiques de sécurité

À faire ✅

  • Stocker les jetons dans des variables d'environnement - Ne jamais coder en dur dans le code source
  • Utiliser des jetons séparés par intégration - Plus facile à suivre et révoquer
  • Définir des dates d'expiration appropriées - Plus courtes pour les environnements à haut risque
  • Faire tourner les jetons régulièrement - Surtout pour les systèmes de production
  • Révoquer immédiatement si compromis - Mieux vaut prévenir que guérir
  • Utiliser HTTPS uniquement - Ne jamais envoyer de jetons via HTTP non sécurisé
  • Surveiller l'utilisation des jetons - Vérifier régulièrement les horodatages "dernière utilisation"

À ne pas faire ❌

  • Ne jamais committer les jetons dans Git - Utiliser .gitignore pour les fichiers .env
  • Ne jamais partager les jetons - Chaque intégration devrait avoir le sien
  • Ne jamais logger les jetons - Masquer dans les journaux d'application
  • Ne jamais envoyer dans les paramètres d'URL - Utiliser uniquement les en-têtes
  • Ne jamais réutiliser entre environnements - Dev/staging/prod devraient avoir des jetons séparés
  • Ne jamais stocker dans le code côté client - Les jetons sont uniquement pour un usage côté serveur

Exemple de variables d'environnement

# .env (ajouter à .gitignore!)
TEAMDAY_TOKEN=td_votre-jeton-actuel-ici

# Utilisation dans le code
const token = process.env.TEAMDAY_TOKEN

const response = await fetch('https://cc.teamday.ai/api/v1/agents', {
  headers: {
    'Authorization': `Bearer ${token}`,
    'Content-Type': 'application/json'
  }
})

Stratégie de rotation des jetons

Calendrier de rotation recommandé :

  • Développement : 90 jours (par défaut)
  • Staging : 60 jours
  • Production : 30 jours
  • Haute sécurité : 7 jours

Comment faire tourner sans interruption :

  1. Générer un nouveau jeton (ne pas encore révoquer l'ancien)
  2. Mettre à jour les applications pour utiliser le nouveau jeton
  3. Déployer et vérifier que le nouveau jeton fonctionne
  4. Surveiller pendant 24-48 heures (vérifier l'utilisation de l'ancien jeton)
  5. Révoquer l'ancien jeton une fois confirmé inutilisé

Limitation de débit

État actuel : Aucune limite de débit appliquée

Bonnes pratiques :

  • Implémenter un backoff exponentiel pour les nouvelles tentatives
  • Mettre en cache les réponses lorsque approprié
  • Utiliser des taux de requête raisonnables (< 100 req/min recommandé)

Futur : Des limites de débit pourraient être introduites. Nous fournirons un préavis et de la documentation.


OAuth (Bientôt disponible)

Fonctionnalités prévues :

  • Support OAuth 2.0 pour les intégrations tierces
  • Permissions à portée limitée (lecture seule, écriture, admin)
  • Clés API au niveau de l'organisation

Suivre la progression OAuth →


Tester votre jeton

Test rapide :

# Devrait retourner une liste d'agents (ou un tableau vide)
curl https://cc.teamday.ai/api/v1/agents \
  -H "Authorization: Bearer $TEAMDAY_TOKEN"

# Réponse de succès (exemple)
[
  {
    "id": "agent_123",
    "name": "Mon agent",
    "role": "Assistant",
    "createdAt": "2025-12-09T12:00:00Z"
  }
]

Si vous voyez 401 Unauthorized :

  1. Vérifier que le jeton est copié correctement (pas d'espaces supplémentaires)
  2. Vérifier que le jeton n'est pas expiré dans Paramètres → Accès API
  3. Confirmer que l'utilisateur a toujours accès à l'organisation
  4. Essayer de générer un nouveau jeton

Besoin d'aide ?

Le jeton ne fonctionne pas ?

  • Consultez la référence des erreurs pour le dépannage
  • Vérifier le format : td_ + 43 caractères
  • Confirmer qu'il n'est pas expiré dans le tableau de bord

Questions ?


Dernière mise à jour : 9 décembre 2025