Skip to content

Riferimento API

La Piattaforma NIS2 espone un'API REST all'indirizzo http://localhost:8000. Tutte le rotte sono precedute dal prefisso /api/v1/. La documentazione interattiva OpenAPI è disponibile in /docs (Swagger UI) e /redoc (ReDoc).

Tutti gli endpoint restituiscono JSON. Due modalità di autenticazione sono accettate su ogni rotta protetta:

  • Sessione con Cookie (web) — Cookie access_token httpOnly impostato da /auth/login o /auth/register. Le richieste che modificano lo stato devono inviare nuovamente il cookie csrf_token tramite l'header X-CSRF-Token (pattern double-submit).
  • Token Bearer (SDK / CLI) — Header Authorization: Bearer <jwt>. I token emessi da /auth/login sono validi; in questa modalità può essere utilizzato lo stesso access token del cookie.

Gli endpoint di sola lettura sotto scansioni / findings / asset accettano inoltre una Chiave API a lunga scadenza nel formato Authorization: Bearer nis2_… (nessun cookie richiesto). Le chiavi vengono emesse tramite POST /api/v1/api-keys (solo admin) e il valore grezzo viene mostrato una sola volta. Gli endpoint di mutazione (POST / PATCH / DELETE) su tali risorse richiedono comunque una sessione: le colonne di audit log e created_by necessitano infatti di un'identità utente a cui attribuire la modifica.

Autenticazione

MetodoPercorsoDescrizioneAuth
POST/api/v1/auth/registerRegistra un nuovo utente e crea un'organizzazione. Restituisce token di accesso e di aggiornamento (impostati anche come cookie httpOnly per il client web)No
POST/api/v1/auth/loginOttiene i token di accesso e di aggiornamentoNo
POST/api/v1/auth/refreshRuota il token di accesso utilizzando il cookie del token di aggiornamento. I refresh token sono monouso (jti tracciato in revoked_tokens); il riutilizzo di uno di essi revoca l'intera famigliaNo
POST/api/v1/auth/logoutPulisce i cookie e revoca il token di aggiornamento
GET/api/v1/auth/meOttiene il profilo dell'utente corrente
PATCH/api/v1/auth/meAggiorna il profilo dell'utente corrente (nome / locale / avatar). Non accetta current_password / new_password — vedi /auth/change-password
POST/api/v1/auth/change-passwordCambia la password dell'utente. Verifica current_password, esegue l'hash di new_password, marca la data in password_changed_at (invalidando alla prima richiesta tutte le altre sessioni attive) e riemette i cookie per questa sessione. Rate limit: 5/min/IP
POST/api/v1/auth/forgot-passwordAvvia il flusso di ripristino via email. Restituisce sempre 204 a prescindere dall'esistenza dell'email, in modo da non permettere l'enumerazione degli utenti. Rate limit: 5/min/IPNo
POST/api/v1/auth/reset-passwordCompleta il flusso di ripristino con un token monouso (inviato out-of-band via email) e una nuova password. I token sono sottoposti ad hash sha256 a riposo, scadono dopo RESET_TOKEN_TTL_MINUTES (default 30) e un singolo 400 copre gli stati {sconosciuto, scaduto, usato} — impedendo attacchi oracolo. Rate limit: 10/min/IPNo
POST/api/v1/auth/switch-orgCambia l'organizzazione attiva per la sessione corrente. Body: {"organization_id": "<uuid>"}. Valida che il chiamante sia membro dell'organizzazione target (altrimenti 403), dopodiché emette nuovi token access / refresh / csrf con il claim org_id aggiornato e ruota i cookie. Restituisce TokenResponse (stessa struttura di /login). Rate limit: 10/min/IP

Scansioni

Legenda colonna Auth: Sessione = cookie o Bearer <jwt>. Chiave API = ammesso anche Bearer nis2_… (cookie non richiesto).

