Erreur 401 de l'API Tradovate en direct : ID d'appareil non approuvé
Votre bot s'authentifie sans problème et trade en démo sans accroc, puis chaque ordre en direct revient avec 401 Access is denied. Ce n'est presque jamais un bug de code, mais un handshake d'appareil manquant que seul le direct impose.
Vous configurez un bot Tradovate, le regardez fonctionner sans accroc sur le compte démo pendant des jours, puis le pointez vers votre compte en direct financé, et chaque ordre revient avec un 401 avec Access is denied. C'est l'un des obstacles les plus courants rencontrés par les traders API, et ce n'est presque jamais un bug dans votre code. Tradovate en direct applique une règle que la démo ignore silencieusement : chaque requête d'authentification doit porter un deviceId permanent et vérifié, et cet appareil doit être approuvé via un lien envoyé par e-mail avant de pouvoir router de vrais ordres. L'erreur se présente sous deux formes, un simple 401 Access is denied, ou une réponse 200 dont le payload indique failureReason: UnknownReason, failureText: Access is denied, mais la cause profonde est la même : un handshake d'appareil manquant. Voici le diagnostic complet et la solution, ainsi que la façon dont un pont comme PickMyTrade évite entièrement cette procédure d'approbation d'appareil.
Liste de contrôle rapide pour un 401 exclusif au direct
- Dirigez chaque appel vers l'hôte en direct, utilisez
https://live.tradovateapi.com/v1, jamaisdemo.tradovateapi.com, une fois en direct. - Envoyez un
deviceIdpermanent, une chaîne stable de type UUID que vous réutilisez à chaque connexion depuis cette machine, et non une nouvelle valeur aléatoire à chaque fois. - Approuvez l'appareil, ouvrez l'e-mail d'approbation d'appareil Tradovate et confirmez le lien avant de vous attendre à ce que les ordres en direct soient routés.
- Récupérez à nouveau votre
accountIden direct, les comptes en direct et démo portent des valeurs d'accountIddifférentes ; récupérez celle du compte en direct depuis/account/list. - Utilisez le bon
accountSpec, le format en direct (par ex.Vxxxxx) diffère du format démo (DEMOxxxxx). - Confirmez le droit d'écriture des ordres, la clé API a besoin d'un accès complet aux ordres, pas seulement des données de marché en lecture seule.
Ce que signifie « Access Is Denied »
La réponse Access is denied signifie que Tradovate vous indique que la session ou l'appareil à l'origine de la requête n'a pas été autorisé à agir sur un compte en direct, même si votre nom d'utilisateur, votre mot de passe et votre secret API sont corrects. C'est ce qui rend la situation si déroutante : les mêmes identifiants qui s'authentifient sans problème et placent des ordres en démo échouent soudainement dès que vous passez à l'hôte en direct.
Vous pouvez le voir comme un 401 HTTP net, ou, de façon plus trompeuse, comme un 200 HTTP dont le corps JSON porte un payload d'échec du type [{'s': 200, 'i': 3, 'd': {'failureReason': 'UnknownReason', 'failureText': 'Access is denied'}}]. Seul le direct impose des ID d'appareil vérifiés. C'est l'une des très rares différences entre la simulation et le direct, et la raison principale pour laquelle les 401 apparaissent en direct mais jamais en simulation. Autrement dit, il s'agit d'une barrière de confiance à deux facteurs / appareil, pas d'un corps d'ordre défectueux.
Principales causes d'un 401 en direct
1. Vous ciblez encore l'hôte démo
La cause la plus triviale : l'URL de base n'a jamais été changée. Les tokens démo et les ID de compte démo ne valent rien face au point de terminaison en direct, et inversement. Si vous n'êtes pas passé de demo.tradovateapi.com à live.tradovateapi.com, les requêtes échoueront pour les comptes en direct, tout simplement.
2. Vous n'envoyez pas de deviceId permanent
Le deviceId est une chaîne pouvant compter jusqu'à 64 caractères, destinée à identifier de manière unique et permanente l'appareil physique à l'origine de la requête. La démo ne le vérifie jamais, donc de nombreuses intégrations l'omettent ou génèrent une valeur jetable à chaque exécution. Le direct rejette cela. Régénérer un nouveau deviceId à chaque connexion donne aussi l'impression, à chaque fois, d'un tout nouvel appareil non approuvé, si bien que le 401 ne disparaît jamais.
3. L'appareil n'a jamais été approuvé via le lien envoyé par e-mail
C'est la cause que la plupart des gens ratent. Comme Tradovate traite le deviceId comme faisant partie de son authentification à deux facteurs, un nouvel appareil doit être confirmé hors bande. Vous recevrez un e-mail pour approuver l'ID d'appareil, et tant que vous ne l'approuvez pas en direct, l'accès continue d'être refusé. Pas de clic d'approbation, pas d'accès en direct, un point c'est tout.
4. Vous avez conservé l'accountId ou l'accountSpec de la démo en direct
Vos comptes en direct et démo ne partagent pas le même accountId numérique, et la chaîne accountSpec diffère également (une spec en direct par rapport à une préfixée DEMO). Réutilisez les valeurs démo contre l'hôte en direct et vous obtiendrez le même Access is denied, même une fois l'appareil approuvé.
5. La clé API n'a pas d'accès en écriture aux ordres
Si la clé ou l'application a été provisionnée avec une portée en lecture seule ou données de marché uniquement, le placement d'ordres en direct sera refusé. La clé a besoin du droit complet sur les ordres (écriture), obtenu via le module complémentaire API Access de Tradovate et la configuration de l'application.
Comment corriger le 401 en direct : étape par étape
Corriger un deviceId manquant ou non permanent
Générez un deviceId stable de type UUID
Créez une chaîne stable de type UUID pour la machine qui exécute votre bot, par exemple 71986488-882c-43db-c345-92a0a2ed9329. Le format UUID strict compte moins que le fait que la valeur soit unique et invariable ; jusqu'à 64 caractères sont autorisés.
Stockez-le, ne le régénérez pas
Stockez-le comme une constante, dans un fichier de configuration, une variable d'environnement ou un coffre-fort de secrets. Ne le randomisez jamais à chaque exécution.
Envoyez-le à chaque connexion
Incluez-le dans le corps de la requête de jeton d'accès aux côtés de vos autres champs d'identifiants, name, password, appId, appVersion, cid, sec et deviceId, et réutilisez exactement la même chaîne à chaque connexion suivante depuis cet appareil.

