Cinq étapes. Chaque requête passe par votre propre clé de fournisseur (étape 4), à une exception près : là où ce déploiement sert les modèles gratuits sans clé, votre première requête peut aller à l’un d’eux avant l’étape 4 — l’étape 3 explique comment le savoir.
1. Obtenir une clé de gestion
Connectez-vous à autonomousrelay.com/signin avec Google, GitHub ou un portefeuille. Votre première clé de gestion est créée avec votre compte et affichée une seule fois, dans Espace de travail → Clés API.
2. Créer une clé d’inférence
Une clé de gestion administre le compte et ne peut pas envoyer de requêtes d’inférence. Créez une clé d’inférence distincte pour votre application :
curl -X POST https://autonomousrelay.com/v1/keys \
-H "Authorization: Bearer $AUTONOMOUSRELAY_MANAGEMENT_KEY" \
-H 'content-type: application/json' \
-d '{"name":"my-app","class":"inference"}'3. Les modèles gratuits, avec ou sans clé
Les modèles gratuits — tous les prix à zéro, listés par GET /v1/models?free=true — ne coûtent rien avec votre propre clé de fournisseur. Un déploiement peut aussi les servir sans clé à vous, sur la sienne : GET /v1/free-tier répond available, la limite quotidienne et les modèles concernés. Quand available vaut true, une requête comme celle-ci fonctionne avant l’étape 4 (avec un modèle qu’il nomme) ; quand il vaut false, passez d’abord à l’étape 4. Rien n’est facturé dans les deux cas.
curl -X POST https://autonomousrelay.com/v1/chat/completions \
-H "Authorization: Bearer $AUTONOMOUSRELAY_API_KEY" \
-H 'content-type: application/json' \
-d '{
"model": "minimax/minimax-m3:free",
"messages": [{"role": "user", "content": "Bonjour"}]
}'daily_limit requêtes par jour par organisation, tous modèles confondus. Au-delà, la réponse est un 429 avec metadata.reason: free_model_daily_limit et l’heure de remise à zéro ; ajoutez votre propre clé pour un usage illimité. Les limites de l’offre gratuite du fournisseur s’appliquent toujours.4. Ajouter une clé de fournisseur
Tous les autres modèles fonctionnent uniquement avec vos propres clés : chacun passe par votre clé pour le fournisseur qui le sert. Votre clé OpenAI, Anthropic ou Google existante convient. Dès que vous ajoutez une clé pour un fournisseur, ses modèles gratuits l’utilisent aussi, sans limite quotidienne.
curl -X POST https://autonomousrelay.com/v1/byok \
-H "Authorization: Bearer $AUTONOMOUSRELAY_MANAGEMENT_KEY" \
-H 'content-type: application/json' \
-d '{"provider":"anthropic","api_key":"sk-ant-...","name":"prod"}'Ou exécutez ./deploy/byok.sh, qui vous invite à saisir la clé sans la laisser dans l’historique de votre shell. La clé est chiffrée avant d’être conservée et n’est jamais retournée par aucun point d’accès — la liste de vos justificatifs donne un indice de quatre caractères, rien de plus.
5. Envoyer une requête à n’importe quel modèle
curl -X POST https://autonomousrelay.com/v1/chat/completions \
-H "Authorization: Bearer $AUTONOMOUSRELAY_API_KEY" \
-H 'content-type: application/json' \
-d '{
"model": "anthropic/claude-sonnet-5",
"messages": [{"role": "user", "content": "Bonjour"}]
}'Depuis le SDK OpenAI : deux lignes changent
L’API parle le format Chat Completions d’OpenAI, donc les SDK officiels fonctionnent tels quels : pointez base_url sur https://autonomousrelay.com/v1 et utilisez votre clé d’inférence. Les identifiants de modèle sont auteur/modèle, et n’importe quel modèle du catalogue fonctionne, pas seulement ceux d’OpenAI. Le guide OpenAI SDK couvre le reste du SDK.
Python
pip install openai
import os
from openai import OpenAI
client = OpenAI(
base_url="https://autonomousrelay.com/v1", # 1
api_key=os.environ["AUTONOMOUSRELAY_API_KEY"], # 2
)
resp = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[{"role": "user", "content": "Bonjour"}],
)
print(resp.choices[0].message.content)La diffusion en continu fonctionne sans changement : passez stream=True et lisez les morceaux.
Node.js et TypeScript
npm install openai
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'https://autonomousrelay.com/v1',
apiKey: process.env.AUTONOMOUSRELAY_API_KEY,
});
const resp = await client.chat.completions.create({
model: 'anthropic/claude-sonnet-5',
messages: [{ role: 'user', content: 'Bonjour' }],
});
console.log(resp.choices[0].message.content);curl, ou tout client HTTP
Tout client capable d’envoyer du JSON en POST fonctionne : la requête de l’étape 5 est tout le protocole. Avec "stream": true, la réponse arrive en événements envoyés par le serveur ; -N les affiche au fil de l’eau.
curl -N https://autonomousrelay.com/v1/chat/completions \
-H "Authorization: Bearer $AUTONOMOUSRELAY_API_KEY" \
-H 'content-type: application/json' \
-d '{
"model": "anthropic/claude-sonnet-5",
"stream": true,
"messages": [{"role": "user", "content": "Bonjour"}]
}'Claude, Gemini ou tout autre modèle par le SDK OpenAI
Le même client appelle les modèles de tous les fournisseurs : seul l’identifiant change. Chaque fournisseur a besoin de sa propre clé (étape 4) ; sans elle, la requête répond 404 en nommant le fournisseur.
for model in ["anthropic/claude-sonnet-5", "google/gemini-3.1-pro", "openai/gpt-5.5"]:
resp = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": "Bonjour"}],
)
print(model, resp.choices[0].message.content)Pour une chaîne de repli, passez models : si le premier ne peut pas être servi, le suivant est essayé (jusqu’à trois tentatives, voir Replis et basculement). Le SDK Python l’envoie par extra_body ; en Node, ajoutez models à l’objet de la requête (TypeScript demande une conversion de type, le SDK ne connaissant pas ce champ). Quand models est présent, il remplace model.
resp = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[{"role": "user", "content": "Bonjour"}],
extra_body={"models": ["anthropic/claude-sonnet-5", "openai/gpt-5.5", "google/gemini-3.1-pro"]},
)404 avec « is BYOK-only and you have no <provider> credential » ? L’étape 4 n’a pas été faite pour le fournisseur qui sert ce modèle. L’erreur nomme lequel — ou choisissez plutôt un modèle gratuit.