Tradovate API

Error de token OAuth “invalid_client” en Tradovate

Su intercambio de token devuelve invalid_client en lugar de un access token. Esto explica por qué los tres campos de identidad de la app no coinciden, y cómo corregir cada uno.

Revisado por el equipo de Sistemas de Trading de PickMyTrade Última actualización
· Lectura de 7 minutos
Respuesta del intercambio de token OAuth de Tradovate mostrando el error invalid_client indicando que client_id, redirect_uri y client_secret no coinciden con la configuración existente

Tiene un código de autorización recién emitido, envía el intercambio de token y, en lugar de un access token, recibe [invalid_client] client_id, redirect_uri and client_secret do not match existing setup. Aparece como invalid_client, a veces envuelto en un 400 o 401, y detiene por completo su integración con Tradovate antes de que pueda salir una sola orden.

La parte tranquilizadora es esta: este error casi nunca significa que algo esté roto del lado de Tradovate. Significa que los tres valores que identifican su app durante el intercambio de token no coinciden con lo que registró. Corrija la discrepancia y la misma solicitud que está fallando ahora mismo pasará sin problemas.

A continuación se detallan todas las razones por las que ocurre esa discrepancia, en el orden en que es más probable que las encuentre, con los puntos exactos que debe revisar en su app OAuth y en su código.

Lista rápida de verificación para el error invalid_client

  • client_id incorrecto, cópielo de nuevo desde su app OAuth registrada; preste atención a un espacio inicial o un salto de línea final.
  • client_secret incorrecto, si alguna vez lo regeneró, el valor anterior queda inutilizado; pegue el actual en todas partes.
  • redirect_uri no idéntico, debe coincidir con el valor registrado byte por byte tanto en el paso de autorización como en el intercambio de token.
  • Confusión entre live y demo, envíe la solicitud de token al mismo entorno en el que registró su app.
  • Código de ejemplo desactualizado, los repositorios de ejemplo antiguos incluyen URLs de endpoint obsoletas; verifique las suyas contra la documentación oficial actual.
  • Credenciales en el lugar equivocado, asegúrese de que grant_type, code, client_id, client_secret y redirect_uri estén realmente en el cuerpo de la solicitud.

Qué significa "[invalid_client] client_id, redirect_uri and client_secret do not match existing setup"

OAuth divide su integración en dos identidades separadas. Una es usted, el titular de la cuenta, comprobado mediante su nombre de usuario y contraseña. La otra es su app, comprobada mediante un client_id y un client_secret. El error invalid_client tiene que ver por completo con la segunda. Es la respuesta estándar de OAuth 2.0 para “client authentication failed,” y Tradovate detalla exactamente qué campos verificó: client_id, redirect_uri y client_secret.

Entonces, cuando ve esto, el código de autorización que acaba de recibir suele estar bien. El servidor llegó al punto de confirmar quién es su app, comparó los tres valores que envió con el registro que guardó cuando se registró, encontró una diferencia y se negó a continuar. No le dirá cuál de los tres está mal. Esa es la parte molesta, y por eso la solución es un proceso de eliminación.

La solicitud que lo genera es su intercambio de token: un POST al endpoint de token OAuth en el host de su entorno (live.tradovateapi.com para live, demo.tradovateapi.com para demo) que lleva grant_type=authorization_code, el code y los tres campos de identidad. Un éxito devuelve un access_token y un expires_in. Un fallo devuelve error y error_description, y en este caso, ese error es invalid_client.

Principales causas del error invalid_client

1. El client_id no coincide con su app registrada

Esta es la causa más simple y la más fácil de pasar por alto. El client_id en su solicitud de token debe ser el que Tradovate asignó cuando registró la app OAuth. La gente se equivoca de formas pequeñas: pegar el nombre de la app en lugar de su id, tomar un id de otra app, o arrastrar un espacio invisible o un salto de línea al copiar. Los espacios en blanco son lo más engañoso, porque el valor parece correcto en su editor. Vuelva a copiar el id directamente desde la pantalla de registro y elimine los espacios sobrantes.

Formulario de registro de la aplicación OAuth de Tradovate en API Access mostrando los campos client id, redirect uri y secret

2. El client_secret es incorrecto o fue regenerado

El client_secret es la mitad de contraseña de la identidad de su app, y debe coincidir exactamente. La trampa clásica es la regeneración: en algún momento presionó “regenerate secret” para rotarlo, la plataforma emitió uno nuevo, y el valor anterior ahora es permanentemente inválido. Si su código, su archivo .env o su configuración de despliegue todavía conservan el secreto anterior, cada intercambio devuelve invalid_client. Lo mismo ocurre si en realidad nunca generó un secreto y está enviando un valor vacío o de marcador de posición.

3. El redirect_uri no coincide byte por byte

