
# Elenca i log di provisioning della directory

`GET /v1/directories/{directory_id}/provisioning-logs` · autorizzazione `directories:read`

Elenca il log di provisioning di una directory SCIM, dal più recente. Ogni richiesta SCIM autenticata inviata dal provider di identità è un record: metodo, template del percorso (l'ID reale non compare mai nel percorso), tipo e ID della risorsa, un riepilogo delle operazioni senza valori, nomi degli attributi ignorati, stato HTTP, `scim_type`, durata, prefisso dell'indirizzo del client (IPv4 /24, IPv6 /48), classe del client e se il blocco di deprovisioning in blocco ha fermato la richiesta. I corpi delle richieste e delle risposte, i valori degli attributi, l'indirizzo IP completo, lo User-Agent e il valore del token non vengono mai memorizzati né restituiti.

I record vengono conservati per il periodo di conservazione dei log del tuo piano (Free 7 giorni, Startup 14, Business 30, Enterprise 90). L'ordine è sempre dal più recente; non esiste un parametro `order`. I record di una directory eliminata restano leggibili con `GET /v1/logs?type=scim.request`.

## Richiesta

| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| `directory_id` | path | sì | ID della directory SCIM (`dir_…`). |
| `limit` | query | no | 1–100, predefinito 20. |
| `after` | query | no | Il cursore da `list_metadata.after` (record più vecchi). |
| `before` | query | no | Il cursore da `list_metadata.before` (record più recenti). |
| `from` | query | no | Limite inferiore incluso (RFC 3339). |
| `to` | query | no | Limite superiore escluso (RFC 3339). |

Non c'è un corpo della richiesta.

## Risposta

`200 OK` con una pagina di record.

```json
{
  "data": [
    {
      "id": "evt_01j9xp4q6r8s0t2v4w6x8y0z2b",
      "occurred_at": "2026-10-20T12:00:00Z",
      "outcome": "success",
      "organization_id": "org_01j9xk1m3n5p7q9r1s3t5v7w9x",
      "token_id": "dst_01j9xn2p4q6r8s0t2v4w6x8y0z",
      "method": "PATCH",
      "path_template": "PATCH /Users/{id}",
      "resource_type": "User",
      "resource_id": "dsu_01j9xq5r7s9t1v3w5x7y9z1a3c",
      "operation_summary": ["replace:active"],
      "ignored_attributes": [],
      "status": 200,
      "scim_type": null,
      "duration_ms": 12,
      "client_ip_prefix": "203.0.113.0/24",
      "client_class": "okta",
      "held": false,
      "request_id": "0192f5e0-0000-7000-8000-000000000001",
      "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736"
    }
  ],
  "list_metadata": {
    "before": null,
    "after": null
  }
}
```

## Errori

| HTTP | code | Quando |
|---|---|---|
| 400 | `invalid_cursor` | Il cursore è malformato oppure appartiene a un'altra richiesta. |
| 400 | `range_outside_retention` | `from` è precedente al periodo di conservazione del tuo piano. |
| 404 | `not_found` | La directory non esiste in questo ambiente. |
| 422 | `validation_failed` | `limit` è fuori intervallo, `from` o `to` non è in formato RFC 3339, `to` non è successivo a `from`, oppure è stato passato `order` (`unsupported`). |
| 401 | `unauthenticated` | La credenziale manca, non è valida o è stata revocata. |
| 403 | `insufficient_permissions` | La credenziale non ha l'autorizzazione richiesta. |
| 429 | `rate_limited` | È stato superato il limite di richieste; riprova dopo il periodo indicato in `Retry-After`. |
| 503 | `service_unavailable` | La sincronizzazione della directory o la ricerca nei log è temporaneamente non disponibile o non configurata in questo deployment; riprova dopo il periodo indicato in `Retry-After`. |

## Esempio

```bash
curl -i "https://api.eu.keenauth.com/v1/directories/dir_01j9xm2n4p6q8r0s2t4v6w8y0z/provisioning-logs?limit=20" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

```bash
keenauth directories provisioning-logs list dir_01j9xm2n4p6q8r0s2t4v6w8y0z --from 2026-10-01T00:00:00Z
```

## Dati personali

Questo endpoint contiene dati personali: utenti della directory (SCIM). [Dati personali nelle API di KeenAuth](/docs/policies/personal-data) 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.
