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

> Tài liệu tham chiếu endpoint chat completions: mọi field trong body của POST /api/v1/chat/completions, response, finish reason, token usage. Tương thích OpenAI.

- URL: https://llmwithcrypto.com/vi/docs/chat-completions/
- Cập nhật lần cuối: 2026-10-23
- Đơn vị phát hành: LLMwithCrypto (https://llmwithcrypto.com)

Một endpoint trả lời mọi model. Nó nhận cùng body như OpenAI chat completions API và trả về cùng object, nên một tích hợp sẵn có chỉ cần base URL mới, key mới và một model id trong danh sách của chúng tôi.

**Trả lời nhanh — Endpoint chat completions của LLMwithCrypto nhận những field nào?**

Nó nhận body của OpenAI chat completions: `model` và `messages` là bắt buộc; `max_tokens`, `temperature`, `top_p`, `stop`, `stream`, `stream_options`, `tools`, `tool_choice` và `response_format` là tùy chọn. **LLMwithCrypto** trả về một object `chat.completion` với số lượng `usage`, tính phí theo token từ credit của bạn, theo tài liệu ngày 23 tháng 10 năm 2026. Tool calling và JSON output phụ thuộc vào model.

## Tổng quan về endpoint

| Thuộc tính | Giá trị |
| --- | --- |
| Method và URL | `POST https://llmwithcrypto.com/api/v1/chat/completions` |
| Xác thực | Truyền khóa API của bạn dưới dạng Bearer token trong header Authorization, giống như OpenAI SDK |
| Body | JSON, `Content-Type: application/json` |
| Response | Object `chat.completion`, hoặc server-sent events với `stream: true` |
| Thanh toán | Bạn trả tiền theo token từ số dư của mình: token đầu vào và đầu ra được đếm bằng tokenizer của chính model và tính theo giá của model đó trên 1M token. Một lần gọi kết thúc bằng lỗi thì không mất phí |
| Tính năng | Streaming hoạt động trên mọi model; tool calling và JSON output tuân theo những gì từng model tự hỗ trợ |

## Tạo chat completion

`POST /api/v1/chat/completions`

Gửi một cuộc hội thoại đến một model và trả về câu trả lời kèm số token. Ví dụ hỏi DeepSeek V4 Pro một câu ngắn với giới hạn 200 token; id, thời gian và số lượng trong response chỉ mang tính minh họa.

Xác thực: khóa API trong header `Authorization: Bearer API_KEY`.

**Request body**

| Trường | Kiểu | Bắt buộc | Mô tả |
| --- | --- | --- | --- |
| `model` | string | Có | Model id, ví dụ `deepseek-v4-pro` hoặc `gpt-oss-120b`. `GET /api/v1/models` trả về mọi id mà key của bạn có thể gọi. |
| `messages` | object[] | Có | Cuộc hội thoại, cũ nhất trước. Mỗi item có một `role` (`system`, `user`, `assistant` hoặc `tool`) và một chuỗi `content`; các message `tool` cũng mang theo `tool_call_id`. |
| `max_tokens` | integer | Không | Số token tối đa mà câu trả lời được dùng. Nếu không có, model có thể viết cho đến khi đầy context window, và bạn trả tiền cho mọi token nó viết. |
| `temperature` | number | Không | 0 đến 2. Thấp hơn thì dễ đoán hơn, cao hơn thì đa dạng hơn. Giá trị mặc định phụ thuộc vào model. |
| `top_p` | number | Không | 0 đến 1, nucleus sampling. Đổi `temperature` hoặc `top_p`, không đổi cả hai. |
| `stop` | string or string[] | Không | Tối đa 4 chuỗi kết thúc câu trả lời khi model viết chúng. Chúng không được tính vào câu trả lời. |
| `stream` | boolean | Không | `true` gửi câu trả lời dưới dạng server-sent events, từng phần một. Xem [streaming](https://llmwithcrypto.com/vi/docs/streaming/). |
| `stream_options` | object | Không | `{"include_usage": true}` thêm một event cuối cùng với `usage` của một lần gọi streamed. |
| `tools` | object[] | Không | Các function mà model có thể yêu cầu bạn gọi, theo định dạng OpenAI. Hoạt động trên các model hỗ trợ tool calling. Xem [tool calling](https://llmwithcrypto.com/vi/docs/tool-calling/). |
| `tool_choice` | string or object | Không | `auto` (mặc định khi `tools` được đặt), `none`, `required`, hoặc `{"type": "function", "function": {"name": "…"}}`. |
| `response_format` | object | Không | `{"type": "json_object"}` yêu cầu một JSON object hợp lệ, trên các model hỗ trợ tính năng này. Hãy nói trong prompt của bạn JSON cần chứa gì. |

*Ví dụ: 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
}
```

*Ví dụ: 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
}
```

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

## Tôi viết messages như thế nào?

Gửi toàn bộ cuộc hội thoại mỗi lần, tin nhắn cũ nhất trước: API không lưu bộ nhớ giữa các lần gọi, và không có nội dung nào trong prompt của bạn được lưu lại. Chúng tôi không lưu prompt của bạn hay câu trả lời của model: khi một phản hồi được gửi đi, văn bản của nó biến mất. Mỗi lần gọi để lại một dòng log với thời gian, tài khoản, model và số token, bị xóa sau 30 ngày.

- **`system`**: hướng dẫn định hình mọi câu trả lời, như giọng điệu, ngôn ngữ hoặc định dạng đầu ra. Đặt một cái ở đầu.
- **`user`**: điều người dùng hoặc chương trình của bạn yêu cầu.
- **`assistant`**: các câu trả lời trước đó của model, để nó có thể tiếp tục cuộc hội thoại.
- **`tool`**: kết quả của một function mà model yêu cầu bạn chạy, kèm `tool_call_id` mà nó đưa cho bạn.

Mỗi tin nhắn đều tính là input token, nên lịch sử dài tốn nhiều hơn ở mỗi lượt. Hãy cắt bớt hoặc tóm tắt các lượt cũ khi cuộc hội thoại dài ra.

## Một request có thể dài bao nhiêu?

Input và output cộng lại phải vừa với context window của model. Tính đến ngày 23 tháng 10 năm 2026, DeepSeek V4 Pro đọc tới 1M token, gpt-oss-120b tới 128K và Qwen3 235B tới 256K; [trang models](https://llmwithcrypto.com/vi/models/) liệt kê tất cả.

Một request không vừa sẽ trả về `400` với mã `context_length_exceeded` và không tốn gì. Đặt `max_tokens` sao cho prompt cộng với câu trả lời dài nhất bạn chấp nhận vẫn nằm trong window.

## finish_reason cho tôi biết điều gì?

| `finish_reason` | Ý nghĩa | Cần làm gì |
| --- | --- | --- |
| `stop` | Model đã kết thúc câu trả lời, hoặc đã viết một trong các chuỗi `stop` của bạn | Không cần làm gì: câu trả lời đã đầy đủ |
| `length` | Câu trả lời đã chạm `max_tokens` hoặc context window | Tăng `max_tokens`, hoặc yêu cầu câu trả lời ngắn hơn |
| `tool_calls` | Model muốn bạn chạy một hoặc nhiều function | Chạy chúng và gửi kết quả trả lại, xem [tool calling](https://llmwithcrypto.com/vi/docs/tool-calling/) |

## Những tham số OpenAI nào không được hỗ trợ?

Các field trong bảng trên là toàn bộ hợp đồng. Những tham số khác từ OpenAI API, như `n` (nhiều câu trả lời mỗi lần gọi), `logprobs`, `audio` hoặc input dạng hình ảnh, không được hỗ trợ: chỉ gửi các field được liệt kê ở đây. Các model đều là model văn bản; không model nào nhận hình ảnh qua endpoint này.

Field `model` chỉ nhận các id trong danh sách của chúng tôi. Chúng tôi không bán quyền truy cập GPT, Claude, Gemini hay Grok: nhà sản xuất của chúng cấm bán lại quyền truy cập API khi chưa có sự chấp thuận của họ, và chúng tôi không có sự chấp thuận đó.

## Chat completions: các câu hỏi thường gặp

### Có endpoint completions cũ không?

Không. Chỉ tồn tại định dạng chat; một prompt đơn lẻ là một mảng `messages` với một tin nhắn `user`.

### Một lần gọi tốn bao nhiêu?

Bạn trả tiền theo token từ số dư của mình: token đầu vào và đầu ra được đếm bằng tokenizer của chính model và tính theo giá của model đó trên 1M token. Một lần gọi kết thúc bằng lỗi thì không mất phí. Giá từng model nằm trên [trang pricing](https://llmwithcrypto.com/vi/pricing/).

### Tôi có thể xem các request trước đây không?

Không, theo thiết kế. Chúng tôi không lưu prompt của bạn hay câu trả lời của model: khi một phản hồi được gửi đi, văn bản của nó biến mất. Mỗi lần gọi để lại một dòng log với thời gian, tài khoản, model và số token, bị xóa sau 30 ngày.

### Vì sao câu trả lời của tôi dừng giữa chừng?

Khi đó `finish_reason` là `length`: câu trả lời đã chạm `max_tokens`. Hãy tăng nó, trong giới hạn context window của model.

---

LLMwithCrypto: LLMwithCrypto là API LLM tương thích OpenAI cho các mô hình 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 — thanh toán theo token từ số dư crypto trả trước, thấp hơn 5% so với giá trung vị của các nhà cung cấp công khai. Không cần KYC: không ID, không selfie, không giấy tờ. Prompt và output không được lưu trữ.
