0. Conclusion express
La plateforme implémente l’endpoint OpenAI Responses API POST /v1/responses et sa conception répond précisément aux exigences de Codex (séquence d’événements SSE en flux, appel d’outils function, compatibilité sans état via store:false).
Codex CLI offre donc deux modes de connexion :
- Connexion directe (recommandée) : dans
~/.codex/config.toml, définissezwire_api = "responses", pour utiliser directement/v1/responses; - cc-switch : basculez le fournisseur de Codex / Claude Code etc. en un clic via l’outil graphique.
La facturation est strictement identique dans les deux cas (même pipeline pré-autorisation → routage → règlement → grand livre).
1. Prérequis
| Élément | Exigence |
|---|---|
| Codex CLI | Installé (v0.142.4+ recommandée, vérifiable avec codex --version) |
| Compte RouteAll | Inscrit, et une clé API créée dans Console → API Keys |
| Clé API | Préfixe sk-ra-, affichée une seule fois, copiez-la intégralement ; une clé unique fonctionne pour tous les modèles et endpoints |
| Solde | Approvisionné (facturation par token ; un solde insuffisant renvoie 402) |
| Nom du modèle | Nom canonique de la plateforme (voir §5.1, utilisez la sortie réelle de /v1/models) |
2. Capacités et limites côté plateforme (/v1/responses)
- Endpoint :
POST https://routeall.ai/v1/responses - Authentification :
Authorization: Bearer sk-ra-...
2.1 Supporté (compatibilité Codex)
| Fonctionnalité | Description |
|---|---|
| Entrée / sortie texte | À la fois JSON non flux et SSE en streaming |
| Appel d’outils function | Boucle agentic Codex : tools transmis en amont + événements de flux function_call + réinjection function_call_output |
| Streaming | Produit la séquence complète d’événements SSE Responses : response.created → output_item.added → output_text.delta → output_item.done → response.completed (les trois invariants requis par Codex sont respectés) |
reasoning.effort |
Transmis en tant que reasoning_effort |
| Tolérance des champs inconnus | Les champs store, include, text, metadata, etc. sont simplement ignorés, pas de 400 (compatibilité Codex) |
2.2 Limitations (sous-ensemble texte sans état)
| Champ | Comportement |
|---|---|
previous_response_id |
Ignoré — sans état ; Codex utilise store:false et envoie l’intégralité de l’input à chaque tour, naturellement compatible |
input_image |
Ignoré (les parties image ne bloquent pas la requête, seul le texte est traité) |
Outils intégrés (web_search, etc.) |
Ignorés — seuls les outils type: "function" sont transmis |
stream: true + input malformé |
400 (enveloppe d’erreur Responses) |
2.3 Facturation et erreurs
- Facturation : même pipeline que
/v1/chat/completionsexactement, les coûts constatés sont équivalents ; l’en-tête de réponseX-RouteAll-Charge-Creditindique le montant facturé au détail (pas le coût). - Enveloppe d’erreur :
{ "error": { "message", "type", "code", "param" } }; codes HTTP : 401 (clé absente/incorrecte), 402 (solde insuffisant), 429 (limite de débit), 400 (paramètres invalides), 503 (tous les fournisseurs en amont sont indisponibles).
3. Méthode 1 : connexion directe Codex CLI (Responses API, recommandée)
3.1 Configurer ~/.codex/config.toml
model = "deepseek-v4-pro" # Modèle par défaut, remplacez par le nom canonique de la place de marché
model_provider = "routeall"
[model_providers.routeall]
name = "RouteAll"
base_url = "https://routeall.ai/v1" # URL de base compatible OpenAI de la plateforme (sans /responses)
env_key = "ROUTEALL_API_KEY"
wire_api = "responses" # responses = utilise /v1/responses (recommandé)
3.2 Définir la variable d’environnement
# Linux / macOS
export ROUTEALL_API_KEY="sk-ra-votreCLE"
# Windows PowerShell
# $env:ROUTEALL_API_KEY = "sk-ra-votreCLE"
3.3 Lancement
codex
3.4 Changer de modèle temporairement
codex --model Codex-haiku-4-5 "refactorise ce module"
codex --model deepseek-v4-flash "explique cette expression régulière"
3.5 À propos de wire_api
| wire_api | Endpoint réel | Description |
|---|---|---|
responses |
POST /v1/responses |
Protocole Responses natif (protocole par défaut de Codex), streaming et appels d’outils supportés, recommandé |
chat |
POST /v1/chat/completions |
Forme compatible OpenAI ; la plateforme a assoupli le DTO (B15) pour accepter les appels multi-tours avec content:null |
Note : le sous-domaine
api.de la passerelle n’est pas exposé publiquement pour l’instant (variable serveurPUBLIC_API_DOMAIN=api.localhostinterne) ; les routes/v1/*sont servies directement par le site principalrouteall.ai, donc utilisezhttps://routeall.ai/v1comme base_url.
4. Méthode 2 : cc-switch (bascule graphique en un clic)
cc-switch est un outil de bascule de fournisseur open source (farion1231/cc-switch) qui permet de gérer les configurations de Codex / Claude Code / OpenCode / Gemini etc. et de basculer en un clic.
4.1 Installation
GitHub farion1231/cc-switch → Releases, téléchargez le paquet correspondant à votre système (Windows / macOS / Linux).
4.2 Ajouter un fournisseur
- Ouvrez cc-switch, allez dans l’onglet Codex → « Ajouter un fournisseur » ;
- Remplissez :
- Nom du fournisseur :
RouteAll(libre) - API Host / Base URL :
https://routeall.ai/v1 - API Key :
sk-ra-votreCLE - Liste des modèles : noms canoniques de la plateforme (ex.
deepseek-v4-pro,Codex-haiku-4-5, plusieurs lignes possibles)
- Nom du fournisseur :
- Enregistrez.
4.3 Appliquer le changement
Sélectionnez RouteAll → « Basculer / Activer ». cc-switch écrira la configuration du fournisseur dans ~/.codex/config.toml (équivalent à la configuration de la méthode 1), puis lancez codex normalement.
Remarque : certaines versions de cc-switch réécrivent le protocole de Codex en
/v1/chat/completions(c’est-à-direwire_api = "chat"). La plateforme prend en charge les deux chemins (B15 a corrigé l’erreur 400 des clients à base d’outils passant par chat) ; si votre version permet de choisir le protocole, privilégiez Responses, plus proche du natif.
5. Vérification
5.1 Récupérer la liste des modèles disponibles (fiez-vous à la liste, n’inventez pas les noms)
curl https://routeall.ai/v1/models \
-H "Authorization: Bearer sk-ra-votreCLE"
# ou répertoire public (pas d’authentification, liste uniquement les modèles avec canaux)
curl https://routeall.ai/v1/public/models
5.2 Appel non flux (vérifiez d’abord la connectivité)
curl https://routeall.ai/v1/responses \
-H "Authorization: Bearer sk-ra-votreCLE" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-pro",
"input": "Bonjour, présente-toi en une phrase",
"max_output_tokens": 200
}'
Une réponse au format Responses (output[].content[].output_text + output_text + usage) indique un succès.
5.3 Appel en streaming (comportement réel de Codex)
curl -N https://routeall.ai/v1/responses \
-H "Authorization: Bearer sk-ra-votreCLE" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-pro",
"input": "Raconte une blague courte",
"stream": true
}'
Séquence d’événements : response.created → output_item.added → output_text.delta ×N → output_item.done → response.completed.
5.4 Appel d’outils (boucle agentic)
curl https://routeall.ai/v1/responses \
-H "Authorization: Bearer sk-ra-votreCLE" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-pro",
"input": [{"role": "user", "content": "Calcule 17*23 pour moi"}],
"tools": [{
"type": "function",
"function": {
"name": "calculatrice",
"description": "Effectue les quatre opérations",
"parameters": {
"type": "object",
"properties": { "expr": { "type": "string" } }
}
}
}],
"tool_choice": "auto"
}'
output contiendra un élément de type function_call (call_id, name, arguments), après quoi vous pourrez envoyer un élément function_call_output pour réinjecter le résultat et continuer le dialogue.
6. Dépannage
| Symptôme | Cause et solution |
|---|---|
401 Unauthorized |
Clé incorrecte / copiée partiellement / désactivée. La clé n’est stockée qu’en sha256, elle n’apparaît plus en clair dans la console : copiez-la intégralement lors de la création |
402 Insufficient balance |
Solde insuffisant, rechargez depuis la Console (CNY / USD / USDT) |
429 Rate limited |
Limite de débit par clé (60 RPM par défaut, ajustable) ; réduisez la concurrence ou réessayez avec backoff exponentiel |
400 paramètre invalide |
Examinez error.message (ex. input Responses malformé, nom de modèle inexistant) |
503 erreur amont |
Tous les canaux du modèle sont indisponibles, changez de modèle ou réessayez plus tard |
| Modèle « inexistant / impossible à appeler » | Le nom doit être le nom canonique retourné par /v1/models et le modèle doit être actif + disposer d’un canal ; ne devinez pas le nom |
Codex affiche stream closed before response.completed |
Généralement une interruption réseau ; la passerelle assure une fermeture gracieuse (envoie tout de même completed), réessayez |
| Codex renvoie 413 Payload Too Large | La limite de taille du corps de requête a été relevée (correction pour les longs contextes Codex) ; si cela persiste, réduisez le contexte |
7. Facturation et consignes de sécurité
- Unité de facturation : prix officiel du modèle × coefficient du groupe d’utilisateurs ; le streaming est décompté sur la base de l’
usageréel ; les hits de cache sont facturés au prix fort (politique B12, la différence reste acquise à la plateforme, le client ne bénéficie pas de réduction). - Visibilité de la facturation : en-tête de réponse
X-RouteAll-Charge-Credit(montant facturé au détail) ; les champscost/marginne sont jamais exposés côté client (INV-8). - Sécurité des clés : le préfixe
sk-ra-n’est stocké qu’en sha256, invisible depuis la console ; ne l’intégrez jamais dans un client ou un dépôt. - Il est