MiniMax retirera M2.5 et M2.7 le 18 novembre 2026, et la transition a déjà commencé. Depuis le 19 octobre, ces deux anciennes familles ne sont plus accessibles aux nouveaux utilisateurs, et les requêtes avec forfait qui les désignent sont servies par M3.1 Flash. Si vous êtes en paiement à l’usage, vous avez quatre semaines pour modifier vous-même l’ID du modèle.
La plupart du code M2.7 fonctionne sur M3.1 Flash sans modification. Le problème vient d’un choix de conception : M3.1 Flash réfléchit toujours, et au niveau le plus élevé, sauf indication contraire. Cela entraîne une erreur bien visible, quelques hausses de coûts discrètes et deux paramètres qui ne font désormais plus rien.
AIHubMix a fait passer toutes les requêtes de cet article par sa passerelle le 19 octobre 2026, avec minimax-m3.1-flash. Les textes d’erreur sont copiés des réponses obtenues. Les règles de MiniMax sont citées à partir de sa documentation API.
Qui est concerné et comment
| Vous utilisez M2.5/M2.7 via | Ce qui se passe | Échéance |
|---|---|---|
| Forfait MiniMax M / Token Plan | Les requêtes sont servies par M3.1 Flash sous l’ancien nom | C’est déjà fait (19 oct.) |
| MiniMax en paiement à l’usage | Les anciens ID continuent de fonctionner, puis cessent | 18 nov. 2026 |
| Nouveau compte MiniMax | M2.5/M2.7 indisponibles | 19 oct. 2026 |
La page des modèles de MiniMax précise ceci pour les utilisateurs avec forfait : « toutes les requêtes vers les modèles M2.5 et M2.7 dans le cadre de ces forfaits seront automatiquement acheminées vers M3.1 Flash Preview », et « les noms de modèles existants continueront de fonctionner ». Pour les utilisateurs en paiement à l’usage : « Une fois ces modèles retirés, les requêtes API qui leur sont adressées ne fonctionneront plus. » L’avis ne mentionne aucune redirection automatique pour le paiement à l’usage ; attendez-vous donc à des erreurs plutôt qu’à un basculement de secours.
Les utilisateurs avec forfait doivent bien comprendre ce que signifie « acheminées ». Vos journaux indiquent toujours M2.7, mais les poids sont différents, le contexte est 5× plus grand et la profondeur de réflexion est définie par défaut sur max. Considérez qu’il s’agit d’un changement de modèle et relancez vos évaluations.
Les erreurs bien visibles
400 : « requires adaptive thinking »
Ce que vous verrez. Une requête qui désactive la réflexion est rejetée :
{"error": {"message": "invalid params, model \"MiniMax-M3.1-Flash\" requires adaptive thinking; thinking.type=\"disabled\" (including reasoning.effort=none) is not allowed (2013) (tid: …)", "type": "bad_request_error", "param": "", "code": null}}
Pourquoi. La référence de l’API Messages de MiniMax indique que le modèle « réfléchit toujours » : si thinking.type est envoyé, sa valeur doit être adaptive, et disabled renvoie une erreur HTTP 400. Du code écrit pour M3 peut être concerné, puisque M3 permet de désactiver la réflexion. Les frameworks qui considèrent le modèle comme non raisonneur et envoient « thinking off » par défaut rencontrent cette erreur à chaque appel ; les projets kodus-ai et 9router-go ont tous deux signalé des cas similaires.
Requête minimale qui déclenche l’erreur (Chat Completions sur AIHubMix) :
curl https://aihubmix.com/v1/chat/completions \
-H "Authorization: Bearer $AIHUBMIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "minimax-m3.1-flash",
"messages": [{"role": "user", "content": "hi"}],
"thinking": {"type": "disabled"}}'
Correction. Supprimez le champ thinking, ou définissez-le sur {"type": "adaptive"}. Si vous désactiviez la réflexion pour gagner du temps, utilisez plutôt "reasoning_effort": "low".
Erreur 400 avec le même code 2013 sur les URL d’images
Ce que vous verrez. invalid param: remote returned status 400 (2013). Nous avons obtenu ce message avec une URL d’image hébergée sur upload.wikimedia.org. La même requête avec une image en base64, ou avec une URL d’image provenant d’un autre hébergeur, a renvoyé le code 200.
Pourquoi. Le code 2013 est le code générique de MiniMax pour « paramètres invalides », et non un code spécifique à la réflexion. Ici, il semble que le serveur en amont n’ait pas pu récupérer l’image distante. C’est notre interprétation du message ; MiniMax ne documente pas ce cas.
Correction. Envoyez les images en base64 (data:image/png;base64,…), ou hébergez-les sur un serveur qui accepte les requêtes HTTP simples. Lorsque vous recherchez le code 2013 dans vos journaux, lisez le message complet avant de conclure qu’il s’agit de l’erreur de réflexion.
Après le 18 novembre : ID de modèles retirés
À cette date, les appels en paiement à l’usage vers MiniMax-M2.5, MiniMax-M2.5-highspeed, MiniMax-M2.7 et MiniMax-M2.7-highspeed sur l’API de MiniMax cesseront de fonctionner. M2.1 et M2 ne figurent pas dans l’avis. Modifiez l’ID du modèle avant cette date. Sur AIHubMix, le nouvel ID est minimax-m3.1-flash.
Les problèmes qui passent inaperçus
Toutes ces requêtes renvoient le code 200. La différence se voit sur votre facture, votre latence ou vos résultats.
1. Les paramètres « réflexion désactivée » qui ne font désormais plus rien
Via AIHubMix, trois façons de demander la désactivation de la réflexion sont acceptées sans erreur, mais le modèle réfléchit quand même :
| Requête | Résultat sur AIHubMix |
|---|---|
| API Messages, réflexion désactivée | 200 ; 469–622 jetons de réflexion pour une courte énigme |
| Chat, reasoning_effort none | 200 ; 265–372 jetons de raisonnement pour la même énigme |
| Chat, reasoning_effort minimal | 200 ; le modèle réfléchit toujours |
Les deux premières lignes correspondent chacune à trois essais sur la même énigme logique à trois cases, pour laquelle low a utilisé 173–251 jetons de raisonnement. Le test avec minimal correspond à un seul essai sur une question d’arithmétique d’une ligne.
Seul Chat Completions avec thinking: {"type": "disabled"} produit l’erreur 400 décrite plus haut. Si votre code M2.x ou M3 s’appuyait sur l’un de ces paramètres pour accélérer les appels, ceux-ci se mettent désormais à réfléchir en silence. Le seul véritable levier est le niveau d’effort, dont le niveau le plus bas est low.
2. Le niveau d’effort par défaut est max
M2.7 ne proposait aucun niveau de réflexion. M3.1 Flash en propose cinq, et la documentation de MiniMax indique que si le champ est omis, sa valeur est max. Pour la correction de deux bogues mineurs dans une fonction Python, AIHubMix a mesuré :
| Paramètre | Moyenne des jetons de raisonnement | Durée moyenne | Coût moyen par correction |
|---|---|---|---|
| Niveau d’effort omis | 6,364 | 56 s | $0.0045 |
| Niveau d’effort low | 591 | 9.5 s | $0.0006 |
Tous les essais avec les deux paramètres ont réussi les 215 tests cachés. Les coûts sont calculés avec les tarifs d’AIHubMix, soit $0.165 par million de jetons en entrée et $0.66 en sortie, sur trois essais chacun. Si vous migrez sans ajouter de paramètre d’effort, la même tâche prend environ 6× plus de temps. La mesure complète des cinq niveaux figure dans l’article de cette série consacré au niveau d’effort.
3. La réflexion consomme max_tokens
Les jetons de réflexion sont comptabilisés dans max_tokens. Le code M2.x fixe souvent des limites basses pour les réponses courtes. Avec max_tokens: 64 et une question en deux phrases, le modèle a consommé tout le budget en réfléchissant, puis a renvoyé finish_reason: "length" et la réponse « La lumière du soleil contient de nombreuses couleurs », tronquée au milieu de la phrase. MiniMax recommande 131,072 et autorise jusqu’à 524,288. Augmentez les limites basses, ou vérifiez finish_reason avant de faire confiance au texte.
4. La mise en cache et les niveaux de service ont changé
cache_controln’est pas pris en charge sur M3.1 Flash (ni sur M3), selon la référence API de MiniMax. M2.7 facturait les écritures explicites dans le cache $0.375 par million. Sur M3.1 Flash, la mise en cache est automatique. AIHubMix facture les lectures du cache $0.0165 par million, et environ 175–195 jetons de prompt provenant du cache ont été servis pour chaque requête envoyée, même la première. Cela semble correspondre à un préambule fixe côté MiniMax ; à ce tarif, cela revient à environ un tiers de cent pour mille requêtes. Supprimez les blocscache_control: ils ne servent à rien ici.service_tiern’est pas pris en charge. Si vous utilisiez le niveau Priority de M3 pour réduire la latence, il n’existe pas d’équivalent sur Flash.
5. Même nom, échantillonnage différent
Les valeurs par défaut de MiniMax sont passées de top_p 0.9 sur M2.x à 0.95 sur M3.1 Flash, et la fenêtre de contexte est passée de 204,800 à 1,000,000 jetons. Les prompts réglés pour M2.7 peuvent produire des réponses plus longues ou moins précises. Un modèle différent se cache toujours derrière un nom inchangé : relancez vos évaluations.
Règles de facturation faciles à manquer
- La réflexion est facturée comme de la sortie. Sur AIHubMix, cela revient à $0.66 par million. Au niveau d’effort par défaut, la réflexion représentait 95% de la sortie pour notre correction de bogue (6,364 sur 6,673 jetons).
- MiniMax n’a pas encore communiqué de tarif officiel par jeton. Sa page de tarification indique M3 et M2.x, mais pas M3.1 Flash. AIHubMix facture $0.165 / $0.66 / $0.0165 (entrée / sortie / lecture du cache).
- Le prix officiel de M3 double au-delà de 512K jetons en entrée. AIHubMix affiche un tarif unique pour M3.1 Flash. Si vous envoyez des prompts très longs, comparez votre première facture à votre propre estimation.
Mesures pour réduire la facture :
- Définissez
reasoning_effort: "low"(Chat),output_config.effort: "low"(Messages) oureasoning.effort: "low"(Responses) comme valeur par défaut, et augmentez le niveau pour certaines tâches. - Placez les instructions stables au début du prompt afin que la mise en cache automatique puisse les réutiliser.
- Définissez
max_tokensà une valeur suffisamment élevée pour que la réflexion ne tronque pas la réponse, car devoir relancer une requête pour obtenir une réponse tronquée coûte plus cher que de prévoir une marge supplémentaire.
Agents disposant de véritables permissions
Trois comportements comptent lorsque le modèle peut exécuter des commandes ou modifier des fichiers :
- Il raisonne toujours avant d’agir, même avec le niveau
low. Cela l’aide à choisir les outils. Mais chaque étape avec un outil ajoute un délai de réflexion ; pour nos courts appels d’outils, une étape prenait environ 2 à 7 secondes aveclow. - Il exécute vos consignes au pied de la lettre. Un des premiers testeurs l’a qualifié d’« incroyablement rapide, mais il a besoin d’instructions claires et précises, sinon il est trop paresseux ». Donnez aux agents des conditions d’arrêt explicites et des étapes de vérification (« exécute les tests et colle leur résultat »), plutôt que des objectifs ouverts.
tool_choicene prend officiellement en charge queauto. AIHubMix a accepté"required"(Chat) et{"type": "any"}(Messages), et le modèle a bien appelé l’outil, mais MiniMax ne documente pas la possibilité de forcer ce comportement. N’en faites pas un contrôle de sécurité.
MiniMax indique qu’il faut renvoyer les blocs de réflexion sans modification lors des tours suivants (Messages) et conserver reasoning_content intact (Chat). Dans notre test, un bref aller-retour avec un outil fonctionnait encore après suppression du bloc de réflexion, mais suivez la règle documentée dans les longues boucles d’agent.
Outils de programmation
AIHubMix propose minimax-m3.1-flash avec les trois protocoles requis par les outils de programmation courants. Chacun a été testé le 19 octobre avec du texte, un appel d’outil et un échange de résultat d’outil.
| Outil | Protocole requis | Fonctionne via AIHubMix | Champ d’effort |
|---|---|---|---|
| Claude Code | Anthropic Messages | Oui | output_config.effort |
| Codex CLI | OpenAI Responses | Oui | reasoning.effort |
| OpenCode | Compatible OpenAI | Oui | reasoning_effort |
La fenêtre de contexte est de 1,000,000 sur l’API de MiniMax. MiniMax Code limite par défaut son client à 512K « pour trouver un équilibre entre expérience et coût », selon la citation par un mainteneur d’un passage de la documentation de MiniMax dans le projet magpie ; l’API ne comporte aucun paramètre de fenêtre.
Claude Code. Configurez-le pour utiliser AIHubMix comme indiqué dans le guide Claude Code d’AIHubMix, puis définissez le modèle sur minimax-m3.1-flash :
export ANTHROPIC_BASE_URL="https://aihubmix.com"
export ANTHROPIC_AUTH_TOKEN="$AIHUBMIX_API_KEY"
export ANTHROPIC_MODEL="minimax-m3.1-flash"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="minimax-m3.1-flash" # background tasks too
Les deux formes de réflexion envoyées par les clients de type Anthropic, enabled avec un budget et adaptive, ont toutes deux renvoyé un code 200 lors de nos tests : vous ne rencontrerez donc pas l’erreur 400. Problème connu : la documentation ne précise pas si le paramètre d’effort de Claude Code est transmis à un modèle non-Claude sous la forme output_config.effort. Si ce n’est pas le cas, le modèle utilise sa valeur par défaut, max, et les tours seront plus lents qu’avec M2.7. Le test rapide ci-dessous vous montre comment le vérifier.
Codex CLI. Codex utilise l’API Responses, qui fonctionne avec ce modèle : les appels de fonction sont renvoyés sous forme d’éléments function_call. Configurez un fournisseur personnalisé comme indiqué dans le guide AIHubMix pour Codex, avec wire_api = "responses", puis définissez model = "minimax-m3.1-flash" et model_reasoning_effort. xhigh et minimal ont tous deux été acceptés ; minimal ne fait pas partie des niveaux de MiniMax, et le modèle réfléchit tout de même.
OpenCode. Le ticket OpenCode #54801 (reproduit sur la v2.0.27) signale qu’OpenCode ne trouve aucune variante de niveau d’effort pour ce modèle, si bien que ctrl+t ne fait rien. La solution de contournement proposée dans le ticket consiste à déclarer vous-même les cinq variantes dans opencode.json. Avec le fournisseur compatible OpenAI d’AIHubMix, le champ de requête à définir pour chaque variante est reasoning_effort (low … max), et non output_config.effort comme indiqué dans le ticket. N’ajoutez pas de variante none.
Un test rapide de 15 minutes pour chacun des trois outils :
- Créez un dossier temporaire contenant une fonction avec un bogue connu et un fichier de test qui échoue à cause de ce bogue.
- Demandez à l’agent : « Lance les tests, corrige le bogue, relance les tests et montre-moi le résultat. »
- Voici à quoi ressemble une exécution réussie : l’agent lance les tests avant et après la correction, la dernière exécution réussit, il termine en quelques tours et aucun tour ne renvoie de code 400.
- Consultez le journal d’utilisation d’AIHubMix. Vous devriez y voir des requêtes
minimax-m3.1-flashavec des jetons de réflexion. Si chaque tour dure près d’une minute, votre paramètre d’effort n’est pas transmis au modèle, qui utilise alorsmax.
Liste de vérification pour la migration
- Remplacez les identifiants MiniMax-M2.5 / M2.7 par minimax-m3.1-flash (sur AIHubMix) avant le 18 novembre.
- Supprimez des requêtes thinking disabled, effort none et effort minimal.
- Ajoutez un niveau d’effort explicite à chaque requête ; commencez par low.
- Augmentez max_tokens pour éviter que la réflexion tronque les réponses ; vérifiez finish_reason.
- Supprimez les champs cache_control et service_tier.
- Envoyez les images en base64 ou depuis un hôte accessible au fournisseur en amont.
- Conservez intacts les blocs de réflexion et reasoning_content d’un tour d’outil à l’autre.
- Relancez vos évaluations : même nom, nouveau modèle, nouveaux paramètres d’échantillonnage par défaut.
- Dans les outils de programmation, vérifiez que le paramètre d’effort est bien transmis au modèle (la durée des tours donne rapidement une indication).
FAQ
Pourquoi est-ce que je reçois l’erreur « requires adaptive thinking » ?
Votre requête désactive la réflexion, généralement avec le type de réflexion disabled sur le point de terminaison Chat Completions. M3.1 Flash réfléchit toujours. Supprimez ce champ ou définissez-le sur adaptive, et utilisez effort low si vous privilégiez la vitesse.
Mes requêtes M2.7 n’ont pas changé, mais les réponses, si. Pourquoi ?
Si vous utilisez un forfait MiniMax M Plan ou Token Plan, les requêtes indiquant M2.5 ou M2.7 sont traitées par M3.1 Flash depuis le 19 octobre 2026, mais sous l’ancien nom.
Quelle est la date limite pour les utilisateurs au paiement à l’usage ?
Le 18 novembre 2026. Après cette date, les requêtes à l’API MiniMax pour M2.5 et M2.7 ne fonctionneront plus.
reasoning_effort none fonctionne-t-il sur AIHubMix ?
La requête renvoie un code 200, mais le modèle réfléchit tout de même. Le niveau effectif le plus bas est low.
Ai-je encore besoin de cache_control ?
Non. MiniMax ne le prend pas en charge sur M3.1 Flash. La mise en cache est automatique et AIHubMix facture les entrées mises en cache à $0.0165 par million de jetons.
Puis-je utiliser M3.1 Flash dans Claude Code et Codex ?
Oui. AIHubMix le propose via l’API Anthropic Messages pour Claude Code et l’API Responses pour Codex. Les tests de texte, d’appel d’outil et de résultat d’outil ont réussi sur les deux le 19 octobre 2026.
Pourquoi mes réponses sont-elles tronquées ?
Les jetons de réflexion sont comptabilisés dans max_tokens. Si finish_reason vaut length, augmentez max_tokens. MiniMax recommande 131,072.
Pour aller plus loin : la série MiniMax M3.1 Flash
- Avant de vous engager dans cette migration, découvrez ce qui vous attend, du lancement Space Bunny aux tarifs par rapport à M2.7 et M3 : MiniMax M3.1 Flash, alias Space Bunny : ce qui a changé par rapport à M2.7 et M3, et combien ça coûte
- Après la migration, le paramètre le plus important est le niveau d’effort. Cet article compare les cinq niveaux sur la correction d’un même bogue : Niveaux d’effort de MiniMax M3.1 Flash : pourquoi le niveau par défaut a coûté 7× plus que low pour corriger le même bogue
- Si cette migration vous amène à reconsidérer MiniMax, voici la comparaison de la même tâche et de la facture avec ses deux concurrents les plus proches : MiniMax M3.1 Flash vs DeepSeek V4.1 Flash vs Claude Haiku 5.5 : un bogue corrigé, trois factures



