Skip to main content

Anthropic Integration

Works with both Python and TypeScript. Your existing Claude code stays the same—just change the base URL.

Setup

from anthropic import Anthropic

client = Anthropic(
    api_key="sk-ant-your-key",
    base_url="https://proxy.raptordata.dev",
    default_headers={
        "X-Raptor-Api-Key": "rpt_your-key",
        "X-Raptor-Workspace-Id": "your-workspace-id"
    }
)
Anthropic uses https://proxy.raptordata.dev (no /v1). OpenAI uses https://proxy.raptordata.dev/v1.

Messages

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

With System Prompt

message = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    system="You are a helpful assistant.",
    messages=[{"role": "user", "content": "Hello!"}]
)

Streaming

with client.messages.stream(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Tell me a story"}]
) as stream:
    for text in stream.text_stream:
        print(text, end="")

Tools

tools = [{
    "name": "get_weather",
    "description": "Get weather for a location",
    "input_schema": {
        "type": "object",
        "properties": {"location": {"type": "string"}},
        "required": ["location"]
    }
}]

message = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    tools=tools,
    messages=[{"role": "user", "content": "Weather in Paris?"}]
)

Vision

message = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    messages=[{
        "role": "user",
        "content": [
            {"type": "image", "source": {"type": "url", "url": "https://..."}},
            {"type": "text", "text": "What's in this image?"}
        ]
    }]
)

Response Headers

HeaderDescription
X-Raptor-Cachehit or miss
X-Raptor-Latency-MsTotal Raptor overhead
X-Raptor-Upstream-Latency-MsTime waiting for Anthropic
X-Raptor-Request-IdUnique ID for debugging

Error Handling

from anthropic import APIError

try:
    message = client.messages.create(...)
except APIError as e:
    if e.status_code == 403:
        print("Blocked by Raptor firewall")
    else:
        raise
All Claude features work: Claude 3.5 Sonnet, Claude 3 Opus, vision, tools, and more.