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
| 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. |
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. |
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. |
{
"model": "deepseek-v4-pro",
"messages": [
{
"role": "system",
"content": "Answer in two sentences."
},
{
"role": "user",
"content": "What is a context window?"
}
],
"max_tokens": 200
}{
"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
{
"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
}
}Ejemplos de código
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
}'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")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 eltool_call_idque 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 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 |
¿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.
¿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.