Approuver l'appareil via le lien envoyé par e-mail
Surveillez votre boîte de réception après la première tentative en direct
Après votre première tentative d'authentification en direct avec un nouveau deviceId, surveillez la boîte de réception associée à votre compte Tradovate pour un message d'approbation d'appareil.
Vérifiez les indésirables, spams et promotions
Vérifiez les dossiers indésirables, spam et promotions, l'e-mail d'approbation est constamment filtré.
Confirmez le lien d'approbation
Ouvrez l'e-mail et confirmez le lien d'approbation. C'est ce qui fait passer l'appareil de « inconnu » à « approuvé » dans l'environnement en direct.
Relancez l'authentification en direct
Relancez votre authentification en direct. Les ordres qui renvoyaient Access is denied devraient maintenant être routés.

Changer d'hôte et récupérer à nouveau les valeurs du compte en direct
Dirigez l'URL de base vers le direct
Changez votre URL de base pour https://live.tradovateapi.com/v1 pour chaque requête une fois en direct.
Demandez un nouveau jeton d'accès en direct
Demandez un nouveau jeton d'accès en direct auprès de l'hôte en direct.
Récupérez à nouveau l'accountId en direct
Appelez /account/list avec ce token en direct et lisez l'accountId numérique réel dans la réponse.
Définissez l'accountSpec en direct
Définissez accountSpec avec la valeur affichée pour le compte en direct (la spec au format direct, pas celle préfixée DEMO) et utilisez l'accountId correspondant dans le corps de votre ordre.
Confirmer le droit API Access
Ouvrez les paramètres API Access
Connectez-vous à la plateforme web Tradovate et ouvrez la section des paramètres qui régit API Access / les applications connectées.
Vérifiez les autorisations complètes sur les ordres
Vérifiez que le module complémentaire API Access est activé et que votre application dispose des autorisations complètes sur les ordres, pas seulement en lecture seule.
Réfléchissez à deux fois avant de désactiver la 2FA
Si vous avez désactivé l'authentification à deux facteurs par facilité, sachez ce que cela implique : désactiver la 2FA évite l'étape d'e-mail par appareil, mais affaiblit la sécurité du compte et n'en vaut pas la peine sur un compte en direct financé. Approuver l'appareil une seule fois est la voie la plus sûre.

