Error 401 de la API de Tradovate en vivo: ID de dispositivo no aprobado
Su bot se autentica sin problemas y opera en la cuenta demo sin inconvenientes, pero cada orden en vivo regresa con 401 Access is denied. Casi nunca es un error de código, sino un handshake de dispositivo faltante que solo exige el entorno en vivo.
Configura un bot de Tradovate, lo ve operar sin fallos en la cuenta demo durante días, luego lo apunta a su cuenta en vivo financiada, y cada orden regresa con un 401 con Access is denied. Es uno de los obstáculos más comunes con los que se topan los traders de API, y casi nunca es un error en su código. Tradovate en vivo aplica una regla que la demo ignora silenciosamente: cada solicitud de autenticación debe llevar un deviceId permanente y verificado, y ese dispositivo debe aprobarse mediante un enlace enviado por correo electrónico antes de poder enrutar órdenes reales. El error aparece de un par de formas, un 401 Access is denied simple, o una respuesta 200 cuyo payload dice failureReason: UnknownReason, failureText: Access is denied, pero la causa raíz es el mismo handshake de dispositivo faltante. Aquí está el diagnóstico completo y la solución, además de cómo un puente como PickMyTrade evita por completo el trámite de aprobación de dispositivo.
Lista de verificación rápida para un 401 exclusivo de en vivo
- Dirija cada llamada al host en vivo, use
https://live.tradovateapi.com/v1, nuncademo.tradovateapi.com, una vez que pase a producción. - Envíe un
deviceIdpermanente, una cadena estable con formato UUID que reutiliza en cada inicio de sesión desde esa máquina, no un valor aleatorio nuevo cada vez. - Apruebe el dispositivo, abra el correo de aprobación de dispositivo de Tradovate y confirme el enlace antes de esperar que las órdenes en vivo se enruten.
- Vuelva a obtener su
accountIden vivo, las cuentas en vivo y demo tienen valores deaccountIddistintos; obtenga el de en vivo desde/account/list. - Use el
accountSpeccorrecto, el formato en vivo (p. ej.Vxxxxx) difiere del formato demo (DEMOxxxxx). - Confirme el derecho de escritura de órdenes, la clave de API necesita acceso completo a órdenes, no solo datos de mercado de solo lectura.
Qué significa “Access Is Denied”
La respuesta Access is denied es la forma en que Tradovate le indica que la sesión o el dispositivo que realiza la solicitud no ha sido autorizado para operar en una cuenta en vivo, aunque su nombre de usuario, contraseña y secreto de API sean correctos. Por eso resulta tan confuso: las mismas credenciales que se autentican sin problemas y colocan órdenes en demo fallan de repente en cuanto cambia al host en vivo.
Puede verlo como un 401 HTTP limpio, o, de forma más engañosa, como un 200 HTTP cuyo cuerpo JSON lleva un payload de fallo como [{'s': 200, 'i': 3, 'd': {'failureReason': 'UnknownReason', 'failureText': 'Access is denied'}}]. Solo el entorno en vivo exige IDs de dispositivo verificados. Es una de las pocas diferencias entre simulación y en vivo, y la razón principal por la que los 401 aparecen en vivo pero nunca en simulación. En otras palabras, se trata de una puerta de confianza de dos factores / dispositivo, no de un cuerpo de orden roto.
Principales causas de un 401 en vivo
1. Sigue apuntando al host demo
La causa más trivial: la URL base nunca se cambió. Los tokens y los ID de cuenta demo no sirven contra el endpoint en vivo, y viceversa. Si no cambió de demo.tradovateapi.com a live.tradovateapi.com, las solicitudes fallarán para las cuentas en vivo, así de simple.
2. No está enviando un deviceId permanente
El deviceId es una cadena de hasta 64 caracteres pensada para identificar de forma única y permanente el dispositivo físico que realiza la solicitud. La demo nunca lo verifica, por lo que muchas integraciones lo omiten o generan un valor desechable en cada ejecución. En vivo eso se rechaza. Regenerar un nuevo deviceId en cada inicio de sesión también parece un dispositivo completamente nuevo y no aprobado cada vez, así que el 401 nunca desaparece.
3. El dispositivo nunca se aprobó a través del enlace del correo
Esta es la causa que más gente pasa por alto. Como Tradovate trata el deviceId como parte de su autenticación de dos factores, un dispositivo nuevo debe confirmarse fuera de banda. Recibirá un correo para aprobar el ID de dispositivo, y hasta que lo apruebe en vivo, seguirá denegando el acceso. Sin hacer clic en la aprobación, no hay acceso en vivo, punto.
4. Trasladó el accountId o accountSpec de la demo a producción
Sus cuentas en vivo y demo no comparten el mismo accountId numérico, y la cadena accountSpec también difiere (una especificación en vivo frente a una con prefijo DEMO). Reutilice los valores demo contra el host en vivo y obtendrá el mismo Access is denied, incluso después de que el dispositivo sea confiable.
5. La clave de API carece de acceso de escritura de órdenes
Si la clave o la app se aprovisionó con alcance de solo lectura o solo datos de mercado, la colocación de órdenes en vivo será denegada. La clave necesita el derecho completo de órdenes (escritura), que se obtiene mediante el complemento API Access de Tradovate y la configuración de la app.
Cómo solucionar el 401 en vivo: paso a paso
Cómo solucionar un deviceId faltante o no permanente
Genere un deviceId estable con formato UUID
Cree una cadena estable con formato UUID para la máquina que ejecuta su bot, por ejemplo 71986488-882c-43db-c345-92a0a2ed9329. El formato UUID estricto importa menos que el hecho de que el valor sea único e inmutable; se permiten hasta 64 caracteres.
Guárdelo, no lo regenere
Guárdelo como una constante, en un archivo de configuración, una variable de entorno o un almacén de secretos. Nunca lo aleatorice en cada ejecución.
Envíelo en cada inicio de sesión
Inclúyalo en el cuerpo de la solicitud de token de acceso junto con sus otros campos de credenciales, name, password, appId, appVersion, cid, sec y deviceId, y reutilice exactamente la misma cadena en cada inicio de sesión posterior desde ese dispositivo.

