Authentification

Jetons d'accès personnels, scopes, et comment authentifier chaque requête API et MCP de Qyvo.

Qyvo utilise les jetons d'accès personnels Laravel Passport pour tout le trafic API et MCP. Il existe un seul type de jeton — la même valeur fonctionne pour l'API REST et le serveur MCP.

Format du jeton

Les jetons sont des chaînes opaques — généralement plus de 60 caractères hexadécimaux. Ils sont scopés sur :

  • l'utilisateur qui les a créés (son tenant est résolu automatiquement)
  • le scope mcp, qui autorise à la fois les appels REST et MCP

Il n'y a pas de compte de service ou de jeton d'organisation. Chaque jeton appartient à un utilisateur individuel. Révoquer l'utilisateur révoque ses jetons.

Générer un jeton

  1. Connectez-vous à qyvo.io
  2. Ouvrez Paramètres → Jetons API
  3. Cliquez sur Créer un jeton, donnez-lui un nom décrivant le cas d'usage (Claude Desktop, n8n production, support script, …)
  4. Copiez la valeur une seule fois — Qyvo affiche le texte en clair pendant 90 secondes, puis le masque définitivement

Si vous perdez un jeton, générez-en un nouveau et révoquez l'ancien. Qyvo ne peut pas récupérer le texte en clair.

Utiliser un jeton

Joignez-le en tant qu'en-tête Bearer à chaque requête :

Authorization: Bearer YOUR_TOKEN_HERE

Un test rapide minimal dans votre langage de prédilection :

curl https://www.qyvo.io/api/v1/me \
  -H "Authorization: Bearer YOUR_TOKEN_HERE"
const res = await fetch('https://www.qyvo.io/api/v1/me', {
  headers: { Authorization: `Bearer ${process.env.QYVO_TOKEN}` },
});
const me = await res.json();
use Illuminate\Support\Facades\Http;

$me = Http::withToken(env('QYVO_TOKEN'))
    ->get('https://www.qyvo.io/api/v1/me')
    ->json();
import os, httpx

me = httpx.get(
    'https://www.qyvo.io/api/v1/me',
    headers={'Authorization': f"Bearer {os.environ['QYVO_TOKEN']}"},
).json()

Les quatre exemples renvoient l'utilisateur et le tenant authentifiés. Voir GET /v1/me.

Scopes

Actuellement, chaque jeton est émis avec le scope unique mcp. Il accorde l'accès à :

  • Tous les endpoints REST /api/v1/*
  • Le serveur MCP à /mcp

Il n'existe pas de scope plus restreint aujourd'hui. Si vous devez restreindre un jeton à un sous-ensemble d'endpoints, exécutez un serveur d'intégration dans votre propre stack et faites passer en proxy uniquement les appels que vous souhaitez exposer.

Révoquer un jeton

Dans Paramètres → Jetons API, cliquez sur l'action Révoquer à côté du jeton. La révocation prend effet immédiatement — les requêtes en cours utilisant ce jeton échouent avec 401.

Bonnes pratiques de sécurité

  • Ne committez jamais de jetons. Utilisez des variables d'environnement ou un gestionnaire de secrets (1Password, Doppler, AWS Secrets Manager, secrets GitHub Actions).
  • Un jeton par intégration. Cela rend l'audit et la rotation chirurgicaux — révoquer n8n production ne casse pas le script de support.
  • Effectuez une rotation périodique. Trimestrielle est un défaut raisonnable. Générez le nouveau jeton, déployez-le, puis révoquez l'ancien.
  • N'embarquez pas de jetons dans du code côté client. Les jetons accordent un accès complet à l'espace de travail ; traitez-les comme un mot de passe de base de données. Pour les contextes navigateur/widget, passez par un serveur que vous contrôlez.
  • Utilisez HTTPS uniquement. Qyvo redirige toute requête HTTP, mais des jetons exposés sur HTTP simple doivent être considérés comme compromis — révoquez immédiatement.

Erreurs courantes

Statut Signification
401 Unauthenticated En-tête manquant, jeton mal orthographié, jeton révoqué, ou jeton sans le scope mcp
404 Personal access client not found Problème d'installation côté serveur — contactez le support
422 No workspace configured for this account. L'utilisateur derrière le jeton n'a pas de tenant — vérifiez la configuration de l'espace de travail

Voir le catalogue complet des Erreurs.