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

# OpenAI·Anthropic SDK 연결 예제

> BetterToken용 OpenAI SDK의 Base URL과 Anthropic SDK의 base_url을 설정하세요. Python, JavaScript, curl로 인증과 응답을 확인하세요.

OpenAI SDK의 Base URL은 `https://bettertoken.ai/v1`, Anthropic SDK는 `https://bettertoken.ai`로 설정하세요. 아래 예제는 BetterToken API Key로 Chat Completions, Responses, Messages에 짧은 텍스트 요청을 보냅니다.

## SDK와 Base URL 선택하기

| API | SDK | Base URL | 전송 시 인증 헤더 | 레퍼런스 |
| - | - | - | - | - |
| Chat Completions | OpenAI | `https://bettertoken.ai/v1` | `Authorization: Bearer YOUR_API_KEY` | [Chat Completions 레퍼런스](/ko/api-reference/chat-completions.md) |
| Responses | OpenAI | `https://bettertoken.ai/v1` | `Authorization: Bearer YOUR_API_KEY` | [Responses 레퍼런스](/ko/api-reference/responses.md) |
| Messages | Anthropic | `https://bettertoken.ai`, `/v1` 제외 | `x-api-key: YOUR_API_KEY` | [Messages](/ko/api-reference/messages.md) |

SDK가 엔드포인트 경로와 인증 헤더를 추가합니다. Anthropic SDK는 API 버전 헤더도 전송합니다. 기존 코드를 수정한다면 [프로토콜 비교](/ko/faq/concepts/openai-compatible-vs-anthropic-compatible.md)를 확인하세요.

## 준비 사항

