Dokumentasi
Messages API
Anthropic Messages API native untuk keluarga Claude. Kirim bentuk permintaan Anthropic yang sesungguhnya — cache_control, tools, dan extended thinking diteruskan langsung tanpa diterjemahkan.
Endpoint: POST /v1/messages. Permintaan dan respons sama persis dengan Messages API Anthropic, sehingga Anthropic SDK — atau alat apa pun yang mendukungnya — dapat digunakan dengan Kunavo hanya dengan mengubah base URL dan kunci.
Endpoint mana yang sebaiknya saya gunakan?
Kunavo menyediakan keluarga Claude melalui dua cara. Keduanya ditagih dengan tarif yang sama; pilih berdasarkan bentuk permintaan yang sudah digunakan kode Anda.
| Endpoint | Struktur | Gunakan jika |
|---|---|---|
/v1/ | Obrolan OpenAI | Anda sudah menggunakan OpenAI SDK, atau ingin satu jalur kode untuk Claude dan GPT. |
/v1/messages | Anthropic Messages | Anda menggunakan Anthropic SDK / Claude Code, atau menginginkan cache_ |
Autentikasi
Arahkan base URL ke https://api.kunavo.com — Anthropic SDK menambahkan /v1/messages sendiri. Berikan kunci Kunavo Anda (sk-kn-...) sebagai kunci API; endpoint menerima kunci melalui header x-api-key (bawaan Anthropic SDK) maupun Authorization: Bearer.
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)caching prompt
Inilah alasan utama menggunakan endpoint native. Lampirkan titik pemisah cache_control pada blok sistem, blok konten pesan, atau definisi tool mana pun. Awalan yang ditandai ditulis ke cache sekali, lalu digunakan kembali pada panggilan berikutnya yang memakainya.
Caching itu sendiri tidak memerlukan endpoint ini: pada /v1/chat/completions dan /v1/responses, Kunavo menetapkan sendiri breakpoint untuk model Claude pada prompt yang panjang. Yang berbeda dari endpoint ini adalah tidak menambahkan satu pun: isi permintaan Anda diteruskan persis seperti yang Anda kirim, sehingga setiap breakpoint di dalamnya adalah yang Anda tetapkan sendiri.
# 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)Harga keluarga Claude di Kunavo:
cache_read_input_tokens— disajikan dari cache, ditagih sebesar 0.10× tarif input (diskon 90%); 0.025× di Claude Fable 5.1, 0.05× di Claude Opus 5.5.cache_creation_input_tokens— ditulis ke cache, ditagih sebesar 1.25× tarif input. Kunavo menagih penulisan dengan TTL 1 jam sebesar 1.25× juga, lebih rendah daripada 2× Anthropic.
Pengaliran data
Atur stream: true (atau gunakan helper SDK stream()). Kunavo meneruskan aliran event native Anthropic — message_start, content_block_delta, message_delta, message_stop — secara langsung.
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)Gambar
Kirim gambar sebagai sumber base64 atau url. Sumber url adalah satu-satunya bagian isi permintaan yang ditulis ulang oleh Kunavo: Kunavo mengunduh sendiri gambar https (atau membuka URI data:) lalu meneruskannya sebagai base64, karena upstream mengabaikan sumber url dan akan menjawab seolah-olah tidak ada gambar yang dikirim. Gambar di dalam tool_result ditangani dengan cara yang sama. Batas: 16 gambar per permintaan, 5 MB per gambar, total 20 MB; gambar yang tidak dapat diambil akan menghasilkan kesalahan, bukan dilewati.
Objek penggunaan
Setiap respons (serta event streaming message_delta / message_start) memuat objek native usage Anthropic:
| Kolom | Makna |
|---|---|
input_tokens | Token input baru (tidak di-cache). |
cache_ | Token yang disajikan dari cache, ditagih sebesar 0.10× input (0.025× di Claude Fable 5.1, 0.05× di Claude Opus 5.5). |
cache_ | Token yang ditulis ke cache pada panggilan ini (ditagih 1.25× input). |
output_ | Token output, termasuk extended thinking. |
Tool server
Tool server Anthropic (web_search, web_fetch, code_execution) diteruskan sebagai definisi tool biasa. Konten yang ditambahkan ke percakapan (hasil pencarian, halaman yang diambil, keluaran program) dikembalikan dalam usage sebagai token dan ditagih dengan tarif di atas.
Pencarian web juga ditagih per pencarian, di luar biaya token tersebut: Anthropic mencantumkan tarif $10 per 1.000 pencarian, dan Kunavo mengenakan biaya dengan diskon masing-masing model. Jumlahnya adalah usage.server_tool_use.web_search_requests, dalam respons atau message_delta terakhir dari stream; pencarian yang menghasilkan kesalahan (seperti max_uses_exceeded) tidak dihitung. Pengambilan web dan eksekusi kode tidak dikenai biaya selain tokennya.
| Per 1.000 pencarian web | Model |
|---|---|
| $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 |
Model yang didukung
Model Claude apa pun yang diaktifkan menerima /v1/messages. Kirim slug Kunavo sebagai model:
claude-fable-5,claude-sonnet-5claude-opus-5,claude-opus-4-7,claude-opus-4-6claude-sonnet-4-6,claude-haiku-4-5
Model GPT tidak tersedia di sini — panggil melalui /v1/chat/completions.
HTTP mentah
Tidak perlu SDK — endpoint ini menerima POST JSON biasa:
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"}]
}'