Panduan Integrasi Claude API: Antarmuka Native Anthropic dan Konfigurasi Kunci

  • 发布时间
  • 语言id

Panduan integrasi Anthropic Claude melalui gateway AzzTimes: detail alamat API, cara otentikasi, contoh curl, parameter request/response, streaming SSE, dan penanganan kesalahan.

I. Gambaran Umum

AzzTimes menyediakan integrasi perantara yang kompatibel dengan Anthropic Messages API (/v1/messages) untuk para pengembang. Anda hanya perlu mengirimkan permintaan ke gateway kami dan mengganti kunci otentikasi dengan kunci sk- yang dibuat di "Pusat Pengguna - API Keys", sehingga Anda dapat langsung menggunakan seri model Claude tanpa perlu mengubah kode yang sudah ada.

Model yang tersedia saat ini mengacu pada daftar model di platform (seperti claude-sonnet-5, claude-opus-5, claude-sonnet-4-6, claude-opus-4-8, dll.). Daftar lengkap dan harga satuan dapat diperiksa kapan saja melalui GET /v1/models.

II. Alamat API

MetodePathKeterangan
POST/v1/messagesGerbang penerusan perantara, body permintaan menggunakan payload Anthropic /v1/messages
GET/v1/modelsDaftar model dan harga satuan (tanpa otentikasi)

Alamat gateway: https://www.relay-api.com. Isi path permintaan sesuai dengan tabel di atas.

III. Metode Otentikasi

Buat kunci di "Pusat Pengguna → API Keys" dengan format sk-xxxxxxxx. Saat melakukan pemanggilan, sertakan kunci melalui salah satu cara berikut:

  • Header Authorization: Authorization: Bearer sk-kunci-anda (Direkomendasikan, kompatibel dengan sebagian besar SDK)
  • Header x-api-key: x-api-key: sk-kunci-anda

Jika kunci tidak valid, dinonaktifkan, atau saldo tidak mencukupi, sistem akan mengembalikan status 401 / 403. Silakan periksa status kunci dan saldo akun Anda.

IV. Memulai dengan Cepat (curl)

4.1 Percakapan Non-Streaming

curl -X POST https://www.relay-api.com/v1/messages \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-kunci-anda" \
  -d '{
    "model": "claude-sonnet-5",
    "max_tokens": 1024,
    "messages": [
      {"role": "user", "content": "Perkenalkan dirimu dalam satu kalimat"}
    ]
  }'

4.2 Menggunakan system prompt dan percakapan multi-turn

curl -X POST https://www.relay-api.com/v1/messages \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk-kunci-anda" \
  -d '{
    "model": "claude-opus-5",
    "max_tokens": 2048,
    "system": "Anda adalah seorang insinyur dokumentasi teknis yang teliti.",
    "messages": [
      {"role": "user", "content": "Apa header otentikasi untuk Claude Messages API?"},
      {"role": "assistant", "content": "Gunakan x-api-key atau Authorization: Bearer untuk menyertakan kunci."},
      {"role": "user", "content": "Berikan contoh permintaan streaming."}
    ],
    "metadata": {"request_id": "demo-001"}
  }'

metadata.request_id akan dicatat ke dalam log penggunaan, memudahkan rekonsiliasi di "Pusat Pengguna → Riwayat Penggunaan".

V. Parameter Permintaan

FieldTipeWajibKeterangan
modelstringYaSlug model, misal claude-sonnet-5
max_tokensintYaJumlah token output maksimum, disarankan 1~64000
messagesarrayYaPesan percakapan, elemen berupa {role, content}, role: user / assistant
systemstringTidakSystem prompt
temperaturenumberTidakSuhu sampling, default 1.0, rentang 0~1
top_pnumberTidakNucleus sampling, default 0.999
streamboolTidakApakah streaming diaktifkan, default false
stop_sequencesarrayTidakUrutan berhenti
metadata.request_idstringTidakID permintaan kustom untuk rekonsiliasi

VI. Struktur Respon

Permintaan non-streaming mengembalikan struktur standar Anthropic Messages:

{
  "id": "msg_01ABCDEFG",
  "type": "message",
  "role": "assistant",
  "model": "claude-sonnet-5",
  "content": [
    {"type": "text", "text": "Halo! Saya Claude."}
  ],
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 12,
    "output_tokens": 18,
    "cache_read_input_tokens": 0,
    "cache_creation_input_tokens": 0
  }
}
FieldKeterangan
idID unik pesan
content[].typeTipe blok konten, text / thinking, dll.
content[].textKonten teks
stop_reasonAlasan berhenti: end_turn / max_tokens / stop_sequence
usage.input_tokensJumlah token input (dasar penagihan)
usage.output_tokensJumlah token output (dasar penagihan)
usage.cache_read_input_tokensToken input yang berhasil di-cache (dikenakan biaya harga cache read)
usage.cache_creation_input_tokensToken yang ditulis ke cache (dikenakan biaya harga cache write)

VII. Output Streaming

Setelah body permintaan menambahkan "stream": true, server akan mengembalikan data secara bertahap melalui SSE (Server-Sent Events). Tipe event sama dengan Anthropic:

event: message_start
data: {"type": "message_start", "message": {"id": "msg_...", "model": "claude-sonnet-5"}}

event: content_block_delta
data: {"type": "content_block_delta", "delta": {"type": "text_delta", "text": "Halo"}}

event: message_delta
data: {"type": "message_delta", "delta": {"stop_reason": "end_turn"}, "usage": {"output_tokens": 18}}

event: message_stop
data: {"type": "message_stop"}

Klien harus mengurai JSON berdasarkan baris data: dan mengabaikan baris event: serta baris kosong. Penerimaan message_stop menandakan aliran selesai. Penagihan dilakukan di sisi server berdasarkan penggunaan (usage) permintaan secara keseluruhan, terlepas dari apakah permintaan tersebut streaming atau tidak.

VIII. Kode Kesalahan Umum

HTTP StatusArtiSaran Penanganan
400Parameter permintaan tidak validPerbaiki body permintaan sesuai pesan respon
401Kunci API tidak ada atau tidak validPeriksa header Authorization / x-api-key
403Kunci dinonaktifkan, saldo habis, atau tidak berizinIsi saldo, periksa status kunci, atau sesuaikan otorisasi
404Model tidak ditemukanGunakan GET /v1/models untuk melihat model yang tersedia
429Terlalu banyak permintaan (limit terlampaui)Tunggu sejenak dan coba kembali (exponential backoff)
500Kesalahan internal serverCoba lagi nanti; jika gagal terus, hubungi CS

Body respon kesalahan seragam dalam struktur {"code": status_code, "message": "deskripsi_error", "data": null}.

IX. Penggunaan dan Saldo

  • Setiap panggilan akan dipotong saldo secara real-time berdasarkan penggunaan token × harga satuan model × multiplier rute. Harga dan rute dapat dilihat di GET /v1/models.
  • Setelah masuk, Anda dapat melihat riwayat panggilan (model, token, biaya, status) di "Pusat Pengguna → Riwayat Penggunaan".
  • Jika saldo tidak mencukupi, panggilan akan mengembalikan status 403, dan akan pulih segera setelah pengisian saldo.