
Ultimo aggiornamento: 28 maggio 2026
TL;DR: L'API OAuth 2.0 di Quire consente alla tua app di agire sull'account Quire di un utente senza memorizzarne la password. Avrai bisogno di un'app OAuth registrata (client ID, secret, URL di redirezione), di un flusso di autorizzazione in quattro passaggi (configurazione, reindirizzamento, gestione della risposta, scambio del codice per il token) e di un ciclo del token di aggiornamento, poiché i token di accesso scadono dopo un'ora.
Sviluppare un'app che legga o modifichi i dati Quire di un utente inizia con una decisione: come autenticarsi senza mai vedere la password dell'utente? La Quire API risponde 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 i modi più comuni in cui gli sviluppatori sbagliano 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 Ora senza cambiare la password — ecco perché le integrazioni che memorizzavano le password erano un antipattern di sicurezza prima che OAuth le rendesse superflue.
Prima di configurare l'API OAuth, assicurati che l'API sia davvero lo strumento giusto. Quire ha quattro superfici di integrazione supportate nel 2026, e risolvono problemi diversi.
| Se hai bisogno di... | Usa | Perché |
|---|---|---|
| Leggere o modificare dati Quire per conto di un utente nella tua app | Quire OAuth API (questo articolo) | Autorizzazione utente, accesso CRUD completo, nessun polling necessario |
| Reagire agli eventi in Quire (Attività creata, Stato cambiato, commento aggiunto) | Quire Webhooks | Push-based, nessun overhead di polling, configurazione leggera |
| Connettere Quire a Claude o a un altro agente AI | Server MCP di Quire | Protocollo standard per strumenti LLM, espone uno schema di strumenti standard con server preconfigurato |
| Inserire Quire in un flusso di automazione o BI | API OAuth più n8n o Power BI | Pipeline consolidate, meno codice personalizzato |
Se stai sviluppando una tipica integrazione app (app mobile, dashboard web, servizio di sincronizzazione), l'API OAuth è ciò di cui hai bisogno. Il resto di questo articolo presuppone che tu stia seguendo questo percorso.
Per utilizzare la Quire API, dovrai creare un'app OAuth.
Per creare un'app dovrai essere connesso al tuo account Quire.
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 fornire il seguente URL:
http://localhost:3000/callback
Clicca sul pulsante Crea nuova app: la tua nuova applicazione OAuth verrà presentata nella pagina della console per sviluppatori, dove potrai configurarla ulteriormente.

