API 401 Unauthorized di Tradovate (token scaduto)
Circa 90 minuti dopo l'inizio di una sessione, ogni chiamata all'API Tradovate inizia improvvisamente a restituire 401 Unauthorized. Ecco perché il token di accesso scade secondo un timer interno e come rinnovarlo prima che comprometta i vostri ordini.
Configurate un bot per l'API Tradovate, inviate alcuni ordini demo e tutto funziona senza intoppi, poi, dopo circa un'ora e mezza, ogni chiamata si scontra improvvisamente con un 401 Unauthorized. È uno degli errori più comuni e più fraintesi dell'API Tradovate, e la causa è quasi sempre la stessa: il vostro token di accesso è scaduto silenziosamente. I token di accesso Tradovate durano circa 90 minuti. Una volta trascorso questo tempo, sia l'API REST sia il WebSocket dei dati di mercato smettono di fidarsi di voi. Lo vedrete come un semplice stato HTTP 401 Unauthorized, un messaggio "Access is denied", oppure un WebSocket che invia bruscamente un frame di chiusura e si disconnette. La soluzione non è bombardare di nuovo l'endpoint di login, ma rinnovare il token prima che scada. I bridge di automazione come PickMyTrade gestiscono per voi questo ciclo di vita del token, così i vostri alert continuano a scattare anche dove uno script grezzo si sarebbe fermato.
Checklist rapida per l'errore 401 Unauthorized
- Controllate l'orario. Se il 401 inizia intorno al minuto 75–90, è un problema di scadenza del token, non un problema di credenziali.
- Rinnovate, non rieffettuate il login. Chiamate
/auth/renewAccessTokencon il vostro token ancora valido circa 15 minuti prima della scadenza. - Tracciate
expirationTime. Salvate il timestamp restituito al login e pianificate il rinnovo in base a esso, non a un intervallo stimato. - Verificate l'header. Il token deve essere inviato come
Authorization: Bearer <token>a ogni richiesta. - Fate corrispondere l'ambiente. Un token demo autorizza solo gli host demo; un token live autorizza solo gli host live.
- Una sessione per token. Richiedere un nuovo token altrove può invalidare il token che il vostro bot sta ancora usando.
Cosa significa «401 Unauthorized»
Un 401 Unauthorized dell'API Tradovate significa che il server ha ricevuto la vostra richiesta ma ha rifiutato di eseguirla perché non è riuscito a verificare un token di accesso valido e aggiornato. Si tratta di un errore di autenticazione, non di un problema di permessi né di logica degli ordini. In sostanza l'API sta dicendo: “Non so chi siete in questo momento.” Sul lato REST lo vedrete come uno stato HTTP 401. Sul WebSocket dei dati di mercato e del trading di solito arriva come un frame con "s":401 e il testo "Access is denied", spesso seguito dalla chiusura del socket.
Ecco la parte che confonde: un token di accesso Tradovate è progettato per essere di breve durata. Quando vi autenticate tramite /auth/accessTokenRequest, la risposta vi fornisce un accessToken più un expirationTime, e quella scadenza si colloca circa 90 minuti più avanti. Durante quella finestra il token è la vostra chiave per ogni endpoint protetto. Nel momento in cui scade, la stessa identica richiesta che funzionava un minuto prima restituisce un 401, perché la chiave non apre più la serratura.
Ecco perché l'errore è così sconcertante la prima volta che si presenta. Nel vostro codice non è cambiato nulla, la vostra API key e il secret restano corretti, eppure le chiamate falliscono. Il problema è il tempo, non la configurazione. Un 401 che compare solo dopo che la vostra app è in esecuzione da oltre un'ora è l'impronta caratteristica di un token scaduto.
Principali cause del 401 Unauthorized dell'API Tradovate nel 2026
1. Il token di accesso è scaduto (il limite di 90 minuti)
Questa è di gran lunga la causa più comune. I token di accesso Tradovate hanno, secondo la documentazione, una durata di circa 90 minuti dalla creazione. Se il vostro bot recupera un token una sola volta all'avvio e non lo aggiorna mai, ogni richiesta successiva a quella soglia di 90 minuti restituisce un 401. In pratica l'errore tende a comparire intorno al minuto 80, proprio dove un token mai rinnovato smette di funzionare.

