> ## Documentation Index
> Fetch the complete documentation index at: https://www.octoparse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Concedi accesso

> Condividi un’app point-to-point con un utente specifico. Idempotente.

**`PUT`** `https://api-datahub.octoparse.com/v1/data-apps/{app_id}/grants/{username}`

Autenticazione: API key obbligatoria (`Authorization: Bearer <API Key>`). Solo autore dell’app; gli altri ricevono `404`.

Apri l’app a un utente specifico (idempotente). Ha effetto solo con `scope=shared`. Gli utenti granted possono vedere ed eseguire l’app e sono fatturati al suo prezzo (paga chi esegue). L’API accetta uno username e memorizza un user id, perché gli username possono cambiare e non sono identificatori.

## Richiesta

### Parametri di percorso

<ParamField path="app_id" type="string" required>
  Riferimento app.
</ParamField>

<ParamField path="username" type="string" required>
  Nome utente dell'utente a cui concedere l'accesso.
</ParamField>

### Esempio di richiesta

```bash theme={null}
curl -X PUT \
  -H "Authorization: Bearer $OCTOPARSE_API_KEY" \
  "https://api-datahub.octoparse.com/v1/data-apps/carol/reviews-query/grants/dave"
```

## Risposta

### 200 successo

```json theme={null}
{
  "data": {
    "ok": true
  }
}
```

Il payload è wrappato in `data`. Campi:

<ResponseField name="ok" type="boolean">
  Sempre `true`.
</ResponseField>

### Errori

| HTTP | `code`         | `category`  | Descrizione                    |
| ---- | -------------- | ----------- | ------------------------------ |
| 401  | `unauthorized` | `forbidden` | API key mancante o non valida. |

Le risposte di errore usano `{"error": {code, category, message, retryable}}`. Vedi <a href="/docs/it/datahub/api/reference/introduction#errors">Errori</a>.

## Librerie client

Gli SDK Python e JavaScript non wrappano ancora questo endpoint. Chiama REST direttamente.
