Anthropic Compatible API

TokenCode is compatible with the Anthropic Messages API protocol. You can use the Anthropic SDK or any Claude-compatible client to connect directly.

Base URL

text
https://tokencode.dev

Authentication

All endpoints require authentication:

  • Bearer Token: Authorization: Bearer <your-api-key>
  • x-api-key Header: x-api-key: <your-api-key>

Messages

Anthropic Claude-compatible Messages endpoint. Supports Claude models and other models via protocol conversion.

bash
curl https://tokencode.dev/v1/messages \
  -H "x-api-key: sk-your-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": "Explain quantum computing"}
    ]
  }'

Request parameters:

Parameter Type Required Description
model string Yes Model ID (e.g., claude-sonnet-4-6)
messages array Yes Array of message objects
max_tokens integer Yes Maximum tokens to generate
stream boolean No Enable streaming response
temperature number No Sampling temperature (0-1)
top_p number No Nucleus sampling probability
top_k integer No Top-K sampling
stop_sequences array No Stop sequences
system string/array No System prompt
tools array No Tool definitions
tool_choice object No Tool calling strategy

Response example:

json
{
  "id": "msg_abc123",
  "type": "message",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "Quantum computing is a type of computing that leverages quantum mechanics..."
    }
  ],
  "model": "claude-sonnet-4-6",
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "usage": {
    "input_tokens": 25,
    "output_tokens": 128
  }
}

Streaming Response

When "stream": true is set, the response uses SSE format with event types matching the native Anthropic protocol:

text
event: message_start
data: {"type":"message_start","message":{"id":"msg_abc123","type":"message","role":"assistant","content":[],"model":"claude-sonnet-4-6","usage":{"input_tokens":25,"output_tokens":0}}}

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Quantum"}}

event: message_stop
data: {"type":"message_stop"}

Automatic Protocol Conversion

When calling non-Claude models through the Anthropic protocol endpoint, TokenCode automatically performs protocol conversion:

  • Request conversion: Converts Anthropic Messages format to the target model's native format (e.g., OpenAI Chat Completions)
  • Response conversion: Converts the target model's response to Anthropic Messages format
  • Streaming adaptation: Streaming event types are automatically adapted to Anthropic's SSE event format

This means you can use Anthropic-native clients like Claude Code to call OpenAI, Gemini, and other models through this endpoint without any adaptation work.

Using the Anthropic SDK

python
import anthropic

client = anthropic.Anthropic(
    api_key="sk-your-api-key",
    base_url="https://tokencode.dev"
)

# Call a Claude model
message = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}]
)

# Call an OpenAI model — automatic protocol conversion
message = client.messages.create(
    model="gpt-5.5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}]
)
javascript
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: "sk-your-api-key",
  baseURL: "https://tokencode.dev",
});

// Call a Claude model
const message = await client.messages.create({
  model: "claude-sonnet-4-6",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello" }],
});

Multimodal Input

Image input (Vision) is supported:

python
message = 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": "<base64-encoded-image>"
                    }
                },
                {
                    "type": "text",
                    "text": "Describe this image"
                }
            ]
        }
    ]
)

Error Responses

Error responses follow the Anthropic error format:

json
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "max_tokens: required"
  }
}
HTTP Status Code Meaning
400 Invalid request parameters
401 Authentication failed — invalid API Key
403 Insufficient permissions
404 Model not found
429 Rate limit or insufficient balance
500 Internal server error
529 Upstream service overloaded