[빠른 시작](/ko/quickstart.md)에 따라 BetterToken API Key를 만들고 잔액을 충전하세요. [모델 광장](https://bettertoken.ai/pricing)에서 호출할 엔드포인트로 사용할 수 있는 Model ID를 복사하세요. 요청을 실행하기 전에 아래 두 자리표시자를 모두 바꾸세요.

예제를 실행할 터미널에서 다음 변수를 설정하세요. 이 페이지의 셸 명령어는 macOS / Linux 문법을 사용합니다.

```bash theme={null}
export BETTERTOKEN_API_KEY="YOUR_API_KEY"
export BETTERTOKEN_MODEL_ID="YOUR_MODEL_ID"
```

Python은 프로젝트의 가상 환경에 SDK를 설치하세요.

```bash theme={null}
python3 -m venv .venv
source .venv/bin/activate
python -m pip install openai anthropic
```

JavaScript는 프로젝트에 패키지를 설치하고 각 예제를 별도의 `.mjs` 파일로 저장한 뒤 `node`로 실행하세요.

```bash theme={null}
npm install openai @anthropic-ai/sdk
```

모든 예제는 `BETTERTOKEN_API_KEY`에서 Key를 읽습니다. 한 번의 테스트가 의도치 않게 여러 번 시도되지 않도록 SDK 재시도를 비활성화했습니다. 앱의 재시도 정책은 [오류와 제한](/ko/api-reference/errors.md#retry-temporary-failures)을 참고하세요.

## Chat Completions 호출하기

입력 대화는 `messages`로 전달합니다. 정상적인 텍스트 응답에는 `choices[0].message.content`가 포함됩니다.

**Python**

```python theme={null}
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["BETTERTOKEN_API_KEY"],
    base_url="https://bettertoken.ai/v1",
    timeout=120.0,
    max_retries=0,
)
response = client.chat.completions.create(
    model=os.environ["BETTERTOKEN_MODEL_ID"],
    messages=[{"role": "user", "content": "Reply with one word: OK"}],
)
print(response.choices[0].message.content)
```

**JavaScript**

```javascript theme={null}
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.BETTERTOKEN_API_KEY,
  baseURL: "https://bettertoken.ai/v1",
  timeout: 120000,
  maxRetries: 0,
});
const response = await client.chat.completions.create({
  model: process.env.BETTERTOKEN_MODEL_ID,
  messages: [{ role: "user", content: "Reply with one word: OK" }],
});
console.log(response.choices[0].message.content);
```

**curl**

```bash theme={null}
curl --fail-with-body --max-time 120 "https://bettertoken.ai/v1/chat/completions" \
  -H "Authorization: Bearer $BETTERTOKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"model\":\"$BETTERTOKEN_MODEL_ID\",\"messages\":[{\"role\":\"user\",\"content\":\"Reply with one word: OK\"}]}"
```

## Responses 호출하기

프롬프트는 `input`으로 전달합니다. OpenAI SDK는 텍스트를 쉽게 읽을 수 있는 `output_text` 속성을 제공하며, HTTP JSON 응답에는 `output` 배열이 들어 있습니다. 모든 출력 항목을 텍스트로 가정하지 말고 메시지 항목과 그 안의 텍스트를 확인하세요.

**Python**

```python theme={null}
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["BETTERTOKEN_API_KEY"],
    base_url="https://bettertoken.ai/v1",
    timeout=120.0,
    max_retries=0,
)
response = client.responses.create(
    model=os.environ["BETTERTOKEN_MODEL_ID"],
    input="Reply with one word: OK",
)
print(response.output_text)
```

**JavaScript**

```javascript theme={null}
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.BETTERTOKEN_API_KEY,
  baseURL: "https://bettertoken.ai/v1",
  timeout: 120000,
  maxRetries: 0,
});
const response = await client.responses.create({
  model: process.env.BETTERTOKEN_MODEL_ID,
  input: "Reply with one word: OK",
});
console.log(response.output_text);
```

**curl**

```bash theme={null}
curl --fail-with-body --max-time 120 "https://bettertoken.ai/v1/responses" \
  -H "Authorization: Bearer $BETTERTOKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"model\":\"$BETTERTOKEN_MODEL_ID\",\"input\":\"Reply with one word: OK\"}"
```

## Messages 호출하기

`messages`를 사용하고 `max_tokens`를 지정하세요. 이 짧은 텍스트 요청의 정상 응답에는 `content[0].text` 같은 텍스트 블록이 포함됩니다. 일반적으로는 `content`를 순회하며 `type: "text"`인 블록만 읽으세요.

**Python**

```python theme={null}
import os
from anthropic import Anthropic

client = Anthropic(
    api_key=os.environ["BETTERTOKEN_API_KEY"],
    base_url="https://bettertoken.ai",
    timeout=120.0,
    max_retries=0,
)
response = client.messages.create(
    model=os.environ["BETTERTOKEN_MODEL_ID"],
    max_tokens=256,
    messages=[{"role": "user", "content": "Reply with one word: OK"}],
)
for block in response.content:
    if block.type == "text":
        print(block.text)
```

**JavaScript**

```javascript theme={null}
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: process.env.BETTERTOKEN_API_KEY,
  baseURL: "https://bettertoken.ai",
  timeout: 120000,
  maxRetries: 0,
});
const response = await client.messages.create({
  model: process.env.BETTERTOKEN_MODEL_ID,
  max_tokens: 256,
  messages: [{ role: "user", content: "Reply with one word: OK" }],
});
for (const block of response.content) {
  if (block.type === "text") console.log(block.text);
}
```

**curl**

```bash theme={null}
curl --fail-with-body --max-time 120 "https://bettertoken.ai/v1/messages" \
  -H "x-api-key: $BETTERTOKEN_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d "{\"model\":\"$BETTERTOKEN_MODEL_ID\",\"max_tokens\":256,\"messages\":[{\"role\":\"user\",\"content\":\"Reply with one word: OK\"}]}"
```

## 사용 가능한 모델 목록 조회하기

`Authorization: Bearer` 또는 `x-api-key` 인증으로 `GET https://bettertoken.ai/v1/models` 요청을 보내세요. 성공하면 HTTP `200`과 함께 최상위에 `data`, `object`, `success` 필드가 반환됩니다. `data`의 각 항목에는 `id`, `object`, `created`, `owned_by`, `supported_endpoint_types`가 포함됩니다.

**curl**

```bash theme={null}
curl --fail-with-body --max-time 120 "https://bettertoken.ai/v1/models" \
  -H "Authorization: Bearer $BETTERTOKEN_API_KEY"
```

`x-api-key`를 사용하려면 인증 헤더를 `-H "x-api-key: $BETTERTOKEN_API_KEY"`로 바꾸세요.

**Python**

```python theme={null}
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["BETTERTOKEN_API_KEY"],
    base_url="https://bettertoken.ai/v1",
    timeout=120.0,
    max_retries=0,
)
for model in client.models.list():
    print(model.id)
```

반환된 `id`를 요청의 `model` 값으로 사용하세요. `type`이나 `display_name`은 모든 항목에 있는 필드가 아니므로 필수로 가정하지 마세요. 모델은 `id`로 선택하고, 현재 가격과 전체 모델 설명은 [모델 광장](https://bettertoken.ai/pricing)에서 확인하세요.

## 흔한 오류

| 증상 | 확인 및 해결 방법 |
| - | - |
| 잘못된 URL 또는 `404` | OpenAI SDK의 Base URL에는 `/v1`을 포함하고 Anthropic SDK에는 포함하지 마세요. SDK의 Base URL에 최종 경로를 덧붙이지 마세요. |
| `401` 또는 인증 정보 누락 | 예제는 `BETTERTOKEN_API_KEY`에서 읽은 Key를 명시적으로 전달합니다. OpenAI 직접 요청은 Bearer, Messages 직접 요청은 `x-api-key`를 사용합니다. |
| 모델을 찾을 수 없음 | `YOUR_MODEL_ID`를 모델 광장에서 사용 가능한 모델의 정확한 Model ID로 바꾸세요. 선택한 엔드포인트에서도 사용할 수 있는지 확인하세요. |
| 요청이 이전 엔드포인트로 전송됨 | SDK 인수와 상속된 변수를 확인하세요. [충돌하는 환경 변수 정리](/ko/best-practices.md#clear-conflicting-environment-variables)를 참고하세요. |
| 텍스트가 비어 있거나 답변이 불완전함 | 전체 응답과 종료 이유를 확인하고 [출력 토큰 한도](/ko/faq/model-calling/max-tokens.md)를 살펴보세요. |

### 두 SDK에서 하나의 Key를 함께 사용할 수 있나요?

네. 하나의 BetterToken API Key로 사용 가능한 모든 모델을 호출할 수 있습니다. 각 SDK에 맞는 Base URL과 요청 형식을 사용하세요.

### 스트리밍, 도구 호출, 구조화된 출력도 추가할 수 있나요?

스트리밍과 도구 호출 지원은 모델마다 다릅니다. 사용할 Model ID로 작은 요청부터 테스트한 뒤 [스트리밍과 도구 호출](/ko/guides/streaming-and-tool-calling.md)을 따라 진행하세요. JSON 검증과 모델별 구조화된 출력은 [구조화된 JSON FAQ](/ko/faq/model-calling/structured-json-pydantic.md)를 참고하세요.

## 관련 가이드

* [API 레퍼런스 개요](/ko/api-reference/introduction.md)
* [지원 도구](/ko/ai-tools/overview.md)
* [오류, 상태 코드, 요청 속도 제한](/ko/api-reference/errors.md)
* [API Key 보안과 타임아웃](/ko/best-practices.md)
* [캐시 과금 규칙](/ko/faq/service-assurance/cache-billing.md)

## 공식 참고 자료

* [OpenAI Python SDK 공식 저장소](https://github.com/openai/openai-python)
* [OpenAI JavaScript SDK 공식 저장소](https://github.com/openai/openai-node)
* [Anthropic Python SDK 공식 저장소](https://github.com/anthropics/anthropic-sdk-python)
* [Anthropic JavaScript SDK 공식 저장소](https://github.com/anthropics/anthropic-sdk-typescript)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.