Tableau de dépannage
| Erreur / symptôme | Signification | Solution |
|---|---|---|
| 401 Access is denied uniquement en direct | Appareil non vérifié/approuvé en direct | Envoyez un deviceId permanent et confirmez le lien d'approbation d'appareil envoyé par e-mail |
| 200 avec failureReason: UnknownReason, failureText: Access is denied | L'authentification a réussi mais l'appareil/la session n'est pas approuvé pour les ordres en direct | Approuvez l'appareil par e-mail ; réutilisez le même deviceId à chaque connexion |
| Fonctionne en démo, échoue en direct avec un code identique | Seul l'hôte/l'URL diffère | Changez l'URL de base pour https://live.tradovateapi.com/v1 |
| Access is denied après approbation de l'appareil | accountId/accountSpec démo réutilisés en direct | Récupérez à nouveau l'accountId en direct depuis /account/list ; définissez l'accountSpec en direct |
| Chaque connexion déclenche un nouvel e-mail d'approbation | Le deviceId est régénéré à chaque exécution | Conservez une chaîne deviceId stable et réutilisez-la |
| Les requêtes de lecture fonctionnent, le placement d'ordres est refusé | La clé API n'a pas la portée d'écriture des ordres | Activez le module complémentaire API Access et accordez les autorisations complètes sur les ordres |
Où PickMyTrade s'intègre
Si vous préférez trader vos signaux TradingView en direct sans gérer manuellement les ID d'appareil, les e-mails d'approbation et les changements de point de terminaison, PickMyTrade s'occupe du handshake avec le courtier pour vous :
- Connexion en direct gérée la gestion de la confiance des appareils et des points de terminaison qui fait trébucher les intégrations API brutes se fait en coulisses, de sorte que les ordres en direct sont routés dès la première fois.
- Filtres de droits et de risque respecte l'état de l'accord de données de votre compte et les limites de la prop firm avant même l'envoi d'un ordre.
- Routage sécurisé contre les limites de débit espace le flux d'ordres pour que les appels d'authentification et d'ordres ne soient pas rejetés.
- Synchronisation multi-comptes reproduit le même signal sur plusieurs comptes Tradovate sans avoir à maintenir un handshake d'appareil distinct par bot.
Évitez la procédure d'approbation d'appareil
PickMyTrade gère le handshake en direct avec Tradovate pour vous, afin que vos signaux TradingView soient routés dès la première fois, sans deviceId ni e-mails d'approbation requis.
Démarrez votre essai gratuit de 5 joursQuestions fréquentes
La démo n'impose pas de vérification d'appareil ; le direct oui. Le direct nécessite un deviceId permanent et approuvé, ainsi que l'hôte, l'accountId et l'accountSpec en direct corrects. Un code qui échoue uniquement en direct est le signe classique d'une lacune d'approbation d'appareil.
C'est une chaîne pouvant compter jusqu'à 64 caractères qui identifie de façon permanente la machine à l'origine des requêtes. Une valeur de type UUID telle que 71986488-882c-43db-c345-92a0a2ed9329 fonctionne bien. Ce qui compte le plus, c'est qu'elle soit unique à l'appareil et réutilisée sans changement à chaque connexion.
Vérifiez d'abord les dossiers indésirables, spam et promotions, car le message d'approbation est souvent filtré. Confirmez que l'adresse e-mail de votre compte Tradovate est correcte, relancez l'authentification en direct pour déclencher un nouvel e-mail, et cliquez sur le lien d'approbation dès son arrivée.
Certains traders le font, car cela supprime l'étape d'e-mail par appareil, mais cela affaiblit considérablement la sécurité d'un compte en direct financé. Approuver l'appareil une seule fois est plus sûr et ne doit être fait que pour chaque nouvelle machine.
Non. Un 401 dû à l'expiration du jeton apparaît environ 90 minutes après que votre jeton d'accès a expiré, et se corrige en renouvelant le jeton. Le 401 d'approbation d'appareil survient dès votre toute première requête en direct et se corrige en approuvant l'appareil.
Vous pouvez réutiliser un deviceId par appareil physique sur plusieurs comptes, mais chaque appareil distinct depuis lequel vous vous authentifiez doit être approuvé en direct. Exécuter de nombreux bots depuis de nombreuses machines signifie approuver chaque machine une fois.
La cause restante la plus courante est l'utilisation de valeurs démo obsolètes : réutiliser l'accountId ou l'accountSpec de démo contre l'hôte en direct. Récupérez à nouveau l'accountId en direct depuis /account/list et définissez l'accountSpec en direct correct.
Vous fournissez le deviceId dans votre requête d'authentification. L'application web Tradovate expose également les détails des appareils et de l'API dans ses paramètres API et de connexion, où vous pouvez consulter les appareils approuvés.
Ce guide est fourni à des fins éducatives et informatives uniquement et ne constitue pas un conseil financier, d'investissement ou de trading. Le trading de contrats à terme et d'autres produits à effet de levier comporte un risque de perte substantiel et ne convient pas à tous les investisseurs. PickMyTrade est une plateforme d'automatisation tierce indépendante et n'est ni affiliée à, ni approuvée par, ni sponsorisée par Tradovate, Inc. Tous les noms, logos et marques associés sont la propriété de leurs détenteurs respectifs. Les fonctionnalités et les étapes de la plateforme évoluent avec le temps, confirmez donc toujours le processus actuel dans la plateforme et la documentation officielles de Tradovate avant d'agir.