
Ultimo aggiornamento: 28 maggio 2026
TL;DR: La Quire API OAuth 2.0 permette alla tua app di agire sull'account Quire di un utente senza memorizzare la sua password. Avrai bisogno di un'app OAuth registrata (client ID, secret, URL di redirezione), di un flusso di autorizzazione in quattro passaggi (configura, reindirizza, gestisci la risposta, scambia il codice per il token) e di un ciclo di aggiornamento del token, poiché i token di accesso scadono dopo un'ora.
Costruire un'app che legge o modifica i dati Quire di un utente parte da una decisione: come autenticarsi senza mai vedere la password dell'utente? La Quire API risponde a questa domanda con OAuth 2.0. Questo articolo illustra la configurazione dell'app OAuth, il flusso di autorizzazione in quattro passaggi, il ciclo di accesso e aggiornamento del token, e gli errori più comuni che i developer commettono alla prima build.
La versione 1.0.0 dell'OpenAPI di Quire è stata rilasciata nell'ottobre 2019 ed è rimasta stabile. Con OAuth, gli utenti autorizzano la tua app ad accedere ai loro contenuti Quire (attività, progetti, commenti, assegnazioni, etichette, data di scadenza) senza che tu tocchi mai le loro credenziali. L'utente può revocare quell'accesso in qualsiasi momento senza cambiare la password — motivo per cui le integrazioni che memorizzano le password erano un antipattern di sicurezza prima che OAuth le rendesse inutili.
Prima di configurare l'API OAuth, assicurati che l'API sia effettivamente lo strumento giusto. Nel 2026, Quire dispone di quattro superfici di integrazione supportate, che risolvono problemi diversi.
| Se hai bisogno di... | Usa | Perché |
|---|---|---|
| Leggere o modificare i dati Quire per conto di un utente nella tua app | Quire OAuth API (questo articolo) | Autorizzazione utente, accesso CRUD completo, nessun polling |
| Reagire agli eventi in Quire (attività creata, stato cambiato, commento aggiunto) | Quire Webhooks | Push-based, nessun overhead di polling, configurazione leggera |
| Collegare Quire a Claude o un altro agente AI | Quire MCP server | Protocollo standard per strumenti LLM, server preconfigurato incluso |
| Integrare Quire in un flusso di automazione o BI | API OAuth più n8n o Power BI | Pipeline consolidate, meno codice personalizzato |
Se stai costruendo una tipica integrazione applicativa (app mobile, dashboard web, servizio di sincronizzazione), l'API OAuth è ciò di cui hai bisogno. Il resto di questo articolo assume che tu stia seguendo questa strada.
Per utilizzare la Quire API, dovrai creare un'app OAuth.
Dovrai essere connesso al tuo account Quire per creare un'app.
Vai alla console per sviluppatori di Quire e clicca sul pulsante Crea nuova app.

Scegli l'Organizzazione Quire a cui appartiene la tua app; i membri dell'organizzazione potranno visualizzare e modificare tutte le Apps appartenenti all'organizzazione selezionata.

Assegna un nome alla tua applicazione e inserisci un URL di redirezione; discuteremo il ruolo dell'URL di redirezione più avanti. Per ora puoi usare il seguente URL:
http://localhost:3000/callback
Clicca sul pulsante Crea nuova app: la tua nuova applicazione OAuth apparirà nella pagina della console per sviluppatori, dove potrai configurarla ulteriormente.

