API-Referenz
unbleep spricht die OpenAI Chat Completions API. Wenn Sie schon einmal OpenAI aufgerufen haben, kennen Sie diese API bereits — richten Sie Ihren Client auf https://unbleep.ai/v1 und tauschen Sie den Key.
Quickstart
Installieren Sie das OpenAI-SDK, setzen Sie Base-URL und Key, und machen Sie einen Aufruf.
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)
Authentifizierung
Jede Anfrage braucht ein Bearer-Token im Authorization-Header. Keys tragen ein Präfix, damit ein Leak für Secret-Scanner sofort erkennbar ist:
ub_live_…— Produktion, abgerechnet gegen Ihr Prepaid-Guthaben.ub_test_…— für die lokale Entwicklung. Wird genau wie ein Live-Key abgerechnet, zum selben Preis pro Token, gegen dasselbe Prepaid-Guthaben; der einzige Unterschied ist ein niedrigeres Rate-Limit pro Key (siehe Rate-Limits). Ein Test-Key ist ein separates, widerrufbares Credential — kein kostenloser Tarif.
Authorization: Bearer ub_live_9f2c…
Halten Sie Keys serverseitig. Liefern Sie nie einen Live-Key in Browser- oder Mobile-Code aus.
Modelle
Übergeben Sie eine dieser IDs als model. Der bloße Alias zeigt immer auf den neuesten Build; die datierten Snapshot-IDs werden ebenfalls akzeptiert und lösen derzeit auf denselben Build auf. Egal welche Form Sie senden, die Antwort meldet die bloße ID — eine Anfrage für unbleep-250811 kommt als "model": "unbleep" zurück.
| Modell | Alias zeigt auf | Kontext | Am besten für |
|---|---|---|---|
| unbleep | unbleep-250811 | 256K | Allgemeine Nutzung — der Standard |
| unbleep-high | unbleep-high-250811 | 1M | Größte Aufgaben — lange Dokumente & ganze Codebasen |
| unbleep-mini | unbleep-mini-250811 | 32K | Günstige, schnelle Aufrufe mit hohem Volumen |
Chat Completions
POST /v1/chat/completions — der zentrale Endpunkt. Request- und Response-Bodies entsprechen dem OpenAI-Schema.
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
Setzen Sie "stream": true, um Server-Sent Events zu erhalten. Jedes Event ist ein chat.completion.chunk mit einem delta; der Stream endet mit einem wörtlichen data: [DONE].
data: {"choices":[{"delta":{"content":"Ab"}}]}
data: {"choices":[{"delta":{"content":"literation"}}]}
data: {"choices":[{"delta":{},"finish_reason":"stop"}]}
data: [DONE]
Reasoning
Reasoning-Modelle denken, bevor sie antworten. Der Trace kommt als reasoning_content neben dem üblichen content zurück — bei einem normalen Aufruf auf message, beim Streaming auf delta. Das Feld ist nur vorhanden, wenn das Modell tatsächlich einen Trace erzeugt hat; behandeln Sie es also als optional und lesen Sie die eigentliche Antwort aus content.
{
"index": 0,
"message": {
"role": "assistant",
"reasoning_content": "The question asks for one line, so…",
"content": "…"
},
"finish_reason": "stop"
}
Reasoning-Tokens werden berechnet. Der Trace ist generierte Ausgabe und wird zum normalen Output-Preis des Modells abgerechnet, ob Ihr Code das Feld liest oder nicht. Langes Nachdenken über eine kurze Frage ist ein echter Posten auf Ihrer Rechnung.
Senden Sie "thinking": false, um Reasoning abzuschalten, damit das Completion-Budget in die Antwort statt in den Trace fließt:
{
"model": "unbleep",
"messages": […],
"thinking": false
}
Policy-Regler
Das Alleinstellungsmerkmal von unbleep. Der optionale Parameter policy legt fest, wie viel Governance auf eine Anfrage angewendet wird. Standard ist off.
off— ungefilterte Baseline (Standard). Keine injizierten Verweigerungen.research— antwortet genau wieoff. Der Wert wird in der Nutzungszeile für Ihr eigenes Reporting festgehalten; er löst keine zusätzliche Prüfung aus.strict— gleicht den Nachrichtentext mit der Blockliste des Dienstes ab und gibt bei einem Treffer einen Policy-Fehler zurück. Die Blockliste wird vom Betreiber gepflegt und gilt für alle, die sich dafür entscheiden; es gibt keine Blockliste pro Konto zu konfigurieren.
{
"model": "unbleep",
"messages": […],
"policy": "research"
}
Fehler
Fehler verwenden das OpenAI-Envelope, bestehendes Error-Handling funktioniert also unverändert.
{
"error": {
"type": "invalid_request_error",
"code": "invalid_api_key",
"message": "Incorrect API key provided."
}
}
| Status | Bedeutung |
|---|---|
| 401 | Key fehlt oder ist ungültig |
| 402 | Kein Guthaben — aufladen, um fortzufahren |
| 422 | Blockiert durch policy: strict |
| 429 | Rate-Limit — Backoff, dann erneut versuchen |
| 5xx | Upstream-Fehler — kann mit Backoff sicher wiederholt werden |
Rate-Limits
Es gelten zwei unabhängige Limits, beide pro Konto: eine Anfragerate und eine Obergrenze für gleichzeitige Anfragen.
Anfragerate
60 Anfragen pro Minute pro Konto, gemessen über ein gleitendes 60-Sekunden-Fenster. Das Limit gilt für das Konto, nicht für den Key — zusätzliche Keys bringen keinen zusätzlichen Durchsatz, und jeder Ihrer Keys zieht aus denselben 60. Ein Test-Key hat eine niedrigere Obergrenze von 15 Anfragen pro Minute pro Key; er zählt trotzdem gegen dasselbe Konto-Fenster.
Jede Antwort trägt die Standard-Header, damit Sie Anfragen takten können, ohne zu raten. Sie melden das Fenster, das Sie als Nächstes ausbremsen würde:
x-ratelimit-limit-requests: 60
x-ratelimit-remaining-requests: 58
x-ratelimit-reset-requests: 43
x-ratelimit-reset-requests ist eine bloße Ganzzahl — volle Sekunden, bis das Fenster einen Slot freigibt, ohne Einheiten-Suffix. Parsen Sie es als Zahl, nicht als Dauer-String.
Gleichzeitigkeit
Höchstens 8 gleichzeitig laufende Anfragen pro Konto. Eine neunte gleichzeitige Anfrage wird sofort mit 429 und Code too_many_concurrent_requests abgelehnt; die Antwort trägt retry-after: 1. Für eine abgelehnte Anfrage wird nichts berechnet. Ein Streaming-Aufruf hält seinen Slot, bis der Stream beendet ist — lange Streams sind es also meist, die Sie an die Obergrenze bringen.
{
"error": {
"type": "rate_limit_error",
"code": "too_many_concurrent_requests",
"message": "Too many concurrent requests for this account (limit 8)."
}
}
Beide Obergrenzen sind für Standardkonten fest — sie skalieren nicht mit Ihrem Prepaid-Guthaben. Mehr Spielraum nötig? Enterprise hebt sie an.