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.

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)

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:

Header
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.

ModellAlias zeigt aufKontextAm besten für
unbleepunbleep-250811256KAllgemeine Nutzung — der Standard
unbleep-highunbleep-high-2508111MGrößte Aufgaben — lange Dokumente & ganze Codebasen
unbleep-miniunbleep-mini-25081132KGünstige, schnelle Aufrufe mit hohem Volumen

Chat Completions

POST /v1/chat/completions — der zentrale Endpunkt. Request- und Response-Bodies entsprechen dem OpenAI-Schema.

curl · Request
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 · Response
{
  "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].

Event-Stream
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.

json · Response-Fragment
{
  "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:

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

json · Request-Fragment
{
  "model": "unbleep",
  "messages": […],
  "policy": "research"
}

Fehler

Fehler verwenden das OpenAI-Envelope, bestehendes Error-Handling funktioniert also unverändert.

json · 401
{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_api_key",
    "message": "Incorrect API key provided."
  }
}
StatusBedeutung
401Key fehlt oder ist ungültig
402Kein Guthaben — aufladen, um fortzufahren
422Blockiert durch policy: strict
429Rate-Limit — Backoff, dann erneut versuchen
5xxUpstream-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:

Response-Header
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.

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