Referensi API
unbleep berbicara dengan OpenAI Chat Completions API. Jika Anda pernah memanggil OpenAI, Anda sudah tahu API ini — arahkan klien Anda ke https://unbleep.ai/v1 dan ganti kuncinya.
Mulai cepat
Instal OpenAI SDK, setel base URL dan kunci Anda, lalu lakukan panggilan.
from openai import OpenAI
client = OpenAI(
base_url="https://unbleep.ai/v1",
api_key="ub_live_9f2c…",
)
resp = client.chat.completions.create(
model="unbleep",
messages=[{"role": "user", "content": "Say hello."}],
)
print(resp.choices[0].message.content)
Autentikasi
Setiap permintaan membutuhkan Bearer token di header Authorization. Kunci membawa prefiks agar kebocoran langsung terlihat oleh pemindai rahasia (secret scanner):
ub_live_…— produksi, ditagih dari kredit prabayar Anda.ub_test_…— untuk pengembangan lokal. Ditagih persis seperti kunci live, dengan tarif per token yang sama, dari kredit prabayar yang sama; satu-satunya perbedaan adalah rate limit per kunci yang lebih rendah (lihat Rate limit). Kunci test adalah kredensial terpisah yang bisa dicabut — bukan tier gratis.
Authorization: Bearer ub_live_9f2c…
Simpan kunci di sisi server. Jangan pernah menyertakan kunci live di kode browser atau aplikasi mobile.
Model
Kirim salah satu ID ini sebagai model. Alias tanpa tanggal selalu mengarah ke build terbaru; ID snapshot bertanggal juga diterima dan saat ini me-resolve ke build yang sama. Apa pun bentuk yang Anda kirim, respons melaporkan ID tanpa tanggal — permintaan untuk unbleep-250811 kembali sebagai "model": "unbleep".
| Model | Alias mengarah ke | Konteks | Paling cocok untuk |
|---|---|---|---|
| unbleep | unbleep-250811 | 256K | Penggunaan umum — default |
| unbleep-high | unbleep-high-250811 | 1M | Pekerjaan terbesar — dokumen panjang & seluruh basis kode |
| unbleep-mini | unbleep-mini-250811 | 32K | Panggilan murah, cepat, bervolume tinggi |
Chat completions
POST /v1/chat/completions — endpoint inti. Body permintaan dan respons mengikuti skema OpenAI.
curl https://unbleep.ai/v1/chat/completions \
-H "Authorization: Bearer ub_live_9f2c…" \
-H "Content-Type: application/json" \
-d '{
"model": "unbleep",
"messages": [
{"role": "system", "content": "You are terse."},
{"role": "user", "content": "Explain abliteration in one line."}
],
"temperature": 0.7,
"max_tokens": 256
}'
{
"id": "chatcmpl_a1b2c3",
"object": "chat.completion",
"model": "unbleep",
"choices": [{
"index": 0,
"message": { "role": "assistant", "content": "…" },
"finish_reason": "stop"
}],
"usage": { "prompt_tokens": 24, "completion_tokens": 18, "total_tokens": 42 }
}
Streaming
Setel "stream": true untuk menerima Server-Sent Events. Setiap event adalah chat.completion.chunk dengan sebuah delta; stream diakhiri dengan literal data: [DONE].
data: {"choices":[{"delta":{"content":"Ab"}}]}
data: {"choices":[{"delta":{"content":"literation"}}]}
data: {"choices":[{"delta":{},"finish_reason":"stop"}]}
data: [DONE]
Penalaran
Model penalaran berpikir sebelum menjawab. Jejak penalarannya dikembalikan sebagai reasoning_content di samping content biasa — pada message untuk panggilan normal, dan pada delta saat streaming. Field ini hanya ada jika model benar-benar menghasilkan jejak, jadi perlakukan sebagai opsional dan baca content untuk jawabannya sendiri.
{
"index": 0,
"message": {
"role": "assistant",
"reasoning_content": "The question asks for one line, so…",
"content": "…"
},
"finish_reason": "stop"
}
Token penalaran ditagih. Jejak penalaran adalah output yang dihasilkan dan dikenakan tarif output normal model tersebut, terlepas dari apakah kode Anda membaca field itu atau tidak. Deliberasi panjang atas pertanyaan pendek adalah baris nyata di tagihan Anda.
Kirim "thinking": false untuk mematikan penalaran, sehingga anggaran completion dipakai untuk jawaban, bukan jejaknya:
{
"model": "unbleep",
"messages": […],
"thinking": false
}
Dial policy
Pembeda unbleep. Parameter opsional policy menentukan seberapa banyak tata kelola yang dijalankan pada sebuah permintaan. Nilai default-nya off.
off— baseline tanpa filter (default). Tidak ada penolakan yang disuntikkan.research— menjawab persis sepertioff. Nilainya dicatat pada baris pemakaian untuk pelaporan Anda sendiri; tidak ada penyaringan tambahan.strict— memindai teks pesan terhadap blocklist layanan dan mengembalikan error policy jika ada yang cocok. Blocklist dikelola oleh operator dan berlaku untuk semua yang memilih ikut; tidak ada blocklist per akun yang bisa dikonfigurasi.
{
"model": "unbleep",
"messages": […],
"policy": "research"
}
Error
Error menggunakan envelope OpenAI, sehingga penanganan error yang sudah ada tetap berjalan tanpa perubahan.
{
"error": {
"type": "invalid_request_error",
"code": "invalid_api_key",
"message": "Incorrect API key provided."
}
}
| Status | Arti |
|---|---|
| 401 | Kunci hilang atau tidak valid |
| 402 | Kredit habis — top up untuk melanjutkan |
| 422 | Diblokir oleh policy: strict |
| 429 | Rate limit — tunggu sejenak lalu coba lagi |
| 5xx | Error upstream — aman untuk dicoba lagi dengan backoff |
Rate limit
Dua batas independen berlaku, keduanya per akun: laju permintaan dan batas konkurensi.
Laju permintaan
60 permintaan per menit per akun, diukur dalam jendela geser 60 detik. Batasnya melekat pada akun, bukan kunci — membuat kunci tambahan tidak menambah throughput, dan setiap kunci yang Anda miliki menarik dari 60 yang sama. Kunci test membawa batas per kunci yang lebih rendah, yaitu 15 permintaan per menit; kunci itu tetap dihitung ke jendela akun yang sama.
Setiap respons membawa header standar sehingga Anda bisa mengatur tempo permintaan tanpa menebak. Header ini melaporkan jendela mana pun yang paling dekat menghentikan Anda:
x-ratelimit-limit-requests: 60
x-ratelimit-remaining-requests: 58
x-ratelimit-reset-requests: 43
x-ratelimit-reset-requests adalah bilangan bulat polos — jumlah detik utuh sampai jendela membebaskan satu slot, tanpa akhiran satuan. Parse sebagai angka, bukan sebagai string durasi.
Konkurensi
Paling banyak 8 permintaan berjalan sekaligus per akun. Permintaan konkuren kesembilan langsung ditolak dengan 429 dan kode too_many_concurrent_requests; responsnya membawa retry-after: 1. Permintaan yang ditolak tidak ditagih sama sekali. Panggilan streaming menahan slotnya sampai stream selesai, jadi stream panjang biasanya yang membuat Anda menyentuh batas.
{
"error": {
"type": "rate_limit_error",
"code": "too_many_concurrent_requests",
"message": "Too many concurrent requests for this account (limit 8)."
}
}
Kedua batas ini tetap untuk akun standar — tidak naik mengikuti saldo prabayar Anda. Butuh ruang lebih? Enterprise menaikkannya.