TokenOff
Claude

API Interface

Use Claude models by calling the API interface provided by TokenOff.

Get API Key

Go to the API Keys page to create your API key.

API Base URL

https://tokenoff.com/api

Claude models are called through the /v1/messages interface, compatible with the Anthropic Messages API. This means you can use the official Anthropic Agent SDK without any adaptation changes.

curl

Blocking Call

curl https://tokenoff.com/api/v1/messages \
  -H "Authorization: Bearer your_api_key_here" \
  -H "Content-Type: application/json" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
      "model": "claude-sonnet-4-6",
      "max_tokens": 1024,
      "messages": [
          {"role": "user", "content": "Hello"}
      ]
  }'

Output:

{"id":"msg_2be959c6a0f24a3ab2f8989ac75ba170","type":"message","role":"assistant","content":[{"type":"text","text":"Hey! I'm Claude Code, your AI assistant. I can help you with development tasks, writing, analysis, infrastructure work, and pretty much any professional task you need.\n\nI have access to your local filesystem and can execute commands on your macOS system. What can I help you with today?"}],"model":"claude-sonnet-4.5","stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":29,"output_tokens":107,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"service_tier":"standard"}}

Streaming Response

curl https://tokenoff.com/api/v1/messages \
  -H "Authorization: Bearer your_api_key_here" \
  -H "Content-Type: application/json" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
      "model": "claude-sonnet-4-6",
      "max_tokens": 1024,
      "messages": [
          {"role": "user", "content": "Hello"}
      ],
      "stream": true
  }'

Output:

event: message_start
data: {"type":"message_start","message":{"id":"msg_9eca72b683ce4b48ac2d9e3b81e1734d","type":"message","role":"assistant","content":[],"model":"claude-sonnet-4.5","stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":5,"output_tokens":0,"cache_creation_input_tokens":4,"cache_read_input_tokens":20,"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":4},"service_tier":"standard"}}}

event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}

event: ping
data: {"type": "ping"}

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

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"! I'm"}}

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Claude Code."}}

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

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" help you with development"}}

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

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

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

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

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

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

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" any other professional work you"}}

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

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" What would you like to wor"}}

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"k on?"}}

event: content_block_stop
data: {"type":"content_block_stop","index":0}

event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":5,"output_tokens":48,"cache_creation_input_tokens":4,"cache_read_input_tokens":20,"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":4},"service_tier":"standard"}}

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

Python

pip install anthropic

Blocking Call

from anthropic import Anthropic

client = Anthropic(
  auth_token="your_api_key_here",
  base_url="https://tokenoff.com/api",
)

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

print(message.content)

Output:

[TextBlock(citations=None, text="Hey! I'm Claude Code, not Claude — but happy to help all the same. What can I do for you?", type='text')]

Streaming Response

from anthropic import Anthropic

client = Anthropic(
  auth_token="your_api_key_here",
  base_url="https://tokenoff.com/api",
)

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

for event in message:
  print(event)

Output:

RawMessageStartEvent(message=Message(id='msg_b82fc92b20b8484e925f821cc5a4a2cf', container=None, content=[], model='claude-opus-4.6', role='assistant', stop_reason=None, stop_sequence=None, type='message', usage=Usage(cache_creation=CacheCreation(ephemeral_1h_input_tokens=0, ephemeral_5m_input_tokens=3), cache_creation_input_tokens=3, cache_read_input_tokens=24, inference_geo=None, input_tokens=5, output_tokens=0, server_tool_use=None, service_tier='standard')), type='message_start')
RawContentBlockStartEvent(content_block=TextBlock(citations=None, text='', type='text'), index=0, type='content_block_start')
RawContentBlockDeltaEvent(delta=TextDelta(text='Hey', type='text_delta'), index=0, type='content_block_delta')
RawContentBlockDeltaEvent(delta=TextDelta(text='!', type='text_delta'), index=0, type='content_block_delta')
RawContentBlockDeltaEvent(delta=TextDelta(text=" I'm Claude Code, not", type='text_delta'), index=0, type='content_block_delta')
RawContentBlockDeltaEvent(delta=TextDelta(text=' Claude —', type='text_delta'), index=0, type='content_block_delta')
RawContentBlockDeltaEvent(delta=TextDelta(text=' but happy', type='text_delta'), index=0, type='content_block_delta')
RawContentBlockDeltaEvent(delta=TextDelta(text=' to help all', type='text_delta'), index=0, type='content_block_delta')
RawContentBlockDeltaEvent(delta=TextDelta(text=' the', type='text_delta'), index=0, type='content_block_delta')
RawContentBlockDeltaEvent(delta=TextDelta(text=' same', type='text_delta'), index=0, type='content_block_delta')
RawContentBlockDeltaEvent(delta=TextDelta(text='.', type='text_delta'), index=0, type='content_block_delta')
RawContentBlockDeltaEvent(delta=TextDelta(text=' What', type='text_delta'), index=0, type='content_block_delta')
RawContentBlockDeltaEvent(delta=TextDelta(text=' can I do for you?', type='text_delta'), index=0, type='content_block_delta')
RawContentBlockStopEvent(index=0, type='content_block_stop')
RawMessageDeltaEvent(delta=Delta(container=None, stop_reason='end_turn', stop_sequence=None), type='message_delta', usage=MessageDeltaUsage(cache_creation_input_tokens=3, cache_read_input_tokens=24, input_tokens=5, output_tokens=26, server_tool_use=None, cache_creation={'ephemeral_1h_input_tokens': 0, 'ephemeral_5m_input_tokens': 3}, service_tier='standard'))
RawMessageStopEvent(type='message_stop')

TypeScript

npm install @anthropic-ai/sdk

Blocking Call

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

const client = new Anthropic({
  authToken: "your_api_key_here",
  baseURL: "https://tokenoff.com/api",
});

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

console.log(message.content);

Output:

[
  {
    type: 'text',
    text: "Hey! I'm Claude Code, not Claude — but happy to help all the same. What can I do for you?"
  }
]

Streaming Response

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

const client = new Anthropic({
  authToken: "your_api_key_here",
  baseURL: "https://tokenoff.com/api",
});

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

for await (const event of message) {
console.log(event);
}

Output:

{
  type: 'message_start',
  message: {
    id: 'msg_94119cfa27ab499c9f0abd2b7d50732b',
    type: 'message',
    role: 'assistant',
    content: [],
    model: 'claude-opus-4.6',
    stop_reason: null,
    stop_sequence: null,
    usage: {
      input_tokens: 6,
      output_tokens: 0,
      cache_creation_input_tokens: 3,
      cache_read_input_tokens: 23,
      cache_creation: [Object],
      service_tier: 'standard'
    }
  }
}
{
  type: 'content_block_start',
  index: 0,
  content_block: { type: 'text', text: '' }
}
{
  type: 'content_block_delta',
  index: 0,
  delta: { type: 'text_delta', text: 'Hello' }
}
{
  type: 'content_block_delta',
  index: 0,
  delta: { type: 'text_delta', text: '! How' }
}
{
  type: 'content_block_delta',
  index: 0,
  delta: { type: 'text_delta', text: ' can I help you today?' }
}
{ type: 'content_block_stop', index: 0 }
{
  type: 'message_delta',
  delta: { stop_reason: 'end_turn', stop_sequence: null },
  usage: {
    input_tokens: 6,
    output_tokens: 10,
    cache_creation_input_tokens: 3,
    cache_read_input_tokens: 23,
    cache_creation: { ephemeral_1h_input_tokens: 0, ephemeral_5m_input_tokens: 3 },
    service_tier: 'standard'
  }
}
{ type: 'message_stop' }

Other Languages

For SDKs in other languages, please refer to the official documentation.

Supported Models

Contact Us

If you encounter any issues while using TokenOff:

On this page