Anthropic Messages
Referensi endpoint POST /v1/messages (Anthropic-compatible) — pakai Anthropic SDK, Claude Code, atau Cursor dengan API key Hostlinku
Selain format OpenAI, Hostlinku juga menyediakan endpoint yang kompatibel dengan Anthropic Messages API. SDK Anthropic resmi, Claude Code, Cursor, Cline, dan tool lain yang bicara protokol Anthropic bisa dipakai hanya dengan mengganti base URL — satu API key dan satu saldo Hostlinku untuk kedua format.
POST https://api.hostlinku.com/v1/messages
x-api-key: sk-isi-api-key-kamu
anthropic-version: 2023-06-01
Content-Type: application/jsonAutentikasi menerima header x-api-key (gaya Anthropic) atau Authorization: Bearer sk-….
Setiap respons menyertakan header request-id / x-request-id (ID request Hostlinku, format
msg_…) dan, pada respons sukses non-streaming, x-model.
Konfigurasi cepat
Claude Code
export ANTHROPIC_BASE_URL=https://api.hostlinku.com
export ANTHROPIC_API_KEY=sk-isi-api-key-kamu
export ANTHROPIC_MODEL=claude-sonnet-4-6
claudePython (SDK resmi Anthropic)
import anthropic
client = anthropic.Anthropic(
api_key="sk-isi-api-key-kamu",
base_url="https://api.hostlinku.com",
)
message = client.messages.create(
model="claude-haiku-4-5",
max_tokens=256,
messages=[{"role": "user", "content": "Jelaskan apa itu API gateway dalam dua kalimat."}],
)
print(message.content[0].text)
print(message.usage.input_tokens, message.usage.output_tokens)Node.js
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({ apiKey: "sk-isi-api-key-kamu", baseURL: "https://api.hostlinku.com" });
const msg = await client.messages.create({
model: "claude-haiku-4-5",
max_tokens: 256,
messages: [{ role: "user", content: "Halo!" }],
});Parameter body
Field di luar daftar dibuang. Body tidak valid ditolak 400 invalid_request_error dengan
rincian per field di error.details.issues.
Respons non-streaming
{
"id": "msg_…",
"type": "message",
"role": "assistant",
"model": "claude-haiku-4-5",
"content": [{ "type": "text", "text": "API gateway adalah …" }],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 30,
"output_tokens": 55,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation": { "ephemeral_5m_input_tokens": 0, "ephemeral_1h_input_tokens": 0 }
},
"hostlinku": { "cost": 0.00021, "currency": "🪙", "serviceMode": "performance", "latencyMs": 940 }
}id dan model selalu identitas publik Hostlinku. Blok hostlinku adalah ekstensi (SDK Anthropic
mengabaikannya) berisi biaya 🪙, Service Mode API key, dan latensi.
Streaming (stream: true)
Gateway mengalirkan event SSE dengan framing Anthropic (event: + data:):
event: message_start
data: {"type":"message_start","message":{"id":"msg_…","type":"message","role":"assistant","model":"claude-haiku-4-5","content":[],"usage":{"input_tokens":22,"output_tokens":1,…}}}
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Apel"}}
event: content_block_stop
data: {"type":"content_block_stop","index":0}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":22,"output_tokens":7,…}}
event: message_stop
data: {"type":"message_stop"}Catatan:
- Usage final ada di
message_delta; biaya dihitung dari usage nyata setelahmessage_stop. - Bila stream gagal di tengah, gateway mengirim
event: errordengan{"type":"error","error":{"type":…,"message":…}}dan tidak mengirimmessage_stoppalsu. - Error sebelum byte pertama (saldo habis, model tidak ada, rate limit) dikembalikan sebagai
respons JSON biasa dengan status HTTP yang benar — SDK Anthropic memetakannya ke exception
(
AuthenticationError,NotFoundError,RateLimitError, …).
Hitung token
POST https://api.hostlinku.com/v1/messages/count_tokensBody: model, messages, opsional system, tools, tool_choice, thinking. Respons
{ "input_tokens": 15 }. Tidak dikenai biaya.
Format error
{ "type": "error", "error": { "type": "authentication_error", "message": "API key tidak valid atau sudah dicabut." } }Pesan error tidak pernah memuat identitas provider upstream. Daftar lengkap kode untuk format OpenAI ada di Error.