Cómo aprobar el dispositivo mediante el enlace enviado por correo
Vigile su bandeja de entrada tras el primer intento en vivo
Después de su primer intento de autenticación en vivo con un nuevo deviceId, vigile la bandeja de entrada vinculada a su cuenta de Tradovate en busca de un mensaje de aprobación de dispositivo.
Revise spam, correo no deseado y promociones
Revise las carpetas de spam, correo no deseado y promociones; el correo de aprobación se filtra constantemente.
Confirme el enlace de aprobación
Abra el correo y confirme el enlace de aprobación. Eso es lo que hace que el dispositivo pase de “desconocido” a “de confianza” en el entorno en vivo.
Vuelva a ejecutar la autenticación en vivo
Vuelva a ejecutar su autenticación en vivo. Las órdenes que devolvían Access is denied ahora deberían enrutarse.

Cómo cambiar el host y volver a obtener los valores de la cuenta en vivo
Apunte la URL base a producción
Cambie su URL base a https://live.tradovateapi.com/v1 para cada solicitud una vez que esté en producción.
Solicite un nuevo token de acceso en vivo
Solicite un nuevo token de acceso en vivo desde el host en vivo.
Vuelva a obtener el accountId en vivo
Llame a /account/list con ese token en vivo y lea el accountId numérico real desde la respuesta.
Configure el accountSpec en vivo
Configure accountSpec con el valor mostrado para la cuenta en vivo (la especificación en formato en vivo, no la que tiene el prefijo DEMO) y use el accountId correspondiente en el cuerpo de su orden.
Cómo confirmar el derecho de API Access
Abra la configuración de API Access
Inicie sesión en la plataforma web de Tradovate y abra el área de configuración que rige API Access / aplicaciones conectadas.
Verifique los permisos completos de órdenes
Verifique que el complemento API Access esté habilitado y que su app tenga permisos completos de órdenes, no solo de lectura.
Piénselo dos veces antes de desactivar la 2FA
Si desactivó la autenticación de dos factores como atajo, tenga en cuenta la contrapartida: desactivar la 2FA evita el paso de correo por dispositivo, pero debilita la seguridad de la cuenta y no vale la pena en una cuenta en vivo financiada. Aprobar el dispositivo una vez es el camino más seguro.

