Configuration de la clé API OpenCode AI — Paramètres compatibles OpenAI
Comment configurer OpenCode AI avec une clé API personnalisée d’APIMaster.ai. Ajoutez APIMaster comme fournisseur compatible OpenAI dans opencode.jsonc et accédez à Claude, GPT-5.5 et DeepSeek avec entrée d’image (Vision) et niveaux de raisonnement optionnels.
OpenCode Desktop est le client graphique d'OpenCode (actuellement en version bêta) : sessions d'agent locales, modifications de fichiers et exécution de shell. APIMaster.ai est compatible OpenAI — ajoutez-le sous Paramètres → Fournisseurs → Fournisseur personnalisé.
Obtenez votre clé API d'abord. Utilisez le placeholder
your_apimaster_keyci-dessous ; les captures d'écran masquent les vraies clés.
Prérequis
- OpenCode Desktop installé depuis opencode.ai/download.
- Windows :
opencode-desktop-win-x64.exe - macOS :
brew install --cask opencode-desktopou.dmg - Linux :
.deb/.rpm/ AppImage
- Windows :
- Clé API APIMaster depuis la console.
Étape 1 — Ouvrir les fournisseurs
- Lancez OpenCode Desktop et ouvrez un espace de travail.
- Cliquez sur l'icône d'engrenage (en bas à gauche).
- Sélectionnez Fournisseurs dans la barre latérale.
- Faites défiler jusqu'à Fournisseur personnalisé (Ajouter un fournisseur compatible OpenAI par URL de base).
- Cliquez sur + Connecter.

Étape 2 — Formulaire du fournisseur personnalisé
| Champ | Valeur |
|---|---|
| ID du fournisseur | apimaster |
| Nom d'affichage | APIMaster.ai |
| URL de base | https://apimaster.ai/v1 |
| Clé API | Votre clé APIMaster |

Laissez les en-têtes vides sauf si vous vous authentifiez uniquement via des en-têtes.
Étape 3 — Ajouter des modèles et soumettre
Sur l'écran suivant, associez les modèles (gauche = nom dans OpenCode, droite = identifiant du modèle envoyé à APIMaster — généralement identique) :
| Gauche | Droite |
|---|---|
gpt-5.4 |
gpt-5.4 |
claude-sonnet-4-6 |
claude-sonnet-4-6 |
- Cliquez sur + Ajouter un modèle pour plus de lignes.
- Cliquez sur Soumettre.

Choisissez les identifiants depuis le marketplace. Évitez les modèles réservés à la génération d'images (ex. gpt-image-2) pour les discussions d'agent.
Besoin de reconnaissance d'image (Vision) ?
gpt-5.5,claude-sonnet-4-6,claude-opus-4-7,claude-opus-4-8etclaude-haiku-4-5prennent en charge l'entrée d'image, mais OpenCode nécessite une déclaration de capacité supplémentaire — voir Activer l'entrée d'image pour GPT et Claude.
Étape 4 — Choisir un modèle
- Démarrez ou ouvrez une session.
- Ouvrez le menu déroulant des modèles sous la zone de saisie.
- Sous APIMaster.ai, sélectionnez un modèle (ex.
claude-sonnet-4-6).

Étape 5 — Tester
Envoyez hello ou une petite tâche de codage. Une réponse normale de l'assistant (modifications de fichiers / shell) signifie qu'APIMaster est connecté.

