APIMODELHUB docs

Docs / Giao thức

Anthropic Messages

Anthropic SDK và Claude Code: đổi ANTHROPIC_BASE_URL là xong. Đường DUY NHẤT cho model claude-*.

Cấu hình

Endpoint giữ nguyên hình dạng của Anthropic, nên mọi tham số, tool definition, content block và cache_control đều hoạt động như cũ. Chỉ đổi base URL và key.

Base URL KHÔNG có /v1SDK Anthropic tự nối /v1/messages vào base_url, nên giá trị đúng là https://api.apimodelhub.com. Điền https://api.apimodelhub.com/v1 thì nó gọi /v1/v1/messages và nhận 404 — lỗi trông như key sai nhưng không phải.
Biến môi trường
export ANTHROPIC_BASE_URL=https://api.apimodelhub.com
export ANTHROPIC_API_KEY=sk-spk-...
Python (anthropic)
from anthropic import Anthropic

client = Anthropic(base_url="https://api.apimodelhub.com", api_key="sk-spk-...")

msg = client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=512,
    messages=[{"role": "user", "content": "Hello"}],
)
print(msg.content[0].text)
TypeScript (@anthropic-ai/sdk)
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  baseURL: "https://api.apimodelhub.com",
  apiKey: process.env.ANTHROPIC_API_KEY,
});

const msg = await client.messages.create({
  model: "claude-sonnet-5-5",
  max_tokens: 512,
  messages: [{ role: "user", content: "Hello" }],
});

Streaming

Bật stream: true như bình thường. SSE được chuyển byte-exact — không parse rồi dựng lại, nên thứ tự event và nội dung từng chunk giống hệt gọi trực tiếp.

with client.messages.stream(
    model="claude-sonnet-5-5",
    max_tokens=512,
    messages=[{"role": "user", "content": "Write a haiku"}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)
Prompt caching được tính đúngCache read rẻ hơn nhiều so với input (theo tỷ lệ của nhà cung cấp), cache write 5 phút và 1 giờ là hai mức khác nhau. Chúng tôi tính riêng từng mức — nhờ vậy khách dùng nhiều cache trả ít hơn hẳn so với bị gộp chung một giá.

Đếm token trước khi gửi

POST /v1/messages/count_tokens chuyển tiếp tới nhà cung cấp và KHÔNG bị tính tiền. Dùng nó để chặn request quá lớn trước khi trả tiền cho model.

n = client.messages.count_tokens(
    model="claude-sonnet-5-5",
    messages=[{"role": "user", "content": "Hello"}],
)
print(n.input_tokens)