Skip to content

Messages (Anthropic)

Anthropic Messages 형식 어댑터. base URL만 바꾸면 Claude Code · Anthropic SDK를 그대로 붙일 수 있습니다.

POST/v1/messages
POST/v1/messages/count_tokens

PleumRouter는 Anthropic Messages 형식의 인바운드 요청을 받아 내부에서 라우팅합니다. 기존 Anthropic SDK나 Claude Code는 코드를 고칠 필요 없이 base URL만 PleumRouter로 바꾸면 그대로 동작합니다. 요청·응답은 모두 Anthropic Messages 스키마를 따르며, 내부적으로 OpenAI 형식으로 변환되어 처리됩니다.

연결하기#

Anthropic SDK는 base_url루트 URL https://router.pleum.ai로 설정하세요. SDK가 여기에 /v1/messages를 덧붙입니다.

Anthropic SDK (Python)
from anthropic import Anthropic

client = Anthropic(
    api_key="plm_...",
    base_url="https://router.pleum.ai",  # 루트  SDK가 /v1/messages를 덧붙임
)

message = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}],
)
print(message.content[0].text)

Claude Code는 ANTHROPIC_BASE_URL/v1 없이 루트로 설정하고 ANTHROPIC_API_KEYplm_ 키를 넣으세요.

Claude Code
export ANTHROPIC_BASE_URL="https://router.pleum.ai"
export ANTHROPIC_API_KEY="plm_..."
claude
base URL에 /v1을 붙이지 마세요. SDK가 다시 /v1/messages를 덧붙여 /v1/v1/messages가 되어 요청이 실패합니다. 반드시 루트인 https://router.pleum.ai만 지정하세요.

인증은 plm_ API 키를 Authorization: Bearer 또는 x-api-key 헤더로 전달합니다. Claude Code는 두 헤더를 모두 보내며, 둘 중 어느 쪽이든 동작합니다.

메시지 생성#

파라미터타입필수설명
modelstring필수모델 ID. GET /v1/models에서 전체 목록 확인.
messagesarray필수{role, content} 배열. content는 문자열 또는 블록 배열(text / image / tool_use / tool_result)입니다.
max_tokensinteger선택생성할 최대 토큰 수. 기본값 4096.
systemstring | array선택시스템 프롬프트. 문자열 또는 블록 배열.
temperaturenumber선택샘플링 온도.
top_pnumber선택누적 확률 기반 샘플링(nucleus).
stop_sequencesarray선택중지 문자열 배열. 내부적으로 stop으로 매핑됩니다.
streamboolean선택true면 Anthropic SSE 스트리밍 응답.
toolsarray선택Anthropic 형식의 도구 {name, description, input_schema}. 내부에서 OpenAI 형식으로 변환됩니다.
tool_choiceobject선택{type: any | none | tool} 형식으로 도구 사용 방식을 지정합니다.
metadataobject선택허용되지만 프로바이더로 전달되지는 않습니다.
request
curl https://router.pleum.ai/v1/messages \
  -H "x-api-key: plm_..." \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 1024,
    "system": "You are a helpful assistant.",
    "messages": [
      {"role": "user", "content": "Hello"}
    ]
  }'

응답은 Anthropic Messages 스키마를 따릅니다. content는 블록 배열이며, 토큰 사용량은 usage.input_tokens / usage.output_tokens로 반환됩니다.

stop_reason은 내부 종료 사유에서 매핑됩니다 — stopend_turn, lengthmax_tokens, tool_callstool_use.

200 OK
{
  "id": "msg_01abc...",
  "type": "message",
  "role": "assistant",
  "model": "claude-sonnet-4-6",
  "content": [
    {"type": "text", "text": "Hello! How can I help you?"}
  ],
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "usage": {
    "input_tokens": 12,
    "output_tokens": 5
  }
}

스트리밍#

stream: true로 요청하면 Anthropic SSE 이벤트 시퀀스가 전송됩니다 — message_startcontent_block_start / content_block_delta(text_delta) / content_block_stopmessage_delta message_stop. 스트리밍 모드에서는 비용 헤더가 포함되지 않습니다.

SSE stream
event: message_start
data: {"type":"message_start","message":{"id":"msg_01abc","type":"message","role":"assistant","model":"claude-sonnet-4-6","content":[],"stop_reason":null,"usage":{"input_tokens":12,"output_tokens":0}}}

event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello! "}}

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"How can I help you?"}}

event: content_block_stop
data: {"type":"content_block_stop","index":0}

event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":5}}

event: message_stop
data: {"type":"message_stop"}

토큰 수 세기#

/v1/messages와 동일한 본문을 받아 {"input_tokens": <int>}를 반환합니다. 이 값은 휴리스틱 추정치이며 실제 토크나이저 결과가 아닙니다.

request
curl https://router.pleum.ai/v1/messages/count_tokens \
  -H "x-api-key: plm_..." \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "messages": [
      {"role": "user", "content": "Hello"}
    ]
  }'
200 OK
{
  "input_tokens": 12
}

과금 방식#

비용은 응답 본문에 포함되지 않습니다. 대신 응답 헤더 X-Cost-Krw(정수)와 X-Cost-Usd(소수), 그리고 x-request-id로 반환됩니다.