# API dei crediti

> GET /v1/credits restituisce il saldo dell'organizzazione, e la spesa e i budget della chiave con cui chiami.


Leggi il saldo senza spendere nulla. La chiamata è gratuita e non riserva niente.

```endpoint
GET https://api.notholy.com/v1/credits
```

```bash test
curl https://api.notholy.com/v1/credits -H "Authorization: Bearer $NOTHOLY_API_KEY"
```

## Risposta

```json
{
  "object": "credits",
  "currency": "USD",
  "balance": "24.913402",
  "reserved": "0.004000",
  "available": "24.909402",
  "key": { "spent": "0.086598", "daily_budget": "5.000000" }
}
```

| Campo | Tipo | Note |
|---|---|---|
| `object` | string | Sempre `credits` |
| `currency` | string | Sempre `USD` |
| `balance` | string | Crediti meno l'utilizzo già addebitato |
| `reserved` | string | Riservato in questo momento dalle richieste in corso. Ogni riserva è il costo massimo della sua richiesta; la parte non usata torna quando la richiesta si chiude |
| `available` | string | Quanto può riservare una nuova richiesta: `balance` meno `reserved` |
| `key.spent` | string | Totale speso con questa chiave |
| `key.total_budget`, `key.daily_budget` | string | Presenti quando la chiave ha dei budget |

Gli importi sono stringhe decimali con 6 cifre decimali. Dentro NotHoly sono interi in miliardesimi di dollaro, quindi tra una richiesta e l'altra non avviene alcun arrotondamento.

> [!NOTE]
> Ogni richiesta riserva il suo caso peggiore (prompt più `max_tokens`) prima di partire. Quando `available` è inferiore, il limite di output si riduce per starci, e sotto i 16 token la richiesta restituisce `402 insufficient_credits`. Controlla `available` prima di generazioni lunghe.

```js test
const r = await fetch('https://api.notholy.com/v1/credits', { headers: { Authorization: `Bearer ${process.env.NOTHOLY_API_KEY}` } });
const c = await r.json();
console.log(c.available);
```

## Errori

| Stato | Codice | Significato |
|---|---|---|
| 401 | `invalid_api_key` | Chiave mancante, non valida, revocata o scaduta |
| 403 | `account_suspended`, `consent_required` | Vedi [Autenticazione](/it/getting-started/authentication) |
| 500 | `internal_error` | Non è stato possibile leggere il saldo. Riprova con backoff |
