클로드 소네트 5.5 API 활용법 - 첫 호출, 효율적 구현, 설계, 도구, 스트리밍

클로드 소네트 5.5 API 가이드: curl, Python, TypeScript에서 클로드-소네트-5-5를 이용한 첫 호출, effort, between_tools, strict tools 및 스트리밍 포함.

Ashley Innocent

Ashley Innocent

29 September 2026

클로드 소네트 5.5 API 활용법 - 첫 호출, 효율적 구현, 설계, 도구, 스트리밍

Apidog 엔터프라이즈

온프레미스 배포

SSO & RBAC

SOC 2 준수

Apidog Enterprise 살펴보기

Claude Sonnet 5.5 API를 사용하려면, `https://api.anthropic.com/v1/messages`로 POST 요청을 보내십시오. 이때 `"model": "claude-sonnet-5-5"`, `x-api-key` 헤더에 API 키, 그리고 `anthropic-version: 2023-06-01`을 포함해야 합니다. 이 API는 입력 토큰 백만 개당 $2, 출력 토큰 백만 개당 $10의 비용이 들며, 최대 1백만 토큰의 컨텍스트를 읽고 최대 12만 8천 토큰을 작성할 수 있습니다. 기본적으로 적응형 사고(adaptive thinking)를 실행하며, 기본 노력(effort) 수준은 `high`입니다.

Anthropic은 2026년 9월 28일에 Sonnet 5.5를 출시했습니다 (Claude Sonnet 5.5란 무엇인가에서 사양 및 벤치마크를 다룹니다). 이 가이드는 curl, Python, TypeScript에서의 첫 호출, 그리고 노력(effort), 사고(thinking), 도구(tools), 스트리밍(streaming), 거부(refusals), 속도 제한(rate limits)에 대해 설명합니다. Sonnet 5 코드를 이전하시나요? Sonnet 5.5 vs Sonnet 5 가이드에는 모든 주요 변경 사항과 변경 전/후 JSON이 나와 있습니다. 아래의 각 요청을 Apidog에서 보내고 어설션과 함께 저장된 테스트로 유지할 수 있습니다.

버튼

Claude Sonnet 5.5 API 요약

매개변수 Sonnet 5.5 동작
모델 ID claude-sonnet-5-5 (Bedrock: anthropic.claude-sonnet-5-5)
MTok당 가격 입력 $2, 출력 $10, 캐시 읽기 $0.20; 배치 $1/$5
컨텍스트 / 출력 1M / 128K; `output-300k-2026-03-24` 베타를 사용한 배치 시 300K
output_config.effort low, medium, high (기본값), xhigh, max
thinking.type adaptive (생략 시 기본값) 또는 between_tools; disabled는 400 반환
thinking.display omitted (기본값), summarized, updates (베타)
tool_choice auto 또는 none; any 및 tool은 400 반환
temperature, top_p, top_k 기본값이 아닌 값은 400 반환
최소 캐시 가능 프롬프트 512 토큰 (Sonnet 5에서는 1,024)
에이전트 코딩용 max_tokens 스트리밍 포함 128,000

출처: Sonnet 5.5 모델 페이지 및 마이그레이션 가이드.

Claude Sonnet 5.5 API 예시: 첫 호출

API 키를 생성하고 (Anthropic API 키 가이드에 설명되어 있습니다) 하드코딩하는 대신 `ANTHROPIC_API_KEY`로 내보내십시오. 그런 다음 다음을 보내세요:

curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-5-5",
    "max_tokens": 4096,
    "output_config": {"effort": "medium"},
    "messages": [{"role": "user", "content": "Explain idempotency keys in two sentences."}]
  }'

Python SDK는 환경 변수에서 `ANTHROPIC_API_KEY`를 읽습니다:

import anthropic

client = anthropic.Anthropic()
response = client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=4096,
    output_config={"effort": "medium"},
    messages=[{"role": "user", "content": "Explain idempotency keys in two sentences."}],
)
print(response.stop_reason)
for block in response.content:
    if block.type == "text":
        print(block.text)

TypeScript도 동일하게 작동합니다:

