Base URL 및 인증
모든 요청에 전용 Base URL을 사용하세요. 인증은 가입 시 생성된 단일 API 키에 의존합니다. Authorization 헤더에 Bearer 토큰으로 키를 포함하세요. 키는 생성 직후 표시됩니다. 각 계정에는 활성 키가 하나만 있으며, 새 키를 생성하면 이전 키가 대체됩니다.
Base URL은 다음과 같습니다: https://api.nsfwchat.cc/v1. 추가 라우팅이나 프록시 레이어가 필요하지 않습니다. 이 설정은 Base URL과 API 키를 조정하면 모든 OpenAI 호환 클라이언트에서 작동합니다.
채팅 완료
POST /v1/chat/completions 엔드포인트로 텍스트 프롬프트를 보내세요. 모델 ID는 uncensored입니다. 이 엔드포인트는 표준 채팅 메시지를 받아 생성된 텍스트를 반환합니다. 임베딩, 이미지 또는 오디오는 지원되지 않습니다. 이 모델은 합법적인 성인 콘텐츠에 대한 무검열 응답에 맞게 조정되었습니다.
페이로드에 모델 ID와 메시지 기록이 포함되어 있는지 확인하세요. API는 텍스트 입력을 처리하고 텍스트 출력을 직접 반환합니다.
curl https://api.nsfwchat.cc/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Write a blunt product review of a cheap VPN."}]
}'
Python SDK
통합을 위해 공식 OpenAI Python SDK를 사용하세요. base_url을 API 엔드포인트로 설정하고 API 키를 제공하세요. SDK는 직렬화 및 오류 파싱을 자동으로 처리합니다. temperature 및 top_p과 같은 매개변수를 구성하여 출력 무작위성을 제어하세요.
키와 Base URL로 클라이언트를 초기화하세요. 모델 ID와 메시지로 chat.completions.create()을 호출하세요. 이 접근 방식은 간단한 텍스트 생성 작업에 대한 보일러플레이트 코드를 줄입니다.
from openai import OpenAI
client = OpenAI(base_url="https://api.nsfwchat.cc/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Summarise this thread without softening it."}],
)
print(resp.choices[0].message.content)
Node SDK
Node.js OpenAI SDK는 Python 버전과 동일하게 작동합니다. 커스텀 Base URL과 API 키로 클라이언트를 구성하세요. 요청을 보내려면 chat.completions.create 메서드를 사용하세요.
이 방법은 서버 측 통합에 이상적입니다. SDK는 연결 풀링 및 재시도를 관리합니다. 무검열 응답을 보장하려면 모델을 uncensored로 설정하세요. 역할과 콘텐츠 객체의 배열로 메시지를 전달하세요.
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.nsfwchat.cc/v1", apiKey: process.env.API_KEY });
const resp = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Draft a villain monologue for my game." }],
});
console.log(resp.choices[0].message.content);
스트리밍 응답
요청에 stream: true을 설정하여 스트리밍을 활성화하세요. API는 서버 전송 이벤트(SSE)를 반환합니다. 각 청크에는 부분 텍스트가 포함됩니다. 토큰 사용 세부 정보는 마지막 청크에 나타납니다.
스트리밍은 긴 출력에 대한 지각된 지연 시간을 줄입니다. 전체 응답을 복원하려면 각 청크를 순차적으로 처리하세요. 이 방법은 실시간 UI 업데이트에 필수적입니다. 연결 안정성을 유지하려면 스트림 이벤트 내에서 오류를 처리하세요.
stream = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Tell the story in second person."}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
속도 제한 및 오류
서비스 중단 방지를 위해 속도 제한을 준수하세요. API는 분당 300개 요청과 키당 8개의 동시 요청을 허용합니다. 최대 요청 본문 크기는 8 MB입니다. 401 상태는 유효하지 않거나 누락된 API 키를 나타냅니다. 429 상태는 속도 제한을 초과했음을 나타냅니다.
프롬프트와 생성물을 합친 컨텍스트 창은 100,000 토큰입니다. 이 한도를 초과하면 요청이 거부됩니다. 잘라내지 않으므로 입력이 창 내에 들어맞도록 해야 합니다. 402 상태 코드는 선불 잔액이 부족함을 나타냅니다. 오류와 거부는 크레딧을 소모하지 않습니다.
기술 사양
크레딧을 구매하기 전에 확인할 수 있도록 API의 실제 한도와 기능을 한곳에 정리했습니다.
| 항목 | 내용 |
|---|---|
| 형식 | OpenAI 호환: 어떤 OpenAI SDK든 base URL과 키만 바꾸면 동작 |
| 모델 ID | uncensored |
| 인증 | Authorization: Bearer YOUR_KEY |
| Base URL | https://api.nsfwchat.cc/v1 |
| 엔드포인트 | POST /v1/chat/completions · GET /v1/models |
| JSON 모드 | response_format: {"type": "json_object"} |
| 컨텍스트 창 | 100,000 토큰 (입력 + 출력) |
| 스트리밍 | 지원 — SSE, 마지막 청크에 토큰 사용량 포함 |
| 파라미터 | temperature, top_p, stop, seed, presence_penalty, frequency_penalty |
| 함수 호출 | 지원 — tools, tool_choice; 응답에 tool_calls (스트리밍 포함), 결과는 role: tool로 전송 |
| 최대 출력 | 100,000 토큰 윈도우의 남은 만큼; max_tokens는 선택 사항(별도 상한 없음) |
| 요청 크기 | 최대 8 MB |
| 응답 헤더 | X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests, X-RateLimit-Limit-Concurrency |
| 동시 요청 | 키당 동시 8개 |
| 속도 제한 | 키당 분당 300회 |
| 유효기간 | 유료 크레딧은 만료되지 않으며 구독 없음 |
| 과금 | 선불 크레딧에서 실제 사용량만큼 차감, 오류·거부는 무료 |
| 충전 | USDT (TRC20) 또는 USDC (Base), $10~$500 사이 원하는 정수 금액 |
| 무료 체험 | $0.50, 7일, 카드 불필요 · 체험 키: 동시 요청 2건, 분당 60건. 첫 충전 후 전체 한도(8건, 300건) 적용 |
| 보너스 | $50 이상 +5%, $100 이상 +10% |
| 가격 | 입력 100만 토큰당 $0.25 · 출력 100만 토큰당 $1.00 |
| 키 | 계정당 활성 키 1개, 새 키를 만들면 이전 키는 무효 |
| 로그인 | Google 또는 이메일과 비밀번호 |
| 콘텐츠 | 성인 콘텐츠 허용, 미성년자가 관련된 성적 콘텐츠는 거부 |
오류 코드
오류는 고정된 type을 가진 JSON으로 반환되며, 실패하거나 거부된 요청은 과금되지 않습니다.
| 코드 | 유형 | 의미 |
|---|---|---|
400 | bad_request | 잘못된 JSON, 빈 메시지, 잘못된 파라미터 또는 컨텍스트 초과 |
401 | missing_key · invalid_key · key_revoked | 키 없음·잘못됨·새 키로 교체됨 |
402 | no_credit | 잔액 없음 — 충전하면 즉시 재개 |
403 | content_blocked | 미성년자 관련 성적 콘텐츠 — 거부, 과금 없음 |
404 | not_found | 알 수 없는 엔드포인트 |
413 | request_too_large | 본문 8 MB 초과 |
429 | rate_limited · concurrency | 분당 300회 또는 동시 8개 초과 — 잠시 후 재시도 |
503 | upstream_busy | 모델 혼잡 — 몇 초 후 재시도 |
질문과 답변
API는 함수 호출을 지원하나요?
네, API는 <code>tools</code> 및 <code>tool_choice</code> 매개변수를 통해 함수 호출을 지원합니다. 요청에 도구를 정의하면 모델이 도구 사용에 대한 구조화된 JSON을 반환합니다. 이 기능은 표준 OpenAI 호환 클라이언트에서 작동합니다.
컨텍스트 창 크기는 얼마인가요?
컨텍스트 창은 프롬프트와 생성을 합쳐 100,000 토큰입니다. 요청당 최대 출력은 32,000 토큰이며, <code>max_tokens</code>을 설정하지 않으면 2,048 토큰입니다. 이 창을 초과하는 요청은 거부됩니다.
오류는 어떻게 처리되나요?
오류 응답에는 상태 코드와 메시지가 포함됩니다. <code>401</code> 코드는 API 키가 유효하지 않음을 의미합니다. <code>429</code> 코드는 속도 제한에 도달했음을 의미합니다. <code>402</code> 코드는 선불 잔액이 부족함을 나타냅니다. 오류는 토큰 크레딧을 소모하지 않습니다.