2. Rinnovo troppo tardivo, dopo che il token è già scaduto
/auth/renewAccessToken funziona solo finché il vostro token attuale è ancora valido. Se aspettate la scadenza per rinnovare, la stessa chiamata di rinnovo fallisce con un 401, state cercando di autenticare un rinnovo con una chiave morta. Una volta che un token è completamente scaduto, dovete eseguire un nuovo /auth/accessTokenRequest, non un rinnovo.
3. Un header Authorization malformato
Anche un token perfettamente valido viene rifiutato se lo presentate in modo errato. Nelle chiamate REST l'header deve essere Authorization: Bearer <token>, un prefisso Bearer mancante o uno spazio in più bastano a far scattare un 401. Sul WebSocket, il frame authorize deve essere formattato esattamente come specificato nella documentazione attuale (endpoint, id, poi il token, con i corretti separatori di riga vuota). Un errore di formattazione lì produce la stessa risposta "Access is denied".
4. Ambiente sbagliato (token demo su host live, o viceversa)
Tradovate gestisce ambienti demo e live separati. Un token emesso per l'host demo non autorizza le richieste inviate all'host live, e vale anche il contrario. Puntate un token demo valido verso un endpoint live (o un token live verso demo) e comparirà un 401 / accesso negato, anche se il token stesso è autentico.
5. Il token è stato invalidato da un secondo login
I token di accesso sono legati a una sessione. Se un altro processo, un secondo script, un test manuale o una nuova esecuzione del vostro stesso flusso di login richiede un nuovo token per lo stesso account, può invalidare il token che il vostro bot sta ancora utilizzando. Il bot inizia quindi a collezionare errori 401 a metà esecuzione anche se “nulla è cambiato” dal suo lato. E bombardare ripetutamente l'endpoint di login può attivare la penalità sulle richieste di Tradovate, ritardandovi ulteriormente.
Come risolvere l'errore 401 Unauthorized: passo dopo passo
Risolvere un token scaduto: rinnovatelo prima che scada
Salvate la scadenza al login
Quando vi autenticate, leggete il valore expirationTime dalla risposta di login e salvatelo insieme al vostro accessToken.
Impostate un timer che scatti in anticipo
Impostate un timer o uno scheduler che scatti circa 15 minuti prima di quella scadenza, con un token di 90 minuti questo vi porta vicino al minuto 75.
Chiamate renewAccessToken
Quando il timer scatta, inviate un POST a /auth/renewAccessToken con il vostro token attuale, ancora valido nell'header Authorization: Bearer <token> e senza corpo della richiesta.
Sostituite e ripetete
Sostituite l'accessToken e l'expirationTime salvati con i nuovi valori restituiti, quindi azzerate il timer. Ripetete finché il bot è in esecuzione.

Risolvere un token già scaduto
Se il vostro token è già scaduto e il rinnovo restituisce un 401, smettete di provare a rinnovarlo. Eseguite di nuovo un /auth/accessTokenRequest completo per ottenere un token e una scadenza del tutto nuovi, quindi riprendete il ciclo di rinnovo anticipato descritto sopra. Costruite il vostro client in modo che un 401 su qualsiasi chiamata attivi una singola nuova autenticazione e un solo tentativo automatico, non un ciclo infinito, che può far scattare penalità sui limiti di richiesta.
Risolvere l'header Authorization
Registrate l'header esatto inviato dal vostro client e confermate che sia Authorization: Bearer <token> con un solo spazio dopo Bearer. Per le connessioni WebSocket, verificate che il frame authorize corrisponda al formato attualmente documentato prima di presumere che il token sia difettoso. Il modo più rapido per isolare il problema è effettuare la stessa chiamata in un client REST, Postman o curl, con un token appena emesso. Se funziona, il problema sta nel modo in cui il vostro codice costruisce la richiesta, non nel token.
Risolvere le discrepanze tra ambiente e credenziali
Confermate che l'host che state chiamando corrisponda all'ambiente per cui è stato emesso il vostro token (demo o live). Verificate poi che la vostra API key, il secret e le credenziali dell'app siano aggiornati nell'area di gestione API di Tradovate, rigenerarli o perdere la sincronizzazione provocherà anch'esso errori di autenticazione. Accedete al vostro account Tradovate, aprite la sezione accesso API / add-on e confermate che la vostra key sia attiva prima di dare la colpa al token.

