Last 20% — API
Référence API
Le proxy transparent last20 s'intercale entre ton code et les fournisseurs IA (OpenAI, Anthropic, Google, Mistral) pour analyser chaque réponse en arrière-plan — sans modifier ton code applicatif.
Introduction
last20 fournit un proxy HTTP qui relaye les requêtes vers les API LLM des grands fournisseurs. Tu remplaces simplement la baseURL de ton SDK et tu ajoutes deux headers : ta clé last20 (qui authentifie ton compte) et ta clé provider (qui authentifie auprès du fournisseur).
Le proxy renvoie la réponse inchangée, et déclenche en parallèle une analyse pour détecter hallucinations, dérives qualité, artefacts et coûts excessifs. Streaming SSE supporté nativement.
Base URL
https://www.last20.fr/api/proxyAuthentification
Chaque requête doit inclure le header X-Last20-Key avec ta clé last20 (préfixée l20_). Tu la génères depuis /dashboard/settings.
La clé est hashée (SHA-256) avant stockage : on ne peut donc pas la lire en clair côté serveur, même nous. Si tu la perds, tu peux la régénérer — l'ancienne sera révoquée immédiatement.
En plus de X-Last20-Key, ajoute la clé du fournisseur ciblé selon l'endpoint :
X-OpenAI-Key— pour /chat/completionsX-Anthropic-Key— pour /anthropicX-Google-Key— pour /googleX-Mistral-Key— pour /mistral
Confidentialité : ta clé provider n'est jamais persistée par last20. Elle transite uniquement dans le header de ta requête vers le provider.
Quickstart par provider
Tu utilises déjà OpenAI, Anthropic, Google Gemini ou Mistral ? Choisis ton provider, copie le bloc « Après », remplace ton code existant. Trois étapes, deux minutes — le reste de ton application fonctionne à l'identique (tools, streaming, structured outputs).
Quel provider utilises-tu ?
Tu utilises OpenAI ?
Trois étapes, deux minutes, et ton agent est sous monitoring.
Tu n'as pas de clé OpenAI ? Crée-en une gratuitement → platform.openai.com/api-keysTrouve ce fichier dans ton code
C'est là où tu as écrit `new OpenAI(...)`.
Chemins typiques
Remplace par ça
Les seuls vrais changements : la baseURL et deux headers.
const openai = new OpenAI({
apiKey: "sk-ta-clé-openai",
})const openai = new OpenAI({
apiKey: "ignored",
baseURL: "https://www.last20.fr/api/proxy",
defaultHeaders: {
"X-Last20-Key": "l20_ta-clé-last20",
"X-OpenAI-Key": "sk-ta-clé-openai",
},
})l20_ta-clé-last20 par ta clé générée depuis /dashboard/settings.C'est tout !
✓ Ton agent est surveillé dès que tu envoies ta première requête.
Au prochain appel, l'analyse apparaît automatiquement dans /dashboard/agents et /dashboard/analytics — hallucinations, dérives qualité, coûts tokens, le tout en temps réel. Tools, streaming, structured outputs et function calling passent à travers comme avant.
Ne partage jamais ta clé last20 publiquement
Elle donne accès à ton quota d'analyses. Garde-la dans ton .env.local / variables d'environnement Vercel — jamais dans du code commité, jamais dans un bundle client. Si tu penses qu'elle a fuité, régénère-la depuis /dashboard/settings — l'ancienne est révoquée immédiatement.
Tu bloques quelque part ?
Écris-nous à contact@last20.fr avec ton message d'erreur ou un screenshot — réponse sous 24h, ou plus rapide si tu es sur le plan Pro/Scale.
Endpoints supportés
/api/proxy/chat/completionsCompatible OpenAI Chat Completions. Forwarde vers api.openai.com/v1/chat/completions.
Headers : X-Last20-Key, X-OpenAI-Key
Champ optionnel agent_id dans le body pour rattacher l'analyse à un agent monitoré.
/api/proxy/anthropicCompatible Anthropic Messages. Forwarde vers api.anthropic.com/v1/messages.
Headers : X-Last20-Key, X-Anthropic-Key
/api/proxy/googleGoogle Gemini generateContent. Le champ model du body est requis et est extrait pour construire l'URL upstream.
Headers : X-Last20-Key, X-Google-Key
/api/proxy/mistralCompatible Mistral Chat Completions. Forwarde vers api.mistral.ai/v1/chat/completions.
Headers : X-Last20-Key, X-Mistral-Key
Exemples avancés
Pour aller plus loin : Python, cURL, mode mock, Anthropic en raw HTTP. Pour le quickstart par provider, voir ci-dessus.
import OpenAI from "openai";
const openai = new OpenAI({
apiKey: "ignored",
baseURL: "https://www.last20.fr/api/proxy",
defaultHeaders: {
"X-Last20-Key": "l20_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"X-OpenAI-Key": "sk-...",
},
});
const completion = await openai.chat.completions.create({
model: "gpt-4o",
messages: [{ role: "user", content: "Hello" }],
});
console.log(completion.choices[0].message.content);Anthropic
curl https://www.last20.fr/api/proxy/anthropic \
-H "Content-Type: application/json" \
-H "X-Last20-Key: l20_..." \
-H "X-Anthropic-Key: sk-ant-..." \
-d '{
"model": "claude-3-5-sonnet-20241022",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello"}]
}'Mode mock (test sans clé)
Passe la valeur mock dans le header provider pour recevoir une réponse canned — utile pour tester l'intégration et l'analyse sans consommer de tokens réels.
# X-OpenAI-Key: mock → réponse fictive sans appel à OpenAI
curl https://www.last20.fr/api/proxy/chat/completions \
-H "X-Last20-Key: l20_..." \
-H "X-OpenAI-Key: mock" \
-d '{"model":"any","messages":[{"role":"user","content":"test"}]}'Codes d'erreur
| Code | Type | Quand |
|---|---|---|
| 401 | authentication_error | Clé last20 manquante, invalide ou révoquée. Clé provider absente. |
| 429 | rate_limit_error | Quota mensuel d'analyses dépassé sur le plan free. Upgrade vers pro. |
| 502 | proxy_error | Le provider upstream est injoignable. |
| 503 | service_unavailable | Maintenance ou indisponibilité temporaire du proxy. |
Les erreurs upstream du provider (rate limit OpenAI, modèle inconnu, etc.) sont relayées telles quelles, status code et body inclus.
Limites par plan
| Plan | Agents | Analyses / mois | Historique |
|---|---|---|---|
| Free | 1 | 100 | 7 jours |
| Pro | 5 | illimité | 30 jours |
| Scale | illimité | illimité | 90 jours |
Voir /pricing pour le détail des fonctionnalités (alertes, équipe, support, etc.).
Prêt à brancher ton premier agent ?
Commencer l'onboarding