Avancé : opencode.jsonc et le raisonnement
Le flux d'interface ci-dessus suffit pour un démarrage rapide. Pour configurer les niveaux de Raisonnement / effort de réflexion (low, high, max, …) pour le même identifiant de modèle, modifiez opencode.jsonc.
Emplacement du fichier de configuration
| Système d'exploitation | Chemin |
|---|---|
| macOS / Linux | ~/.config/opencode/opencode.jsonc |
| Windows | C:\Users\<utilisateur>\.config\opencode\opencode.jsonc |
Créez le fichier s'il est manquant. Redémarrez OpenCode Desktop ou démarrez une nouvelle session après avoir enregistré.
Clé API (ne pas mettre dans jsonc)
Ne stockez pas votre clé API dans opencode.jsonc.
Utilisez :
/connectdans le terminal, ou- Paramètres → Fournisseurs → Connecter un fournisseur (identique aux étapes 1–2 ci-dessus).
Gardez les secrets dans le magasin d'authentification d'OpenCode ; jsonc définit uniquement le fournisseur, les modèles et les variantes de raisonnement.
Fournisseur APIMaster dans jsonc
Identifiant du fournisseur : apimaster. Paquet npm : @ai-sdk/openai-compatible.
baseURL doit être :
https://apimaster.ai/v1
Pas https://apimaster.ai/ — OpenCode ajoute /chat/completions. Sans /v1, vous obtenez https://apimaster.ai/chat/completions → 404 Non trouvé.
Ni
https://api.apimaster.ai/v1— l'hôte avec le préfixeapi.peut provoquer des échecs TLS / de connexion lors des tests. L'hôte correct esthttps://apimaster.ai/v1.
Exemple complet avec variantes de raisonnement — téléchargez et remplacez la configuration d'OpenCode :
- Téléchargez opencode.jsonc
- Remplacez (ou enregistrez sous) :
- macOS / Linux :
~/.config/opencode/opencode.jsonc - Windows :
C:\Users\<utilisateur>\.config\opencode\opencode.jsonc
- macOS / Linux :
- Configurez la clé API via
/connectou l'interface (jamais dans jsonc). - Redémarrez OpenCode Desktop ou démarrez une nouvelle session.
Sauvegardez votre fichier existant avant de le remplacer, ou fusionnez uniquement le bloc
provider.apimaster.
Structure minimale :
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"apimaster": {
"name": "APIMaster.ai",
"npm": "@ai-sdk/openai-compatible",
"options": { "baseURL": "https://apimaster.ai/v1" },
"models": {
"gpt-5.5": {
"name": "gpt-5.5",
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
},
"variants": {
"low": { "reasoningEffort": "low" },
"high": { "reasoningEffort": "high" }
}
}
}
}
}
}
Les champs
attachmentetmodalitiessurgpt-5.5ci-dessus activent l'entrée d'image (Vision) — voir Activer l'entrée d'image pour GPT et Claude. Omettez-les si vous n'avez besoin que du chat texte.
Principes de raisonnement
variants= plusieurs niveaux de raisonnement pour un seul identifiant de modèle dans l'interface.- Pour les API compatibles OpenAI, OpenCode mappe
reasoningEffort→reasoning_effortdans le corps de la requête. - Les noms de variantes doivent correspondre au paramètre réel (
high→"reasoningEffort": "high"). - Chaque modèle prend en charge différents niveaux — configurez selon la documentation officielle ; aucun remappage caché.
Niveaux de raisonnement par modèle
| Modèle | Variantes de raisonnement | Remarques |
|---|---|---|
gpt-5.4 |
low, medium, high, xhigh |
Raisonnement GPT |
gpt-5.5 |
low, medium, high, xhigh |
Raisonnement GPT |
deepseek-v4-flash |
high, max |
Réflexion DeepSeek (recommandé) |
deepseek-v4-pro |
high, max |
Réflexion DeepSeek (recommandé) |
claude-sonnet-4-6 |
low, medium, high, max |
Effort Claude Sonnet |
claude-opus-4-7 |
low, medium, high, xhigh, max |
Effort Claude Opus |
claude-opus-4-8 |
low, medium, high, xhigh, max |
Effort Claude Opus |
claude-haiku-4-5 |
aucun | Aucun niveau d'effort non confirmé |
minimax-m3 |
aucun | Aucun niveau d'effort non confirmé |
Voir opencode.jsonc pour le fichier complet.
Changer le raisonnement dans OpenCode
- Enregistrez
opencode.jsonc, puis redémarrez ou nouvelle session. - Utilisez le menu déroulant du modèle / raisonnement (ex.
gpt-5.4 / high). - Si pris en charge dans votre build :
Ctrl + Shift + Dparcourt les niveaux de raisonnement.
Activer l'entrée d'image pour GPT et Claude
Les modèles APIMaster.ai tels que gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8 et claude-haiku-4-5 prennent en charge l'entrée d'image / Vision — lecture de captures d'écran, photos, graphiques pour reconnaissance, description, OCR, ou codage à partir d'une image.
Un modèle qui prend en charge les images ≠ OpenCode qui envoie l'image. Même si le modèle APIMaster.ai prend lui-même en charge la vision, vous devez déclarer la capacité dans
opencode.jsonc. Sinon, OpenCode risque de ne pas envoyer l'image comme entrée multimodale — il place simplement le nom de la pièce jointe / du fichier dans le prompt, et le modèle répond quelque chose comme « le modèle actuel ne prend pas en charge l'entrée d'image ».
Les deux champs à déclarer
Pour chaque modèle que vous souhaitez utiliser avec des images, ajoutez :
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
}
attachment: trueindique à OpenCode que ce modèle accepte les pièces jointes.modalities.inputcontenant"image"indique à OpenCode que ce modèle prend en charge l'entrée d'image, de sorte qu'OpenCode convertit l'image en contenu multimodalimage_url.
Exemple complet (GPT et Claude)
Téléchargez opencode.jsonc (champs déjà inclus), ou fusionnez le bloc provider.apimaster ci-dessous dans votre configuration existante :
{
"$schema": "https://opencode.ai/config.json",
"disabled_providers": [],
"provider": {
"apimaster": {
"name": "APIMaster.ai",
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://apimaster.ai/v1"
},
"models": {
"gpt-5.5": {
"name": "gpt-5.5",
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
},
"variants": {
"low": { "reasoningEffort": "low" },
"medium": { "reasoningEffort": "medium" },
"high": { "reasoningEffort": "high" },
"xhigh": { "reasoningEffort": "xhigh" }
}
},
"claude-sonnet-4-6": {
"name": "claude-sonnet-4-6",
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
},
"variants": {
"low": { "reasoningEffort": "low" },
"medium": { "reasoningEffort": "medium" },
"high": { "reasoningEffort": "high" },
"max": { "reasoningEffort": "max" }
}
},
"claude-opus-4-7": {
"name": "claude-opus-4-7",
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
},
"variants": {
"low": { "reasoningEffort": "low" },
"medium": { "reasoningEffort": "medium" },
"high": { "reasoningEffort": "high" },
"xhigh": { "reasoningEffort": "xhigh" },
"max": { "reasoningEffort": "max" }
}
},
"claude-opus-4-8": {
"name": "claude-opus-4-8",
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
},
"variants": {
"low": { "reasoningEffort": "low" },
"medium": { "reasoningEffort": "medium" },
"high": { "reasoningEffort": "high" },
"xhigh": { "reasoningEffort": "xhigh" },
"max": { "reasoningEffort": "max" }
}
},
"claude-haiku-4-5": {
"name": "claude-haiku-4-5",
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
}
}
}
}
}
}
Remarques :
- Pour activer l'entrée d'image uniquement pour
gpt-5.5, ajoutezattachmentetmodalitiesàgpt-5.5seul ; laissez les autres inchangés. - Pour n'activer que Claude, ajoutez ces champs uniquement aux modèles Claude.
- Conservez les variantes de raisonnement existantes de chaque modèle (
low/medium/high/xhigh/max) — les champs d'image et le raisonnement n'entrent pas en conflit. - Après avoir modifié
opencode.jsonc, quittez complètement et redémarrez OpenCode, ou au moins démarrez une nouvelle session, afin que la configuration soit rechargée. - Ne mettez jamais la clé API dans ce fichier — configurez-la via
/connectou l'interface (voir Sécurité ci-dessous).
Source de l'image : privilégiez l'upload local / base64
- Recommandé : téléchargez un PNG / JPG local dans OpenCode. Idéalement, OpenCode le convertit en une URL de données base64 (
data:image/png;base64,...) avant de l'envoyer à APIMaster — c'est le chemin vérifié qui fonctionne. - Passer directement une URL d'image publique peut échouer. APIMaster / l'amont peut échouer à télécharger une image publique en raison du réseau, du format, de la taille, du MIME ou de la protection anti-hotlink, renvoyant :
Dans ce cas, utilisez une URL de données base64 ou un upload local au lieu de compter sur le côté modèle pour télécharger une URL publique.Error while downloading file. Upstream status code: 400.
Tester que la reconnaissance d'image fonctionne
Option A — Tester dans OpenCode
- Passez à
apimaster/gpt-5.5ouapimaster/claude-sonnet-4-6dans le menu déroulant des modèles. - Téléchargez une image PNG / JPG.
- Tapez :
Describe the main content of this image.
- Avec une configuration correcte, le modèle devrait décrire le contenu de l'image.
- Si le modèle ne mentionne qu'un nom de fichier / de pièce jointe, ou répond « image input not supported », OpenCode n'envoie probablement pas le contenu de l'image — vérifiez les champs
attachmentetmodalitiesdu modèle et redémarrez OpenCode.
Option B — Tester directement via l'API
Utile pour distinguer un problème de modèle APIMaster d'un problème d'adaptateur OpenCode. Ne codez jamais en dur une vraie clé — utilisez une variable d'environnement.
Linux / macOS :
export APIMASTER_API_KEY="your APIMaster API key"
curl https://apimaster.ai/v1/chat/completions \
-H "Authorization: Bearer $APIMASTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.5",
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "Describe this image." },
{
"type": "image_url",
"image_url": {
"url": "data:image/png;base64,YOUR_IMAGE_BASE64"
}
}
]
}
],
"max_tokens": 1000
}'
Remplacez model par claude-sonnet-4-6 pour tester Claude de la même manière (HTTP 200 vérifié avec reconnaissance d'image).
Windows PowerShell :
$env:APIMASTER_API_KEY = "your APIMaster API key"
# Convert a local image to base64, put it into image_url.url as data:image/png;base64,...
# Then call https://apimaster.ai/v1/chat/completions with the same JSON body.
Une réponse 200 qui décrit l'image signifie que l'entrée d'image fonctionne côté APIMaster ; si OpenCode échoue toujours, le problème vient de la config
attachment/modalitiesd'OpenCode ou d'un redémarrage manquant.
Dépannage
Configuration via l'interface
| Problème | Solution |
|---|---|
| 401 | Vérifiez la clé ; faites-la pivoter si elle a été exposée |
| Modèle introuvable | L'URL de base doit être https://apimaster.ai/v1 ; l'identifiant du modèle doit correspondre au marketplace |
| Aucun modèle APIMaster | Modifiez le fournisseur dans Paramètres → ajoutez des correspondances → Soumettre |
| Lent / délai d'attente | Essayez un autre modèle ; utilisez Testeur de clé API |
Raisonnement / jsonc
Pourquoi seulement high et max pour DeepSeek ?
L'effort de réflexion officiel compatible OpenAI pour DeepSeek est high et max. Évitez low / medium / xhigh qui seraient remappés de manière imprévisible.
Pourquoi max pour Claude Sonnet et pas xhigh ?
Le niveau le plus élevé de Sonnet est max ; xhigh est pour Opus (claude-opus-4-7 / claude-opus-4-8).
Pourquoi aucune variante pour Haiku ou MiniMax M3 ?
Sans valeurs documentées de reasoningEffort, ignorez les variantes — le modèle fonctionne toujours ; l'interface n'affichera simplement pas les sous-niveaux de raisonnement.
Toujours une erreur 400 ?
baseURL=https://apimaster.ai/v1(pas la racine du site).- L'orthographe de l'identifiant du modèle correspond au marketplace.
- Clé configurée via
/connectou l'interface. - Supprimez temporairement les
variants— si les requêtes simples fonctionnent, lereasoning_effortchoisi n'est peut-être pas pris en charge pour ce modèle.
Entrée d'image / Vision
Pourquoi OpenCode dit-il « le modèle actuel ne prend pas en charge l'entrée d'image » ?
- Les modèles
gpt-5.5et plusieurs modèles Claude d'APIMaster.ai prennent bien en charge l'entrée d'image ; ce message signifie généralement qu'OpenCode n'envoie pas l'image comme entrée multimodale. - Vérifiez que le modèle dans
opencode.jsonca :"attachment": true, "modalities": { "input": ["text", "image"], "output": ["text"] } - Confirmez que vous avez redémarré OpenCode après la modification.
- Confirmez que
baseURLesthttps://apimaster.ai/v1. - Confirmez que la clé API APIMaster est valide.
- Si une URL d'image publique échoue, utilisez une URL de données base64 ou un upload local.
Pourquoi le modèle ne voit-il que le nom de la pièce jointe, pas l'image ?
- Généralement, OpenCode n'a pas lu et converti la pièce jointe en entrée d'image — il a simplement placé le nom du fichier / de la pièce jointe dans le prompt.
- Activez
attachment: trueetmodalities.input: ["text", "image"], et utilisez un modèle qui prend en charge l'entrée d'image.
Pourquoi une URL d'image publique génère-t-elle une erreur ?
- APIMaster ou l'amont peut être limité par le réseau, le format, la taille du fichier, le MIME, la protection anti-hotlink ou le proxy lors du téléchargement d'une image publique.
- Sur
Error while downloading file. Upstream status code: 400., passez à une URL de données base64.
Toujours pas fonctionnel après avoir ajouté attachment ?
- Quittez complètement et redémarrez OpenCode.
- Démarrez une nouvelle session pour tester.
- Confirmez que le modèle actif de la session est celui que vous avez configuré avec les champs d'image.
- Confirmez que la clé API est valide.
- Vérifiez les journaux d'OpenCode pour des erreurs 401 / 400 / unsupported image / invalid content type.
- Utilisez Option B — Tester directement via l'API avec une image base64 pour distinguer un problème de modèle APIMaster d'un problème d'adaptateur OpenCode.
Sécurité
- Ne mettez pas la clé API APIMaster dans
opencode.jsonc; ce fichier ne contient que le fournisseur, les modèles, les capacités d'image et le raisonnement. - Ne collez pas la clé dans les discussions, les captures d'écran, les issues, la documentation publique ou les dépôts de code.
- Faites pivoter les clés apparues dans des captures d'écran ou des journaux — révoquez et régénérez dans la console, puis mettez à jour le fournisseur dans OpenCode.
- Privilégiez le flux
/connectd'OpenCode, les variables d'environnement ou le stockage local des identifiants pour gérer la clé API. - OpenCode peut lire/écrire des fichiers et exécuter des commandes shell — utilisez uniquement des espaces de travail de confiance.
Liste de contrôle
- OpenCode Desktop installé
- Fournisseur personnalisé connecté ou
apimasterdansopencode.jsonc - URL de base /
baseURL=https://apimaster.ai/v1(pashttps://apimaster.ai/) - Clé API via
/connectou l'interface (pas dans jsonc) - Au moins un modèle de chat associé
- (Optionnel) Variantes de raisonnement correspondant aux niveaux officiels
- Un message de test réussi
Liste de contrôle pour l'entrée d'image
-
baseURLesthttps://apimaster.ai/v1(pashttps://api.apimaster.ai/v1) - Utilisation d'un modèle compatible vision, ex.
gpt-5.5ou un modèle Claude compatible Vision - Le modèle a
attachment: true - Le
modalities.inputdu modèle contient"image" - OpenCode redémarré après la modification de
opencode.jsonc - La clé API est valide
- L'image de test est dans un format courant (PNG / JPG)
- Si une URL d'image publique échoue, essayé une URL de données base64
Résumé
- Clés :
baseURL(https://apimaster.ai/v1), identifiant du modèle, clé API (/connectou interface), variantes de raisonnement optionnelles. - Les noms des variantes = valeurs réelles de
reasoning_effort. - Configurez les niveaux par modèle ; ignorez les variantes lorsqu'elles ne sont pas prises en charge (Haiku, MiniMax M3).