Esta es la causa que consume más horas, porque las URI parecen iguales a simple vista. El redirect_uri debe ser idéntico en tres lugares: el valor guardado en su app registrada, el valor en su solicitud de autorización y el valor en su intercambio de token. Idéntico significa carácter por carácter. Todo lo siguiente cuenta como diferente:

  • Una barra final en uno pero no en el otro (/callback frente a /callback/).
  • http en un lugar, https en otro.
  • Un número de puerto presente aquí, ausente allá (localhost:3030 frente a localhost).
  • Uso diferente de mayúsculas y minúsculas en cualquier parte de la ruta.
  • localhost en un lugar y 127.0.0.1 en otro.

Cualquiera de esos casos hace que Tradovate lo trate como un redirect no registrado y lo incluya en la respuesta invalid_client.

Comparación lado a lado del redirect_uri de la solicitud de autorización y el redirect_uri del intercambio de token, destacando que deben coincidir exactamente

4. Se registró en un entorno y está llamando al otro

Una app OAuth está vinculada a un único entorno. Regístrela en demo y su client_id y client_secret solo existen del lado de demo. Si su URL de autorización o su intercambio de token apunta al host de live mientras la app vive en demo, o al revés, las credenciales simplemente no se encuentran allí, y obtiene invalid_client. Confirme en qué entorno se registró, luego asegúrese de que tanto el paso de autorización como el endpoint de token apunten a ese mismo entorno.

5. Está ejecutando código de ejemplo desactualizado

Los ejemplos de OAuth quedan desactualizados con el tiempo. Un proyecto de ejemplo antiguo puede contener URLs de endpoint, un redirect_uri codificado directamente, o una forma de solicitud que ya no coincide con una app recién registrada. Si clonó un tutorial y “simplemente no funciona,” no asuma que sus credenciales están mal; verifique que los endpoints y el cuerpo de la solicitud en ese código todavía coincidan con la documentación oficial actual de Tradovate antes de pasar una hora depurando su secreto.

6. Las credenciales faltan o están en la parte equivocada de la solicitud

Cada campo que el servidor verifica debe llegar realmente, en el lugar correcto, en el formato correcto. Su POST de token necesita grant_type=authorization_code, el code, client_id, client_secret y redirect_uri, enviados en el cuerpo tal como especifica la documentación actual. Omita uno de los tres campos de identidad, o envíe el cuerpo en un formato que el endpoint no espera, y la app no podrá autenticarse, lo que se manifiesta como invalid_client.

Cómo corregir el error invalid_client: paso a paso

1

Vuelva a copiar el client_id y el client_secret

Abra la pantalla de registro de su app OAuth (en el área API Access de su configuración). Copie el client_id nuevamente y péguelo en su configuración, luego elimine cualquier espacio en blanco inicial o final sobrante. Haga lo mismo con el client_secret; si no está seguro de que el actual coincida con su código, regenérelo, actualice cada lugar donde se almacena y vuelva a desplegar.

2

Anote el redirect_uri registrado

Registre el redirect_uri exacto guardado en la app para poder compararlo con su código a continuación.

3

Fije el redirect_uri en una única constante

Defina una constante REDIRECT_URI por entorno en su código. Use esa constante exacta para construir la URL de autorización y el cuerpo del intercambio de token, sin volver a escribirla nunca. Compárela con el valor registrado, prestando atención a las barras, el esquema, el puerto y las mayúsculas/minúsculas, y actualice el lado que esté mal para que las tres copias sean idénticas.

4

Confirme el entorno y los endpoints

Decida en qué entorno está registrada la app, live o demo. Dirija la solicitud de autorización a https://trader.tradovate.com/oauth con response_type=code, su client_id y el redirect_uri correspondiente. Envíe el intercambio de token al endpoint de token OAuth en el host del mismo entorno, live.tradovateapi.com o demo.tradovateapi.com, usando la ruta exacta indicada en la referencia de API actual.

5

Vuelva a ejecutar el flujo de principio a fin

Solicite un código de autorización completamente nuevo y luego intercámbielo de inmediato. Los códigos son de un solo uso, así que no reutilice el que ya falló.

Configuración de la app OAuth de Tradovate mostrando el valor del client secret y una opción para regenerar el secreto

Tabla de solución de problemas

Error Significado Solución
[invalid_client] client_id, redirect_uri and client_secret do not match existing setupUno o más de los tres campos de identidad de la app no coinciden con la app OAuth registrada.Vuelva a copiar client_id y client_secret; haga que redirect_uri sea idéntico en los tres lugares.
invalid_client (sin detalle)Falló la autenticación del cliente, no se pudo identificar la app.Confirme que client_id/secret sean correctos y se envíen en el cuerpo de la solicitud, sin dejarlos en blanco.
invalid_grantEl código de autorización expiró, ya fue usado, o está vinculado a un redirect_uri diferente.Solicite un código nuevo e intercámbielo de inmediato con el redirect_uri correspondiente.
redirect_uri_mismatchEl redirect_uri no coincide con el de la app.Alinee el esquema, el host, el puerto, la ruta y la barra final byte por byte.
unsupported_grant_typeEl valor de grant_type falta o está mal escrito.Envíe grant_type=authorization_code exactamente.
Credenciales válidas en demo, fallando en liveApp registrada en un entorno, solicitud enviada al otro.Dirija la URL de autorización y el endpoint de token al entorno propio de la app.

