Aller au contenu

Authentification

Chaque requête est authentifiée par une clé API envoyée comme jeton Bearer. Créez, plafonnez et révoquez vos clés depuis votre tableau de bord.

Jeton Bearer

Promptix authentifie chaque requête API avec une clé API envoyée dans l'en-tête Authorization, selon le schéma Bearer. Aucun autre en-tête n'est nécessaire ; Content-Type: application/json est requis pour les corps de requête.

En-tête HTTPtext
Authorization: Bearer sk_your_key_here
curl https://promptix.tn/api/v1/chat/completions \  -H "Authorization: Bearer $PROMPTIX_API_KEY" \  -H "Content-Type: application/json" \  -d '{"model": "openai/gpt-6-luna", "messages": [{"role": "user", "content": "ping"}]}'

Les SDK OpenAI, le Vercel AI SDK et LangChain ajoutent cet en-tête pour vous à partir de l'option api_key / apiKey.

Clés API

Créez et gérez vos clés dans Tableau de bord → Clés API.

  • Une clé se présente sous la forme sk_ suivi de 64 caractères hexadécimaux.
  • La clé complète n'est affichée qu'une fois, à sa création. Promptix ne conserve qu'une empreinte SHA-256 et les quatre derniers caractères : une clé perdue ne peut pas être récupérée. Révoquez-la et créez-en une nouvelle.
  • Vous pouvez avoir jusqu'à 10 clés par compte. Utilisez-en une par projet ou par environnement (développement, production).
  • Toutes les clés d'un compte puisent dans le même solde de crédits. Le tableau de bord indique pour chaque clé sa dernière utilisation, son nombre de requêtes et ses dépenses.

Stockez la clé dans une variable d'environnement plutôt que dans votre code :

.env / shellbash
export PROMPTIX_API_KEY="sk_your_key_here"

Plafonds de dépenses mensuels

Chaque clé peut avoir un plafond mensuel facultatif en TND. Avant chaque requête, Promptix additionne ce que la clé a dépensé depuis le premier jour du mois en cours (UTC). Lorsque ce total atteint le plafond, la requête est refusée avec le code HTTP 402 et rien n'est facturé :

402 Payment RequiredJSON
{  "error": {    "message": "Monthly spend limit reached for this API key",    "type": "insufficient_quota",    "code": "key_monthly_limit"  }}
  • La vérification a lieu avant le démarrage de la requête : celle qui franchit le plafond va donc à son terme et est facturée. Le plafond peut être dépassé, au plus, du coût d'une requête.
  • La clé fonctionne à nouveau le premier jour du mois suivant, ou dès que vous relevez ou supprimez son plafond.
  • Les autres clés du compte ne sont pas concernées.

Fixez un plafond pour chaque clé utilisée par un script, un projet client ou une fonctionnalité publique. Il limite les dégâts d'un bug, d'une boucle ou d'une fuite de clé.

Rotation et révocation des clés

Pour faire tourner une clé, créez-en une nouvelle, déployez-la, puis révoquez l'ancienne depuis le tableau de bord. Une clé révoquée ou désactivée est refusée avec le code 401. La révocation prend effet en une minute environ, car la passerelle garde brièvement en cache les clés validées.

Erreurs d'authentification

Si l'en-tête Authorization est absent ou ne commence pas par Bearer :

401 UnauthorizedJSON
{  "error": "Missing or invalid API key"}

Si la clé est inconnue, révoquée ou rattachée à un compte désactivé :

401 UnauthorizedJSON
{  "error": "Invalid API key or inactive user"}

La liste complète figure dans Erreurs et limites.

Protéger vos clés

  • Appelez Promptix depuis votre serveur. Ne placez jamais une clé dans une page web, une application mobile ou une extension de navigateur.
  • Ne versionnez pas vos clés. Ajoutez .env à .gitignore et utilisez le gestionnaire de secrets de votre hébergeur.
  • Utilisez des clés distinctes par environnement et par projet, chacune avec un plafond mensuel.
  • En cas de fuite, révoquez la clé immédiatement dans le tableau de bord.

Un proxy minimal côté serveur, pour que le navigateur ne voie jamais la clé :

app/api/ask/route.tsTypeScript
// app/api/ask/route.ts (Next.js): the browser calls your route, never Promptix directlyimport OpenAI from 'openai'; const client = new OpenAI({  baseURL: 'https://promptix.tn/api/v1',  apiKey: process.env.PROMPTIX_API_KEY, // server-side environment variable}); export async function POST(req: Request) {  const { question } = await req.json();  const completion = await client.chat.completions.create({    model: 'openai/gpt-6-luna',    messages: [{ role: 'user', content: String(question).slice(0, 4000) }],    max_tokens: 500,  });  return Response.json({ answer: completion.choices[0].message.content });}