# Endpoint chat completions: POST /api/v1/chat/completions

> Riferimento dell'endpoint chat completions: campi del body di POST /api/v1/chat/completions, risposta, finish reason e uso dei token. Compatibile con OpenAI.

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

Un solo endpoint risponde per ogni modello. Accetta lo stesso body dell'API chat completions di OpenAI e restituisce lo stesso oggetto, quindi un'integrazione esistente richiede un nuovo URL di base, una nuova chiave e un id modello dalla nostra lista.

**Risposta rapida — Quali campi accetta l'endpoint chat completions di LLMwithCrypto?**

Accetta il body chat completions di OpenAI: `model` e `messages` sono obbligatori; `max_tokens`, `temperature`, `top_p`, `stop`, `stream`, `stream_options`, `tools`, `tool_choice` e `response_format` sono facoltativi. **LLMwithCrypto** restituisce un oggetto `chat.completion` con un conteggio `usage`, fatturato per token dal tuo credito, come documentato il 23 ottobre 2026. Il tool calling e l'output JSON dipendono dal modello.

## L'endpoint in sintesi

| Attributo | Valore |
| --- | --- |
| Metodo e URL | `POST https://llmwithcrypto.com/api/v1/chat/completions` |
| Autenticazione | Passa la tua chiave API come Bearer token nell'header Authorization, come fa l'SDK di OpenAI |
| Body | JSON, `Content-Type: application/json` |
| Risposta | Oggetto `chat.completion`, oppure server-sent events con `stream: true` |
| Fatturazione | 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 |
| Funzionalità | Lo streaming funziona su ogni modello; il tool calling e l'output JSON seguono ciò che supporta il singolo modello |

## Crea una chat completion

`POST /api/v1/chat/completions`

Invia una conversazione a un modello e restituisce la sua risposta con i conteggi dei token. L'esempio pone a DeepSeek V4 Pro una domanda breve con un limite di 200 token; id, orari e conteggi nella risposta sono illustrativi.

Autenticazione: chiave API nell'header `Authorization: Bearer API_KEY`.

**Corpo della richiesta**

