Seri Teks
Claude Messages API
- Sepenuhnya kompatibel dengan protokol native Anthropic Claude Messages (
POST /v1/messages) - Mendukung percakapan multi-giliran, streaming SSE, pemanggilan tool, dan extended thinking
- Mendukung konten multimodal, termasuk teks dan gambar
- Respons diteruskan apa adanya dari upstream, tanpa wrapper
{code, data}
POST
Otorisasi
Autentikasi mendukung dua metode, pilih salah satu:string
string
Autentikasi Bearer Token (alternatif untuk
x-api-key)string
Nomor versi API (opsional; request tetap berfungsi tanpa header ini)Untuk memudahkan migrasi ke endpoint resmi Anthropic di kemudian hari, disarankan untuk tetap menyertakannya:Contoh:
2025-10-01Body
string
default:"claude-sonnet-4-6"
wajib
Model name
claude-opus-4-8- Claude Opus 4.8 flagship modelclaude-opus-4-7- Claude Opus 4.7 flagship modelclaude-opus-4-6- Claude Opus 4.6 flagship modelclaude-sonnet-4-6- Claude Sonnet 4.6 balanced versionclaude-opus-4-5-20251101- Claude Opus 4.5 model
array
wajib
Daftar pesanArray pesan yang digunakan model untuk menghasilkan respons berikutnya. Setiap pesan berisi field Percakapan multi-giliran:Respons assistant yang sudah diisi sebelumnya:
role dan content.💡 Pengisian cepat (area Try it):- Klik ”+ Add an item” untuk menambahkan pesan
- Input
role:user(pesan pengguna) atauassistant(respons AI, untuk multi-giliran) - Input
content: teks pesan Anda
integer
wajib
Token maksimum yang akan dibuat (wajib, selaras dengan API resmi Anthropic)Jumlah maksimum token yang akan dibuat sebelum berhenti. Model dapat berhenti sebelum mencapai batas ini.Setiap model memiliki nilai maksimum yang berbeda; lihat dokumentasi model. Minimum: 1
object
Konfigurasi extended thinkingSetelah diaktifkan, respons
content dapat berisi blok thinking. Disarankan menggunakan nama model standar + parameter ini, bukan mengandalkan alias model -thinking di sisi platform, agar migrasi ke endpoint resmi tanpa mengubah kode lebih mudah.Untuk percakapan multi-giliran yang perlu mengembalikan blok thinking, Anda harus mengembalikan signature apa adanya; jika tidak, upstream akan menolak.string | array
Prompt sistemPrompt sistems set Claude’s role, personality, goals, and instructions.Format string:Format terstruktur:
number
Parameter temperature, rentang 0-1Mengontrol keacakan output:
- Nilai rendah (misalnya 0,2): lebih deterministik dan konservatif
- Nilai tinggi (misalnya 0,8): lebih acak dan kreatif
number
Parameter nucleus sampling, rentang 0-1Menggunakan nucleus sampling. Sebaiknya gunakan salah satu dari
temperature atau top_p, bukan keduanya.Default: 1.0integer
Sampling Top-KHanya sampling dari K opsi teratas, sehingga menghapus respons probabilitas rendah di “long tail”.Disarankan hanya untuk kasus penggunaan lanjutan.
boolean
Aktifkan streamingJika
true, menggunakan Server-Sent Events (SSE) untuk mengalirkan respons.Default: falsearray
Urutan penghentiUrutan teks khusus yang membuat model berhenti menghasilkan output.Maksimum 4 urutan.Contoh:
["\n\nHuman:", "\n\nAssistant:"]object
MetadataObjek metadata untuk request.Mencakup:
user_id: Pengidentifikasi pengguna
array
Definisi toolDaftar tool yang dapat digunakan model untuk menyelesaikan tugas.Contoh function tool:Jenis tool yang didukung:
- Tool fungsi kustom
- Tool penggunaan komputer (computer_20241022)
- Tool editor teks (text_editor_20241022)
- Tool Bash (bash_20241022)
object
Strategi pemilihan toolMengontrol cara model menggunakan tool:
{"type": "auto"}: Menentukan otomatis (default){"type": "any"}: Harus menggunakan tool{"type": "tool", "name": "tool_name"}: Gunakan tool tertentu
Respons
string
Pengidentifikasi pesan unikContoh:
"msg_013Zva2CMHLNnXjNJJKqJ2EF"string
Jenis objekSelalu
"message"string
RoleSelalu
"assistant"array
Array blok kontenBlok tool_use:Blok thinking (muncul saat body request menyertakan parameter
content membedakan jenis blok lewat type. Satu respons dapat berisi beberapa blok (misalnya thinking + text saat thinking diaktifkan).Blok text:caller adalah field baru dari upstream, belum tercantum di dokumentasi resmi; abaikan saat parsing.thinking):string
Model yang menangani requestContoh:
"claude-sonnet-4-6"string
Alasan berhentiNilai yang mungkin:
end_turn: Selesai secara alamimax_tokens: Mencapai token maksimumstop_sequence: Mengenai urutan penghentitool_use: Memanggil tool
string | null
Urutan penghenti yang terpicuUrutan penghenti yang dihasilkan, jika ada; jika tidak, bernilai
nullobject | null
Field Anthropic yang lebih baru;
null untuk request biasaobject
Statistik penggunaan token (struktur lengkap non-stream)
Contoh Penggunaan
Percakapan Dasar
Percakapan Multi-Giliran
Menggunakan Prompt Sistem
Respons Streaming
Penggunaan Tool
Pemahaman Vision
Gambar Base64
Praktik Terbaik
1. Rekayasa Prompt
Definisi role yang jelas:2. Penanganan Error
3. Optimasi Token
4. Pengisian Awal Respons
Penanganan Respons Streaming
Streaming Python
Streaming JavaScript
Perbedaan platform dan catatan integrasi
Respons tanpa wrapper
Saat berhasil,POST /v1/messages langsung mengembalikan objek message Anthropic, tanpa wrapper {code, data}. Dengan demikian SDK resmi, Claude Code, Cline, dll. tetap kompatibel 1:1.
Format error (satu-satunya perbedaan substansial dibanding resmi)
"type": "error"; error.type selalu apimart_error, bukan tipe semantik seperti invalid_request_error.
Saran integrasi: jangan mengandalkan error.type untuk cabang retry; gunakan kode status HTTP + error.code:
Untuk dukungan, sediakan: request id di akhir
error.message, serta header respons x-oneapi-request-id.
Streaming SSE
Tambahkan"stream": true pada request. Urutan event sama dengan resmi:
message_start → content_block_start → ping → content_block_delta (berulang) → content_block_stop → message_delta → message_stop
⚠️ Struktur usage berbeda antara stream dan non-stream: message_delta.usage biasanya hanya memiliki 4 field token, tanpa cache_creation, service_tier, inference_geo. Parse secara terpisah atau anggap semua field opsional.
Endpoint belum diimplementasikan
POST /v1/messages/count_tokens belum diimplementasikan dan mengembalikan 404. Panggilan client.messages.count_tokens() pada SDK resmi akan gagal. Untuk memperkirakan token, hitung di lokal atau baca usage.input_tokens pada respons.
Harus mengabaikan field yang tidak dikenal
API ini meneruskan upstream apa adanya; Anthropic dapat menambahkan field kapan saja (mis.stop_details, inference_geo, caller, output_tokens_details). Jangan aktifkan skema ketat:
- Go: jangan gunakan
DisallowUnknownFields() - Pydantic: jangan gunakan
extra="forbid" - TypeScript / Zod: gunakan
.passthrough()bukan.strict()
Saran penamaan model
Model sejenis dengan sufiks-thinking adalah alias ekstensi platform. Disarankan menggunakan nama model standar tanpa sufiks + parameter thinking di body request, agar migrasi ke endpoint resmi lebih mudah.
Field body request lainnya selaras dengan resmi: model, messages, max_tokens (wajib), system, temperature, top_p, top_k, stop_sequences, stream, tools, tool_choice, thinking, metadata. Semantik mengikuti Anthropic Messages API.
Catatan Penting
-
Keamanan API Key:
- Simpan API key dalam variabel lingkungan
- Jangan pernah menulis key secara hardcode di kode sumber
- Rotasi key secara berkala
-
Rate Limiting:
- Perhatikan batas rate API
- Terapkan mekanisme retry (berdasarkan kode status HTTP)
- Gunakan backoff eksponensial
-
Manajemen Token:
- Pantau penggunaan token (baca
usage) - Optimalkan panjang prompt
- Gunakan nilai
max_tokensyang sesuai - Saat thinking diaktifkan,
output_tokenssudah mencakup thinking; jangan menagih dua kali
- Pantau penggunaan token (baca
-
Pemilihan Model:
- Opus: tugas kompleks yang membutuhkan penalaran mendalam
- Sonnet: performa dan biaya yang seimbang
- Haiku: respons cepat untuk tugas sederhana
-
Parsing konten:
- Iterasikan
contentuntuk bloktype == "text"; jangan hardcodecontent[0].text - Jika model mengembalikan JSON yang dibungkus blok kode Markdown, itu adalah keluaran model bukan wrapper API (lihat FAQ di bawah)
- Iterasikan
-
Penyaringan Konten:
- Validasi input pengguna
- Saring informasi sensitif
- Terapkan moderasi konten
FAQ
Text di content berupa blok kode ```json ... ``` — bagaimana menghapusnya?
Ini bukan masalah struktur API. Field text berisi konten mentah yang dihasilkan model: jika model menyimpulkan Anda ingin JSON, biasanya membungkusnya dalam blok kode Markdown. API tidak akan (dan tidak seharusnya) menulis ulang keluaran model.
Untuk mendapatkan data terstruktur yang bersih, ada tiga pendekatan yang benar (dari yang paling andal ke yang kurang andal):
- Gunakan tools untuk memaksa output terstruktur — paling andal; field
inputsudah berupa objek yang ter-parse:
- Prefill pesan assistant, agar model melanjutkan dari
{:
- Minta secara eksplisit di system prompt: «hanya keluarkan JSON, tanpa blok kode Markdown».