Vai al contenuto
Sursa Developers

Autenticazione

Ogni richiesta all’API di Sursa porta una chiave API, oppure un token di accesso OAuth di un’applicazione, nell’intestazione Authorization:

Authorization: Bearer kb_3f9c…

La chiave identifica l’organizzazione e decide cosa può vedere e modificare la richiesta: il suo ruolo, i suoi ambiti, il suo profilo dati e le sue raccolte. Sull’indirizzo dell’API non ci sono sessioni né cookie. Ogni richiesta viene autenticata da sola, quindi puoi inviare richieste in parallelo e da più server con la stessa chiave.

curl https://api.sursa.com/v1/me \
  -H "Authorization: Bearer $SURSA_API_KEY"

Le integrazioni precedenti possono inviare invece la chiave in un’intestazione X-API-Key. È ancora accettata, ma il codice nuovo dovrebbe usare Authorization: Bearer.

Tipi di credenziali

CredenzialeFormaDove funziona
Chiave API dell’organizzazionekb_…Ogni endpoint dell’API, entro il suo ruolo, i suoi ambiti, il suo profilo dati e le sue raccolte.
Chiave di una fonte personalizzatakbsrc_…Solo gli endpoint di invio della sua fonte personalizzata (/v1/push/sources/{source_id}/…).
Token di accesso OAuthkbat_…Gli endpoint del riferimento API, entro gli ambiti del token. Un token ottenuto da POST /oauth/token con un codice di autorizzazione agisce per conto del dipendente che ha dato il consenso; un token client_credentials agisce per l’organizzazione, come una chiave API. È valido per 1 ora.

Tutte le credenziali si inviano allo stesso modo. Una chiave di fonte personalizzata non può leggere, cercare né modificare nulla al di fuori della sua fonte; usala dove la chiave viene conservata da terzi, per esempio da una piattaforma di integrazione.

Errori di autenticazione

Stato e codiceCosa significaCosa fare
401 auth.not_authenticatedNessuna chiave, una chiave scritta in modo errato o una chiave revocata.Controlla l’intestazione e il valore della chiave.
401 api_keys.expiredLa chiave ha superato la data di scadenza.Crea una nuova chiave e sostituisci quella vecchia.
401 sources.push_key_invalidUna chiave di fonte personalizzata è errata, revocata o appartiene a un’altra fonte.Controlla la chiave e l’ID della fonte nel percorso.
401 oauth.token_expiredIl token di accesso OAuth è scaduto.Ottienine uno nuovo con il token di aggiornamento.
403 api_keys.scopeLa chiave non ha un ambito per questa operazione.Aggiungi l’ambito o usa una chiave che lo abbia.
403 api_keys.feature_disabledIl piano dell’organizzazione non include le chiavi API.Contatta l’amministratore dell’organizzazione.
403 api_keys.ip_not_allowedLa richiesta proviene da un indirizzo che non rientra tra gli indirizzi consentiti della chiave.Chiama da una rete consentita oppure modifica gli indirizzi della chiave.
403 api_keys.mcp_onlyÈ stata usata una chiave MCP personale al di fuori dell’endpoint /mcp.Per l’API usa una chiave API dell’organizzazione.
403 oauth.operation_not_allowedL’operazione non fa parte dell’API pubblica, quindi un token OAuth non può chiamarla.Usa un’operazione del riferimento API.
403 org.suspendedL’organizzazione è sospesa. I suoi dati vengono conservati.Contatta l’amministratore dell’organizzazione.

403 significa che la richiesta è stata autenticata ma non è consentita. Un oggetto che la chiave non può vedere risponde 404, come un oggetto che non esiste, quindi una chiave non può scoprire cosa c’è al di fuori del suo accesso.

Operare come un profilo dati

Una chiave con il ruolo admin può controllare cosa vedrebbe un altro gruppo di persone: l’intestazione X-View-As esegue una richiesta come un profilo dati e, facoltativamente, come un ruolo.

curl "https://api.sursa.com/v1/cards?limit=20" \
  -H "Authorization: Bearer $SURSA_ADMIN_KEY" \
  -H "X-View-As: employee:viewer"

Le richieste in questa modalità possono solo leggere: qualsiasi modifica restituisce 403 con il codice view_as.read_only. Un token OAuth, o una chiave senza il ruolo admin, non può usare X-View-As: la richiesta riceve 403 con il codice view_as.admin_key_required. Un’intestazione che non indica nessun profilo esistente riceve 400 con il codice view_as.invalid_header.

Applicazioni nel browser

L’API consente richieste da qualsiasi origine web (Access-Control-Allow-Origin: *) e non usa mai i cookie, quindi una pagina può chiamarla con fetch. La chiave in quel caso si trova nella pagina ed è visibile a chi la usa. Chiama l’API dal browser solo con una chiave che sei disposto a mostrare a quegli utenti, per esempio una chiave viewer limitata alle raccolte pubbliche, oppure metti un tuo server tra il browser e Sursa.

Cosa può fare solo un dipendente

Una chiave API dell’organizzazione agisce per l’organizzazione, non per una persona. Due parti dell’API appartengono alle persone, quindi funzionano solo con un token che agisce per conto di un dipendente: una sessione in Sursa o un token di accesso OAuth rilasciato con il consenso del dipendente.

Le conversazioni appartengono a una persona. Una chiave API dell’organizzazione vede in GET /v1/conversations solo le conversazioni che ha avviato lei stessa. L’API pubblica non ha nessuna operazione che avvii una conversazione, quindi per una chiave l’elenco di norma è vuoto, e le conversazioni dei dipendenti non le vengono mai mostrate. Le domande senza conversazione, con POST /v1/ask o POST /v1/chat, funzionano con qualsiasi chiave che abbia l’ambito ask. Per elencare le conversazioni di un dipendente e leggere la cronologia di una di esse con GET /v1/conversations/{conv_id}, chiama l’API con un token OAuth per conto di quel dipendente. Il token vede solo le conversazioni di quel dipendente; qualsiasi altra conversazione risponde 404 con il codice conversations.not_found.

Solo un dipendente verifica una scheda. La verifica conferma che una persona ha controllato il contenuto, quindi POST /v1/cards/{card_id}/verification/verify e POST /v1/cards/{card_id}/verify richiedono una sessione o un token OAuth per conto di un dipendente che può verificare la scheda. Con una chiave API dell’organizzazione, o con un token client_credentials, rispondono 400 con il codice cards.verify_user_account_required. I controlli abituali vengono prima: una scheda che la chiave non può vedere risponde 404, e una chiave che non ha il permesso di verificarla riceve 403.