
# Concedere l'accesso al supporto

`POST /v1/support-access-grants` · permesso `support-access-grants:write`

Concede al personale di supporto di KeenAuth un accesso a tempo limitato a questo ambiente, ad esempio mentre lavora su un ticket di supporto. L'accesso è di sola lettura (`read`) oppure può anche modificare la configurazione (`read_write_config`); il personale di supporto non scrive mai dati degli utenti finali. Ogni utilizzo dell'autorizzazione e ogni azione del personale viene registrato nel log di audit di gestione, e viene pubblicato un evento `support_access_grant.created`. Le autorizzazioni possono essere create solo dalla dashboard, da un `owner` o un `admin` che ha effettuato di nuovo l'accesso negli ultimi 5 minuti; le chiavi API e i client macchina ricevono `403 insufficient_permissions`.

## Richiesta

| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| `Idempotency-Key` | header | no | Facoltativo. 16-64 caratteri `[A-Za-z0-9_-]`; ripetere la stessa chiave con lo stesso corpo restituisce la stessa autorizzazione. |
| `scope` | string | sì | `read` (sola lettura) oppure `read_write_config` (può modificare anche la configurazione). |
| `duration_hours` | integer | sì | Durata in ore, 1-72. |
| `ticket_ref` | string | sì | Riferimento del ticket di supporto: 1-200 caratteri ASCII stampabili, senza spazi iniziali o finali. |
| `allowed_regions_of_staff` | array \| null | no | Solo Enterprise. Solo il personale situato in queste regioni (`eu`, `us`) può usare l'autorizzazione; se omesso o `null`, non c'è alcuna restrizione. |

Corpo della richiesta:

```json
{
  "scope": "read",
  "duration_hours": 24,
  "ticket_ref": "SUP-48213",
  "allowed_regions_of_staff": ["eu"]
}
```

## Risposta

`201 Created` con la nuova autorizzazione.

```json
{
  "id": "sag_01j9xk3m7q8r2s4t6v8w0y2z4a",
  "scope": "read",
  "status": "active",
  "ticket_ref": "SUP-48213",
  "allowed_regions_of_staff": ["eu"],
  "granted_by": "du_01j9xk2p5n7q9s1t3v5w7y9z1b",
  "created_at": "2026-10-12T09:30:00.123456Z",
  "expires_at": "2026-10-13T09:30:00.123456Z",
  "revoked_at": null
}
```

## Errori

| HTTP | code | Quando |
|---|---|---|
| 400 | `malformed_request` | Il corpo non è JSON valido oppure `Idempotency-Key` è malformato. |
| 403 | `insufficient_permissions` | La richiesta non è stata fatta dalla dashboard da un `owner` o un `admin`, oppure la credenziale non ha il permesso richiesto. |
| 403 | `plan_feature_unavailable` | `allowed_regions_of_staff` richiede il piano Enterprise. |
| 422 | `validation_failed` | Un campo non è valido (`scope`, `duration_hours` fuori da 1-72, `ticket_ref`, `allowed_regions_of_staff`). |
| 422 | `idempotency_key_reuse` | L'`Idempotency-Key` è già stata usata con un corpo diverso. |
| 401 | `unauthenticated` | La credenziale manca, non è valida o è stata revocata. |
| 429 | `rate_limited` | È stato superato il limite di frequenza; riprovare dopo il periodo indicato in `Retry-After`. |
| 503 | `service_unavailable` | Una dipendenza non è temporaneamente disponibile; riprovare dopo il periodo indicato in `Retry-After`. |

## Esempio

Creazione e revoca sono azioni della dashboard. La richiesta inviata dalla dashboard:

```http
POST /v1/support-access-grants
Content-Type: application/json
Idempotency-Key: 2f1c9a7e-5b3d-4e8f-9a6c-1d2e3f4a5b6c

{
  "scope": "read",
  "duration_hours": 24,
  "ticket_ref": "SUP-48213",
  "allowed_regions_of_staff": ["eu"]
}
```
