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.

python
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):

header
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".

ModelAlias mengarah keKonteksPaling cocok untuk
unbleepunbleep-250811256KPenggunaan umum — default
unbleep-highunbleep-high-2508111MPekerjaan terbesar — dokumen panjang & seluruh basis kode
unbleep-miniunbleep-mini-25081132KPanggilan murah, cepat, bervolume tinggi

Chat completions

POST /v1/chat/completions — endpoint inti. Body permintaan dan respons mengikuti skema OpenAI.

curl · permintaan
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
  }'
json · respons
{
  "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].

event stream
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.

json · fragmen respons
{
  "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:

json · fragmen permintaan
{
  "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.

json · fragmen permintaan
{
  "model": "unbleep",
  "messages": […],
  "policy": "research"
}

Error

Error menggunakan envelope OpenAI, sehingga penanganan error yang sudah ada tetap berjalan tanpa perubahan.

json · 401
{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_api_key",
    "message": "Incorrect API key provided."
  }
}
StatusArti
401Kunci hilang atau tidak valid
402Kredit habis — top up untuk melanjutkan
422Diblokir oleh policy: strict
429Rate limit — tunggu sejenak lalu coba lagi
5xxError 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:

header respons
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.

json · 429
{
  "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.