APIMaster.ai

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_key ci-dessous ; les captures d'écran masquent les vraies clés.


Prérequis

  1. OpenCode Desktop installé depuis opencode.ai/download.
    • Windows : opencode-desktop-win-x64.exe
    • macOS : brew install --cask opencode-desktop ou .dmg
    • Linux : .deb / .rpm / AppImage
  2. Clé API APIMaster depuis la console.

Étape 1 — Ouvrir les fournisseurs

  1. Lancez OpenCode Desktop et ouvrez un espace de travail.
  2. Cliquez sur l'icône d'engrenage (en bas à gauche).
  3. Sélectionnez Fournisseurs dans la barre latérale.
  4. Faites défiler jusqu'à Fournisseur personnalisé (Ajouter un fournisseur compatible OpenAI par URL de base).
  5. Cliquez sur + Connecter.

Paramètres → Fournisseurs → Fournisseur personnalisé


É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

Formulaire du fournisseur personnalisé

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
  1. Cliquez sur + Ajouter un modèle pour plus de lignes.
  2. Cliquez sur Soumettre.

Ajouter des modèles et 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-8 et claude-haiku-4-5 prennent 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

  1. Démarrez ou ouvrez une session.
  2. Ouvrez le menu déroulant des modèles sous la zone de saisie.
  3. Sous APIMaster.ai, sélectionnez un modèle (ex. claude-sonnet-4-6).

Sélecteur de modèle


É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é.

Test du chat


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 :

  • /connect dans 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/completions404 Non trouvé.

Ni https://api.apimaster.ai/v1 — l'hôte avec le préfixe api. peut provoquer des échecs TLS / de connexion lors des tests. L'hôte correct est https://apimaster.ai/v1.

Exemple complet avec variantes de raisonnement — téléchargez et remplacez la configuration d'OpenCode :

  1. Téléchargez opencode.jsonc
  2. Remplacez (ou enregistrez sous) :
    • macOS / Linux : ~/.config/opencode/opencode.jsonc
    • Windows : C:\Users\<utilisateur>\.config\opencode\opencode.jsonc
  3. Configurez la clé API via /connect ou l'interface (jamais dans jsonc).
  4. 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 attachment et modalities sur gpt-5.5 ci-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 reasoningEffortreasoning_effort dans 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

  1. Enregistrez opencode.jsonc, puis redémarrez ou nouvelle session.
  2. Utilisez le menu déroulant du modèle / raisonnement (ex. gpt-5.4 / high).
  3. Si pris en charge dans votre build : Ctrl + Shift + D parcourt 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: true indique à OpenCode que ce modèle accepte les pièces jointes.
  • modalities.input contenant "image" indique à OpenCode que ce modèle prend en charge l'entrée d'image, de sorte qu'OpenCode convertit l'image en contenu multimodal image_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, ajoutez attachment et modalities à gpt-5.5 seul ; 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 /connect ou 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 :
    Error while downloading file. Upstream status code: 400.
    
    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.

Tester que la reconnaissance d'image fonctionne

Option A — Tester dans OpenCode

  1. Passez à apimaster/gpt-5.5 ou apimaster/claude-sonnet-4-6 dans le menu déroulant des modèles.
  2. Téléchargez une image PNG / JPG.
  3. 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 attachment et modalities du 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 / modalities d'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 ?

  1. baseURL = https://apimaster.ai/v1 (pas la racine du site).
  2. L'orthographe de l'identifiant du modèle correspond au marketplace.
  3. Clé configurée via /connect ou l'interface.
  4. Supprimez temporairement les variants — si les requêtes simples fonctionnent, le reasoning_effort choisi 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.5 et 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.jsonc a :
    "attachment": true,
    "modalities": {
      "input": ["text", "image"],
      "output": ["text"]
    }
    
  • Confirmez que vous avez redémarré OpenCode après la modification.
  • Confirmez que baseURL est https://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: true et modalities.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 ?

  1. Quittez complètement et redémarrez OpenCode.
  2. Démarrez une nouvelle session pour tester.
  3. Confirmez que le modèle actif de la session est celui que vous avez configuré avec les champs d'image.
  4. Confirmez que la clé API est valide.
  5. Vérifiez les journaux d'OpenCode pour des erreurs 401 / 400 / unsupported image / invalid content type.
  6. 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 /connect d'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 apimaster dans opencode.jsonc
  • URL de base / baseURL = https://apimaster.ai/v1 (pas https://apimaster.ai/)
  • Clé API via /connect ou 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

  • baseURL est https://apimaster.ai/v1 (pas https://api.apimaster.ai/v1)
  • Utilisation d'un modèle compatible vision, ex. gpt-5.5 ou un modèle Claude compatible Vision
  • Le modèle a attachment: true
  • Le modalities.input du 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 (/connect ou 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).

Voir aussi