Recupera la diagnostica di un membro
GET /v1/organizations/{org_id}/memberships/{membership_id}/diagnostics · permessi organizations:read e users:read
Risponde alla domanda "perché questo membro non riesce ad accedere?" per un amministratore dell'organizzazione in un'unica risposta: l'appartenenza, un riepilogo delle policy dell'organizzazione, un invito in sospeso, un riepilogo degli autenticatori del membro, lo stato di accesso nel contesto dell'organizzazione, i gruppi di directory del membro e l'accesso del membro alle applicazioni. È di sola lettura: non cambia nulla, e le azioni di scrittura usano i rispettivi endpoint. L'attività di accesso si legge con Elenca i log di un utente e org_id.
Vengono restituiti solo i dati che appartengono all'organizzazione. Etichette, AAGUID, indirizzi IP, agenti utente, indirizzi email, intervalli CIDR e record del contesto di un'altra organizzazione non fanno mai parte della risposta.
Richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
org_id |
path | sì | ID dell'organizzazione (org_…). |
membership_id |
path | sì | ID dell'appartenenza (mem_…). |
Nessun corpo della richiesta.
Risposta
200 OK con questi campi:
| Campo | Descrizione |
|---|---|
membership |
L'appartenenza come la restituisce Recupera un'appartenenza: stato, origine, ruoli e motivo della sospensione. |
policy |
Le policy definite sull'organizzazione: authentication_methods (passkey e password consentite, numero di connessioni consentite), mfa (chi deve usare la MFA e i fattori consentiti), phishing_resistant, sso_enforcement (modalità, e bypass quando il membro è nell'elenco break-glass) e ip_allowlist (presente, e a chi si applica). null indica che l'organizzazione eredita il valore dell'ambiente per quella policy. |
invitation |
Solo per un'appartenenza invited: l'invito in sospeso all'indirizzo email primario dell'utente, con la sua consegna e lo stato di consegna. null altrimenti. L'indirizzo email non viene restituito. |
authenticators |
classes: i tipi degli autenticatori attivi del membro. mfa_enrolled: true quando un autenticatore attivo ha il ruolo second_factor o both. |
sign_in |
locked e locked_until (un blocco interrompe l'accesso dell'account in ogni contesto), e l'ultimo accesso nel contesto di questa organizzazione (last_sign_in_at, last_sign_in_amr). I contatori dei fallimenti non vengono mostrati, perché non appartengono a nessuna organizzazione. |
groups |
I gruppi del membro nelle directory dell'organizzazione (data: id dsg_… e directory_id dir_…; al massimo 100, truncated quando sono di più). Contano solo le appartenenze di un utente di directory collegato a questo utente e attivo. I nomi dei gruppi non vengono restituiti; leggili con GET /v1/directories/{directory_id}/groups/{directory_group_id}. |
applications |
L'accesso alle applicazioni in questa organizzazione. Le applicazioni la cui org_access_mode è all_organizations sono aperte a ogni membro e vengono solo conteggiate (open_count). Per le altre applicazioni (data, per nome, al massimo 100, truncated quando sono di più): application_id, name, access_mode, allowed, e reason quando l'accesso è negato (application_not_enabled: l'applicazione non è abilitata per l'organizzazione; application_not_assigned: né l'appartenenza né uno dei suoi gruppi di directory è assegnato). La decisione segue la stessa regola del controllo in fase di accesso. |
{
"membership": {
"id": "mem_01j9xn5p9s0t4v6w8x0y2z4a6c",
"organization_id": "org_01j9xk3m7q8r2s4t6v8w0y2z4a",
"user_id": "usr_01j9xh2k6p7q1r3s5t7v9w1x3y",
"status": "suspended",
"source": "scim",
"reason": "scim_deprovisioned",
"roles": [],
"expires_at": null,
"created_at": "2026-10-12T09:31:00.123456Z",
"activated_at": "2026-10-12T09:31:00.123456Z",
"suspended_at": "2026-10-20T07:00:00Z",
"removed_at": null,
"updated_at": "2026-10-20T07:00:00Z",
"version": 3
},
"policy": {
"authentication_methods": null,
"mfa": { "required_for": "all", "allowed_factors": ["totp", "webauthn"] },
"phishing_resistant": null,
"sso_enforcement": { "mode": "org_context", "bypass": false },
"ip_allowlist": null
},
"invitation": null,
"authenticators": { "mfa_enrolled": false, "classes": ["webauthn"] },
"sign_in": {
"locked": false,
"locked_until": null,
"last_sign_in_at": "2026-10-19T08:15:42Z",
"last_sign_in_amr": ["fed"]
},
"groups": {
"data": [{ "id": "dsg_01j9xp4r8s2t4v6w8x0y2z4a6b", "directory_id": "dir_01j9xm1n5p7q9r1s3t5v7w9x1y" }],
"truncated": false
},
"applications": {
"open_count": 2,
"data": [
{
"application_id": "app_01j9xq6s0t2v4w6x8y0z2a4b6c",
"name": "Finance portal",
"access_mode": "assigned_only",
"allowed": false,
"reason": "application_not_assigned"
}
],
"truncated": false
}
}
Errori
| HTTP | codice | Quando |
|---|---|---|
| 404 | not_found |
L'appartenenza non esiste in questa organizzazione, oppure è removed. |
| 401 | unauthenticated |
La credenziale manca, non è valida o è stata revocata. |
| 403 | insufficient_permissions |
La credenziale non ha organizations:read o users:read. |
| 429 | rate_limited |
È stato superato il limite di richieste; riprova dopo il periodo Retry-After. |
| 503 | service_unavailable |
Una dipendenza non è temporaneamente disponibile; riprova dopo il periodo Retry-After. |
Esempio
curl -i "https://api.eu.keenauth.com/v1/organizations/org_01j9xk3m7q8r2s4t6v8w0y2z4a/memberships/mem_01j9xn5p9s0t4v6w8x0y2z4a6c/diagnostics" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
Dati personali
Questo endpoint contiene dati personali: appartenenze e inviti all'organizzazione, e credenziali. Dati personali nelle API di KeenAuth descrive cosa viene memorizzato, per quanto tempo viene conservato e come viene cancellato. Non inviare categorie particolari di dati personali (salute, dati biometrici, religione, opinioni politiche, orientamento sessuale) in nessun campo.