Skip to main content
POST
Jangan mencampur kedua API: /v1/* adalah API inferensi (dokumen ini — diteruskan apa adanya dari upstream, tanpa wrapper); /api/* adalah API manajemen (saldo/log, dll., respons {success, message, data}). Jika Anda melihat di suatu tempat bahwa /v1/messages mengembalikan {code, data}, dokumen ini yang berlaku.

Otorisasi

Autentikasi mendukung dua metode, pilih salah satu:
string
Header autentikasi gaya AnthropicKunjungi Halaman Manajemen API Key untuk mendapatkan API Key Anda
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-01

Body

string
default:"claude-sonnet-4-6"
wajib
Model name
  • claude-opus-4-8 - Claude Opus 4.8 flagship model
  • claude-opus-4-7 - Claude Opus 4.7 flagship model
  • claude-opus-4-6 - Claude Opus 4.6 flagship model
  • claude-sonnet-4-6 - Claude Sonnet 4.6 balanced version
  • claude-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 role dan content.💡 Pengisian cepat (area Try it):
  1. Klik ”+ Add an item” untuk menambahkan pesan
  2. Input role: user (pesan pengguna) atau assistant (respons AI, untuk multi-giliran)
  3. Input content: teks pesan Anda
Pesan pengguna tunggal:
Percakapan multi-giliran:
Respons assistant yang sudah diisi sebelumnya:
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
Default: 1.0
number
Parameter nucleus sampling, rentang 0-1Menggunakan nucleus sampling. Sebaiknya gunakan salah satu dari temperature atau top_p, bukan keduanya.Default: 1.0
integer
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: false
array
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 kontencontent membedakan jenis blok lewat type. Satu respons dapat berisi beberapa blok (misalnya thinking + text saat thinking diaktifkan).Blok text:
Blok tool_use:
caller adalah field baru dari upstream, belum tercantum di dokumentasi resmi; abaikan saat parsing.
Blok thinking (muncul saat body request menyertakan parameter thinking):
Pada percakapan multi-giliran, jika Anda mengembalikan blok thinking, harus mengembalikan signature apa adanya; jika tidak, upstream akan menolak.
Jangan mengasumsikan content[0] adalah teks. Saat thinking diaktifkan, content[0] bisa berupa blok thinking. Iterasikan dan saring:
string
Model yang menangani requestContoh: "claude-sonnet-4-6"
string
Alasan berhentiNilai yang mungkin:
  • end_turn: Selesai secara alami
  • max_tokens: Mencapai token maksimum
  • stop_sequence: Mengenai urutan penghenti
  • tool_use: Memanggil tool
string | null
Urutan penghenti yang terpicuUrutan penghenti yang dihasilkan, jika ada; jika tidak, bernilai null
object | null
Field Anthropic yang lebih baru; null untuk request biasa
object
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:
Output terstruktur:

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)

Dibanding API resmi Anthropic: level root tidak memiliki "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_startcontent_block_startpingcontent_block_delta (berulang) → content_block_stopmessage_deltamessage_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

  1. Keamanan API Key:
    • Simpan API key dalam variabel lingkungan
    • Jangan pernah menulis key secara hardcode di kode sumber
    • Rotasi key secara berkala
  2. Rate Limiting:
    • Perhatikan batas rate API
    • Terapkan mekanisme retry (berdasarkan kode status HTTP)
    • Gunakan backoff eksponensial
  3. Manajemen Token:
    • Pantau penggunaan token (baca usage)
    • Optimalkan panjang prompt
    • Gunakan nilai max_tokens yang sesuai
    • Saat thinking diaktifkan, output_tokens sudah mencakup thinking; jangan menagih dua kali
  4. Pemilihan Model:
    • Opus: tugas kompleks yang membutuhkan penalaran mendalam
    • Sonnet: performa dan biaya yang seimbang
    • Haiku: respons cepat untuk tugas sederhana
  5. Parsing konten:
    • Iterasikan content untuk blok type == "text"; jangan hardcode content[0].text
    • Jika model mengembalikan JSON yang dibungkus blok kode Markdown, itu adalah keluaran model bukan wrapper API (lihat FAQ di bawah)
  6. 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):
  1. Gunakan tools untuk memaksa output terstruktur — paling andal; field input sudah berupa objek yang ter-parse:
  1. Prefill pesan assistant, agar model melanjutkan dari {:
  1. Minta secara eksplisit di system prompt: «hanya keluarkan JSON, tanpa blok kode Markdown».
Tidak disarankan mengupas code fence dengan regex — jika model sesekali tidak menambahkan pagar, parsing akan gagal.