165 lines
4.4 KiB
Markdown
165 lines
4.4 KiB
Markdown
|
|
# Claude API — cURL / Raw HTTP
|
||
|
|
|
||
|
|
Use these examples when the user needs raw HTTP requests or is working in a language without an official SDK.
|
||
|
|
|
||
|
|
## Setup
|
||
|
|
|
||
|
|
```bash
|
||
|
|
export ANTHROPIC_API_KEY="your-api-key"
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Basic Message Request
|
||
|
|
|
||
|
|
```bash
|
||
|
|
curl https://api.anthropic.com/v1/messages \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
||
|
|
-H "anthropic-version: 2023-06-01" \
|
||
|
|
-d '{
|
||
|
|
"model": "claude-opus-4-6",
|
||
|
|
"max_tokens": 1024,
|
||
|
|
"messages": [
|
||
|
|
{"role": "user", "content": "What is the capital of France?"}
|
||
|
|
]
|
||
|
|
}'
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Streaming (SSE)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
curl https://api.anthropic.com/v1/messages \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
||
|
|
-H "anthropic-version: 2023-06-01" \
|
||
|
|
-d '{
|
||
|
|
"model": "claude-opus-4-6",
|
||
|
|
"max_tokens": 1024,
|
||
|
|
"stream": true,
|
||
|
|
"messages": [{"role": "user", "content": "Write a haiku"}]
|
||
|
|
}'
|
||
|
|
```
|
||
|
|
|
||
|
|
The response is a stream of Server-Sent Events:
|
||
|
|
|
||
|
|
```
|
||
|
|
event: message_start
|
||
|
|
data: {"type":"message_start","message":{"id":"msg_...","type":"message",...}}
|
||
|
|
|
||
|
|
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_stop
|
||
|
|
data: {"type":"content_block_stop","index":0}
|
||
|
|
|
||
|
|
event: message_delta
|
||
|
|
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":12}}
|
||
|
|
|
||
|
|
event: message_stop
|
||
|
|
data: {"type":"message_stop"}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Tool Use
|
||
|
|
|
||
|
|
```bash
|
||
|
|
curl https://api.anthropic.com/v1/messages \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
||
|
|
-H "anthropic-version: 2023-06-01" \
|
||
|
|
-d '{
|
||
|
|
"model": "claude-opus-4-6",
|
||
|
|
"max_tokens": 1024,
|
||
|
|
"tools": [{
|
||
|
|
"name": "get_weather",
|
||
|
|
"description": "Get current weather for a location",
|
||
|
|
"input_schema": {
|
||
|
|
"type": "object",
|
||
|
|
"properties": {
|
||
|
|
"location": {"type": "string", "description": "City name"}
|
||
|
|
},
|
||
|
|
"required": ["location"]
|
||
|
|
}
|
||
|
|
}],
|
||
|
|
"messages": [{"role": "user", "content": "What is the weather in Paris?"}]
|
||
|
|
}'
|
||
|
|
```
|
||
|
|
|
||
|
|
When Claude responds with a `tool_use` block, send the result back:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
curl https://api.anthropic.com/v1/messages \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
||
|
|
-H "anthropic-version: 2023-06-01" \
|
||
|
|
-d '{
|
||
|
|
"model": "claude-opus-4-6",
|
||
|
|
"max_tokens": 1024,
|
||
|
|
"tools": [{
|
||
|
|
"name": "get_weather",
|
||
|
|
"description": "Get current weather for a location",
|
||
|
|
"input_schema": {
|
||
|
|
"type": "object",
|
||
|
|
"properties": {
|
||
|
|
"location": {"type": "string", "description": "City name"}
|
||
|
|
},
|
||
|
|
"required": ["location"]
|
||
|
|
}
|
||
|
|
}],
|
||
|
|
"messages": [
|
||
|
|
{"role": "user", "content": "What is the weather in Paris?"},
|
||
|
|
{"role": "assistant", "content": [
|
||
|
|
{"type": "text", "text": "Let me check the weather."},
|
||
|
|
{"type": "tool_use", "id": "toolu_abc123", "name": "get_weather", "input": {"location": "Paris"}}
|
||
|
|
]},
|
||
|
|
{"role": "user", "content": [
|
||
|
|
{"type": "tool_result", "tool_use_id": "toolu_abc123", "content": "72°F and sunny"}
|
||
|
|
]}
|
||
|
|
]
|
||
|
|
}'
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Extended Thinking
|
||
|
|
|
||
|
|
> **Opus 4.6 and Sonnet 4.6:** Use adaptive thinking. `budget_tokens` is deprecated on both Opus 4.6 and Sonnet 4.6.
|
||
|
|
> **Older models:** Use `"type": "enabled"` with `"budget_tokens": N` (must be < `max_tokens`, min 1024).
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Opus 4.6: adaptive thinking (recommended)
|
||
|
|
curl https://api.anthropic.com/v1/messages \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
||
|
|
-H "anthropic-version: 2023-06-01" \
|
||
|
|
-d '{
|
||
|
|
"model": "claude-opus-4-6",
|
||
|
|
"max_tokens": 16000,
|
||
|
|
"thinking": {
|
||
|
|
"type": "adaptive"
|
||
|
|
},
|
||
|
|
"output_config": {
|
||
|
|
"effort": "high"
|
||
|
|
},
|
||
|
|
"messages": [{"role": "user", "content": "Solve this step by step..."}]
|
||
|
|
}'
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Required Headers
|
||
|
|
|
||
|
|
| Header | Value | Description |
|
||
|
|
| ------------------- | ------------------ | -------------------------- |
|
||
|
|
| `Content-Type` | `application/json` | Required |
|
||
|
|
| `x-api-key` | Your API key | Authentication |
|
||
|
|
| `anthropic-version` | `2023-06-01` | API version |
|
||
|
|
| `anthropic-beta` | Beta feature IDs | Required for beta features |
|