import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();
const response = await client.messages.create({
  model: "claude-sonnet-5-5",
  max_tokens: 4096,
  output_config: { effort: "medium" },
  messages: [{ role: "user", content: "Explain idempotency keys in two sentences." }],
});
for (const block of response.content) {
  if (block.type === "text") console.log(block.text);
}

`type`별로 콘텐츠 블록을 읽습니다. 사고(thinking)는 기본적으로 활성화되어 있으므로, 응답이 `thinking` 블록으로 시작될 수 있으며 `content[0].text`를 읽는 코드가 오류를 발생시킬 수 있습니다. 사고 토큰은 출력으로 청구되며 텍스트가 숨겨져 있어도 `max_tokens`에 포함되므로, 예상 응답보다 여유 공간을 남겨두십시오.

노력(effort) 수준 선택

`output_config.effort`에 설정된 노력(Effort)은 주요 비용 및 품질 조절 기능입니다. Anthropic은 Sonnet 5.5에 대해 수준을 재조정했으므로 Sonnet 5 설정이 그대로 적용되지 않습니다. 자체 평가를 통해 새로 측정해 보십시오. 프롬프팅 가이드는 다음 시작점을 제안합니다:

작업 부하 시작 값
일반 작업 high (API 기본값)
에이전트 코딩, 잘 명시된 작업 `medium`, 더 어렵거나 긴 작업에는 `high`로 이동
채팅 및 지연 시간에 민감한 호출 `medium` 또는 `low`
평가에서 측정 가능한 이득이 있는 어려운 작업 `xhigh` 또는 `max`

편차는 큽니다. Anthropic 자체 Terminal-Bench 4.0 실행에서 Sonnet 5.5는 `high`에서 시도당 $1.94로 43.0%, `max`에서 $12.54로 70.6%를 기록했습니다. Sonnet 5.5 가격 분석은 요청당 비용을 자세히 설명합니다.

세 가지 동작을 계획하십시오. `medium` 이상에서는 모델이 인사말조차 거의 모든 응답 전에 생각하며, 덜 생각하도록 프롬프팅하는 것은 신뢰할 수 없습니다. 대신 노력을 낮추십시오. `low` 및 `medium`에서는 긴 에이전트 작업에서 일찍 확인하는 경향이 있습니다. 그리고 요청 간에 최상위 노력 수준을 변경하면 프롬프트 캐시가 무효화됩니다. 대화 중에 수준을 전환하고 캐시를 유지하려면 메시지별 노력(베타, 헤더 `anthropic-beta: mid-conversation-output-config-2026-07-01`)을 사용하십시오: 빈 `content`와 새 `output_config.effort`를 가진 `role: "system"` 메시지를 추가하십시오.

사고(thinking) 제어: 적응형(adaptive) 또는 도구 간(between_tools)

`thinking` 필드를 생략하면 Sonnet 5.5는 적응형 사고를 실행합니다. `{"type": "disabled"}`는 400 오류와 함께 거부됩니다. 사전 사고(up-front thinking)를 끄려면 가장 낮은 설정인 `between_tools`를 보내십시오:

{
  "model": "claude-sonnet-5-5",
  "max_tokens": 16000,
  "thinking": {"type": "between_tools"},
  "output_config": {"effort": "high"},
  "messages": [{"role": "user", "content": "..."}]
}

Sonnet 5.5 `between_tools` 규칙:

적응형 사고(adaptive thinking)에서 `display`는 사고(thinking) 블록이 포함하는 내용을 결정합니다. 기본값인 `omitted`는 각 `thinking` 블록을 빈 `thinking` 필드와 `signature`와 함께 반환합니다. `summarized`는 읽기 쉬운 요약을 반환합니다. `updates` (베타, 헤더 `thinking-display-updates-2026-08-18`)는 진행 상황 업데이트만 텍스트로 반환합니다.

진행 상황 업데이트는 UI를 혼란스럽게 할 가능성이 가장 큰 변경 사항입니다. Sonnet 5.5는 도구 호출 사이에 작성된 한두 문장 이상의 메모를 `text` 대신 자체 `thinking` 블록에 넣습니다. 기본값인 `omitted`에서는 해당 블록이 비어 있으므로, 이전에는 단계를 설명하던 에이전트 인터페이스가 조용해집니다. `display: "updates"` 또는 `"summarized"`로 설정하거나, 텍스트가 포함된 메모를 반환하는 `between_tools`를 실행하십시오. 각 비어있지 않은 `thinking` 블록은 그 뒤에 오는 `tool_use` 블록 전에 렌더링하십시오. 응답 텍스트에 추론을 요청하면 `reasoning_extraction` 거부가 발생할 수 있으므로, 대신 이 블록들을 읽으십시오.

