Lo que la gente entiende por una API de texto sin censura
Si buscaste una api de ia nsfw, probablemente buscas una cosa: un modelo que puedas llamar desde tu propio código y que no corte la historia con un rechazo. En español y portugués la abreviatura es "IA" (inteligencia artificial, inteligência artificial), por eso son comunes búsquedas como "ia nsfw". La necesidad es la misma en todos los idiomas: ficción, roleplay y aplicaciones de compañía para adultos, construidas sobre un modelo que sigue el prompt del sistema que escribiste.
Los modelos alojados convencionales están ajustados para rechazar una amplia gama de peticiones. Eso es razonable para un asistente general, pero rompe una aplicación de historias. El modelo aquí es un único modelo de pesos abiertos, ejecutado por un proveedor independiente y ajustado para responder sin rechazos de contenido para uso adulto lícito. No es la API oficial de ningún gran proveedor, y no es un router que reenvía tu llamada al modelo de otra persona.
Hablas con él del mismo modo que hablas con OpenAI: JSON sobre HTTPS, una clave bearer, un array messages. Nada de tu cliente tiene que cambiar excepto dos cadenas.
A lo que realmente estás llamando
Mantén los hechos en un solo lugar antes de escribir código.
- URL base:
https://api.nsfwia.com/v1 - Model id:
uncensored - Autenticación:
Authorization: Bearer YOUR_KEY - Endpoints:
POST /v1/chat/completions,POST /v1/responsesyGET /v1/models - Ventana de contexto: 100.000 tokens, prompt y completado juntos
- Funcionalidades: streaming sobre SSE, llamadas a funciones, modo JSON, y paso directo para temperature, top_p, stop, seed y las penalizaciones
Es solo texto. No hay generación de imágenes, audio o vídeo, ni embeddings ni fine-tuning. Si tu producto necesita eso, empareja esta API con otros servicios para ello.
Envía tu primera petición
Crea una cuenta, abre la página de clave de API y copia tu clave. Los nuevos usuarios pueden reclamar $0,50 de crédito de prueba allí con un clic, válido durante 7 días. Luego ejecuta esto:
curl https://api.nsfwia.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You are a novelist writing for adult readers. Stay in character."},
{"role": "user", "content": "Open a noir story set in a rainy port city."}
],
"temperature": 0.9
}'
La misma llamada con el SDK oficial de Python:
from openai import OpenAI
client = OpenAI(
base_url="https://api.nsfwia.com/v1",
api_key="YOUR_KEY",
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You are a novelist writing for adult readers."},
{"role": "user", "content": "Open a noir story set in a rainy port city."},
],
temperature=0.9,
)
print(resp.choices[0].message.content)
Si la llamada devuelve texto, has terminado con la configuración. Un 401 significa que la clave es incorrecta o tiene un espacio extraño. Un 404 suele significar que falta /v1 en la base URL.
Streaming y system prompts
Las aplicaciones de historias y chat se sienten lentas sin streaming. Establece stream: true y lee los server-sent events a medida que llegan. Las cifras de uso llegan al final del stream.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.nsfwia.com/v1",
apiKey: process.env.NSFW_API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
stream: true,
messages: [
{ role: "system", content: "You are the narrator of an adult interactive fiction game." },
{ role: "user", content: "Describe the tavern the player just entered." },
],
});
for await (const part of stream) {
process.stdout.write(part.choices[0]?.delta?.content ?? "");
}
Como el modelo no se opone al género, el system prompt se convierte en el principal control que tienes. Establece el entorno, el tono, el punto de vista y la longitud que deseas. Pon también reglas estrictas allí, como "no contenido que involucre a menores de edad" o "mantente dentro de la historia". Un system prompt claro hace más por la calidad de la salida que cualquier configuración de muestreo.
Salida estructurada y herramientas
Las aplicaciones a menudo necesitan datos, no prosa: una ficha de personaje, un inventario, una lista de opciones para el jugador. Añade response_format: {"type": "json_object"} y di en el prompt qué claves esperas, y la respuesta será un objeto JSON que puedes analizar. Para la lógica del juego, pasa tools con definiciones de funciones. Cuando el modelo responda con tool_calls, ejecuta la función en tu código y envía el resultado de nuevo con role: "tool". Ambas características funcionan mientras se hace streaming, así que un narrador puede describir una escena y llamar a una función de tirada de dados en el mismo turno.
Mantén cada cambio pequeño cuando ajustes la salida. Cambia una configuración a la vez, como reducir temperature para una prosa más estable o añadir una penalización de presencia si el modelo se repite, luego compara resultados en el mismo prompt con un seed fijo.
Escritura de prompts en español o portugués
Nada te impide enviar el system prompt y los turnos del usuario en español o portugués. Algunos desarrolladores mantienen el system prompt en inglés y permiten que el usuario escriba en su propio idioma, lo que mantiene las instrucciones estables mientras la historia se mantiene local. Otros escriben todo en el idioma del usuario. Prueba ambos con tus propias escenas de muestra y compara, porque no publicamos benchmarks de idiomas y la elección correcta depende de tu contenido.
Los artículos de este sitio están en inglés, pero la API en sí no le importa en qué idioma esté el JSON. Nuestro artículo mitos versus hechos cubre los malentendidos comunes sobre los modelos uncensored, incluyendo lo que "uncensored" significa y lo que no.
Límites y coste
| Ítem | Valor |
|---|---|
| Precio de entrada | $0,15 por 1M de tokens |
| Precio de salida | $0,50 por 1M de tokens |
| Clave completa | 8 peticiones concurrentes, 300 peticiones por minuto |
| Clave de prueba | 2 peticiones simultáneas, 60 peticiones por minuto |
| Cuerpo de petición máximo | 8 MB |
Un turno típico de roleplay con 2.000 tokens de entrada y 500 tokens de salida cuesta $0,0003 por entrada más $0,00025 por salida, es decir, $0,00055 en total. El crédito de prueba de $0,50 cubre aproximadamente 900 de estos turnos. Las peticiones fallidas o rechazadas no se cobran, y el crédito prepago no caduca. Las recargas van de $20 a $500 en cripto (USDT en TRC20 o USDC en Base), con un bono del 5% desde $50, 10% desde $100 y 15% desde $200. Los detalles completos están en la página de precios.
Si superas un límite, obtienes HTTP 429. El código de error rate_limited significa demasiadas peticiones por minuto, y concurrency significa demasiadas a la vez. Una petición en streaming mantiene su espacio hasta que termina la transmisión, así que cierra las transmisiones que ya no leas.
Normas que siguen vigentes
El servicio es solo para uso adulto lícito. El contenido que involucre a menores de edad es un límite estricto y nunca es aceptable, sea cual sea el encuadre. Los prompts no se usan para entrenamiento. Mantén tus controles de edad, pantallas de consentimiento y obligaciones legales locales en tu propio producto, porque la API te ofrece un modelo de texto capaz y nada más. La referencia completa de la petición está en la documentación.
