Claude API SDK Integration: Node.js, Python & TypeScript 2026

Das Anthropic SDK hat mehr zu bieten als einen einfachen messages.create Call. Streaming, Tool Use, Vision, Batch-API, Prompt Caching, Structured Outputs — dieser Guide zeigt alle SDK-Features mit echten Code-Beispielen.

SDK-Features im Überblick

Streaming
Token-für-Token Ausgabe, SSE-kompatibel
🔧
Tool Use
Function Calling, Agent Loops
👁️
Vision
Bilder, PDFs, Screenshots analysieren
📦
Batch API
50% günstiger, async bis 24h
💾
Prompt Caching
90% günstiger für wiederholte Prompts
📋
Structured Output
JSON Schema für zuverlässige Outputs

Setup: Node.js und Python

Node.jsInstallation und Basis-Setup

npm install @anthropic-ai/sdk import Anthropic from '@anthropic-ai/sdk'; const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY, // Optional: eigener Base-URL für Proxies baseURL: process.env.ANTHROPIC_BASE_URL, // Timeout + Retry konfigurieren timeout: 60000, maxRetries: 3 }); # Python: pip install anthropic import anthropic client = anthropic.Anthropic( api_key=os.environ["ANTHROPIC_API_KEY"] )

Streaming: Live-Ausgabe

StreamingToken-für-Token mit dem SDK

# Node.js Streaming mit SDK-Helper const stream = await client.messages.stream({ model: 'claude-sonnet-4-6', max_tokens: 1024, messages: [{ role: 'user', content: 'Erkläre Quantencomputing' }] }); // Methode 1: Event-basiert stream.on('text', (text) => process.stdout.write(text)); stream.on('finalMessage', (msg) => { console.log(`\nTokens verwendet: ${msg.usage.input_tokens + msg.usage.output_tokens}`); }); // Methode 2: AsyncIterator (cleaner) for await (const event of stream) { if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') { process.stdout.write(event.delta.text); } } # Python Streaming: with client.messages.stream( model="claude-sonnet-4-6", max_tokens=1024, messages=[{"role": "user", "content": "Erkläre Quantencomputing"}] ) as stream: for text in stream.text_stream: print(text, end="", flush=True)

Prompt Caching: 90% Kosten sparen

CacheSystemat. Caching für wiederholte Prompts

# Prompt Caching für statische Kontexte (Docs, System-Prompts) # Cache-Prefix: bis zu 4 cache_control-Breakpoints pro Request const LONG_DOCUMENT = fs.readFileSync('knowledge-base.txt', 'utf-8'); const response = await client.messages.create({ model: 'claude-sonnet-4-6', max_tokens: 1024, system: [ { type: 'text', text: 'Du bist ein Experte für unsere Dokumentation.' }, { type: 'text', text: LONG_DOCUMENT, // 50.000 Token Dokument cache_control: { type: 'ephemeral' } // ← Cache-Breakpoint } ], messages: [{ role: 'user', content: userQuestion }] }); # Erster Call: input_tokens = 50.000 (normal berechnet) # Folge-Calls: cache_read_input_tokens = 50.000 (90% günstiger!) # Cache-TTL: 5 Minuten (wird bei Nutzung verlängert)
Wann Prompt Caching nutzen? Ideal für: große System-Prompts (>1000 Tokens), Dokumenten-QA, Chatbots mit langer History, Code-Review über große Codebases. Rechnung: 50k Tokens × 1000 Anfragen/Tag × 90% Rabatt = erhebliche Einsparung.

Batch API: 50% günstiger für Bulk-Tasks

# Batch API: bis zu 10.000 Requests gleichzeitig — 50% Rabatt # Ideal für: Dokumente klassifizieren, Emails analysieren, Bulk-Content const batch = await client.messages.batches.create({ requests: documents.map((doc, i) => ({ custom_id: `doc-${i}`, params: { model: 'claude-haiku-4-5', max_tokens: 256, messages: [{ role: 'user', content: `Klassifiziere als JSON: ${doc.text.substring(0, 1000)}` }] } })) }); // Batch läuft async — polling bis fertig (max 24h) let batchResult; do { batchResult = await client.messages.batches.retrieve(batch.id); await sleep(30000); // alle 30s prüfen } while (batchResult.processing_status !== 'ended'); // Ergebnisse abrufen for await (const result of await client.messages.batches.results(batch.id)) { if (result.result.type === 'succeeded') { console.log(result.custom_id, result.result.message.content[0].text); } }

Vision: Bilder und PDFs verarbeiten

VisionScreenshots und Dokumente analysieren

# Screenshot analysieren: const imageData = fs.readFileSync('screenshot.png'); const base64Image = imageData.toString('base64'); const response = await client.messages.create({ model: 'claude-sonnet-4-6', max_tokens: 1024, messages: [{ role: 'user', content: [ { type: 'image', source: { type: 'base64', media_type: 'image/png', data: base64Image } }, { type: 'text', text: 'Beschreibe alle UI-Bugs die du in diesem Screenshot siehst' } ] }] }); # URL-basiert (öffentliche Bilder): # source: { type: 'url', url: 'https://example.com/image.png' }
Rate Limits beachten: Haiku: 1000 RPM / Sonnet: 500 RPM / Opus: 100 RPM. Bei Batch-Verarbeitung: p-limit oder bottleneck-Library nutzen um unter den Limits zu bleiben. Claude Code generiert dir einen Rate-Limiter auf Knopfdruck.

SDK Deep-Dive im Kurs

Im Claude Code Mastery Kurs: vollständiger SDK-Workshop mit Node.js und Python. Streaming, Tool Use, Vision, Prompt Caching, Batch API — mit echten Projekten die alle Features kombinieren.

14 Tage kostenlos testen →