# Autenticazione

> Invia la chiave API come token Bearer o in x-api-key. Le chiavi appartengono a un'organizzazione e possono avere budget e limiti sui modelli.


Ogni richiesta ha bisogno di una chiave API. Inviala in uno di questi due header:

| Header | Formato |
|---|---|
| `Authorization` | `Bearer nh_live_...` |
| `x-api-key` | `nh_live_...` (quello che inviano gli SDK di Anthropic) |

```bash test
curl https://api.notholy.com/v1/models -H "x-api-key: $NOTHOLY_API_KEY"
```

## Chiavi

Le chiavi si creano nella console, in **Chiavi API**. Ogni chiave appartiene a un'organizzazione e a un workspace. Il segreto viene mostrato una volta e salvato solo come hash.

Una chiave può avere:

- Un budget totale e un budget giornaliero in USD. Quando ciò che resta del budget non copre una richiesta, il suo limite di output si riduce per rientrarci, e sotto i 16 token la richiesta riceve `402 key_budget_exceeded`.
- Un elenco di modelli consentiti. Gli altri modelli ricevono `403 key_not_allowed`.
- Una data di scadenza.
- Un elenco di indirizzi IP o intervalli CIDR consentiti. Gli altri indirizzi ricevono `403 key_not_allowed`.

La revoca di una chiave vale dalla richiesta successiva.

## Chiavi nel codice

Leggi la chiave dall'ambiente. Non metterla in un commit. Se una chiave finisce in giro, revocala dalla console e creane una nuova.

> [!WARNING]
> Non mettere mai una chiave nel codice lato client. Chiama l'API dal tuo server o dal terminale e tieni le chiavi in variabili d'ambiente o in un secret store.

```python test
import os
from openai import OpenAI

client = OpenAI(base_url="https://api.notholy.com/v1", api_key=os.environ["NOTHOLY_API_KEY"])

print([m.id for m in client.models.list()])
```

## Errori

| Stato | Codice | Significato |
|---|---|---|
| 401 | `invalid_api_key` | Chiave assente, sbagliata, revocata o scaduta |
| 403 | `key_not_allowed` | La chiave non può usare questo modello, o non può essere usata da questo indirizzo IP |
| 403 | `account_suspended` | L'organizzazione è sospesa. Contatta il supporto |
| 403 | `consent_required` | Chi ha creato la chiave ha rifiutato o revocato il consenso al trattamento da parte di partner in altri paesi. Può accettarlo dalla console |

## Prossimi passi

- [Modelli](/it/getting-started/models)
- [Organizzazioni e ruoli](/it/account/organizations)
