Le point d’accès principal, compatible OpenAI. Les corps de requête et de réponse suivent le format Chat Completions d’OpenAI ; les clients et trousses SDK existants fonctionnent sans adaptateur.
Paramètres
model— un identifiant du catalogue,auteur/modèle. Requis sauf simodelsest fourni.messages— la conversation, comme chez OpenAI.stream— événements diffusés par le serveur. Voir Diffusion en continu.max_completion_tokens(oumax_tokens) — un entier de 1 à 10 000 000 ; toute autre valeur est un 400 —temperature,top_p,top_k,stop,seedfrequency_penalty,presence_penalty,logit_bias,logprobs,top_logprobs;min_petrepetition_penaltylà où un hébergeur de modèles ouverts les prend en chargetools,tool_choice,parallel_tool_calls,response_format,reasoninguser— un identifiant stable pour votre utilisateur final, transmis au fournisseur pour l’attribution des abus.models— une chaîne de repli. Voir plus bas.provider— préférences d’acheminement. Voir Acheminement.
Le contenu d’un message est une chaîne ou une liste de parties — text, image_url, input_audio, file, video_url. Les appels d’outils et leurs résultats fonctionnent chez tous les fournisseurs, pas seulement ceux compatibles OpenAI. Si un point d’accès ne peut pas recevoir l’une de vos parties — de l’audio envoyé à Anthropic, par exemple — la requête passe au point d’accès suivant qui le peut, et échoue avec un 400 si aucun ne le peut.
n, store, service_tier et web_search_options.Repli entre modèles
Passez models au lieu de model pour donner une chaîne ordonnée. Si le premier ne peut être servi, le suivant est essayé, jusqu’à trois tentatives.
{
"models": [
"anthropic/claude-sonnet-5",
"openai/gpt-5.5",
"google/gemini-3.1-pro"
],
"messages": [{"role": "user", "content": "Bonjour"}]
}La chaîne est parcourue jusqu’au bout plutôt que réessayée une seule fois, et chaque tentative est consignée pour qu’un échec soit imputable après coup.
Réponse
{
"id": "gen-...",
"model": "anthropic/claude-sonnet-5",
"choices": [{
"index": 0,
"message": {"role": "assistant", "content": "Bonjour."},
"finish_reason": "stop",
"native_finish_reason": "end_turn"
}],
"usage": {"prompt_tokens": 9, "completion_tokens": 3, "total_tokens": 12}
}native_finish_reason est la valeur propre au fournisseur, conservée telle quelle à côté de la valeur normalisée. Les fournisseurs ne s’entendent pas sur ce que « stop » signifie, et effacer cette distinction ferait perdre une information dont vous pourriez avoir besoin.
Le décompte de jetons est celui du fournisseur, pas notre estimation. Vous êtes facturé sur ce qu’il a déclaré.
Attribution à une application
Envoyez HTTP-Referer avec l’URL de votre application et X-Title avec son nom, et chaque requête est enregistrée au nom de votre application. X-App-Title et X-OpenRouter-Title sont acceptés comme X-Title : un client déjà configuré pour un autre routeur n’a rien à changer.
curl -X POST https://autonomousrelay.com/v1/chat/completions \
-H "Authorization: Bearer $AUTONOMOUSRELAY_API_KEY" \
-H 'HTTP-Referer: https://myapp.example' \
-H 'X-Title: My App' \
-H 'content-type: application/json' \
-d '{"model": "anthropic/claude-sonnet-5", "messages": [{"role": "user", "content": "Hello"}]}'- Seuls le schéma, l’hôte et le chemin du référent sont conservés. La chaîne de requête et le fragment sont retirés avant tout enregistrement.
X-App-Visibility: hiddenrend l’application privée : elle n’apparaîtra jamais dans une liste publique d’applications. L’en-tête n’est lu qu’à la première requête de l’application.X-App-Categoriesaccepte jusqu’à deux catégories séparées par des virgules par requête, et une application en conserve jusqu’à dix.- Un référent
localhostou une adresse IP est enregistré sur la requête, mais ne crée pas d’application.
L’API Messages d’Anthropic
Réglez l’URL de base d’une trousse SDK d’Anthropic sur cet hôte et elle fonctionne telle quelle : la clé dans x-api-key, la requête et la réponse au format d’Anthropic, et la diffusion en continu selon ses événements. La requête passe par le même pipeline qu’une complétion de clavardage : acheminement, budgets, garde-fous, préréglages et outils serveur s’appliquent, et n’importe quel modèle peut répondre. Un nom Claude comme claude-opus-4-8 désigne anthropic/claude-opus-4.8 ; fallbacks accepte jusqu’à trois objets {"model": ...}. Les outils serveur propres à Anthropic sont refusés avec une erreur 400 : déclarez plutôt des outils autonomousrelay:*.
L’API Responses d’OpenAI
L’API Responses, diffusion en continu comprise, servie par le même pipeline qu’une complétion de clavardage et sur n’importe quel modèle. Elle est sans état : envoyez toute la conversation dans input. store: true, previous_response_id, conversation et background exigent une réponse enregistrée et sont refusés avec une erreur 400 qui le dit. Les outils de type fonction et les outils serveur autonomousrelay:* fonctionnent ; les outils intégrés d’OpenAI sont refusés.
Anciennes complétions de texte
Pour les clients qui l’appellent encore. Le prompt est envoyé comme un seul message utilisateur, acheminé comme n’importe quelle complétion de clavardage, et la réponse revient dans choices[0].text. Une invite par requête ; suffix, echo, best_of, n supérieur à 1 et logprobs exigent un vrai modèle de complétion et sont refusés avec une erreur 400.
Plongements
La requête et la réponse d’OpenAI. input est une chaîne ou une liste d’au plus 2 048 chaînes ; encoding_format vaut float ou base64 ; dimensions fonctionne là où le modèle peut raccourcir sa sortie. model, models et provider acheminent exactement comme ici, par les mêmes budgets, filtres de contenu et garde-fous, et la requête est facturée selon le nombre de jetons d’invite que déclare le fournisseur. Seuls les modèles de plongement sont candidats : nommer un modèle de clavardage donne une erreur 400 qui le dit.
Reclassement
Envoyez une query et jusqu’à 1 000 documents (des chaînes, ou {"text": ...}) ; chacun revient avec un relevance_score, du plus pertinent au moins pertinent. top_n limite la liste, return_documents inclut le texte, et instruction oriente la tâche sur les modèles qui l’acceptent. Acheminé et facturé comme les plongements. Les reclasseurs Qwen3 sont servis par DeepInfra.
Images
La requête et la réponse d’OpenAI : un prompt, jusqu’à 4 images (n) et une taille size comme 1024x1024. Les images reviennent en b64_json. Chacune est facturée au prix publié du modèle, par image ou par mégapixel de la taille, que la liste des points d’accès du modèle indique avec son unité. Un modèle dont le prix ne peut être calculé à partir de la requête n’est pas encore servi.
Audio
L’API audio d’OpenAI. La synthèse prend un texte input et renvoie l’audio, facturé au caractère ; chaque modèle a ses propres noms de voix voice. La transcription prend un fichier file en multipart d’au plus 25 Mo et renvoie son texte (json, verbose_json ou text), facturé à la seconde d’audio. Comme la réponse de synthèse est de l’audio, l’identifiant de la requête figure dans l’en-tête x-autonomous-relay-generation-id.
Lots
Jusqu’à 10 000 requêtes de clavardage, chacune {"custom_id": ..., "body": {...}}, exécutées par l’API de lot du fournisseur à son prix de lot, en moins de 24 heures, avec votre clé de fournisseur. Interrogez GET /v1/batches/:id ; une fois le lot terminé, GET /v1/batches/:id/results renvoie une ligne par requête. Le lot est facturé une seule fois, à sa fin, selon l’usage de ses requêtes. Tout modèle ayant une entrée :batch au catalogue, chez six fournisseurs ; API de lots donne le détail.
Examiner une requête après coup
Retourne les métadonnées d’une requête : quel point d’accès l’a servie, le nombre de jetons, la latence, le coût, la version de prix appliquée et l’application d’où elle provient. Jamais le contenu : ce point d’accès ne le retourne sous aucun réglage. Si votre organisation active la journalisation des requêtes — désactivée par défaut, et pas encore activable — le contenu conservé se lit à partir d’un point d’accès distinct.
Rétroaction
Associez une note à une requête faite par votre application, avec la même clé d’inférence, et voyez sur la page Activité quels modèles vos utilisateurs apprécient. value va de -1 (pouce vers le bas) à 1 (pouce vers le haut) ; ramenez une note plus fine dans cet intervalle. label est un identifiant court facultatif, comme helpful. Une nouvelle soumission avec la même clé remplace la note. Il n’y a pas de champ de commentaire : le texte libre est du contenu, et le contenu n’est pas conservé.
curl -X POST https://autonomousrelay.com/v1/generation/feedback \
-H "Authorization: Bearer $AUTONOMOUSRELAY_API_KEY" \
-H 'content-type: application/json' \
-d '{"id": "gen-...", "value": 1, "label": "helpful"}'GET /v1/generation/feedback?id=gen-... relit les notes ; l’identifiant d’une autre organisation donne une erreur 404.
Mise en cache
Une mémoire cache à correspondance exacte, désactivée par défaut et activée clé d’inférence par clé d’inférence, sert une requête répétée sans diffusion en continu avec x-cache: HIT, sans frais. Mémoire cache des réponses décrit ce qu’est une réponse en cache, ce qui n’est jamais mis en cache et la vue qu’en a l’organisation.