> ## Documentation Index
> Fetch the complete documentation index at: https://apidoc.cometapi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 텍스트 및 채팅 API

> 요청 형식에 맞는 CometAPI 텍스트 및 채팅 API를 선택하세요: 채팅 완성, 응답, Anthropic 메시지 또는 Gemini 콘텐츠 생성.

요청 형식을 해당 형식을 구현하는 페이지에 맞춰 CometAPI 텍스트 모델 문서를 사용하세요. OpenAI 호환 채팅의 경우 채팅 완성 또는 응답부터 시작하고, provider 고유 형식의 경우 해당 provider 페이지를 사용하세요.

## 텍스트 및 채팅 API 선택하기

<CardGroup cols={2}>
  <Card title="채팅 완성 생성" icon="message" href="/api/text/chat">
    `messages` 배열로 OpenAI 호환 채팅 메시지를 전송합니다.
  </Card>

  <Card title="모델 응답 생성" icon="sparkles" href="/api/text/responses">
    Responses API를 통해 추론, 멀티모달 출력, 내장 도구를 사용합니다.
  </Card>

  <Card title="메시지 생성" icon="message" href="/api/text/anthropic-messages">
    provider 고유 필드로 Claude 호환 Messages 워크플로를 호출합니다.
  </Card>

  <Card title="콘텐츠 생성" icon="sparkles" href="/api/text/gemini-generating-content">
    Gemini 네이티브 콘텐츠 생성 요청을 전송합니다.
  </Card>
</CardGroup>

## 텍스트 모델 호출하기

[Models page](/ko/overview/models) 또는 [model directory](https://www.cometapi.com/models/)에서 텍스트를 지원하는 아무 model ID나 사용하세요. 아래 예제는 OpenAI 호환 채팅 완성 엔드포인트를 호출합니다.

<Note>
  이 예제에서는 자리 표시자 `your-model-id`를 사용합니다. 요청을 실행하기 전에 [Models page](/ko/overview/models) 또는 [model directory](https://www.cometapi.com/models/)에서 사용 가능한 텍스트 model ID로 교체하세요.
</Note>

<CodeGroup>
  ```python Python theme={null}
  import os
  import requests

  response = requests.post(
      "https://api.cometapi.com/v1/chat/completions",
      headers={
          "Authorization": "Bearer " + os.environ["COMETAPI_KEY"],
          "Content-Type": "application/json",
      },
      json={
          "model": "your-model-id",
          "messages": [
              {
                  "role": "user",
                  "content": "Write one sentence about CometAPI.",
              }
          ],
      },
      timeout=30,
  )

  response.raise_for_status()
  result = response.json()
  print(result["choices"][0]["message"]["content"])
  ```

  ```javascript Node.js theme={null}
  const response = await fetch("https://api.cometapi.com/v1/chat/completions", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      model: "your-model-id",
      messages: [
        {
          role: "user",
          content: "Write one sentence about CometAPI.",
        },
      ],
    }),
  });

  if (!response.ok) {
    throw new Error(await response.text());
  }

  const result = await response.json();
  console.log(result.choices[0].message.content);
  ```

  ```bash cURL theme={null}
  curl https://api.cometapi.com/v1/chat/completions \
    -H "Authorization: Bearer $COMETAPI_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "your-model-id",
      "messages": [
        {
          "role": "user",
          "content": "Write one sentence about CometAPI."
        }
      ]
    }'
  ```
</CodeGroup>

## 응답 예시

성공적인 응답은 다음과 같을 수 있습니다. 필드 값은 model과 요청에 따라 달라집니다:

```json theme={null}
{
  "id": "chatcmpl_example",
  "object": "chat.completion",
  "created": 1779960520,
  "model": "your-model-id",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "CometAPI lets developers route model requests through one API surface."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 12,
    "completion_tokens": 14,
    "total_tokens": 26
  }
}
```

## 예시 모델 레코드

<Info>
  이 예시 모델 카탈로그 응답은 `/api/models` 엔벨로프와 하나의 텍스트 모델 레코드 형태를 보여줍니다. 전체 모델 목록은 아닙니다.
</Info>

```bash cURL theme={null}
curl https://api.cometapi.com/api/models
```

```json theme={null}
{
  "success": true,
  "page": 1,
  "page_size": 20,
  "total": 302,
  "data": [
    {
      "created": 1773798949,
      "id": "your-text-model-id",
      "code": "your-text-model-id",
      "provider": "ExampleProvider",
      "provider_code": "example",
      "name": "Example text model",
      "model_type": "text",
      "features": [
        "text-to-text"
      ],
      "endpoints": "{\n  \"openai-chat\": {\n    \"path\": \"/v1/chat/completions\",\n    \"method\": \"POST\"\n  }\n}",
      "pricing": {
        "currency": "USD / M Tokens",
        "input": 0.5,
        "output": 1.5,
        "per_request": null,
        "per_second": null
      }
    }
  ]
}
```

## 일반적인 오류

<AccordionGroup>
  <Accordion title="API 키가 없거나 유효하지 않음">
    `Authorization: Bearer $COMETAPI_KEY`를 전송하세요.
  </Accordion>

  <Accordion title="잘못된 base URL">
    OpenAI 호환 요청에는 `https://api.cometapi.com/v1`를 사용하세요.
  </Accordion>

  <Accordion title="잘못된 모델 유형">
    [모델 페이지](/ko/overview/models)에서 텍스트를 지원하는 모델을 선택하세요.
  </Accordion>

  <Accordion title="Provider별 parameter 오류">
    선택적 필드를 제거한 다음, 필드를 하나씩 다시 추가하세요.
  </Accordion>
</AccordionGroup>

## 오류 코드 및 재시도 전략

<AccordionGroup>
  <Accordion title="400">
    요청 본문을 수정하기 전까지는 재시도하지 마세요.
  </Accordion>

  <Accordion title="401">
    API 키가 존재하고 유효해질 때까지는 재시도하지 마세요.
  </Accordion>

  <Accordion title="404">
    재시도하기 전에 base URL, path, model ID를 확인하세요.
  </Accordion>

  <Accordion title="429">
    지수 백오프와 함께 재시도하고 동시성을 줄이세요.
  </Accordion>

  <Accordion title="500 or 503">
    일시적인 provider 또는 서비스 오류에는 백오프와 함께 재시도하세요.
  </Accordion>
</AccordionGroup>

<Tip>
  구현 패턴은 [오류 코드 및 재시도 전략](/ko/guides/error-codes-and-retry-strategy) 및 [Rate limits and concurrency](/ko/guides/rate-limits-and-concurrency)를 참고하세요.
</Tip>

## 가격 및 모델 디렉터리

<CardGroup cols={3}>
  <Card title="모델 페이지" icon="list" href="/overview/models">
    문서에서 CometAPI가 model IDs를 어떻게 노출하는지 알아보세요.
  </Card>

  <Card title="모델 디렉터리" icon="puzzle-piece" href="https://www.cometapi.com/models/">
    모델 가용성과 기능을 살펴보세요.
  </Card>

  <Card title="가격" icon="tag" href="https://www.cometapi.com/pricing/">
    모델을 호출하기 전에 가격을 확인하세요.
  </Card>
</CardGroup>