강제 tool_choice 없이 도구 사용

강제 도구 사용 기능은 사라졌습니다. `{"type": "any"}` 또는 `{"type": "tool", ...}`과 같은 `tool_choice`는 토큰 계산 엔드포인트에서도 다음 메시지와 함께 400 오류를 반환합니다:

tool_choice: type "tool" and "any" are not supported for this model.

`auto`를 보내고, 도구의 입력이 스키마와 일치하도록 `strict: true`로 표시하고, 프롬프트에서 모델에게 언제 호출할지 알려주십시오:

{
  "model": "claude-sonnet-5-5",
  "max_tokens": 1024,
  "tools": [{
    "name": "get_weather",
    "description": "Get the current weather for a city",
    "input_schema": {
      "type": "object",
      "properties": {"location": {"type": "string"}},
      "required": ["location"],
      "additionalProperties": false
    },
    "strict": true
  }],
  "tool_choice": {"type": "auto"},
  "messages": [{"role": "user", "content": "What's the weather in Paris? Use the get_weather tool."}]
}

요청은 최대 20개의 엄격한 도구를 포함할 수 있으며, 엄격한 스키마는 모든 객체에 `additionalProperties: false`가 필요합니다. Amazon Bedrock에서는 Sonnet 5.5에 대해 엄격한 도구를 사용할 수 없습니다. `strict` 없이 `auto`를 보내고 코드에서 입력을 검증하십시오.

두 가지 루프 세부 사항이 중요합니다. 비어 있는 `thinking` 블록을 포함하여 모든 `thinking` 블록을 `tool_use` 블록과 함께 변경하지 않고 다시 전달하십시오. 그리고 `Bash`로 선언된 도구에 대해 `bash`와 같이 가끔 대소문자 오류가 발생할 수 있습니다. 프롬프팅 가이드는 모호하지 않은 일치를 수락하거나 정확한 이름을 명시하는 `is_error: true`가 포함된 `tool_result`를 반환할 것을 제안합니다.

응답 스트리밍

본문에 `\"stream\": true`를 추가하거나 SDK의 스트림 헬퍼를 사용하십시오. 에이전트 코딩의 경우, 프롬프팅 가이드는 스트리밍과 함께 128,000의 `max_tokens`를 권장합니다:

with client.messages.stream(
    model="claude-sonnet-5-5",
    max_tokens=128000,
    output_config={"effort": "medium"},
    messages=[{"role": "user", "content": "Review this diff for bugs: ..."}],
) as stream:
    for event in stream:
        if event.type == "content_block_delta" and event.delta.type == "text_delta":
            print(event.delta.text, end="", flush=True)
    final = stream.get_final_message()

서버 전송 이벤트는 `message_start`, 이어서 각 블록에 대해 `content_block_start`, `content_block_delta`, `content_block_stop` 순서로 도착하며, 그 다음 `message_delta` (`stop_reason` 포함)와 `message_stop`이 옵니다. `omitted` 설정에서는 사고(thinking) 블록이 하나의 빈 `thinking_delta`와 `signature_delta`를 스트리밍한 다음 텍스트가 시작됩니다. 진행 상황 업데이트 블록이 열리기 전에 몇 초간 일시 중지가 있을 수 있습니다.

`stream.get_final_message()` (TypeScript: `stream.finalMessage()`)는 서명이 포함된 완전한 블록을 재구성합니다. 해당 콘텐츠를 어시스턴트 차례로 변경하지 않고 기록에 추가하고, 기록은 추가 전용으로 유지하십시오. Sonnet 5.5는 이전 대화에 걸쳐 각 사고(thinking) 블록에 서명하므로, 2026년 8월 31일(UTC 00:00) 이후에 생성된 계정에서는 이전 기록을 편집한 후 블록을 다시 재생하면 400 오류를 반환합니다. 블록은 또한 이를 생성한 계정에 연결됩니다.

