Beranda / Docs / Anthropic API

Anthropic Messages API

GenZi AI menerima format Anthropic Messages API di endpoint yang sama dengan katalog OpenAI-compatible: Claude Code, Anthropic Agent SDK, dan lib anthropic cukup ganti base URL + token. Tidak ada langganan, tidak ada jalur billing kedua — request-nya diterjemahkan ke jalur chat yang sama (hold, settlement, dan aturan "gagal tidak ditagih" persis sama).

Endpoint

MetodePathKeterangan
POST/v1/messagesMessages API — stream & non-stream, tool use, vision
POST/v1/messages/count_tokensEstimasi token prompt (approximate, ±4 karakter/token) — tanpa inference & tanpa tagihan
POST/v1/chat/completionsJalur OpenAI-compatible yang sama (hold, settlement, aturan gagal-tidak-ditagih identik)
POST/v1/responsesModel codex/reasoning yang menolak chat completions

Variabel environment

NamaNilaiKeterangan
ANTHROPIC_BASE_URLhttps://ai.genzicorp.comTanpa /v1 — klien Anthropic menambahkannya sendiri
ANTHROPIC_AUTH_TOKENgzi_x…API key dari Console → API Keys (hanya tampil sekali)
ANTHROPIC_MODELclaude-fable-5Slug apa pun dari katalog (bukan cuma model Anthropic)
ANTHROPIC_SMALL_FAST_MODELclaude-fable-5-1Opsional (Claude Code) untuk tugas ringan
# .env (Claude Code / SDK Anthropic) — jangan commit ke git
ANTHROPIC_BASE_URL=https://ai.genzicorp.com
ANTHROPIC_AUTH_TOKEN=gzi_xxxxxxxxxxxxxxxx
ANTHROPIC_MODEL=claude-fable-5

Claude Code

export ANTHROPIC_BASE_URL="https://ai.genzicorp.com"
export ANTHROPIC_AUTH_TOKEN="gzi_xxxxxxxxxxxxxxxx"
export ANTHROPIC_MODEL="claude-fable-5"
# lalu jalankan claude seperti biasa (setting di atas dibaca otomatis)

Test cepat (curl)

curl https://ai.genzicorp.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_AUTH_TOKEN" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{"model":"claude-fable-5","max_tokens":256,"messages":[{"role":"user","content":"ping"}]}'

SDK Python (anthropic)

from anthropic import Anthropic  # pip install anthropic
import os

client = Anthropic(
    base_url="https://ai.genzicorp.com",                       # TANPA /v1
    api_key=os.environ["ANTHROPIC_AUTH_TOKEN"],  # API key GenZi (gzi_...)
)
msg = client.messages.create(
    model="claude-fable-5",
    max_tokens=256,
    messages=[{"role": "user", "content": "ping"}],
)
print(msg.content[0].text)

Streaming

POST https://ai.genzicorp.com/v1/messages   (stream=true)
# SSE berurutan: message_start → content_block_start / content_block_delta / content_block_stop
#                → message_delta (stop_reason + usage) → message_stop

Klien Anthropic boleh mengirim header anthropic-version (tidak divalidasi server) dan anthropic-beta (diabaikan).

Yang diterjemahkan & yang dibuang

HalPerilaku
Diterjemahkansystem (string/array), text, image (URL / data URL), tool_use, tool_result, tools, tool_choice, max_tokens, temperature, top_p, stop_sequences
Dibuang dan dicatat di logthinking, redacted_thinking, document tanpa teks, top_k, metadata, cache_control
Headerx-api-key (konvensi Anthropic) atau Authorization: Bearer — dua-duanya diterima
Nama modelNama vendor-prefix (anthropic/claude-…) dan alias bertanggal dipetakan ke slug katalog yang aktif; slug asing = 404
max_tokensDi bawah minimum platform dinaikkan otomatis — jangan pakai angka sangat kecil untuk mengukur biaya
Usage di streammessage_start datang lebih awal sehingga input_tokens-nya 0; angka asli ada di message_delta (dari upstream)
BillingSatu jalur dengan chat: hold (maks $1,00) → settle pakai usage asli; request gagal tidak ditagih
ErrorEnvelope Anthropic {"type":"error","error":{"type","message"}} dengan status HTTP yang sama seperti endpoint lain
Tidak didukungEmbeddings (tidak ada /v1/embeddings), Batch API, Files API, citations, server-side prompt caching

Model yang menolak /v1/chat/completions (keluarga codex/reasoning) tetap bisa dipakai lewat /v1/messages? Tidak — jalur itu diterjemahkan ke chat completions. Untuk model tersebut pakai /v1/responses. Contoh slug yang sudah teruji: claude-fable-5, claude-fable-5-1.

Catatan jujur: jumlah token di message_start masih 0 (upstream baru melaporkan usage di frame akhir) dan count_tokens memakai estimasi ±4 karakter/token — response-nya menandai approximate: true, jadi jangan pakai untuk audit biaya. Angka tagihan yang sah ada di Console → Usage.