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

> Referencia del endpoint chat completions: campos del body de POST /api/v1/chat/completions, la respuesta y el uso de tokens. Compatible con OpenAI.

- URL: https://llmwithcrypto.com/es/docs/chat-completions/
- Última actualización: 2026-10-23
- Editor: LLMwithCrypto (https://llmwithcrypto.com)

Un solo endpoint responde a todos los modelos. Acepta el mismo body que la API de chat completions de OpenAI y devuelve el mismo objeto, así que una integración existente solo necesita una nueva base URL, una nueva clave y un id de modelo de nuestra lista.

**Respuesta rápida — ¿Qué campos acepta el endpoint de chat completions de LLMwithCrypto?**

Acepta el body de chat completions de OpenAI: `model` y `messages` son obligatorios; `max_tokens`, `temperature`, `top_p`, `stop`, `stream`, `stream_options`, `tools`, `tool_choice` y `response_format` son opcionales. **LLMwithCrypto** devuelve un objeto `chat.completion` con un recuento de `usage`, facturado por token con tus créditos, según la documentación del 23 de octubre de 2026. El tool calling y la salida JSON dependen del modelo.

## El endpoint de un vistazo

| Atributo | Valor |
| --- | --- |
| Método y URL | `POST https://llmwithcrypto.com/api/v1/chat/completions` |
| Autenticación | Pasa tu clave API como Bearer token en la cabecera Authorization, igual que hace el SDK de OpenAI |
| Body | JSON, `Content-Type: application/json` |
| Respuesta | Objeto `chat.completion`, o server-sent events con `stream: true` |
| Facturación | Pagas por token desde tu saldo: los tokens de entrada y de salida se cuentan con el tokenizador propio del modelo y se cobran al precio de ese modelo por 1M de tokens. Una llamada que termina en error no cuesta nada |
| Funciones | El streaming funciona en todos los modelos; el tool calling y la salida JSON dependen de lo que admita cada modelo |

## Crear una chat completion

`POST /api/v1/chat/completions`

Envía una conversación a un modelo y devuelve su respuesta con los recuentos de tokens. El ejemplo hace una pregunta corta a DeepSeek V4 Pro con un límite de 200 tokens; los ids, las horas y los recuentos de la respuesta son ilustrativos.

Autenticación: clave API en el header `Authorization: Bearer API_KEY`.

**Cuerpo de la solicitud**

| Campo | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `model` | string | Sí | El id del modelo, como `deepseek-v4-pro` o `gpt-oss-120b`. `GET /api/v1/models` devuelve todos los ids que puede llamar tu clave. |
| `messages` | object[] | Sí | La conversación, del mensaje más antiguo al más reciente. Cada elemento tiene un `role` (`system`, `user`, `assistant` o `tool`) y una cadena `content`; los mensajes `tool` también llevan un `tool_call_id`. |
| `max_tokens` | integer | No | El máximo de tokens que puede usar la respuesta. Sin este valor, el modelo puede escribir hasta llenar su ventana de contexto, y pagas por cada token que escribe. |
| `temperature` | number | No | 0 a 2. Más bajo es más predecible, más alto es más variado. El valor por defecto depende del modelo. |
| `top_p` | number | No | 0 a 1, muestreo de núcleo. Cambia `temperature` o `top_p`, no ambos. |
| `stop` | string or string[] | No | Hasta 4 secuencias que terminan la respuesta cuando el modelo las escribe. No se incluyen en la respuesta. |
| `stream` | boolean | No | `true` envía la respuesta como server-sent events, trozo a trozo. Consulta [streaming](https://llmwithcrypto.com/es/docs/streaming/). |
| `stream_options` | object | No | `{"include_usage": true}` añade un último evento con el `usage` de una llamada en streaming. |
| `tools` | object[] | No | Funciones que el modelo puede pedirte que llames, en el formato de OpenAI. Funciona en los modelos que admiten tool calling. Consulta [tool calling](https://llmwithcrypto.com/es/docs/tool-calling/). |
| `tool_choice` | string or object | No | `auto` (por defecto cuando `tools` está definido), `none`, `required` o `{"type": "function", "function": {"name": "…"}}`. |
| `response_format` | object | No | `{"type": "json_object"}` pide un objeto JSON válido, en los modelos que lo admiten. Indica en tu prompt qué debe contener el JSON. |

*Ejemplo: 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
}
```

*Ejemplo: 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
}
```

**Respuesta** `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');
```

## ¿Cómo escribo los mensajes?

Envía la conversación completa cada vez, empezando por el mensaje más antiguo: la API no guarda memoria entre llamadas y nada de tus prompts se almacena. No guardamos tus prompts ni las respuestas del modelo: una vez enviada una respuesta, su texto desaparece. Cada llamada deja una línea de log con la hora, la cuenta, el modelo y el recuento de tokens, que se borra a los 30 días.

- **`system`**: instrucciones que enmarcan cada respuesta, como el tono, el idioma o el formato de salida. Pon una al principio.
- **`user`**: lo que pide la persona o tu programa.
- **`assistant`**: las respuestas anteriores del modelo, para que pueda continuar la conversación.
- **`tool`**: el resultado de una función que el modelo te pidió ejecutar, con el `tool_call_id` que te dio.

Cada mensaje cuenta como tokens de entrada, así que los historiales largos cuestan más en cada turno. Recorta o resume los turnos antiguos cuando una conversación crezca.

## ¿Cuánto puede medir una solicitud?

La entrada y la salida juntas deben caber en la ventana de contexto del modelo. A 23 de octubre de 2026, DeepSeek V4 Pro lee hasta 1M tokens, gpt-oss-120b hasta 128K y Qwen3 235B hasta 256K; la [página de modelos](https://llmwithcrypto.com/es/models/) los enumera todos.

Una solicitud que no cabe se devuelve como `400` con el código `context_length_exceeded` y no cuesta nada. Configura `max_tokens` para que el prompt más la respuesta más larga que aceptes quede dentro de la ventana.

## ¿Qué me dice finish_reason?

| `finish_reason` | Significado | Qué hacer |
| --- | --- | --- |
| `stop` | El modelo terminó su respuesta o escribió una de tus secuencias `stop` | Nada: la respuesta está completa |
| `length` | La respuesta alcanzó `max_tokens` o la ventana de contexto | Aumenta `max_tokens` o pide una respuesta más corta |
| `tool_calls` | El modelo quiere que ejecutes una o varias funciones | Ejecútalas y devuelve los resultados, consulta [llamada a funciones](https://llmwithcrypto.com/es/docs/tool-calling/) |

## ¿Qué parámetros de OpenAI no son compatibles?

Los campos de la tabla anterior son todo el contrato. Otros de la API de OpenAI, como `n` (varias respuestas por llamada), `logprobs`, `audio` o entradas de imagen, no son compatibles: envía solo los campos que se enumeran aquí. Los modelos son de texto; ninguno acepta imágenes a través de este endpoint.

El campo `model` solo acepta los ids de nuestra lista. No vendemos acceso a GPT, Claude, Gemini ni Grok: sus creadores prohíben revender el acceso a la API sin su aprobación, y nosotros no la tenemos.

## Chat completions: preguntas frecuentes

### ¿Existe un endpoint de completions heredado?

No. Solo existe el formato chat; un único prompt es un array `messages` con un mensaje `user`.

### ¿Cuánto cuesta una llamada?

Pagas por token desde tu saldo: los tokens de entrada y de salida se cuentan con el tokenizador propio del modelo y se cobran al precio de ese modelo por 1M de tokens. Una llamada que termina en error no cuesta nada. Los precios por modelo están en la [página de precios](https://llmwithcrypto.com/es/pricing/).

### ¿Puedo ver mis solicitudes pasadas?

No, por diseño. No guardamos tus prompts ni las respuestas del modelo: una vez enviada una respuesta, su texto desaparece. Cada llamada deja una línea de log con la hora, la cuenta, el modelo y el recuento de tokens, que se borra a los 30 días.

### ¿Por qué se detuvo mi respuesta a medias?

`finish_reason` es entonces `length`: la respuesta alcanzó `max_tokens`. Auméntalo, dentro de la ventana de contexto del modelo.

---

LLMwithCrypto: LLMwithCrypto es una API de LLM compatible con OpenAI para modelos de pesos abiertos — 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 — con pago por token desde un saldo de criptomonedas prepago, a un 5% por debajo del precio medio de los hosts públicos. Sin KYC: sin identificación, sin selfie, sin documentos. Los prompts y las salidas no se almacenan.