MetodoPercorsoDescrizioneAuth
GET/api/v1/scansElenca le scansioni per l'organizzazione corrente. Filtrabile tramite status. ImpaginatoSessione o Chiave API
POST/api/v1/scansCrea e accoda una nuova scansioneSessione
GET/api/v1/scans/{scan_id}Ottiene i dettagli e lo stato della scansioneSessione o Chiave API
DELETE/api/v1/scans/{scan_id}Elimina una scansione e i relativi finding (solo admin)Sessione
GET/api/v1/scans/{scan_id}/resultsElenca i risultati grezzi di una scansione. ImpaginatoSessione o Chiave API
GET/api/v1/scans/{scan_id}/findingsElenca i finding di una scansione. ImpaginatoSessione o Chiave API
POST/api/v1/scans/{scan_id}/cancelAnnulla una scansione in coda o in esecuzioneSessione
GET/api/v1/scans/{scan_id}/compare/{other_id}Confronta due scansioni: scarto del punteggio, finding nuovi/risolti/persistentiSessione o Chiave API

Risultati (Findings)

MetodoPercorsoDescrizioneAuth
GET/api/v1/findingsElenca tutti i finding. Filtrabile per severity, status, category. ImpaginatoSessione o Chiave API
GET/api/v1/findings/statsOttiene il conteggio dei finding raggruppati per gravità e statoSessione o Chiave API
GET/api/v1/findings/{finding_id}Ottiene i dettagli del findingSessione o Chiave API
PATCH/api/v1/findings/{finding_id}Aggiorna lo stato del finding o la nota di risoluzioneSessione
POST/api/v1/findings/bulk-updateAggiornamento in massa (bulk) dello stato per più findingSessione

Asset

MetodoPercorsoDescrizioneAuth
GET/api/v1/assetsElenca gli asset dell'organizzazione corrente. ImpaginatoSessione o Chiave API
POST/api/v1/assetsCrea un nuovo assetSessione
GET/api/v1/assets/{asset_id}Ottiene i dettagli dell'assetSessione o Chiave API
PATCH/api/v1/assets/{asset_id}Aggiorna un assetSessione
DELETE/api/v1/assets/{asset_id}Elimina un assetSessione
POST/api/v1/assets/importImporta asset da un file CSVSessione

Pianificazioni (Schedules)

MetodoPercorsoDescrizioneAuth
GET/api/v1/schedulesElenca le pianificazioni di scansione
POST/api/v1/schedulesCrea una pianificazione (espressione cron). Solo admin o auditor
PATCH/api/v1/schedules/{schedule_id}Aggiorna una pianificazione
DELETE/api/v1/schedules/{schedule_id}Elimina una pianificazione
POST/api/v1/schedules/{schedule_id}/runAttiva immediatamente un'esecuzione manuale della pianificazione

Report

MetodoPercorsoDescrizioneAuth
POST/api/v1/reports/generateAccoda la generazione del report. Parametri: scan_id, format (pdf, html, markdown, json, csv, junit). Restituisce un task_id. Deduplicazione: richieste identiche entro 5 min restituiscono il task_id esistente con deduplicated: true. Rate limit 5/min/IP. Il report è renderizzato nella lingua dell'utente
GET/api/v1/reports/status/{task_id}Controlla lo stato della generazione del report tramite ID del task Celery
GET/api/v1/reports/download/{task_id}Scarica un report generato

Organizzazioni

MetodoPercorsoDescrizioneAuth
GET/api/v1/organizationsElenca le organizzazioni a cui appartiene l'utente corrente
POST/api/v1/organizationsCrea una nuova organizzazione
GET/api/v1/organizations/{org_id}Ottiene i dettagli dell'organizzazione
PATCH/api/v1/organizations/{org_id}Aggiorna le impostazioni dell'organizzazione (solo admin)
GET/api/v1/organizations/{org_id}/membersElenca i membri dell'organizzazione
POST/api/v1/organizations/{org_id}/membersInvita un membro tramite email (solo admin)
PATCH/api/v1/organizations/{org_id}/members/{member_id}Aggiorna il ruolo di un membro (solo admin)
DELETE/api/v1/organizations/{org_id}/members/{member_id}Rimuove un membro (solo admin). Non può rimuovere l'ultimo admin

Integrità (Health)

MetodoPercorsoDescrizioneAuth
GET/api/v1/healthControllo di liveness. Restituisce {"status": "ok"}No
GET/api/v1/health/readyControllo di readiness. Testa la connettività al database e RedisNo

Certificati

MetodoPercorsoDescrizioneAuth
POST/api/v1/certificates/checkAnalisi profonda dei certificati per un singolo dominio. Restituisce catena, OCSP, log CT, forza della chiave, punteggio da 0-100
POST/api/v1/certificates/bulk-checkAnalizza fino a 50 domini in blocco con statistiche riepilogative
GET/api/v1/certificates/ct-logs/{domain}Interroga i registri di Certificate Transparency via crt.sh

