# curl: l'API LLM da un terminale

> Ricette da terminale per un'API LLM compatibile con OpenAI: chat completion con curl e jq, richiesta da un file, streaming, lista dei modelli e crediti rimasti.

- URL: https://llmwithcrypto.com/it/docs/curl/
- Ultimo aggiornamento: 2026-10-23
- Editore: LLMwithCrypto (https://llmwithcrypto.com)

Ogni chiamata è semplice HTTPS con un body JSON, quindi curl basta per testare una chiave, confrontare due modelli o scriptare un lavoretto veloce. `jq` rende il JSON leggibile; entrambi sono inclusi nella maggior parte dei sistemi o si installano con un comando.

**Risposta rapida — Come chiamo LLMwithCrypto con curl?**

Invia una POST a `https://llmwithcrypto.com/api/v1/chat/completions` con `-H "Authorization: Bearer $LLMWITHCRYPTO_API_KEY"`, un content type JSON e un body che contiene `model` e `messages`. **LLMwithCrypto** restituisce l'oggetto di risposta di OpenAI; passalo a `jq` per stampare la risposta e i conteggi dei token. Aggiungi `-N` e `"stream": true` per vedere il testo arrivare in tempo reale, come documentato al 23 ottobre 2026.

## Come imposto la chiave una volta sola?

Esportala nella tua sessione shell così ogni comando può usarla, e tienila fuori dalla cronologia della shell e dagli script condivisi:

- **Linux e macOS:** `export LLMWITHCRYPTO_API_KEY=…` nel terminale, oppure in un file `.env` che i tuoi script caricano e che non viene mai committato.
- **Windows PowerShell:** `$env:LLMWITHCRYPTO_API_KEY = "…"`, poi esegui i comandi in Git Bash o WSL, oppure adatta le virgolette.

Crea una chiave API per ogni app, agente o membro del team e revoca quella che vuoi dalla dashboard senza toccare le altre.

*Una risposta breve e i suoi conteggi di token*

```bash
curl -s "https://llmwithcrypto.com/api/v1/chat/completions" \
  -H "Authorization: Bearer $LLMWITHCRYPTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "gpt-oss-20b", "messages": [{"role": "user", "content": "One word for fast?"}], "max_tokens": 20}' \
  | jq -r '.choices[0].message.content, "\(.usage.prompt_tokens) in, \(.usage.completion_tokens) out"'

```

## Come evito i problemi di virgolette?

Metti il body in un file. Le virgolette della shell e quelle del JSON si scontrano appena un prompt contiene un apostrofo o un simbolo del dollaro; un file evita entrambi. `--data @request.json` invia il file così com'è.

*Una richiesta letta da un file*

```bash
cat > request.json <<'EOF'
{
  "model": "deepseek-v4-pro",
  "messages": [
    {"role": "system", "content": "You review shell scripts."},
    {"role": "user", "content": "Is it safe to run rm -rf \"$DIR\"/ when DIR may be empty?"}
  ],
  "max_tokens": 300
}
EOF
curl -s "https://llmwithcrypto.com/api/v1/chat/completions" \
  -H "Authorization: Bearer $LLMWITHCRYPTO_API_KEY" \
  -H "Content-Type: application/json" \
  --data @request.json | jq -r '.choices[0].message.content'

```

## Come faccio a vedere una risposta in streaming?

`-N` disattiva il buffer di output di curl, così ogni server-sent event viene stampato non appena arriva. Vedrai le righe `data:` grezze; la [pagina sullo streaming](https://llmwithcrypto.com/it/docs/streaming/) le spiega.

*Risposta in streaming, eventi grezzi*

```bash
curl -sN "https://llmwithcrypto.com/api/v1/chat/completions" \
  -H "Authorization: Bearer $LLMWITHCRYPTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4.1-flash",
    "messages": [{"role": "user", "content": "Write a haiku about latency."}],
    "stream": true,
    "stream_options": {"include_usage": true},
    "max_tokens": 120
  }'

```

## Come faccio a elencare i modelli e controllare i crediti?

Entrambe le chiamate sono gratuite. La prima stampa un id di modello per riga, pronto per il campo `model`; la seconda stampa i crediti rimanenti in dollari USA.

*Id dei modelli*

```bash
curl -s "https://llmwithcrypto.com/api/v1/models" \
  -H "Authorization: Bearer $LLMWITHCRYPTO_API_KEY" | jq -r '.data[].id'

```

*Crediti rimanenti*

```bash
curl -s "https://llmwithcrypto.com/api/v1/credits" \
  -H "Authorization: Bearer $LLMWITHCRYPTO_API_KEY" | jq -r '.balance_usd'

```

## Come faccio a vedere un errore nel terminale?

Aggiungi `-w "\nHTTP %{http_code}\n"` per stampare lo status dopo il body. Un body di errore è un piccolo oggetto JSON con un campo `code`, come `invalid_api_key`, `insufficient_balance` o `model_not_found`; la [pagina sugli errori](https://llmwithcrypto.com/it/docs/errors/) li spiega uno per uno. Con `jq`, `.error.code // empty` stampa il codice quando c'è e niente altrimenti, il che rende facile creare rami negli script.

Gli errori non costano nulla. Paghi per token dal tuo saldo: i token di input e di output vengono contati dal tokenizer del modello stesso e addebitati al prezzo di quel modello per 1M di token. Una chiamata che termina con un errore non costa nulla.

## Posso automatizzare un batch con curl?

Per una manciata di richieste, un loop shell sui file va bene: un body JSON per file, un curl per file, i risultati scritti accanto. Tienilo sequenziale, oppure esegui qualche richiesta alla volta con `xargs -P 4`, per restare sotto il tuo rate limit. Ogni account ha un limite di richieste e di token al minuto, mostrato nella dashboard; chiedi al supporto e può essere alzato.

Per volumi più grandi, retry e concorrenza sono più semplici nel codice: le pagine [Python](https://llmwithcrypto.com/it/docs/python/) e [Node.js](https://llmwithcrypto.com/it/docs/node/) hanno esempi di batch pronti con un limite di concorrenza.

## curl: domande frequenti

### Perché ricevo un errore 401?

La chiave manca, è scritta male o è stata revocata, oppure la variabile non è impostata in questa shell. Esegui `echo ${#LLMWITHCRYPTO_API_KEY}` per controllare che non sia vuota.

### Come faccio a confrontare rapidamente due modelli?

Esegui lo stesso file due volte e cambia solo `model`, per esempio `deepseek-v4-pro` e `gpt-oss-120b`; le righe `usage` mostrano quanto è costata ogni risposta in token.

### Il mio prompt viene memorizzato?

No. Non conserviamo i tuoi prompt né le risposte del modello: una volta inviata una risposta, il suo testo non c'è più. Ogni chiamata lascia una riga di log con l'ora, l'account, il modello e i conteggi dei token, cancellata dopo 30 giorni.

---

LLMwithCrypto: LLMwithCrypto è un'API LLM compatibile con OpenAI per modelli open-weight — DeepSeek V4 Pro, DeepSeek V4.1 Flash, DeepSeek R1, Qwen3.5 397B A17B, Qwen3 235B A22B Instruct, gpt-oss-120b, gpt-oss-20b, GLM-4.7, Llama 3.3 70B Instruct, Gemma 4 31B, Mistral Large 3, Mistral Small 4 — pagati a token da un saldo prepagato in criptovalute, al 5% sotto il prezzo mediano degli host pubblici. Senza KYC: niente documento, niente selfie, niente documenti. I prompt e gli output non vengono memorizzati.