In sintesi, dovresti avere questi tre elementi:
http://localhost:3000/callback
Inserisci le informazioni di configurazione della tua applicazione nell'app.
const clientId = ':wJoMEodI4fSSR54pfNwIuIzLnaJ';
const clientSecret = 'eb8faf4nyd1wbeconw060e9ejui8zg6w8p1hyoex';
const redirectURI = 'http://localhost:3000/callback';
const authorizationUrl = 'https://quire.io/oauth';
const tokenUrl = 'https://quire.io/oauth/token';
const apiUrl = 'https://quire.io/api';Genera un URL di autorizzazione verso cui reindirizzare gli utenti all'endpoint OAuth di Quire. Questo mostrerà una pagina web in cui gli utenti Quire connessi potranno autorizzare la tua applicazione ad accedere ai loro contenuti.
URL di esempio:
https://quire.io/oauth?client_id=your-client-ID&redirect_uri=your-redirect-uriUn esempio di link di autorizzazione potrebbe apparire così:
var http = require('http');
var url = require('url');
var server = http.createServer(function (req, res) {
var uri = url.parse(req.url, true);
if (uri.pathname == '/') {
//..
} else if (uri.pathname == "/install") {
var authUrl = authorizationUrl
+ '?client_id=' + clientId
+ '&redirect_uri=' + encodeURIComponent(redirectURI);
res.writeHead(200, { 'Content-Type': 'text/html' });
res.write(
'<html><body>'
+ '<a href="' + authUrl + '">Connect Quire</a>'
+ '</body></html>');
res.end();
} else if (uri.pathname == "/callback") {
//...
}
});
server.listen(3000);Il parametro state è una stringa casuale usata per prevenire attacchi Cross-Site Request Forgery (CSRF). Dovresti generare una stringa di caratteri in modo casuale. Verrà restituita alla tua app, invariata, nel Passaggio 3. La tua applicazione dovrebbe validare questo valore. Sebbene sia opzionale, consigliamo vivamente di includere questo parametro.
URL di esempio:
https://quire.io/oauth?client_id=your-client-ID&redirect_uri=your-redirect-uri&state=lpcl9v94zIl server OAuth 2.0 risponde alla richiesta di accesso della tua applicazione utilizzando l'URL specificato nel redirect_uri.
Se l'utente approva la richiesta di accesso, la risposta contiene un codice di autorizzazione. Se l'utente non approva la richiesta, la risposta contiene un messaggio di errore. Il codice di autorizzazione o il messaggio di errore restituito al server web appare nella stringa di query, come mostrato di seguito:
Una risposta di errore:
http://localhost:3000/callback?error=access_deniedUna risposta con codice di autorizzazione:
http://localhost:3000/callback?code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7Un esempio di callback potrebbe apparire così:
//...
} else if (uri.pathname == "/callback") {
var result = uri.query;
var message = 'Auth fail';
if (result["error_description"] != null) {
message = result["error_description"];
if (result["error"] == 'access_denied') {
//display reject message
}
messageView(res, message);
} else if (result["code"] != null) {
return exchangeAccessToken(result["code"])
.then(function(data) {
var token = data['access_token'];
message = token != null ? 'Success': 'Fail';
messageView(res, message);
});
}
}Quando l'utente viene reindirizzato alla redirect_uri della tua applicazione, nella stringa di query saranno presenti anche un parametro code e un parametro state. Il parametro state è il tuo token anti-forgery CSRF per validare la richiesta.
Estrai code e state dai parametri della stringa di query. A questo punto è possibile validare lo state.
Un esempio di validazione potrebbe apparire così:
} else if (result["code"] != null) {
if (result["state"] != stateFromSession(res))
return messageView(res, 'invalid state');
return exchangeAccessToken(result["code"])
.then(function(data) {
var token = data['access_token'];
message = token != null ? 'Success': 'Fail';
messageView(res, message);
});
}La tua applicazione deve effettuare una chiamata POST all'endpoint del token con il codice di autorizzazione estratto e i parametri della richiesta indicati di seguito.
| Parametro | Valore |
|---|---|
| grant_type | authorization_code |
| code | {your-authorization-code} |
| client_id | {your-client-ID} |
| client_secret | {your-client-secret} |
| redirect_uri | Obbligatorio se hai specificato redirect_uri nel Passaggio 2. Il valore deve essere identico a quello usato lì. |
Un esempio di richiesta di un token di accesso potrebbe apparire così:
var request = require('request');
function exchangeAccessToken(code) {
return new Promise(function(resolve, reject){
request.post({
url: tokenUrl,
form: {
grant_type: 'authorization_code',
code: code,
client_id: clientId,
client_secret: clientSecret,
redirect_uri: redirectURI
}
},
function (error, httpResponse, body) {
if (error) {
return reject(error);
}
resolve(JSON.parse(body))
});
});
}Il token di accesso che ricevi in risposta sarà in formato JSON.
Esempio di risposta:
{
"access_token":"ACCESS_TOKEN",
"token_type": "bearer",
"expires_in":2592000,
"refresh_token":"REFRESH_TOKEN"
}Il token deve essere conservato con cura e in modo permanente, poiché è necessario per accedere a ogni endpoint della Quire API.
La tua app dispone ora di un token di accesso che può essere usato per effettuare chiamate API per conto dell'utente.
Effettua la chiamata API passando il token di accesso come bearer token nell'intestazione della richiesta.
Un esempio di chiamata API potrebbe apparire così:
function getCurrentUser(token) {
return new Promise(function(resolve, reject){
request.get({
url: apiUrl + '/user/id/me',
headers: {
"Authorization": "Bearer " + token
}
},
function (error, httpResponse, body) {
if (error) {
return reject(error);
}
resolve(JSON.parse(body))
});
});
}Esempio di risposta:
{
"email": "john@gmail.cc",
"website": "https://coolwebsites.com",
"id": "My_ID",
"description": "This is *cool*!",
"url": "https://quire.io/u/My_ID",
"nameText": "My Name",
"nameHtml": "My Name",
"descriptionText": "This is cool!",
"descriptionHtml": "This is <i>cool</i>!",
"image": "https://quire.s3.amazonaws.com/oid/image.jpg",
"iconColor": "37",
"name": "My Name",
"oid": "Dyh2YkFcu9uLgLFIeN1kB4Ld"
}Un token di accesso è intenzionalmente pensato per un uso a breve termine. Questo è un meccanismo di sicurezza fondamentale di OAuth 2.0. Usando l'Authorization Code Grant Flow, i token di accesso hanno una durata predefinita di un'ora.
Quando un token di accesso scade, viene restituito un errore HTTP 401:
{
code: 401,
message: 'Invalid or expired token.'
}
La tua applicazione avrà bisogno di aggiornare il token di accesso.
function refreshToken(refreshToken) {
return new Promise(function(resolve, reject){
request.post({
url: tokenUrl,
form: {
grant_type: 'refresh_token',
refresh_token: refreshToken,
client_id: clientId,
client_secret: clientSecret
}
},
function (error, httpResponse, body) {
if (error) {
return reject(error);
}
resolve(JSON.parse(body))
});
});
}In alternativa, la tua applicazione potrebbe reindirizzare l'utente al flusso di autenticazione.
Dopo aver osservato numerosi team costruire integrazioni con la Quire API, gli stessi cinque problemi si ripresentano sempre. Nessuno è sottile; tutti sono evitabili.
1. Memorizzare il client secret nel codice lato client. Il client secret è esattamente quello che dice: un segreto. Se finisce nel binario di un'app mobile o in un bundle per il browser, chiunque può estrarlo e impersonare la tua app. Il secret deve risiedere solo su un server che controlli. Se la tua app è puramente lato client (single-page app, mobile), usa il flusso OAuth 2.0 PKCE invece di incorporare il secret.
2. Dimenticare di validare il parametro state. Il parametro state esiste per prevenire gli attacchi CSRF. Se salti la sua validazione nel callback, hai lasciato una vulnerabilità che un sito malevolo può sfruttare per associare silenziosamente un account Quire alla sessione dell'app di un attaccante. Genera state per ogni richiesta, salvalo nella sessione e rifiuta qualsiasi callback in cui lo state restituito non corrisponde.
3. Trattare il token di accesso come permanente. I token di accesso scadono dopo un'ora. Le Apps che memorizzano il token senza mai aggiornarlo funzionano bene il primo giorno e si rompono silenziosamente il secondo. Costruisci il ciclo del refresh token prima di rilasciare qualsiasi cosa, non come una correzione da fare "quando gli utenti si lamentano".
4. Fare polling dell'API per rilevare i cambiamenti. Il polling consuma rate limit, introduce latenza e scarica la batteria. Se hai bisogno di reagire ai cambiamenti in Quire, usa i Webhooks. Il webhook ti invia l'evento istantaneamente; la chiamata API che avresti fatto per rilevare quell'evento non deve mai avvenire.
5. Saltare la lista di URL di redirezione consentiti. Ogni registrazione di app OAuth accetta un elenco di URL di redirezione. Se usi un wildcard o non lo configuri con precisione, un attaccante può registrare il proprio callback come target di reindirizzamento e intercettare i codici di autorizzazione. Aggiungi solo gli URL esatti che la tua app effettivamente utilizza.
Se stai sviluppando contro l'API per la prima volta, il modo più rapido per apprendere i pattern è fare un fork di un'integrazione esistente come il connettore n8n e studiare come gestisce autenticazione, aggiornamento del token e stati di errore.
Tre scenari in cui è meglio usare una superficie di integrazione diversa.
Se nessuno di questi casi si applica, l'API OAuth è lo strumento che fa per te.
No. La Quire API è disponibile su ogni piano, incluso il Free tier. I limiti di frequenza si applicano a tutti i piani; consulta la documentazione API per i limiti attuali per app.
L'API è basata su HTTP con corpo delle richieste e risposte in JSON, quindi qualsiasi linguaggio con un client HTTP e un parser JSON funziona. Gli esempi in questo articolo sono in JavaScript, ma lo stesso flusso funziona in modo identico in Python, Go, Ruby, PHP e qualsiasi altro linguaggio. Non esiste una libreria client ufficiale; la superficie dell'API è abbastanza piccola da rendere il pattern comune un sottile wrapper attorno al client HTTP del proprio linguaggio.
I token di accesso scadono dopo un'ora per impostazione predefinita. I refresh token durano più a lungo e possono essere usati per ottenere nuovi token di accesso senza richiedere nuovamente il consenso all'utente. Integra il ciclo del refresh token nella tua app fin dal primo giorno.
Sì. Gli scope OAuth ti permettono di richiedere solo i permessi di cui la tua app ha bisogno. Se la tua app legge solo le attività, richiedi scope di sola lettura. Gli utenti Quire vedranno gli scope richiesti nella pagina di autorizzazione e possono rifiutare se la richiesta sembra eccessiva, quindi richiedere troppo penalizza la conversione.
L'API è una superficie REST generica per qualsiasi app che voglia leggere o modificare i dati Quire per conto di un utente. Il server MCP è progettato appositamente per Claude e altri agenti LLM: gestisce l'autenticazione, espone uno schema di strumenti standard e ti evita di scrivere codice OAuth da zero. Usa l'API per le integrazioni con app tradizionali; usa MCP per le integrazioni con agenti LLM.
Questo è il flusso OAuth 2.0 completo per la Quire API: configurazione dell'app OAuth, autorizzazione in quattro passaggi, utilizzo del token di accesso e ciclo di aggiornamento. La ragione più comune per cui i developer rilasciano un'integrazione funzionante che si rompe due giorni dopo è trattare il ciclo di aggiornamento come una correzione futura invece di integrarlo fin dall'inizio.
Inizia dalla console per sviluppatori di Quire o leggi il riferimento API completo. Se preferisci non scrivere codice OAuth, il server Quire MCP gestisce l'autenticazione per te ed è la scelta giusta per le integrazioni con agenti LLM. Per le integrazioni event-driven, i Webhooks sono generalmente più adatti del pattern di polling con cui finiscono la maggior parte delle integrazioni API alla prima esperienza.