| Campo | Tipo | Obbligatorio | Descrizione |
| --- | --- | --- | --- |
| `model` | string | Sì | L'id del modello, come `deepseek-v4-pro` o `gpt-oss-120b`. `GET /api/v1/models` restituisce ogni id che la tua chiave può chiamare. |
| `messages` | object[] | Sì | La conversazione, dal più vecchio al più recente. Ogni elemento ha un `role` (`system`, `user`, `assistant` o `tool`) e una stringa `content`; i messaggi `tool` hanno anche un `tool_call_id`. |
| `max_tokens` | integer | No | Il numero massimo di token che la risposta può usare. Senza, il modello può scrivere finché la sua finestra di contesto è piena, e paghi ogni token che scrive. |
| `temperature` | number | No | Da 0 a 2. Più basso è più prevedibile, più alto è più vario. Il valore predefinito dipende dal modello. |
| `top_p` | number | No | Da 0 a 1, nucleus sampling. Cambia `temperature` o `top_p`, non entrambi. |
| `stop` | string or string[] | No | Fino a 4 sequenze che terminano la risposta quando il modello le scrive. Non sono incluse nella risposta. |
| `stream` | boolean | No | `true` invia la risposta come server-sent events, pezzo per pezzo. Vedi [streaming](https://llmwithcrypto.com/it/docs/streaming/). |
| `stream_options` | object | No | `{"include_usage": true}` aggiunge un ultimo evento con il `usage` di una chiamata in streaming. |
| `tools` | object[] | No | Funzioni che il modello può chiederti di chiamare, nel formato OpenAI. Funziona sui modelli che supportano il tool calling. Vedi [tool calling](https://llmwithcrypto.com/it/docs/tool-calling/). |
| `tool_choice` | string or object | No | `auto` (predefinito quando `tools` è impostato), `none`, `required` o `{"type": "function", "function": {"name": "…"}}`. |
| `response_format` | object | No | `{"type": "json_object"}` richiede un oggetto JSON valido, sui modelli che lo supportano. Indica nel tuo prompt cosa deve contenere il JSON. |

*Esempio: a short answer from DeepSeek V4 Pro*

```json
{
  "model": "deepseek-v4-pro",
  "messages": [
    {
      "role": "system",
      "content": "Answer in two sentences."
    },
    {
      "role": "user",
      "content": "What is a context window?"
    }
  ],
  "max_tokens": 200
}
```

*Esempio: a JSON object from gpt-oss-120b, low temperature*

```json
{
  "model": "gpt-oss-120b",
  "messages": [
    {
      "role": "user",
      "content": "Return {\"city\": string, \"country\": string} for the Eiffel Tower."
    }
  ],
  "response_format": {
    "type": "json_object"
  },
  "temperature": 0.2,
  "max_tokens": 100
}
```

**Risposta** `200`

```json
{
  "id": "chatcmpl-8f2c41d0a7b94e1c",
  "object": "chat.completion",
  "created": 1792742400,
  "model": "deepseek-v4-pro",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "A context window is the maximum number of tokens a model can read and write in one request. Anything beyond it must be cut or summarized before the call."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 27,
    "completion_tokens": 34,
    "total_tokens": 61
  }
}
```

*curl*

```bash
curl -s "https://llmwithcrypto.com/api/v1/chat/completions" \
  -H "Authorization: Bearer $LLMWITHCRYPTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-pro",
    "messages": [
      {"role": "system", "content": "Answer in two sentences."},
      {"role": "user", "content": "What is a context window?"}
    ],
    "max_tokens": 200
  }'
```

*Python*

```python
import os

from openai import OpenAI

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

resp = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[
        {"role": "system", "content": "Answer in two sentences."},
        {"role": "user", "content": "What is a context window?"},
    ],
    max_tokens=200,
)
print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, "in,", resp.usage.completion_tokens, "out")
```

*Node.js*

```javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://llmwithcrypto.com/api/v1',
  apiKey: process.env.LLMWITHCRYPTO_API_KEY,
});

const resp = await client.chat.completions.create({
  model: 'deepseek-v4-pro',
  messages: [
    { role: 'system', content: 'Answer in two sentences.' },
    { role: 'user', content: 'What is a context window?' },
  ],
  max_tokens: 200,
});
console.log(resp.choices[0].message.content);
console.log(resp.usage.prompt_tokens, 'in,', resp.usage.completion_tokens, 'out');
```

## Come scrivo i messaggi?

Invia ogni volta l'intera conversazione, dal messaggio più vecchio: l'API non conserva memoria tra una chiamata e l'altra e niente dei tuoi prompt viene salvato. 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.

- **`system`**: istruzioni che inquadrano ogni risposta, come tono, lingua o formato di output. Mettine una in cima.
- **`user`**: ciò che chiede la persona o il tuo programma.
- **`assistant`**: le risposte precedenti del modello, così può continuare la conversazione.
- **`tool`**: il risultato di una funzione che il modello ti ha chiesto di eseguire, con il `tool_call_id` che ti ha dato.

Ogni messaggio conta come token di input, quindi le cronologie lunghe costano di più a ogni turno. Taglia o riassumi i turni vecchi quando una conversazione cresce.

## Quanto può essere lunga una richiesta?

Input e output insieme devono stare nella context window del modello. Al 23 ottobre 2026, DeepSeek V4 Pro legge fino a 1M token, gpt-oss-120b fino a 128K e Qwen3 235B fino a 256K; la [pagina dei modelli](https://llmwithcrypto.com/it/models/) li elenca tutti.

Una richiesta che non ci sta torna come `400` con il codice `context_length_exceeded` e non costa nulla. Imposta `max_tokens` in modo che il prompt più la risposta più lunga che accetti restino dentro la finestra.

## Cosa mi dice finish_reason?

| `finish_reason` | Significato | Cosa fare |
| --- | --- | --- |
| `stop` | Il modello ha terminato la risposta o ha scritto una delle tue sequenze `stop` | Niente: la risposta è completa |
| `length` | La risposta ha raggiunto `max_tokens` o la context window | Aumenta `max_tokens` o chiedi una risposta più breve |
| `tool_calls` | Il modello vuole che tu esegua una o più funzioni | Eseguile e rimanda i risultati, vedi [tool calling](https://llmwithcrypto.com/it/docs/tool-calling/) |

## Quali parametri di OpenAI non sono supportati?

I campi nella tabella qui sopra sono l'intero contratto. Altri dell'API OpenAI, come `n` (più risposte per chiamata), `logprobs`, `audio` o input di immagini, non sono supportati: invia solo i campi elencati qui. I modelli sono modelli testuali; nessuno di loro accetta immagini tramite questo endpoint.

Il campo `model` accetta solo gli id sulla nostra lista. Non vendiamo l'accesso a GPT, Claude, Gemini o Grok: i loro produttori vietano la rivendita dell'accesso alle API senza la loro approvazione, e noi non l'abbiamo.

## Chat completions: domande frequenti

### Esiste un endpoint completions legacy?

No. Esiste solo il formato chat; un singolo prompt è un array `messages` con un messaggio `user`.

### Quanto costa una chiamata?

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. I prezzi per modello sono sulla [pagina dei prezzi](https://llmwithcrypto.com/it/pricing/).

### Posso vedere le mie richieste passate?

No, per scelta di progettazione. 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.

### Perché la mia risposta si è fermata a metà?

`finish_reason` è allora `length`: la risposta ha raggiunto `max_tokens`. Aumentalo, entro la context window del modello.

---

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.
