Autenticazione

Due credenziali — una chiave API per le macchine, una sessione per la console — e le regole che le tengono separate.

Due tipi di credenziale

L'API accetta una chiave API. La console accetta un cookie di sessione. Non sono intercambiabili, e l'API lo impone invece di decidere richiesta per richiesta se un cookie dovesse essere presente.

Un browser con sessione attiva non può chiamare l'API

Una richiesta autenticata con un cookie di sessione riceve 403 api_key_required, con un messaggio che rimanda alla pagina delle chiavi della console. Questo è intenzionale: senza un percorso autenticato tramite cookie verso l'API, non c'è nulla che una richiesta cross-site possa falsificare.

L'header

Invia la chiave come bearer token. Una chiave è un prefisso, un punto e un segreto; il prefisso identifica la riga, quindi la revoca è immediata e costa una singola ricerca.

curl https://api.llmeu.com/v1/chat/completions \
  -H "Authorization: Bearer llmeu_live_xxxxxxxx.your-secret" \
  -H "Content-Type: application/json" \
  -d '{"model":"llmeu-auto","messages":[{"role":"user","content":"Hello"}]}'

Ambiti

Una chiave porta uno o più ambiti. Una richiesta la cui chiave manca dell'ambito richiesto da un endpoint viene rifiutata con 403 insufficient_scope, prima che il corpo venga analizzato.

Ambito Sblocca
inference Chat completions, embeddings e gli endpoint di elenco e dettaglio dei modelli.
platform_read Legge la tua organizzazione: profilo, chiavi, utilizzo, tracce e policy.
platform_write Crea e revoca chiavi, e crea o modifica policy. Questo è l'ambito che cambia chi può fare cosa, quindi rilascialo con cautela.

Gli ambiti vengono controllati per endpoint, non per chiave. Una chiave con platform_read non può spendere credito tramite il playground.

Creare una chiave

Nella console, oppure tramite l'API della piattaforma con una chiave che porta già platform_write. Il segreto viene mostrato una sola volta, al momento della creazione: viene memorizzato solo un hash scrypt, quindi nessuno — noi compresi — può rileggerlo.

curl -X POST https://api.llmeu.com/platform/v1/api-keys \
  -H "Authorization: Bearer llmeu_live_xxxxxxxx.a-platform-write-key" \
  -H "Content-Type: application/json" \
  -d '{"name":"ci","scopes":["inference"]}'

Le azioni amministrative nella console — policy, team, impostazioni, credito, revoca delle chiavi — sono riservate al proprietario o all'amministratore, indipendentemente dagli ambiti di una chiave.

Revoca, e cosa non è una chiave

Una chiave appartiene a un'organizzazione, e l'organizzazione viene risolta dalla chiave stessa — mai da un campo nel corpo della richiesta, quindi un chiamante non può indirizzare un altro tenant chiedendo gentilmente. La revoca ha effetto alla richiesta successiva. La rotazione significa creare una seconda chiave, spostare il traffico, poi revocare la prima; non c'è una finestra di sovrapposizione da configurare.

Per la console, invece

Accesso, recupero password e verifica dell'indirizzo sono documentati insieme alla console. Non c'è OAuth, né SAML, né token di accesso personale: la console usa un cookie di sessione, l'API usa chiavi.