API 레퍼런스

unbleep은 OpenAI Chat Completions API 형식을 그대로 씁니다. OpenAI를 호출해 본 적이 있다면 이 API는 이미 아는 것과 같습니다. 클라이언트를 https://unbleep.ai/v1으로 향하게 하고 키만 바꾸세요.

퀵스타트

OpenAI SDK를 설치하고 base URL과 키를 설정한 뒤 호출하면 됩니다.

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)

인증

모든 요청에는 Authorization 헤더에 Bearer 토큰이 있어야 합니다. 키에는 접두사가 붙어 있어 유출되더라도 시크릿 스캐너가 바로 알아볼 수 있습니다:

헤더
Authorization: Bearer ub_live_9f2c…

키는 서버 쪽에만 두세요. 라이브 키를 브라우저나 모바일 코드에 넣어 배포하면 안 됩니다.

모델

아래 ID 중 하나를 model로 전달하세요. 날짜가 없는 별칭은 항상 최신 빌드를 가리키고, 날짜가 붙은 스냅샷 ID도 받아들이며 현재는 같은 빌드로 해석됩니다. 어느 형태로 보내든 응답에는 날짜 없는 ID가 실립니다. 예를 들어 unbleep-250811로 요청하면 "model": "unbleep"으로 돌아옵니다.

모델별칭이 가리키는 빌드컨텍스트적합한 용도
unbleepunbleep-250811256K일반 용도 — 기본값
unbleep-highunbleep-high-2508111M가장 큰 작업 — 긴 문서 & 코드베이스 전체
unbleep-miniunbleep-mini-25081132K저렴하고 빠른 대량 호출

Chat completions

POST /v1/chat/completions — 핵심 엔드포인트입니다. 요청과 응답 본문은 OpenAI 스키마와 동일합니다.

curl · 요청
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 · 응답
{
  "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]

추론

추론 모델은 답하기 전에 먼저 생각합니다. 그 사고 과정은 평소의 content 옆에 reasoning_content 필드로 돌아옵니다. 일반 호출에서는 message에, 스트리밍 중에는 delta에 실립니다. 이 필드는 모델이 실제로 사고 과정을 생성했을 때만 존재하므로 선택적 필드로 다루고, 답변 자체는 content에서 읽으세요.

json · 응답 일부
{
  "index": 0,
  "message": {
    "role": "assistant",
    "reasoning_content": "The question asks for one line, so…",
    "content": "…"
  },
  "finish_reason": "stop"
}

추론 토큰도 과금됩니다. 사고 과정은 생성된 출력이므로, 코드에서 이 필드를 읽든 읽지 않든 모델의 일반 출력 단가로 청구됩니다. 짧은 질문에 긴 숙고가 붙으면 그만큼 청구서에 실제 항목으로 잡힙니다.

"thinking": false를 보내면 추론이 꺼지고, 완성 토큰 예산이 사고 과정 대신 답변에 쓰입니다:

json · 요청 일부
{
  "model": "unbleep",
  "messages": […],
  "thinking": false
}

정책 다이얼

unbleep만의 차별점입니다. 선택 파라미터 policy는 요청에 얼마나 많은 거버넌스를 적용할지 정합니다. 기본값은 off입니다.

json · 요청 일부
{
  "model": "unbleep",
  "messages": […],
  "policy": "research"
}

오류

오류는 OpenAI 엔벨로프 형식을 따르므로 기존 오류 처리 코드가 그대로 동작합니다.

json · 401
{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_api_key",
    "message": "Incorrect API key provided."
  }
}
상태 코드의미
401키가 없거나 유효하지 않음
402크레딧 소진 — 계속하려면 충전 필요
422policy: strict에 의해 차단됨
429속도 제한 — 잠시 후 재시도
5xx업스트림 오류 — 백오프를 두고 재시도해도 안전

속도 제한

계정 단위로 서로 독립적인 두 가지 제한이 적용됩니다. 요청 속도와 동시 요청 상한입니다.

요청 속도

계정당 분당 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이 실립니다. 거부된 요청에는 아무것도 과금되지 않습니다. 스트리밍 호출은 스트림이 끝날 때까지 자리를 차지하므로, 보통 긴 스트림 때문에 상한에 닿게 됩니다.

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

두 상한은 일반 계정에서 고정이며 선불 잔액에 따라 늘어나지 않습니다. 더 큰 여유가 필요하다면 엔터프라이즈에서 상한을 올려 드립니다.