Remediation

MetodoPercorsoDescrizioneAuth
GET/api/v1/remediation/playbooksElenca tutti i playbook di remediation disponibiliNo
GET/api/v1/remediation/playbooks/{id}Ottiene l'intero playbook con step, config e stime dell'effortNo
GET/api/v1/remediation/for-finding/{finding_id}Assegna automaticamente il playbook migliore per uno specifico finding
GET/api/v1/remediation/estimate/{scan_id}Calcola l'effort e il costo totale della remediation per l'intera scansione
POST/api/v1/remediation/explain/{finding_id}Spiegazione potenziata dall'AI del finding. Prova prima il LLM locale, poi OpenAI, infine ricade sui playbook

Incidenti

MetodoPercorsoDescrizioneAuth
POST/api/v1/incidentsSegnala un incidente (Tassonomia Art. 23 CSIRT)
GET/api/v1/incidentsElenca gli incidenti dell'organizzazione
GET/api/v1/incidents/{id}Dettagli di un incidente
PATCH/api/v1/incidents/{id}Aggiorna i dettagli o lo stato dell'incidente

Governance

MetodoPercorsoDescrizioneAuth
GET/api/v1/governance/checklistOttiene i 30 elementi della checklist di governance NIS2 coi relativi stati
PATCH/api/v1/governance/checklist/{item_id}Aggiorna lo stato di una voce della checklist
POST/api/v1/governance/seedPopola la checklist dal template di governance
GET/api/v1/governance/scoreOttiene il punteggio di conformità pesato

Chiavi API

MetodoPercorsoDescrizioneAuth
GET/api/v1/api-keysElenca le chiavi API dell'organizzazione (admin o auditor)
POST/api/v1/api-keysCrea una nuova chiave API (solo admin). Il token grezzo è mostrato solo una volta
DELETE/api/v1/api-keys/{key_id}Revoca una chiave API (solo admin)

Audit Log

MetodoPercorsoDescrizioneAuth
GET/api/v1/audit-logsElenca le voci di audit per l'organizzazione. Filtrabile. Impaginato

Fornitori (Art. 18 Supply Chain)

MetodoPercorsoDescrizioneAuth
GET/api/v1/vendorsElenca i fornitori dell'organizzazione, ordinati per criticità
POST/api/v1/vendorsRegistra un nuovo fornitore/supplier
GET/api/v1/vendors/statsPanoramica del rischio della supply chain
GET/api/v1/vendors/{vendor_id}Dettagli del fornitore
PATCH/api/v1/vendors/{vendor_id}Aggiorna dettagli, stato o assessment di sicurezza
DELETE/api/v1/vendors/{vendor_id}Rimuove un fornitore

Analisi di Impatto Aziendale (BIA)

MetodoPercorsoDescrizioneAuth
GET/api/v1/biaElenca i processi aziendali dell'organizzazione
POST/api/v1/biaRegistra un processo aziendale per la BIA
GET/api/v1/bia/matrixMatrice d'impatto BIA
GET/api/v1/bia/{process_id}Dettagli del processo aziendale
DELETE/api/v1/bia/{process_id}Rimuove un processo aziendale

Esportazione ACN (Italia)

MetodoPercorsoDescrizioneAuth
GET/api/v1/acn-export/art18Esporta l'inventario dei fornitori (Art. 18) in JSON compatibile ACN
GET/api/v1/acn-export/biaEsporta i dati BIA in JSON compatibile ACN

Scadenze di Conformità

MetodoPercorsoDescrizioneAuth
GET/api/v1/deadlinesTimeline delle scadenze di conformità NIS2No

Emergenza CSIRT (Art. 23)

MetodoPercorsoDescrizioneAuth
POST/api/v1/csirt/emergencyGenera il payload di Early Warning per l'Art. 23 a partire da dati minimi

Errori (Risposte)

Tutti gli errori seguono un formato coerente:

json
{
  "detail": "Descrizione dell'errore"
}
CodiceSignificato
400Bad request (errore di validazione)
401Unauthorized (token mancante o non valido)
403Forbidden (permessi insufficienti)
404Risorsa non trovata
409Conflitto (risorsa duplicata)
422Entità non elaborabile (corpo della richiesta non valido)
429Troppe richieste (rate limit raggiunto)
500Errore interno del server