Skip to Content

Messages

POST /v1/messages 는 Anthropic 네이티브 메시지 API와 호환되는 엔드포인트입니다. Claude Code 같은 Anthropic SDK 클라이언트에서 base URL만 바꾸면 그대로 호출할 수 있습니다.

POST https://gw.letsur.ai/v1/messages

인증

이 엔드포인트는 두 가지 인증 방식을 지원합니다.

시나리오헤더 / env
Letsur Gateway 키x-api-key 헤더에 Letsur Gateway 키 (Authorization 헤더도 가능)
Anthropic 원본 키x-api-key 헤더 또는 ANTHROPIC_API_KEY 환경변수에 Anthropic 원본 키

Anthropic 원본 키로 호출하면 Letsur 한도와 비용 추적이 적용되지 않습니다. 한도와 비용 추적이 필요하면 Letsur Gateway 키로 호출합니다.

요청 파라미터

이 엔드포인트는 Anthropic 원본 스펙을 그대로 받습니다.

파라미터타입필수기본값설명
modelstringAnthropic 모델 코드 (예: claude-sonnet-4-6)
messagesarray{role, content}roleuser 또는 assistant
max_tokensinteger응답 최대 토큰 (Anthropic은 필수)
systemstring×시스템 프롬프트 (별도 필드, OpenAI와 다름)
temperaturenumber×10 ~ 1
top_pnumber×nucleus sampling
top_kinteger×top-k sampling
stop_sequencesarray×응답 중단 시퀀스
streamboolean×falseSSE 스트리밍 (스트리밍)
toolsarray×Tool calling 정의 (Anthropic 형식)
tool_choiceobject×{"type": "auto"}Tool 선택 정책

위 표는 자주 쓰는 파라미터입니다. 나머지 파라미터는 Anthropic Messages API 문서 의 표준을 따릅니다. Chat Completions와는 세 가지가 다릅니다. system을 별도 필드로 받고, max_tokens가 필수이며, role에 system이 없습니다.

응답 (200)

{ "id": "msg_...", "type": "message", "role": "assistant", "model": "claude-sonnet-4-6", "content": [ {"type": "text", "text": "..."} ], "stop_reason": "end_turn", "stop_sequence": null, "usage": { "input_tokens": 12, "output_tokens": 48 } }
필드의미
content[]응답 블록 배열 (text / tool_use 등)
stop_reasonend_turn / max_tokens / stop_sequence / tool_use 중 하나
usage.input_tokens / output_tokens입력·출력 토큰 수

Letsur Gateway 키로 호출하면 응답의 usageestimated_cost 필드가 함께 들어갑니다. 이 값으로 호출 비용을 바로 확인할 수 있습니다. Anthropic 원본 키로 호출하면 Anthropic 원본 응답이 그대로 돌아오며 estimated_cost가 포함되지 않습니다.

예시

Claude Code 연동

export ANTHROPIC_BASE_URL=https://gw.letsur.ai export ANTHROPIC_API_KEY=<key> claude

도구별 설정은 외부 도구 연동의 Claude Code 항목에서 확인합니다.

API 호출

curl https://gw.letsur.ai/v1/messages \ -H "x-api-key: <API_KEY>" \ -H "anthropic-version: 2023-06-01" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-6", "max_tokens": 1024, "messages": [{"role": "user", "content": "안녕"}] }'

스트리밍

stream: true로 요청하면 응답을 Server-Sent Events(SSE) 이벤트 단위로 받습니다.

event: message_start data: {"type":"message_start","message":{"id":"msg_...","type":"message","role":"assistant","content":[],"model":"claude-sonnet-4-6","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":"안"}} ... event: content_block_stop data: {"type":"content_block_stop","index":0} event: message_delta data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":48}} event: message_stop data: {"type":"message_stop"}
이벤트의미
message_start응답 시작과 초기 usage(input_tokens)를 전달합니다
content_block_start출력 블록을 시작합니다
content_block_delta텍스트나 tool_use 일부를 전달합니다
content_block_stop출력 블록 하나를 끝냅니다
message_deltastop_reason과 누적 output_tokens를 전달합니다 (마지막 chunk에서 최종값 확인)
message_stop응답을 종료합니다

에러

에러 형식은 인증 방식에 따라 다릅니다.

시나리오응답 형식
Letsur Gateway 키RFC 7807 형식으로 매핑한 응답
Anthropic 원본 키Anthropic 원본 형식 그대로 — error 객체 (RFC 7807 아님)

Anthropic 원본 키로 호출할 때의 에러 응답 예시입니다.

{ "type": "error", "error": { "type": "invalid_request_error", "message": "..." } }

Letsur Gateway 키로 호출하면 에러 코드의 분류기를 거쳐 RFC 7807 형식으로 통일되고, 인증·한도 같은 공통 에러도 함께 적용됩니다. Anthropic 원본 키로 호출하면 Anthropic 측 에러가 그대로 노출됩니다.

다음에 볼 것

Last updated on