Evite esto con PickMyTrade

Todo el proceso de negociación OAuth existe para que un software pueda operar su cuenta por usted. Si ese software es PickMyTrade, nunca toca un client_secret ni depura un redirect_uri; conecta su cuenta de Tradovate una sola vez y desde ahí enruta sus alertas de TradingView a órdenes en vivo.

  • Conexión de cuenta guiada, vincule Tradovate mediante un flujo guiado paso a paso en lugar de construir manualmente un intercambio de token.
  • Sesiones administradas, el ciclo de vida del token y las renovaciones se ejecutan en segundo plano, por lo que no hay ningún código de autorización que usted deba mantener vivo.
  • Enrutamiento consciente del entorno, demo y live permanecen separados para que las credenciales nunca se mezclen.
  • Sincronización multicuenta, replique la misma alerta en varias cuentas sin tener que configurar OAuth para cada una.

Evite el proceso de negociación OAuth

Conecte Tradovate a PickMyTrade una sola vez y enrute sus alertas de TradingView a órdenes en vivo, sin ningún client_secret ni redirect_uri que depurar.

Inicie su prueba gratuita de 5 días

Preguntas Frecuentes

Significa que Tradovate no pudo autenticar su aplicación durante el intercambio de token. El mensaje completo, [invalid_client] client_id, redirect_uri and client_secret do not match existing setup, le indica que al menos uno de esos tres valores en su POST no coincide con el registro almacenado para su app OAuth registrada. El código de autorización estaba bien; lo que falló fue la identidad de la app.

Su inicio de sesión web utiliza su nombre de usuario y contraseña. El intercambio de token OAuth utiliza un conjunto de credenciales distinto, client_id y client_secret, que pertenecen a la app que registró, no a su cuenta de trading. Un inicio de sesión web perfecto no dice nada sobre si esas credenciales de la app son correctas, por lo que ambos pasan y fallan de forma independiente.

Byte por byte. El redirect_uri de la solicitud de autorización y el del intercambio de token deben coincidir con el valor guardado en la app, carácter por carácter. Una barra final, http frente a https, un puerto diferente o un cambio en mayúsculas/minúsculas cuentan como una discrepancia. Defina una sola constante y reutilícela en todas partes.

Sí. Una app OAuth se registra frente a un único entorno. Si se registró en demo pero envía la solicitud de token al host de live, o al revés, las credenciales no se encuentran y obtiene invalid_client. Dirija la URL de autorización y el endpoint de token al mismo entorno en el que creó su app.

Regenerar un secreto invalida instantáneamente el anterior. Si su código, archivo de entorno o despliegue siguen enviando el valor anterior, cada intercambio falla. Copie el nuevo secreto en cada lugar donde se almacena, vuelva a desplegar y borre cualquier configuración en caché para que nada siga entregando la cadena retirada.

No, y la diferencia le indica el problema real. invalid_client tiene que ver con la identidad de la app, un client_id incorrecto, un client_secret incorrecto, o un redirect_uri no coincidente. invalid_grant tiene que ver con el código de autorización: expiró, ya fue usado, o fue emitido para un redirect_uri diferente. Si ve invalid_grant, solicite un código nuevo en lugar de volver a revisar su secreto.

OAuth con client_id y client_secret es una vía, y es la que genera invalid_client. Tradovate también admite una solicitud directa de access token usando un app id y un API secret. Si está automatizando su propia cuenta y no necesita enviar a otros usuarios a través de una pantalla de consentimiento, la solicitud directa de token suele ser más simple y evita por completo el proceso de negociación OAuth.

Abra el área de aplicaciones o configuración de su cuenta, vaya a la sección API Access, y busque el registro OAuth que creó. Allí se encuentran el client_id y el client_secret, junto con el redirect_uri que guardó. Las etiquetas cambian con el tiempo, así que si no ve una pestaña API Access, revise el diseño actual de la configuración o la documentación oficial para la pantalla equivalente.

Esta guía tiene fines exclusivamente educativos e informativos y no constituye asesoramiento financiero, de inversión ni de trading. Operar futuros y otros productos apalancados conlleva un riesgo sustancial de pérdida y no es adecuado para todos los inversores. PickMyTrade es una plataforma de automatización independiente de terceros y no está afiliada a Tradovate, Inc., ni cuenta con su respaldo o patrocinio. 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 siempre confirme el proceso actual en la documentación oficial de la plataforma antes de actuar.