NSFW TTS API Quickstart
Get your NSFW TTS pipeline running immediately with this uncensored LLM API. Use the standard OpenAI-compatible endpoints to generate text without refusals, optimized for adult content workflows.
Base URLhttps://api.nsfwttsapi.com/v1
Base URL & Authentication
Point your client to https://api.nsfwttsapi.com/v1. You need an API key for every request. Sign up on the Get API key page with just an email and password. The key appears immediately. It is unique to your account and can be regenerated at any time, which invalidates the old key. There is no phone number or credit card required for the initial trial.
Pass the key in the Authorization header as a bearer token. If the key is missing or invalid, you get a 401 error. If you have no prepaid credit, you get a 402 error. This API serves one open-weight model tuned for adult content, so you do not need to manage model routing or vendor selection.
Chat Completions Endpoint
Send POST requests to /v1/chat/completions. The model ID is always uncensored. This is an open-weight model running on our own servers, not a proxy for GPT or Claude. It answers directly without content refusals for lawful adult material.
- Input: Standard message array with
roleandcontent. - Output: Text response in
message.content. - Price: $0.25 per 1M input tokens, $1.00 per 1M output tokens.
Use the raw HTTP endpoint if you prefer full control over the request structure. Use the following example to verify your key and model access.
curl https://api.nsfwttsapi.com/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
Use the official openai Python package. Set the base URL to our endpoint and provide your API key. This works seamlessly with the standard SDK because we follow the OpenAI chat-completions format exactly.
This is the fastest way to integrate the NSFW LLM API into your existing Python scripts. You do not need to parse raw JSON manually. The SDK handles the SSE streaming if you enable it, but for simple text generation, a standard call returns the full response at once.
- Install via
pip install openai. - Set
base_urltohttps://api.nsfwttsapi.com/v1. - Set
api_keyto your generated key.
Use the following snippet to generate a response.
from openai import OpenAI
client = OpenAI(base_url="https://api.nsfwttsapi.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)
Node SDK
Use the openai Node.js package. Configure the client with our base URL and your API key. This allows you to use the same idiomatic code you would use for other OpenAI-compatible services.
Node developers can integrate the uncensored AI API directly into their Express or Fastify servers. The request structure is identical to the standard API. You send a messages array, and the model returns text. There is no routing noise, just direct access to the uncensored model.
- Install via
npm install openai. - Configure the client with
baseURLandapiKey. - Call
chat.completions.create().
Use the following example to send a request.
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.nsfwttsapi.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);
Streaming Responses (SSE)
Set stream: true in your request. The API returns Server-Sent Events (SSE). Each chunk contains part of the generated text. This is critical for NSFW TTS pipelines where you need to feed text to a voice engine in real-time without waiting for the full response.
Streaming reduces perceived latency significantly. You can start processing the first few tokens while the model continues to generate. The API supports this natively. Use the following code to handle the stream correctly.
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)
Context Window, Limits & Errors
The context window is 100,000 tokens for prompt plus completion. This is large enough for most NSFW TTS workflows, but keep your system prompts concise. If you exceed the limit, the API returns an error.
Rate limits are 300 requests per minute per key. The request body limit is 8 MB. Monitor your usage to avoid throttling. Common errors include 401 (invalid key), 402 (no credit), and 429 (rate limit exceeded). Pay-as-you-go credit never expires. You can top up from $10 by crypto (USDT or USDC). Bonuses apply at $50 (+5%) and $100 (+10%). A new account gets $0.50 trial credit valid for 7 days. No card is needed for the trial. This uncensored API is reliable for adult content, provided you avoid sexual content involving minors, which is always blocked.
Under the hood: specs
The numbers below are the real limits of this API, not marketing. Compare them with what your app needs.
| Item | Value |
|---|---|
| Protocol | OpenAI-compatible: any OpenAI SDK or client works — change the base URL and the key |
| Base URL | https://api.nsfwttsapi.com/v1 |
| Model ID | uncensored |
| Endpoints | POST /v1/chat/completions · GET /v1/models |
| API key | Authorization: Bearer YOUR_KEY |
| Structured output | response_format: {"type": "json_object"} |
| SSE streaming | Yes — server-sent events; the last chunk carries token usage |
| Sampling parameters | temperature, top_p, stop, seed, presence_penalty, frequency_penalty |
| Max output | up to the rest of the 100,000-token window; max_tokens optional (no separate cap) |
| Max context | 100,000 tokens (prompt + completion together) |
| Function calling | Yes — tools, tool_choice; replies carry tool_calls, also when streaming; send results back as role: tool |
| Concurrency | up to 8 in parallel per key |
| Headers | X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests, X-RateLimit-Limit-Concurrency |
| Max body | up to 8 MB per request |
| Rate limit | 300/min per key |
| Payment | USDT (TRC20) or USDC (Base), any whole amount from $10 to $500 |
| Credit expiry | no monthly fee; paid credit does not expire |
| Volume bonus | +5% on $50+, +10% on $100+ |
| Trial credit | $0.50 for 7 days, no card · Trial key: 2 parallel requests, 60 req/min; full limits (8 and 300) after first top-up |
| Price | input $0.25 / 1M tokens, output $1.00 / 1M tokens |
| How you pay | prepaid credit, charged by real token usage; errors and refusals are free |
| Key management | one active key per account; a new key replaces the old one |
| Content | uncensored for adults; the only hard rule: no sexual content involving minors |
| Account | sign in with Google or with e-mail + password |
When a request fails
Errors come back as JSON with a stable type; failed and refused requests are not billed.
| Code | Type | Meaning |
|---|---|---|
400 | bad_request | invalid JSON, empty messages, bad parameter, or prompt + max_tokens over the window — fix and resend |
401 | missing_key · invalid_key · key_revoked | check the Authorization header or use your current key |
402 | no_credit | balance is empty — top up, requests resume at once |
403 | content_blocked | sexual content involving minors — refused, not billed |
404 | not_found | unknown endpoint |
413 | request_too_large | request body larger than 8 MB |
429 | rate_limited · concurrency | over 300/min or 8 parallel — back off and retry |
503 | upstream_busy | model busy — retry in a few seconds |
Questions and answers
Is this the official OpenAI API?
No. This is an independent service hosting an open-weight model. It uses the same JSON format and SDK compatibility as OpenAI, but the model is not GPT-4 or GPT-3.5. You get direct access to an uncensored model optimized for adult content.
Does the API generate audio files?
No. This is a text-only LLM API. It generates text responses. You need a separate TTS engine to convert the text output into audio. This API provides the text generation part of your NSFW TTS pipeline.
How do I pay for usage?
You prepay credit. You can buy credit with crypto (USDT or USDC). There are no monthly subscriptions. Credit never expires. You start with $0.50 trial credit when you sign up, which lasts 7 days.
Your key is one form away
Create an account, copy the key, change the base URL. That is the whole setup.