In sintesi, dovresti avere queste tre informazioni:
http://localhost:3000/callback
Inserisci le informazioni di configurazione dell'applicazione nella tua 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 i tuoi utenti all'endpoint OAuth di Quire. Verrà mostrata 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 utilizzata per prevenire gli 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 facoltativo, ti 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 in 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 al redirect_uri della tua applicazione, nella stringa di query saranno presenti anche i parametri code e state. Il parametro state è il tuo token anti-CSRF da validare.
Estrai il codice e lo stato dai parametri della stringa di query. A questo punto lo stato può essere validato.
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 di 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 utilizzato lì. |
Un esempio di richiesta di 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.
Risposta di esempio:
{
"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 Quire API.
La tua app dispone ora di un token di accesso che può essere utilizzato 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))
});
});
}Risposta di esempio:
{
"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 progettato per un utilizzo a breve termine. Questo è un importante meccanismo di sicurezza di OAuth 2.0. Quando si utilizza il flusso Authorization Code Grant, i token di accesso hanno una durata predefinita di un'ora.
Quando un token di accesso scade, verrà restituito un errore HTTP 401:
{
code: 401,
message: 'Invalid or expired token.'
}
Your application will need to refresh the access token.
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 team che sviluppano con la Quire API, gli stessi cinque problemi si ripresentano regolarmente. Nessuno è sottile; tutti sono evitabili.
1. Inserire il client secret nel codice lato client. Il client secret è esattamente questo: un segreto. Se finisce nel binario di un'app mobile o in un bundle del browser, chiunque può estrarlo e impersonare la tua app. Il secret deve vivere solo su un server sotto il tuo controllo. Se la tua app è puramente lato client (single-page app, mobile), usa il flusso OAuth 2.0 PKCE invece di incorporare il secret.
2. Non validare il parametro state. Il parametro state esiste per prevenire gli attacchi CSRF. Se salti la sua validazione nel callback, hai lasciato una falla che un sito malevolo può sfruttare per associare silenziosamente un account Quire alla sessione dell'app di un attaccante. Genera state per ogni richiesta, conservalo nella sessione e rifiuta qualsiasi callback in cui lo stato restituito non corrisponda.
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 perfettamente il primo giorno e si rompono silenziosamente il secondo. Costruisci il ciclo del token di aggiornamento prima di rilasciare qualsiasi cosa, non come una "correzione quando gli utenti si lamentano".
4. Eseguire polling dell'API per rilevare i cambiamenti. Il polling consuma il limite di frequenza, aumenta la latenza e scarica la batteria. Se hai bisogno di reagire ai cambiamenti in Quire, usa invece i Webhooks. Il webhook ti recapita l'evento istantaneamente; la chiamata API che avresti dovuto fare per rilevare quell'evento non deve mai avvenire.
5. Saltare la lista di URL di redirezione autorizzati. Ogni registrazione di app OAuth accetta un elenco di URL di redirezione. Se usi caratteri jolly o salti una configurazione precisa, un attaccante può registrare il proprio callback come destinazione del tuo URL di redirezione e intercettare i codici di autorizzazione. Aggiungi solo gli URL esatti che la tua app utilizza effettivamente.
Se stai sviluppando con l'API per la prima volta, il modo più rapido per imparare i pattern è fare il fork di un'integrazione esistente come il connettore n8n e studiare come gestisce autenticazione, aggiornamento e stati di errore.
Tre scenari in cui dovresti optare per una superficie di integrazione diversa.
Se nessuno di questi scenari si applica, l'API OAuth è il tuo strumento.
No. La Quire API è disponibile su tutti i piani, incluso il livello gratuito. 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 corpi di richiesta e risposta in JSON, quindi funziona qualsiasi linguaggio dotato di un client HTTP e di un parser JSON. 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 ridotta da rendere il pattern comune un sottile wrapper attorno al client HTTP del tuo linguaggio.
I token di accesso scadono dopo un'ora per impostazione predefinita. I token di aggiornamento durano più a lungo e possono essere utilizzati per ottenere nuovi token di accesso senza richiedere nuovamente all'utente di autenticarsi. Integra il ciclo del token di aggiornamento nella tua app fin dal primo giorno.
Sì. Gli scope OAuth ti permettono di richiedere solo i Permessi necessari alla tua app. Se la tua app legge solo le Attività, richiedi scope di sola lettura. Gli utenti Quire vedranno gli scope richiesti sulla pagina di autorizzazione e possono rifiutare se la richiesta sembra eccessiva, quindi richiedere troppo penalizza la conversione.
L'API è una superficie REST per uso generale, adatta a qualsiasi app che voglia leggere o modificare 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 fa sì che tu non debba 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. Il motivo più comune per cui gli sviluppatori rilasciano un'integrazione funzionante che si rompe due giorni dopo è trattare il ciclo di aggiornamento come una correzione da fare in seguito invece di integrarlo fin dal primo giorno.
Inizia dalla console per sviluppatori di Quire o leggi il riferimento API completo. Se preferisci non scrivere codice OAuth del tutto, il server MCP di Quire gestisce l'autenticazione per te ed è la scelta giusta per le integrazioni con agenti LLM. Per le integrazioni event-driven, i Webhooks sono solitamente più adatti rispetto al pattern di polling con cui finiscono la maggior parte delle integrazioni API alla prima esperienza.