认证与基础 URL
您的 API 密钥对每个请求进行身份验证。通过仪表板使用 Google 或电子邮件生成密钥;无需电话号码。将此密钥用于 Authorization 页眉。所有请求的基础 URL 为 HTTPS://api.modelsnsfw.com/v1. 此端点适用于任何 OpenAI 兼容客户端,只需更改基础 URL 并提供您的密钥即可。
curl https://api.modelsnsfw.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "List all available nsfw model tiers and their monthly costs."}]
}'
聊天完成端点
通过 POST /v1/chat/completions. 模型 ID 为 uncensored它是一个针对合法成人内容无拒绝调整的开源权重模型。它不是 GPT、Claude 或其他任何供应商模型。输入 token 的成本为每百万 $0.15;输出 token 的成本为每百万 $0.50。错误是免费的。
from openai import OpenAI
client = OpenAI(base_url="https://api.modelsnsfw.com/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)
流式响应(SSE)
通过将 stream: true. API 返回 Server-Sent Events (SSE),其中令牌使用情况包含在最后一个块中。这非常适合实时聊天界面。您会立即收到部分令牌。这显著降低了用户的感知延迟。
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.modelsnsfw.com/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);
函数调用 & JSON 模式
使用 response_format: {"type": "json_object"} 用于结构化输出。你还可以为函数调用定义工具。模型支持 temperature, top_p, stop,以及 seed 参数。这在需要时确保确定性结果。JSON 模式强制输出为有效的 JSON 格式。
速率限制与约束
每个密钥每分钟限 300 次请求。最多只能同时运行 8 个请求。请求体不得超过 8 MB。如果发送的请求过多,您将收到 429 错误。无效密钥返回 401。余额不足返回 402。处理过程中的错误不消耗您的预充值额度。
Token 使用与计费
上下文窗口总计 100,000 个 token。每次请求的最大输出为 16,000 个 token。如果 max_tokens 未设置时,默认值为 2,048。余额为预付费且永不过期。充值仅限加密货币(USDT/TRC20 或 USDC/Base)。大额充值可获得额外余额。无需订阅。
流式传输
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)