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

> chat completions endpoint 레퍼런스: POST /api/v1/chat/completions의 모든 body 필드, 응답, finish reason, 토큰 사용량. OpenAI 호환.

- URL: https://llmwithcrypto.com/ko/docs/chat-completions/
- 마지막 업데이트: 2026-10-23
- 발행자: LLMwithCrypto (https://llmwithcrypto.com)

하나의 endpoint가 모든 모델에 응답합니다. OpenAI chat completions API와 동일한 body를 받고 동일한 객체를 반환하므로, 기존 연동은 새 base URL, 새 키, 그리고 저희 목록에 있는 모델 id만 바꾸면 됩니다.

**빠른 답변 — LLMwithCrypto의 chat completions endpoint는 어떤 필드를 받나요?**

OpenAI chat completions body를 받습니다: `model`와 `messages`는 필수이고, `max_tokens`, `temperature`, `top_p`, `stop`, `stream`, `stream_options`, `tools`, `tool_choice`, `response_format`은 선택입니다. **LLMwithCrypto**는 `usage` 개수를 담은 `chat.completion` 객체를 반환하며, 2026년 10월 23일 문서 기준으로 크레딧에서 토큰 단위로 청구됩니다. 툴 호출과 JSON 출력은 모델에 따라 다릅니다.

## endpoint 한눈에 보기

| 속성 | 값 |
| --- | --- |
| 메서드와 URL | `POST https://llmwithcrypto.com/api/v1/chat/completions` |
| 인증 | OpenAI SDK처럼 API 키를 Authorization 헤더의 Bearer token으로 전달하세요 |
| Body | JSON, `Content-Type: application/json` |
| 응답 | `chat.completion` 객체, 또는 `stream: true` 사용 시 server-sent events |
| 청구 | 잔액에서 토큰 단위로 결제합니다. 입력 및 출력 토큰은 모델 자체의 tokenizer로 계산되며, 해당 모델의 1M 토큰당 가격으로 청구됩니다. 오류로 끝난 호출은 비용이 들지 않습니다 |
| 기능 | 스트리밍은 모든 모델에서 동작하며, tool calling과 JSON 출력은 각 모델이 자체적으로 지원하는 범위를 따릅니다 |

## chat completion 생성

`POST /api/v1/chat/completions`

대화를 한 모델로 보내고 토큰 개수와 함께 답변을 반환합니다. 예제는 DeepSeek V4 Pro에 200토큰 제한으로 짧은 질문을 합니다. 응답의 id, 시간, 개수는 예시입니다.

인증: `Authorization: Bearer API_KEY` 헤더에 API 키를 넣습니다.

**요청 본문**

| 필드 | 타입 | 필수 | 설명 |
| --- | --- | --- | --- |
| `model` | string | 예 | 모델 id로, 예를 들어 `deepseek-v4-pro` 또는 `gpt-oss-120b`입니다. `GET /api/v1/models`는 해당 키로 호출할 수 있는 모든 id를 반환합니다. |
| `messages` | object[] | 예 | 대화 내용으로, 오래된 것부터 정렬합니다. 각 항목에는 `role`(`system`, `user`, `assistant` 또는 `tool`)와 `content` 문자열이 있으며, `tool` 메시지는 `tool_call_id`도 함께 가집니다. |
| `max_tokens` | integer | 아니요 | 답변이 사용할 수 있는 최대 토큰 수입니다. 지정하지 않으면 모델이 컨텍스트 윈도우가 가득 찰 때까지 작성할 수 있으며, 작성하는 모든 토큰에 대해 비용을 지불합니다. |
| `temperature` | number | 아니요 | 0에서 2. 낮을수록 더 예측 가능하고, 높을수록 더 다양합니다. 기본값은 모델에 따라 다릅니다. |
| `top_p` | number | 아니요 | 0에서 1, nucleus sampling. `temperature` 또는 `top_p` 중 하나만 변경하고, 둘 다 변경하지 마세요. |
| `stop` | string or string[] | 아니요 | 모델이 해당 문자열을 작성하면 답변이 끝나는 시퀀스 최대 4개. 답변에는 포함되지 않습니다. |
| `stream` | boolean | 아니요 | `true`는 답변을 server-sent events로 조각별로 전송합니다. [streaming](https://llmwithcrypto.com/ko/docs/streaming/)을 참고하세요. |
| `stream_options` | object | 아니요 | `{"include_usage": true}`는 스트리밍 호출의 `usage`를 담은 마지막 이벤트를 추가합니다. |
| `tools` | object[] | 아니요 | 모델이 호출을 요청할 수 있는 함수로, OpenAI 형식입니다. 툴 호출을 지원하는 모델에서 동작합니다. [tool calling](https://llmwithcrypto.com/ko/docs/tool-calling/)을 참고하세요. |
| `tool_choice` | string or object | 아니요 | `auto`(`tools` 설정 시 기본값), `none`, `required`, 또는 `{"type": "function", "function": {"name": "…"}}`. |
| `response_format` | object | 아니요 | `{"type": "json_object"}`는 지원하는 모델에서 유효한 JSON 객체를 요청합니다. JSON에 무엇이 들어가야 하는지 프롬프트에 명시하세요. |

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

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

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

## messages는 어떻게 작성하나요?

매번 전체 대화를 보내세요, 가장 오래된 메시지를 맨 앞에 두세요: API는 호출 사이에 아무것도 기억하지 않으며, 프롬프트 내용도 저장되지 않습니다. 프롬프트와 모델의 답변은 저장하지 않습니다. 응답이 전송되면 그 텍스트는 사라집니다. 각 호출은 시간, 계정, 모델, 토큰 수를 담은 로그 한 줄을 남기며, 이는 30일 후 삭제됩니다.

- **`system`**: 어조, 언어, 출력 형식처럼 모든 답변의 틀을 잡는 지시사항입니다. 맨 위에 하나 두세요.
- **`user`**: 사용자 또는 여러분의 프로그램이 요청하는 내용입니다.
- **`assistant`**: 모델의 이전 답변으로, 모델이 대화를 이어갈 수 있게 합니다.
- **`tool`**: 모델이 실행을 요청한 함수의 결과이며, 모델이 준 `tool_call_id`와 함께 전달합니다.

모든 메시지가 입력 토큰으로 계산되므로, 대화 기록이 길수록 매 턴마다 비용이 더 듭니다. 대화가 길어지면 오래된 턴을 잘라내거나 요약하세요.

## 요청은 얼마나 길 수 있나요?

입력과 출력을 합쳐 모델의 컨텍스트 윈도에 맞아야 합니다. 2026년 10월 23일 기준으로 DeepSeek V4 Pro는 최대 1M 토큰, gpt-oss-120b는 최대 128K, Qwen3 235B는 최대 256K까지 읽습니다. [모델 페이지](https://llmwithcrypto.com/ko/models/)에서 전체 목록을 확인할 수 있습니다.

맞지 않는 요청은 코드 `context_length_exceeded`와 함께 `400`로 돌아오며 비용이 들지 않습니다. 프롬프트와 허용하는 가장 긴 답변의 합이 윈도 안에 들어오도록 `max_tokens`을 설정하세요.

## finish_reason은 무엇을 알려주나요?

| `finish_reason` | 의미 | 해야 할 일 |
| --- | --- | --- |
| `stop` | 모델이 답변을 끝냈거나 여러분의 `stop` 시퀀스 중 하나를 작성했습니다 | 아무것도 하지 않으면 됩니다: 답변이 완료되었습니다 |
| `length` | 답변이 `max_tokens` 또는 컨텍스트 윈도에 도달했습니다 | `max_tokens`을 높이거나 더 짧은 답변을 요청하세요 |
| `tool_calls` | 모델이 하나 이상의 함수 실행을 원합니다 | 실행하고 결과를 다시 보내세요. [도구 호출](https://llmwithcrypto.com/ko/docs/tool-calling/)을 참고하세요 |

## 어떤 OpenAI 파라미터가 지원되지 않나요?

위 표의 필드가 계약의 전부입니다. `n`(호출당 여러 답변), `logprobs`, `audio` 또는 이미지 입력 같은 OpenAI API의 다른 필드는 지원되지 않습니다: 여기 나열된 필드만 보내세요. 이 모델들은 텍스트 모델이며, 이 endpoint를 통해 이미지를 받는 모델은 없습니다.

`model` 필드는 저희 목록에 있는 id만 받습니다. 당사는 GPT, Claude, Gemini, Grok에 대한 접근 권한을 판매하지 않습니다: 해당 제작사는 자사 승인 없이 API 접근을 재판매하는 것을 금지하며, 당사는 그 승인을 받지 않았습니다.

## 채팅 완성: 자주 묻는 질문

### 레거시 completions endpoint가 있나요?

아니요. 채팅 형식만 존재합니다. 단일 프롬프트는 `user` 메시지 하나를 담은 `messages` 배열입니다.

### 호출 비용은 얼마인가요?

잔액에서 토큰 단위로 결제합니다. 입력 및 출력 토큰은 모델 자체의 tokenizer로 계산되며, 해당 모델의 1M 토큰당 가격으로 청구됩니다. 오류로 끝난 호출은 비용이 들지 않습니다. 모델별 가격은 [가격 페이지](https://llmwithcrypto.com/ko/pricing/)에 있습니다.

### 지난 요청을 볼 수 있나요?

아니요, 설계상 볼 수 없습니다. 프롬프트와 모델의 답변은 저장하지 않습니다. 응답이 전송되면 그 텍스트는 사라집니다. 각 호출은 시간, 계정, 모델, 토큰 수를 담은 로그 한 줄을 남기며, 이는 30일 후 삭제됩니다.

### 답변이 중간에 멈춘 이유는 무엇인가요?

그러면 `finish_reason`이 `length`입니다: 답변이 `max_tokens`에 도달했습니다. 모델의 컨텍스트 윈도 안에서 값을 높이세요.

---

LLMwithCrypto: LLMwithCrypto는 오픈 웨이트 모델을 위한 OpenAI 호환 LLM API입니다 — 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 — 충전해 둔 암호화폐 잔액에서 토큰 단위로 결제하며, 공개 호스트 가격 중앙값보다 5% 저렴합니다. KYC 없이: 신분증도, 셀피도, 서류도 필요하지 않습니다. 프롬프트와 출력은 저장되지 않습니다.
