SpectraSpectra

Documentazione

Membri & utenti

Elenca i membri dell'organizzazione e, con i permessi di Admin, creali, aggiornane i dettagli (nome, username, dati anagrafici, avatar) o rimuovili. L'avatar è leggibile pubblicamente.

Membri & utenti

Gestione amministrativa dei membri dell'organizzazione: elenco, creazione, aggiornamento di credenziali e authority, profilo e avatar di ciascun utente.

Elenco

Ottieni l'elenco dei membri con i relativi dati di profilo.

GEThttps://api.spectraholo.it/v1/organization/{id}/membersAuthority ≥ 0 · Lettura

Elenco dei membri

Recupera l'elenco completo di tutti i membri (utenti) dell'organizzazione indicata. Per ogni membro restituisce i dati di profilo pubblici: id, nome, cognome, username, email, URL dell'avatar (null se non impostato), data di nascita e indirizzo. L'autenticazione accetta un token di sessione valido (Bearer o cookie) per qualsiasi utente dell'organizzazione con livello AUTHORITY_VIEW o superiore, oppure una backend API key per le chiamate server-to-server.

Autenticazione: Token utente (Bearer) — qualsiasi membro

Parametri del percorso

id*ID numerico dell'organizzazione. Deve essere un intero positivo valido.

Esempio di richiesta

GET https://api.spectraholo.it/v1/organization/42/members

Risposta200

{
  "members": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "firstName": "John",
      "lastName": "Doe",
      "username": "johndoe",
      "email": "john@example.com",
      "avatarUrl": "https://api.spectraholo.it/avatars/org/123/user/550e8400-e29b-41d4-a716-446655440000/avatar.png",
      "birthDate": "1990-05-15",
      "address": "123 Main St"
    }
  ]
}

Errori

  • 400ID dell'organizzazione non valido (non numerico o fuori intervallo)
  • 401Nessuna autenticazione valida fornita (token di sessione e backend API key mancanti, oppure entrambi non validi)
  • 502Il server di autenticazione è irraggiungibile o restituisce un errore durante la validazione della sessione

Gestione utenti

Crea, aggiorna e rimuovi gli utenti dell'organizzazione.

POSThttps://api.spectraholo.it/v1/organization/{id}/userAuthority ≥ 3 · Admin

Crea un utente

Crea un nuovo utente nell'organizzazione indicata, replicando i dati nel database locale (senza password) e sul server di autenticazione (con password hashata e livello di authority). Se non viene fornito un avatar, ne viene generato uno automaticamente. Sono supportate due modalità di autenticazione: backend API key (header x-backend-api-key) oppure sessione utente con authority >= 3 (amministratore).

Autenticazione: Token utente (Bearer) — authority ≥ 3 (Admin)

Parametri del percorso

id*ID dell'organizzazione (intero >= 0 in forma canonica, senza zeri iniziali)

Corpo della richiesta · multipart/form-data

email*
string (email)
Indirizzo email dell'utente (formato: user@domain.ext)
firstName*
string
Nome dell'utente (1–64 caratteri)
lastName*
string
Cognome dell'utente (1–64 caratteri)
username*
string
Nome utente univoco nell'organizzazione (3–32 caratteri, alfanumerici + '.', '_', '-')
password*
string
Password in chiaro (8–128 caratteri; gli spazi sono consentiti)
authorityLevel*
integer (0–3)
Livello di authority: 0=visualizza, 1=visualizza+controllo, 2=visualizza+controllo+gestione, 3=admin completo
birthDatefacolt.
string (YYYY-MM-DD)
Data di nascita (opzionale, formato YYYY-MM-DD)
addressfacolt.
string
Indirizzo di residenza (opzionale, max 256 caratteri)
avatarfacolt.
file (PNG/JPEG/GIF/WEBP)
Avatar dell'utente (opzionale, max 2 MB; se non fornito viene generato automaticamente)

Esempio di richiesta

POST https://api.spectraholo.it/v1/organization/42/user

# Campi del modulo (multipart/form-data)
email          = mario.rossi@azienda.it
firstName      = Mario
lastName       = Rossi
username       = mario.rossi
password       = Password-2026!
authorityLevel = 2
birthDate      = 1990-05-15
address        = Via Roma 1, Milano
avatar         = @avatar.png

Risposta201

{
  "success": true,
  "user": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "organizationId": 42,
    "username": "john.doe",
    "firstName": "John",
    "lastName": "Doe",
    "email": "john.doe@example.com",
    "authorityLevel": 2,
    "createdAt": "2026-06-15T10:30:00.000Z",
    "avatarUrl": "https://api.spectraholo.it/avatars/42/550e8400-e29b-41d4-a716-446655440000?v=abc123"
  }
}

