Référence de l'API

unbleep parle l'API Chat Completions d'OpenAI. Si vous avez déjà appelé OpenAI, vous connaissez déjà cette API — pointez votre client vers https://unbleep.ai/v1 et changez la clé.

Démarrage rapide

Installez le SDK OpenAI, définissez l'URL de base et votre clé, puis faites un appel.

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)

Authentification

Chaque requête a besoin d'un jeton Bearer dans l'en-tête Authorization. Les clés portent un préfixe pour qu'une fuite saute aux yeux des scanners de secrets :

en-tête
Authorization: Bearer ub_live_9f2c…

Gardez les clés côté serveur. N'embarquez jamais une clé live dans du code navigateur ou mobile.

Modèles

Passez l'un de ces identifiants dans model. L'alias nu pointe toujours vers le dernier build ; les identifiants de snapshot datés sont acceptés aussi et résolvent actuellement vers ce même build. Quelle que soit la forme envoyée, la réponse indique l'identifiant nu — une requête pour unbleep-250811 revient avec "model": "unbleep".

ModèleL'alias pointe versContexteIdéal pour
unbleepunbleep-250811256KUsage général — le modèle par défaut
unbleep-highunbleep-high-2508111MLes plus gros travaux — longs documents & bases de code entières
unbleep-miniunbleep-mini-25081132KAppels économiques, rapides, à fort volume

Chat completions

POST /v1/chat/completions — l'endpoint principal. Les corps de requête et de réponse suivent le schéma OpenAI.

curl · requête
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 · réponse
{
  "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

Définissez "stream": true pour recevoir des Server-Sent Events. Chaque événement est un chat.completion.chunk avec un delta ; le flux se termine par un data: [DONE] littéral.

flux d'événements
data: {"choices":[{"delta":{"content":"Ab"}}]}
data: {"choices":[{"delta":{"content":"literation"}}]}
data: {"choices":[{"delta":{},"finish_reason":"stop"}]}
data: [DONE]

Raisonnement

Les modèles de raisonnement réfléchissent avant de répondre. La trace revient dans reasoning_content, à côté du content habituel — sur message pour un appel normal, et sur delta en streaming. Le champ n'est présent que si le modèle a réellement produit une trace : traitez-le comme optionnel et lisez content pour la réponse elle-même.

json · fragment de réponse
{
  "index": 0,
  "message": {
    "role": "assistant",
    "reasoning_content": "The question asks for one line, so…",
    "content": "…"
  },
  "finish_reason": "stop"
}

Les tokens de raisonnement sont facturés. La trace est une sortie générée et elle est facturée au tarif de sortie normal du modèle, que votre code lise le champ ou non. Une longue délibération sur une question courte est une vraie ligne sur votre facture.

Envoyez "thinking": false pour désactiver le raisonnement, afin que le budget de complétion aille à la réponse plutôt qu'à la trace :

json · fragment de requête
{
  "model": "unbleep",
  "messages": […],
  "thinking": false
}

Curseur de politique

Ce qui distingue unbleep. Le paramètre optionnel policy règle le niveau de gouvernance appliqué à une requête. Sa valeur par défaut est off.

json · fragment de requête
{
  "model": "unbleep",
  "messages": […],
  "policy": "research"
}

Erreurs

Les erreurs utilisent l'enveloppe OpenAI, donc votre gestion d'erreurs existante fonctionne sans changement.

json · 401
{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_api_key",
    "message": "Incorrect API key provided."
  }
}
StatutSignification
401Clé manquante ou invalide
402Crédit épuisé — rechargez pour continuer
422Bloqué par policy: strict
429Limite de débit — attendez puis réessayez
5xxErreur en amont — réessayez sans risque avec un backoff

Limites de débit

Deux limites indépendantes s'appliquent, toutes deux par compte : un débit de requêtes et un plafond de concurrence.

Débit de requêtes

60 requêtes par minute et par compte, mesurées sur une fenêtre glissante de 60 secondes. La limite porte sur le compte, pas sur la clé — créer des clés supplémentaires n'achète pas de débit supplémentaire, et toutes vos clés puisent dans les mêmes 60. Une clé de test a un plafond par clé plus bas, de 15 requêtes par minute ; elle compte quand même dans la même fenêtre de compte.

Chaque réponse porte les en-têtes standard pour que vous puissiez cadencer vos requêtes sans deviner. Ils décrivent la fenêtre la plus proche de vous bloquer :

en-têtes de réponse
x-ratelimit-limit-requests: 60
x-ratelimit-remaining-requests: 58
x-ratelimit-reset-requests: 43

x-ratelimit-reset-requests est un entier nu — le nombre de secondes entières avant que la fenêtre libère une place, sans suffixe d'unité. Parsez-le comme un nombre, pas comme une chaîne de durée.

Concurrence

Au plus 8 requêtes en cours simultanément par compte. Une neuvième requête concurrente est rejetée immédiatement avec 429 et le code too_many_concurrent_requests ; la réponse porte retry-after: 1. Rien n'est facturé pour une requête rejetée. Un appel en streaming garde sa place jusqu'à la fin du flux, donc ce sont généralement les longs flux qui vous amènent au plafond.

json · 429
{
  "error": {
    "type": "rate_limit_error",
    "code": "too_many_concurrent_requests",
    "message": "Too many concurrent requests for this account (limit 8)."
  }
}

Les deux plafonds sont fixes pour les comptes standard — ils n'augmentent pas avec votre solde prépayé. Besoin de plus de marge ? L'offre Enterprise les relève.