Le chiavi API sono firmate con HMAC alla creazione: la chiave contiene la propria prova di integrità nel formato praxium_v1_<tenant>_<profile>_<timestamp>_<signature>, dove la firma è derivata lato server con HMAC-SHA256 da un segreto di firma per profilo, conservato cifrato nel database — il segreto non viaggia mai in rete, viaggia solo la firma che produce. Il nome breve dell’organizzazione è legato crittograficamente alla firma, quindi una chiave emessa per l’organizzazione A non può essere riusata sull’organizzazione B senza invalidare la verifica. All’arrivo il server verifica l’integrità della chiave prima di restituire qualsiasi dato, e le chiavi falsificate o riusate ricevono un 403.
Le richieste si autenticano con il consueto Authorization: Bearer <key> su HTTPS — lo stesso schema usato da GitHub, OpenAI, Slack e Notion.
Inoltre ogni chiave appartiene a un solo profilo API, che definisce esattamente quali tipi di dati e campi può leggere. Ogni integrazione tocca solo i dati che le servono — il principio del privilegio minimo, applicato al singolo campo e non all’endpoint. La revoca e la rotazione avvengono per profilo dal portale di amministrazione.