Errori

  • 400Il corpo non è multipart/form-data, campi obbligatori mancanti o non validi (email, username, password, data, authority level), immagine avatar in formato non supportato
  • 401Backend API key assente o non valida, oppure sessione non valida / scaduta
  • 403Sessione valida ma utente con authority < 3 (insufficiente per l'amministrazione degli utenti)
  • 404L'organizzazione non esiste
  • 409Username o email già in uso nell'organizzazione, oppure l'organizzazione ha raggiunto il limite massimo di utenti
  • 413L'avatar supera il limite di dimensione (max 2 MB)
  • 502Il server di autenticazione è irraggiungibile o fallisce durante la registrazione dell'utente
PATCHhttps://api.spectraholo.it/v1/organization/{id}/user/{userId}Authority ≥ 3 · Admin

Aggiorna email/authority di un utente

Aggiorna l'indirizzo email e/o il livello di authority di un utente all'interno dell'organizzazione. Il livello di authority dell'utente principale non può essere abbassato sotto 3 (errore 409). È un'azione amministrativa che richiede livello AUTHORITY_ADMIN (3) o una backend API key. L'aggiornamento viene validato localmente e propagato al server di autenticazione (fonte di verità per credenziali e authority).

Autenticazione: Token utente (Bearer) — authority ≥ 3 (Admin)

Parametri del percorso

id*ID dell'organizzazione (intero non negativo in forma canonica, senza zeri iniziali)
userId*ID dell'utente (UUID v4 in forma canonica minuscola con trattini)

Corpo della richiesta · application/json

emailfacolt.
string
Nuovo indirizzo email (deve rispettare un formato simile a RFC con @ e dominio). Se fornito, deve essere univoco all'interno dell'organizzazione.
authorityLevelfacolt.
number
Livello di authority (intero 0–3, permessi cumulativi). AUTHORITY_VIEW=0 (sola lettura), AUTHORITY_DISPLAY=1 (controllo viewer), AUTHORITY_MANAGE=2 (caricamento/pairing di modelli e viewer), AUTHORITY_ADMIN=3 (amministrazione completa inclusa la gestione utenti). Almeno uno tra email e authorityLevel deve essere fornito.

Esempio di corpo (JSON)

{
  "email": "mario.rossi@azienda.it",
  "authorityLevel": 2
}

Risposta200

{
  "success": true,
  "message": "User successfully updated!",
  "userId": "550e8400-e29b-41d4-a716-446655440000"
}

Errori

  • 400Il corpo della richiesta non è JSON valido, oppure i tipi dei campi richiesti sono errati
  • 400Né il campo 'email' né 'authorityLevel' sono forniti (niente da aggiornare)
  • 400Formato email non valido (manca il simbolo @ o il dominio)
  • 400authorityLevel non è un intero o è fuori dall'intervallo 0–3
  • 401Nessuna autenticazione valida fornita (header backend API key mancante e/o token di sessione non valido)
  • 403Il livello di authority dell'utente della sessione è inferiore a 3 (richiesto AUTHORITY_ADMIN)
  • 404Organizzazione o utente non trovati
  • 409L'email è già in uso all'interno dell'organizzazione
  • 409Tentativo di abbassare l'utente principale dell'organizzazione sotto il livello di authority 3
  • 502Il server di autenticazione è irraggiungibile o fallisce nell'aggiornare credenziali/authority dell'utente
DELETEhttps://api.spectraholo.it/v1/organization/{id}/user/{userId}Authority ≥ 3 · Admin

Rimuovi un utente

Rimuove un utente dall'organizzazione, eliminando il record locale e propagando la rimozione al server di autenticazione (che a cascata invalida tutte le sessioni attive di quell'utente). L'utente principale dell'organizzazione non può essere eliminato (solo tramite l'eliminazione dell'organizzazione). È un'azione amministrativa che richiede livello AUTHORITY_ADMIN (3) o una backend API key.

Autenticazione: Token utente (Bearer) — authority ≥ 3 (Admin)

Parametri del percorso

id*ID dell'organizzazione (intero non negativo in forma canonica, senza zeri iniziali)
userId*ID dell'utente (UUID v4 in forma canonica minuscola con trattini)

Esempio di richiesta

DELETE https://api.spectraholo.it/v1/organization/42/user/550e8400-e29b-41d4-a716-446655440000

Risposta200

{
  "success": true,
  "message": "User successfully deleted!",
  "userId": "550e8400-e29b-41d4-a716-446655440000"
}

