Dokümantasyon
Messages API
Claude ailesi için Anthropic'e özgü Messages API. Gerçek Anthropic istek biçimini gönderin — cache_control, tools ve extended thinking doğrudan ve çevrilmeden iletilir.
Uç nokta: POST /v1/messages. İstek ve yanıt Anthropic'in Messages API'siyle birebir eşleşir; bu nedenle Anthropic SDK'sı — veya bu protokolle çalışan herhangi bir araç — yalnızca temel URL'yi ve anahtarı değiştirerek Kunavo ile çalışır.
Hangi uç noktayı kullanmalıyım?
Kunavo, Claude ailesini iki şekilde sunar. Ücretlendirme aynıdır; kodunuzun kullandığı istek biçimine göre seçim yapın.
| Uç nokta | Biçim | Şu durumlarda kullanın |
|---|---|---|
/v1/ | OpenAI sohbeti | OpenAI SDK'sını zaten kullanıyorsanız veya Claude ve GPT genelinde tek bir kod yolu istiyorsanız. |
/v1/messages | Anthropic Messages | Anthropic SDK'sını / Claude Code'u kullanıyorsanız veya çeviri katmanı olmadan doğrudan cache_ |
Kimlik doğrulama
Temel URL olarak https://api.kunavo.com adresini kullanın — Anthropic SDK, /v1/messages yolunu kendisi ekler. Kunavo anahtarınızı (sk-kn-...) API anahtarı olarak iletin; uç nokta bunu x-api-key üstbilgisi (Anthropic SDK'nın varsayılanı) veya Authorization: Bearer üzerinden kabul eder.
from anthropic import Anthropic
client = Anthropic(
api_key="sk-kn-...", # your Kunavo key
base_url="https://api.kunavo.com", # SDK appends /v1/messages
)
msg = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
system="You are a senior staff engineer.",
messages=[
{"role": "user", "content": "Pros and cons of event sourcing?"},
],
)
print(msg.content[0].text)İstem önbelleğe alma
Anthropic'in kendi uç noktasını kullanmanın başlıca nedeni budur. Herhangi bir sistem bloğuna, mesaj içerik bloğuna veya araç tanımına bir cache_control kesme noktası ekleyin. İşaretlenen önek bir kez önbelleğe yazılır, ardından bu öneki paylaşan sonraki çağrılarda yeniden kullanılır.
Önbelleğe alma kendi başına bu uç noktayı gerektirmez: /v1/chat/completions ve /v1/responses üzerinde Kunavo, uzun bir istemde Claude modelleri için kesme noktalarını kendisi ayarlar. Bu uç noktanın farkı hiç eklememesidir: istek gövdeniz gönderdiğiniz gibi iletilir, dolayısıyla içindeki her kesme noktası sizin ayarladığınızdır.
# Mark a large, stable prefix with cache_control. The first call writes that
# span to cache at 1.25× the input token price; later calls that reuse it read
# it back at ~10%.
msg = client.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
system=[
{
"type": "text",
"text": LONG_STYLE_GUIDE, # tens of thousands of tokens
"cache_control": {"type": "ephemeral"},
},
],
messages=[{"role": "user", "content": "Review this PR against the guide."}],
)
u = msg.usage
print(u.cache_creation_input_tokens, u.cache_read_input_tokens)Kunavo'daki Claude ailesi için fiyatlandırma:
cache_read_input_tokens— önbellekten sunulur, giriş ücretinin 0.10× kadarı üzerinden ücretlendirilir (90% indirim); Claude Fable 5.1 için 0,025×, Claude Opus 5.5 için 0,05×.cache_creation_input_tokens— önbelleğe yazılır, giriş ücretinin 1.25× katı üzerinden ücretlendirilir. Kunavo, 1 saatlik TTL ile yazımları da Anthropic'in 2× ücretinin altında, aynı 1.25× oranında ücretlendirir.
Akış
stream: true ayarını yapın (veya SDK'daki stream() yardımcısını kullanın). Kunavo, Anthropic'in kendi olay akışını — message_start, content_block_delta, message_delta, message_stop — olduğu gibi iletir.
with client.messages.stream(
model="claude-sonnet-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Explain CRDTs in one paragraph."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)Görseller
Görselleri base64 kaynakları veya url kaynakları olarak gönderin. url kaynağı, Kunavo'nun yeniden yazdığı gövdenin tek bölümüdür: https görselini kendisi indirir (veya bir data: URI'sini açar) ve base64 olarak iletir; çünkü üst sistem url kaynağını yok sayar ve yanıtı hiç görsel gönderilmemiş gibi verir. tool_result içindeki görseller de aynı şekilde işlenir. Sınırlar: istek başına 16 görsel, görsel başına 5 MB, toplamda 20 MB; alınamayan bir görsel atlanmak yerine hata döndürür.
Kullanım nesnesi
Her yanıt (ve akıştaki message_delta / message_start olayları) Anthropic'e özgü bir usage nesnesi taşır:
| Alan | Anlam |
|---|---|
input_tokens | Önbelleğe alınmamış yeni giriş tokenları. |
cache_ | Önbellekten sunulan tokenlar; giriş ücretinin 0.10× katı üzerinden ücretlendirilir (Claude Fable 5.1 için 0,025×, Claude Opus 5.5 için 0,05×). |
cache_ | Bu çağrıda önbelleğe yazılan tokenlar (giriş ücretinin 1.25× katı üzerinden ücretlendirilir). |
output_ | Genişletilmiş düşünme dâhil çıkış tokenları. |
Sunucu araçları
Anthropic'in sunucu araçları (web_search, web_fetch, code_execution) sıradan araç tanımları olarak iletilir. Bunların sohbete eklediği içerik (arama sonuçları, getirilen bir sayfa, program çıktısı) token olarak usage alanında döner ve yukarıdaki ücretlerden ücretlendirilir.
Web araması da bu token ücretlerine ek olarak arama başına ücretlendirilir: Anthropic, 1.000 arama için 10 $ fiyat listeler ve Kunavo bu tutarı her modelin kendi indirim oranıyla ücretlendirir. Yanıtta veya akışın son message_delta olayında bulunan usage.server_tool_use.web_search_requests alanı arama sayısını gösterir; hata döndüren bir arama (örneğin max_uses_exceeded) sayılmaz. Web'den getirme ve kod yürütme, token ücretlerine ek maliyet oluşturmaz.
| 1.000 web araması başına | Modeller |
|---|---|
| $7.00 | claude-fable-5-1, claude-fable-5, claude-opus-5-5, claude-opus-5, claude-opus-4-8, claude-opus-4-7, claude-opus-4-6, claude-sonnet-5, claude-sonnet-4-6, claude-haiku-4-5 |
Desteklenen modeller
Etkinleştirilmiş tüm Claude modelleri /v1/messages'i kabul eder. Kunavo kısa adını model olarak gönderin:
claude-fable-5,claude-sonnet-5claude-opus-5,claude-opus-4-7,claude-opus-4-6claude-sonnet-4-6,claude-haiku-4-5
GPT modelleri burada kullanılamaz — onları /v1/chat/completions üzerinden çağırın.
Ham HTTP
SDK gerekmez — uç nokta düz bir JSON POST isteğidir:
curl https://api.kunavo.com/v1/messages \
-H "x-api-key: sk-kn-..." \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello, Claude"}]
}'