Tabella di risoluzione dei problemi
| Errore | Significato | Soluzione |
|---|---|---|
| 401 Unauthorized (REST, dopo ~90 min) | Token di accesso scaduto | Rinnovare tramite /auth/renewAccessToken ~15 min prima della scadenza |
| "s":401 ... "Access is denied" (WebSocket) | Token scaduto o frame authorize rifiutato | Autenticarsi di nuovo e riaprire il socket con un token valido |
| 401 sulla chiamata di rinnovo stessa | Rinnovo effettuato dopo che il token era già scaduto | Eseguire un nuovo /auth/accessTokenRequest, poi riprendere il rinnovo |
| 401 immediatamente a ogni chiamata | Header Authorization malformato | Assicurarsi di usare Authorization: Bearer <token> con la spaziatura corretta |
| 401 / accesso negato solo in live | Token demo usato contro un host live (o viceversa) | Usare un token emesso per l'ambiente chiamato |
| 401 a metà esecuzione dopo un altro login | Token precedente invalidato da una seconda sessione | Condividere un solo token per account; evitare login duplicati |
Prevenire tutto questo con PickMyTrade
Gestire manualmente un orologio del token di 90 minuti è fragile, basta perdere un rinnovo e la vostra automazione ammutolisce proprio quando scatta un segnale. PickMyTrade si posiziona tra TradingView e Tradovate e gestisce il ciclo di vita del token per voi:
- Rinnovo automatico del token, la connessione viene aggiornata secondo un programma, così una scadenza di 90 minuti non fa mai perdere i vostri ordini.
- Instradamento sicuro per sessione, una singola connessione gestita per account evita l'invalidazione da login duplicato che causa errori 401 a metà esecuzione.
- Richieste sicure rispetto ai limiti di frequenza, le chiamate sono distanziate nel tempo per rispettare i limiti di richiesta di Tradovate, così non scambiate mai un 401 risolto con un timeout di penalità.
- Consapevolezza dell'ambiente, demo e live restano distinti, così un token non viene mai inviato all'host sbagliato.
Il risultato: i vostri alert di TradingView raggiungono Tradovate senza che dobbiate scrivere né sorvegliare una sola riga di codice di autenticazione.
Fate trading senza rifiuti
PickMyTrade gestisce per voi il ciclo di vita del token di 90 minuti, rinnovandolo secondo un programma in modo che un 401 dell'API Tradovate non faccia mai perdere i vostri ordini a metà sessione.
Avviate la vostra prova gratuita di 5 giorniDomande frequenti
Un token di accesso Tradovate ha, secondo la documentazione, una durata di circa 90 minuti dal momento dell'emissione. Dopodiché smette di autenticare le richieste e riceverete un 401 finché non lo rinnovate o non vi autenticate di nuovo.
/auth/accessTokenRequest effettua un nuovo login da zero usando le vostre credenziali e restituisce un token completamente nuovo. /auth/renewAccessToken estende la vostra sessione emettendo un nuovo token mentre quello attuale è ancora valido, e non richiede di reinviare le credenziali.
Circa 15 minuti prima della scadenza. Con un token di 90 minuti questo significa rinnovarlo vicino al minuto 75, il che lascia un margine di sicurezza prima che il tempo scada.
No. Il rinnovo funziona solo su un token ancora valido. Se è già scaduto, la chiamata di rinnovo restituisce un 401 ed è necessario eseguire un accessTokenRequest completo per ottenere un nuovo token.
È la firma classica di un token scaduto. Non c'è nulla di sbagliato nel vostro codice, il token ha semplicemente raggiunto il suo limite di ~90 minuti e deve essere rinnovato tramite un timer.
Un 401 istantaneo di solito indica un header Authorization malformato, un token emesso per l'ambiente sbagliato (demo o live), oppure credenziali API non valide, non una scadenza. Verificate prima il formato dell'header e l'host.
Può succedere. I token di accesso sono legati a una sessione, quindi autenticarsi di nuovo altrove può invalidare il token che il vostro bot sta utilizzando e causare errori 401 a metà esecuzione. Usate un unico token condiviso per account, oppure un bridge che gestisca la sessione per voi.
Rinnovare secondo un programma ragionevole, circa ogni ~75 minuti, va benissimo. I problemi nascono dal richiamare ripetutamente l'endpoint di login in un ciclo stretto dopo un 401, il che può attivare la penalità sulle richieste di Tradovate. Rinnovate in modo proattivo invece di riprovare alla cieca.
Questa guida ha finalità esclusivamente educative e informative e non costituisce consulenza finanziaria, di investimento o di trading. Il trading di futures e di altri prodotti a leva comporta un rischio sostanziale di perdita e non è adatto a tutti gli investitori. PickMyTrade è una piattaforma di automazione indipendente di terze parti e non è affiliata, sponsorizzata né approvata da Tradovate, Inc. o Bookmap. Tutti i nomi, i loghi e i marchi correlati sono di proprietà dei rispettivi titolari. Le funzionalità e i passaggi della piattaforma cambiano nel tempo, pertanto confermate sempre la procedura attuale nella documentazione ufficiale della piattaforma prima di agire.