Errori

  • 401Nessuna autenticazione valida fornita (header backend API key mancante e/o token di sessione non valido)
  • 403Il livello di authority dell'utente della sessione è inferiore a 3 (richiesto AUTHORITY_ADMIN)
  • 404Organizzazione non trovata
  • 404Utente non trovato nell'organizzazione
  • 409Tentativo di eliminare l'utente principale dell'organizzazione (non eliminabile; occorre eliminare l'intera organizzazione)
  • 502Il server di autenticazione è irraggiungibile o fallisce nel rimuovere l'utente

Profilo & avatar

Modifica il profilo di un membro e gestiscine l'avatar.

PATCHhttps://api.spectraholo.it/v1/organization/{id}/user/{userId}/profileAuthority ≥ 3 · Admin

Aggiorna il profilo di un membro

Aggiorna le informazioni di profilo di un membro (nome, cognome, username, data di nascita, residenza). L'email non può essere modificata tramite questo endpoint. Richiede authority di org-admin oppure una backend API key (console del superadmin).

Autenticazione: Token utente (Bearer) — authority ≥ 3 (Admin)

Parametri del percorso

id*ID dell'organizzazione (intero numerico)
userId*ID dell'utente (stringa UUID)

Corpo della richiesta · application/json

firstName*
string
Nome del membro (1–64 caratteri, con trim)
lastName*
string
Cognome del membro (1–64 caratteri, con trim)
username*
string
Username del membro (3–32 caratteri: lettere, cifre, '.', '_', '-')
birthDatefacolt.
string or null
Data di nascita in formato YYYY-MM-DD, oppure null per azzerarla
addressfacolt.
string or null
Residenza/indirizzo (1–256 caratteri se fornito, oppure null per azzerarlo)

Esempio di corpo (JSON)

{
  "firstName": "Mario",
  "lastName": "Rossi",
  "username": "mario.rossi",
  "birthDate": "1990-05-15",
  "address": "Via Roma 1, Milano"
}

Risposta200

{
  "success": true,
  "message": "Member profile updated.",
  "userId": "550e8400-e29b-41d4-a716-446655440000"
}

Errori

  • 400Campi obbligatori mancanti (firstName, lastName, username), formato non valido (regex username, data YYYY-MM-DD) oppure corpo JSON non valido
  • 401Bearer token (sessione) mancante o non valido e nessuna backend API key presente
  • 403Il token di sessione è valido ma il livello di authority dell'utente è inferiore a 3 (AUTHORITY_ADMIN)
  • 404Utente non trovato nell'organizzazione indicata
  • 409Username già in uso all'interno dell'organizzazione
  • 502Il server di autenticazione è irraggiungibile o la richiesta fallisce durante la validazione della sessione
GEThttps://api.spectraholo.it/v1/organization/{id}/user/{userId}/avatarPubblico

Avatar di un utente

Recupera l'immagine dell'avatar di un utente specifico all'interno di un'organizzazione. L'avatar viene servito dallo storage cloud con header di sicurezza che impediscono l'esecuzione di contenuto attivo (SVG, HTML) qualora servito come immagine. Le risposte includono header di cache control.

Autenticazione: Pubblico — nessuna autenticazione

Parametri del percorso

id*ID dell'organizzazione (formato numerico validato)
userId*ID dell'utente (formato UUID validato)

Esempio di richiesta

GET https://api.spectraholo.it/v1/organization/42/user/550e8400-e29b-41d4-a716-446655440000/avatar

Risposta200

Binary image data (PNG/JPEG/GIF/WEBP format)

Errori

  • 404Avatar non trovato per l'utente indicato
POSThttps://api.spectraholo.it/v1/organization/{id}/user/{userId}/avatarAuthority ≥ 3 · Admin

Aggiorna l'avatar di un utente

Aggiorna l'immagine dell'avatar di un utente specifico all'interno di un'organizzazione. Richiede una richiesta multipart/form-data con il file immagine nel campo 'avatar'. Solo gli amministratori dell'organizzazione (authority 3) o la backend API possono eseguire questa azione. I formati immagine supportati sono PNG, JPEG, GIF e WEBP. La dimensione massima del file è MAX_AVATAR_BYTES (tipicamente 2 MB). Il formato dell'immagine viene verificato ispezionando i magic bytes, non il content-type dichiarato.

Autenticazione: Token utente (Bearer) — authority ≥ 3 (Admin)

Parametri del percorso

id*ID dell'organizzazione (formato numerico validato)
userId*ID dell'utente (formato UUID validato)

Corpo della richiesta · multipart/form-data

avatar*
file (binary image)
File immagine dell'avatar. Formati supportati: PNG, JPEG, GIF, WEBP. Dimensione massima definita dalla configurazione MAX_AVATAR_BYTES (circa 2 MB). Il content-type è determinato dai magic bytes del file, non dall'header multipart.

Esempio di richiesta

POST https://api.spectraholo.it/v1/organization/42/user/550e8400-e29b-41d4-a716-446655440000/avatar

# Campi del modulo (multipart/form-data)
avatar = @avatar.png

Risposta200

{
  "message": "Avatar updated.",
  "avatarUrl": "https://api.spectraholo.it/avatars/org-123/user-456.png"
}

Errori

  • 400Il corpo della richiesta non è multipart/form-data valido, oppure il campo avatar è mancante o vuoto
  • 400Il formato dell'immagine dell'avatar non è supportato (sono ammessi solo PNG, JPEG, GIF, WEBP)
  • 401Nessuna autenticazione valida fornita (token di sessione e backend API key mancanti)
  • 403Il token di sessione è valido ma il livello di authority dell'utente è inferiore ad ADMIN (livello 3)
  • 404L'utente non esiste nell'organizzazione indicata
  • 413La dimensione del file dell'avatar supera il limite massimo (circa 2 MB)
  • 502Il server di autenticazione è irraggiungibile o fallisce nel validare la sessione