API リファレンス
unbleep は OpenAI の Chat Completions API を話します。OpenAI を呼び出したことがあるなら、この API はもう知っているはずです — クライアントの向き先を https://unbleep.ai/v1 にして、キーを変えるだけです。
クイックスタート
OpenAI SDK をインストールし、ベース URL とキーを設定して、呼び出します。
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)
認証
すべてのリクエストには、Authorization ヘッダーに Bearer トークンが必要です。キーにはプレフィックスが付いているので、漏洩してもシークレットスキャナーがすぐに見つけられます:
ub_live_…— 本番用。前払いクレジットに対して課金されます。ub_test_…— ローカル開発用。ライブキーとまったく同じように、同じトークン単価で、同じ前払いクレジットに対して課金されます。唯一の違いは、キーごとのレート制限が低いことです(レート制限を参照)。テストキーは別個の失効可能な資格情報であって、無料枠ではありません。
Authorization: Bearer ub_live_9f2c…
キーはサーバー側に置いてください。ライブキーをブラウザやモバイルのコードに含めて出荷しないこと。
モデル
次の ID のいずれかを model として渡します。素のエイリアスは常に最新ビルドを指します。日付付きのスナップショット ID も受け付けられ、現時点では同じビルドに解決されます。どちらの形式で送っても、レスポンスは素の ID を返します — unbleep-250811 へのリクエストは "model": "unbleep" として返ってきます。
| モデル | エイリアスの参照先 | コンテキスト | 用途 |
|---|---|---|---|
| unbleep | unbleep-250811 | 256K | 汎用 — デフォルト |
| unbleep-high | unbleep-high-250811 | 1M | 最大規模のジョブ — 長文ドキュメント & コードベース全体 |
| unbleep-mini | unbleep-mini-250811 | 32K | 安く、速く、大量の呼び出し |
Chat completions
POST /v1/chat/completions — 中核のエンドポイント。リクエストとレスポンスのボディは 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 }
}
ストリーミング
"stream": true を設定すると Server-Sent Events を受け取ります。各イベントは delta を持つ chat.completion.chunk で、ストリームはリテラルの data: [DONE] で終わります。
data: {"choices":[{"delta":{"content":"Ab"}}]}
data: {"choices":[{"delta":{"content":"literation"}}]}
data: {"choices":[{"delta":{},"finish_reason":"stop"}]}
data: [DONE]
推論(Reasoning)
推論モデルは、答える前に考えます。その思考トレースは、通常の content の隣に reasoning_content として返ってきます — 通常の呼び出しでは message に、ストリーミング中は delta に入ります。このフィールドはモデルが実際にトレースを生成したときにだけ存在するので、省略可能なものとして扱い、答えそのものは content から読んでください。
{
"index": 0,
"message": {
"role": "assistant",
"reasoning_content": "The question asks for one line, so…",
"content": "…"
},
"finish_reason": "stop"
}
推論トークンは課金されます。トレースは生成された出力であり、あなたのコードがそのフィールドを読むかどうかにかかわらず、モデルの通常の出力単価で課金されます。短い質問に対する長い熟考は、請求の上では実際の 1 行になります。
"thinking": false を送ると推論がオフになり、補完の予算がトレースではなく答えに使われます:
{
"model": "unbleep",
"messages": […],
"thinking": false
}
ポリシーダイヤル
unbleep の差別化要素です。省略可能な policy パラメータで、リクエストにどれだけの統制をかけるかを設定します。デフォルトは off です。
off— フィルターなしのベースライン(デフォルト)。拒否は注入されません。research—offとまったく同じように答えます。この値は利用履歴の行に記録され、あなた自身のレポート用に使えます。追加のスクリーニングは行いません。strict— メッセージのテキストをサービスのブロックリストと照合し、一致した場合はポリシーエラーを返します。ブロックリストは運営者が管理し、オプトインした全員に同じものが適用されます。アカウントごとに設定できるブロックリストはありません。
{
"model": "unbleep",
"messages": […],
"policy": "research"
}
エラー
エラーは OpenAI のエンベロープ形式を使うので、既存のエラー処理はそのまま動きます。
{
"error": {
"type": "invalid_request_error",
"code": "invalid_api_key",
"message": "Incorrect API key provided."
}
}
| ステータス | 意味 |
|---|---|
| 401 | キーがないか無効 |
| 402 | クレジット不足 — チャージして続行 |
| 422 | policy: strict によりブロック |
| 429 | レート制限 — バックオフして再試行 |
| 5xx | アップストリームのエラー — バックオフ付きで再試行して安全 |
レート制限
独立した 2 つの制限が、どちらもアカウント単位で適用されます: リクエストレートと、同時実行数の上限です。
リクエストレート
アカウントあたり毎分 60 リクエスト、60 秒のスライディングウィンドウで計測します。制限はキーではなくアカウントにかかります — キーを増やしてもスループットは増えず、あなたが持つすべてのキーが同じ 60 を分け合います。テストキーにはキーごとに毎分 15 リクエストという低めの上限がありますが、それも同じアカウントのウィンドウにカウントされます。
すべてのレスポンスには標準のヘッダーが付くので、推測に頼らずリクエストのペースを調整できます。ヘッダーは、あなたを止めるのに最も近いウィンドウの値を報告します:
x-ratelimit-limit-requests: 60
x-ratelimit-remaining-requests: 58
x-ratelimit-reset-requests: 43
x-ratelimit-reset-requests は素の整数です — ウィンドウに空きができるまでの秒数で、単位のサフィックスはありません。期間文字列ではなく数値としてパースしてください。
同時実行数
アカウントあたり、同時に処理中のリクエストは最大 8 件。9 件目の同時リクエストは、429 とコード too_many_concurrent_requests で即座に拒否され、レスポンスには retry-after: 1 が付きます。拒否されたリクエストには何も課金されません。ストリーミング呼び出しはストリームが終わるまでスロットを保持するので、上限に達する原因はたいてい長いストリームです。
{
"error": {
"type": "rate_limit_error",
"code": "too_many_concurrent_requests",
"message": "Too many concurrent requests for this account (limit 8)."
}
}
どちらの上限も標準アカウントでは固定です — 前払い残高に応じて増えることはありません。もっと余裕が必要なら、Enterprise で引き上げられます。