거부 및 폴백 처리

거부(refusal)는 오류가 아닙니다. `stop_reason: "refusal"`과 함께 HTTP 200 응답을 받으며, `category`가 `cyber`, `bio`, `frontier_llm`, `reasoning_extraction`, `general_harms` 중 하나인 `stop_details` 객체와 `explanation`이 함께 제공됩니다. 설명을 파싱하는 대신 그대로 표시하십시오. 그 문구는 안정적이지 않습니다. `content`를 읽기 전에 `stop_reason`에 따라 분기하십시오.

서버 측 폴백은 선택 사항입니다. `\"fallbacks\": "default"`와 `anthropic-beta: server-side-fallback-2026-07-01` 헤더(베타, Claude API만 해당)를 추가하면, API는 Sonnet 5에서 `cyber` 및 `frontier_llm` 거절을 재시도합니다. 다른 세 가지 카테고리는 재시도되지 않습니다. 응답의 `model` 필드는 서비스를 제공한 모델의 이름을 나타내며, `fallback` 콘텐츠 블록은 핸드오프를 표시합니다.

속도 제한

Sonnet 5.5는 Sonnet 5와 별개로 자체 속도 제한을 가집니다. 속도 제한 페이지에는 네 가지 티어가 나열되어 있습니다:

티어 분당 요청 수 분당 입력 토큰 수 분당 출력 토큰 수
시작 (Start) 1,000 2,000,000 400,000
빌드 (Build) 5,000 5,000,000 1,000,000
확장 (Scale) 10,000 10,000,000 2,000,000
커스텀 (Custom) 영업팀 문의 영업팀 문의 영업팀 문의

429 처리 및 백오프에 대해서는 속도 제한 초과 가이드를 참조하십시오.

Apidog에서 Claude Sonnet 5.5 API 테스트

저장된 요청은 노력(effort) 비교 및 스트림 디버깅을 반복 가능하게 만듭니다. 다음은 Apidog에서 설정하는 방법입니다:

Apidog에서 Claude Sonnet 5.5 API 요청이 헤더와 본문과 함께 구성된 스크린샷. 환경 변수로 API 키를 설정하고 응답에 어설션을 추가하는 방법을 보여줍니다.
  1. 환경을 생성하고 `ANTHROPIC_API_KEY`를 변수로 추가하십시오. `x-api-key` 헤더에서 `anthropic-version` 및 `content-type` 옆에 `{{ANTHROPIC_API_KEY}}`로 참조하십시오.
  2. `https://api.anthropic.com/v1/messages`로 POST 요청을 생성하고, 첫 호출 본문을 붙여넣고 저장하십시오.
  3. 어설션을 추가하십시오: 상태는 200, `$.stop_reason`은 `end_turn`과 같고, `$.usage.output_tokens`는 0보다 크며, `$.content[*].type`에는 `text`가 포함되어야 합니다. 이제 거부(refusal)는 조용히 통과하는 대신 테스트를 실패시킵니다.
  4. `"stream": true`를 사용하여 요청을 복제하십시오. Apidog는 `text/event-stream` 응답 이벤트를 이벤트별로 표시하므로, 빈 `thinking_delta`, `signature_delta`, 텍스트가 순서대로 도착하는 것을 볼 수 있습니다.
  5. `"model": "claude-sonnet-5"`로 다시 복제하고 한 폴더에 두 요청을 보관하십시오: 동일한 프롬프트, 두 모델, `usage`를 나란히 비교할 수 있습니다.

더 넓은 패턴에 대해서는 LLM 애플리케이션 테스트 및 AI 에이전트 API 테스트를 참조하십시오.

자주 묻는 질문

다음 단계

첫 호출 요청을 `medium`으로 보낸 다음, `high`로 다시 실행하여 자체 작업 부하의 프롬프트에 대한 `usage.output_tokens` 및 답변 품질을 비교하십시오. Apidog 다운로드하여 두 실행 결과를 어설션과 함께 저장하십시오. 터미널에서 작업하고 싶다면, Claude Code의 Claude Sonnet 5.5를 참조하십시오.

Apidog에서 API 설계-첫 번째 연습

API를 더 쉽게 구축하고 사용하는 방법을 발견하세요