Tabla de resolución de problemas
| Error / síntoma | Significado | Solución |
|---|---|---|
| 401 Access is denied solo en vivo | Dispositivo no verificado/aprobado en vivo | Envíe un deviceId permanente y confirme el enlace de aprobación de dispositivo enviado por correo |
| 200 con failureReason: UnknownReason, failureText: Access is denied | La autenticación fue exitosa, pero el dispositivo/sesión no es de confianza para órdenes en vivo | Apruebe el dispositivo por correo; reutilice el mismo deviceId en cada inicio de sesión |
| Funciona en demo, falla en vivo con código idéntico | Solo difiere el host/URL | Cambie la URL base a https://live.tradovateapi.com/v1 |
| Access is denied después de aprobar el dispositivo | accountId/accountSpec de demo reutilizados en vivo | Vuelva a obtener el accountId en vivo desde /account/list; configure el accountSpec en vivo |
| Cada inicio de sesión provoca un nuevo correo de aprobación | El deviceId se regenera en cada ejecución | Persista una cadena deviceId estable y reutilícela |
| Las solicitudes de lectura funcionan, la colocación de órdenes es denegada | A la clave de API le falta el alcance de escritura de órdenes | Habilite el complemento API Access y conceda permisos completos de órdenes |
Dónde encaja PickMyTrade
Si prefiere operar sus señales de TradingView en vivo sin gestionar manualmente IDs de dispositivo, correos de aprobación y cambios de endpoint, PickMyTrade se encarga del handshake con el bróker por usted:
- Conexión en vivo gestionada la gestión de confianza de dispositivo y endpoints que hace tropezar a las integraciones de API sin procesar ocurre entre bastidores, de modo que las órdenes en vivo se enrutan a la primera.
- Filtros de derechos y riesgo respeta el estado del acuerdo de datos de su cuenta y los límites de la prop firm antes de enviar cualquier orden.
- Enrutamiento seguro frente a límites de tasa espacia el flujo de órdenes para que las llamadas de autenticación y de órdenes no reboten.
- Sincronización multicuenta refleja la misma señal en varias cuentas de Tradovate sin necesidad de mantener un handshake de dispositivo independiente por bot.
Sáltese el trámite de aprobación de dispositivo
PickMyTrade gestiona el handshake en vivo con Tradovate por usted, de modo que sus señales de TradingView se enrutan a la primera, sin necesidad de deviceId ni correos de aprobación.
Inicie su prueba gratuita de 5 díasPreguntas frecuentes
La demo no exige verificación de dispositivo; en vivo sí. El entorno en vivo necesita un deviceId permanente y aprobado, además del host, el accountId y el accountSpec correctos. Un código que falla solo en vivo es la señal clásica de una brecha de aprobación de dispositivo.
Es una cadena de hasta 64 caracteres que identifica de forma permanente la máquina que envía las solicitudes. Un valor con formato UUID como 71986488-882c-43db-c345-92a0a2ed9329 funciona bien. Lo más importante es que sea único para el dispositivo y se reutilice sin cambios en cada inicio de sesión.
Primero revise las carpetas de spam, correo no deseado y promociones, ya que el mensaje de aprobación suele filtrarse. Confirme que la dirección de correo de su cuenta de Tradovate sea correcta, vuelva a intentar la autenticación en vivo para desencadenar un nuevo correo, y haga clic en el enlace de aprobación cuando llegue.
Algunos traders lo hacen, porque elimina el paso de correo por dispositivo, pero debilita considerablemente la seguridad de una cuenta en vivo financiada. Aprobar el dispositivo una vez es más seguro y solo hay que hacerlo por cada máquina nueva.
No. Un 401 por expiración de token aparece después de aproximadamente 90 minutos, cuando su token de acceso caduca, y se soluciona renovando el token. El 401 de aprobación de dispositivo ocurre en su primerísima solicitud en vivo y se soluciona confiando en el dispositivo.
Puede reutilizar un deviceId por dispositivo físico en varias cuentas, pero cada dispositivo distinto desde el que se autentique debe aprobarse en vivo. Ejecutar muchos bots desde muchas máquinas implica aprobar cada máquina una vez.
La causa restante más común son los valores demo obsoletos: reutilizar el accountId o accountSpec de demo contra el host en vivo. Vuelva a obtener el accountId en vivo desde /account/list y configure el accountSpec en vivo correcto.
Usted proporciona el deviceId en su solicitud de autenticación. La aplicación web de Tradovate también muestra detalles de dispositivos y de la API en su configuración de API y conexión, por lo que puede revisar allí los dispositivos aprobados.
Esta guía tiene fines exclusivamente educativos e informativos y no constituye asesoramiento financiero, de inversión ni de trading. Operar con futuros y otros productos apalancados conlleva un riesgo sustancial de pérdida y no es adecuado para todo inversor. PickMyTrade es una plataforma de automatización independiente de terceros y no está afiliada, respaldada ni patrocinada por Tradovate, Inc. Todos los nombres, logotipos y marcas relacionados son propiedad de sus respectivos dueños. Las funciones y los pasos de la plataforma cambian con el tiempo, así que confirme siempre el proceso actual en la plataforma y la documentación oficiales de Tradovate antes de actuar.