Aller au contenu
Authentification

Authentification

Chaque requête porte votre clé API dans un en-tête. Une clé par compte fonctionne sur chaque point de terminaison et chaque modèle, sous l'une des deux formes d'en-tête.

En-tête · SDK OpenAI
Authorization: Bearer YOUR_API_KEY
En-tête · SDK Anthropic
x-api-key: YOUR_API_KEY

En-têtes acceptés

Les deux en-têtes sont lus sur chaque point de terminaison /v1, quel que soit le format que parle le point de terminaison. Envoyez l'un des deux.

En-tête Description
Authorization: Bearer <key> Vérifié en premier. Écrivez Bearer avec un B majuscule et un espace avant la clé. Les SDK OpenAI envoient cet en-tête.
x-api-key: <key> Lu quand la requête n'a pas d'en-tête Authorization: Bearer. Les SDK Anthropic envoient cet en-tête.

Avec un SDK OpenAI, définissez la clé et l'URL de base ; le SDK envoie Authorization: Bearer.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1"
)

response = client.chat.completions.create(
    model="shannon-3",
    messages=[
        {"role": "user", "content": "Hello, Shannon!"}
    ]
)

print(response.choices[0].message.content)

Avec un SDK Anthropic, définissez la clé et l'URL de base sans /v1 ; le SDK envoie x-api-key.

import anthropic

client = anthropic.Anthropic(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com"
)

message = client.messages.create(
    model="shannon-3",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "Hello, Shannon!"}
    ]
)

print("".join(block.text for block in message.content if block.type == "text"))

Quels points de terminaison exigent une clé

Point de terminaison Clé
POST /v1/chat/completions Obligatoire
POST /v1/messages Obligatoire
POST /v1/responses Obligatoire
POST /v1/tokenize Obligatoire
POST /v1/messages/count_tokens Obligatoire
GET /v1/models Pas nécessaire

Votre clé

  • Une clé est sk- suivi de 43 caractères parmi A–Z, a–z, 0–9, - et _ : 46 caractères au total.
  • Chaque compte a exactement une clé. Elle est créée la première fois que vous ouvrez Clés et utilisation.
  • La clé donne un accès complet à l'API pour votre compte : chaque point de terminaison, chaque modèle et la totalité du solde.
  • Une clé n'a pas de date d'expiration. Elle fonctionne jusqu'à ce que vous la renouveliez ou la révoquiez.

Renouveler et révoquer

Vous renouvelez et révoquez la clé sur la page Clés et utilisation. Clés et utilisation

Action Ce qui se passe
Renouveler Une nouvelle clé est émise et l'ancienne cesse de fonctionner. La nouvelle clé fonctionne immédiatement.
Révoquer La clé cesse de fonctionner et aucune nouvelle clé n'est émise. Renouvelez pour obtenir de nouveau une clé valide.
  • Les deux prennent effet immédiatement : la requête suivante avec l'ancienne clé reçoit 401. Comptez 60 secondes au maximum avant que l'ancienne clé soit refusée partout.
  • Tous les clients du compte utilisent la même clé, donc un renouvellement les touche tous. Mettez la nouvelle clé dans vos clients juste après le renouvellement.
  • Le solde, l'utilisation et la protection anti-flood appartiennent au compte, pas à la clé. Une nouvelle clé continue avec le même solde et le même nombre de requêtes pour la minute en cours.

Erreurs

Chaque échec d'authentification a le statut 401 et le type authentication_error. Le message distingue les cas.

Statut Type Message Quand
401 authentication_error Missing authentication La requête n'a ni en-tête Authorization: Bearer ni en-tête x-api-key commençant par sk-. C'est aussi la réponse à bearer en minuscules et à une valeur Authorization sans Bearer.
401 authentication_error Invalid API key La clé n'est pas la clé actuelle d'un compte : elle est mal saisie, elle a été révoquée ou elle a été remplacée par un renouvellement.
{
  "error": {
    "type": "authentication_error",
    "message": "Invalid API key",
    "code": "invalid_api_key",
    "param": null
  }
}
  • Sur tous les chemins sauf /v1/messages, l'objet error contient aussi code: "invalid_api_key", y compris pour une clé manquante, et param: null.
  • La clé est vérifiée avant la lecture du corps. Une requête sans clé valide reçoit 401 même si son corps est invalide ou trop volumineux.
  • Une valeur Authorization: Bearer qui ne commence pas par sk- n'est pas traitée comme une clé API. Elle reçoit 401 avec un message indiquant que le token est invalide ou expiré.

Navigateurs et CORS

  • L'API répond aux requêtes de navigateur cross-origin uniquement pour une liste fixe d'origines. Le JavaScript d'une page d'une autre origine ne peut pas lire les réponses /v1.
  • Appelez l'API depuis votre serveur et laissez votre page parler à votre serveur. Cela garde aussi la clé hors du code source de la page.
  • Le code côté serveur et les outils en ligne de commande ne sont pas concernés : cette règle n'est appliquée que par les navigateurs.
  • Une connexion sur shannon-ai.com n'authentifie pas les requêtes /v1. Les cookies n'y sont pas lus ; la clé est le seul identifiant.
  • Pour une origine autorisée, un navigateur peut envoyer content-type, authorization, x-api-key, anthropic-version, anthropic-beta, openai-beta et x-request-id, et peut lire l'en-tête de réponse x-request-id.

Protéger la clé

  • Gardez la clé sur un serveur. Ne la mettez pas dans des pages web, des applications mobiles ou des dépôts publics : quiconque la détient peut dépenser tout votre solde.
  • Chargez la clé depuis une variable d'environnement ou un gestionnaire de secrets au lieu de l'écrire dans le code.
  • Si la clé a pu fuiter, renouvelez-la dans Clés et utilisation. L'ancienne clé cesse de fonctionner immédiatement.
  • Après une fuite, consultez la liste des requêtes dans Clés et utilisation. Elle montre chaque requête effectuée avec la clé au cours des 30 derniers jours.