Para desarrolladores
Una API de imágenes NSFW que genera el prompt que envió tu código
Una API de imágenes NSFW, es decir, una API de generación de imágenes sin censura, recibe prompts adultos desde tu propio software y devuelve el render sin reescribir antes el texto, y eso importa porque un prompt reescrito falla en silencio: la llamada tiene éxito, la respuesta se ve normal y la imagen no es la que pediste. Vellria expone todo su catálogo detrás de una sola forma REST, con claves Bearer, trabajos asíncronos que consultas y créditos prepagados que se reembolsan solos cuando una generación falla.
Por qué las integraciones se rompen en la capa de moderación
La mayoría de las API de imágenes esconden un paso de reescritura que no ves. Tu texto se edita hacia algo que el proveedor considera más seguro, se genera la versión editada y la respuesta no trae ningún campo que avise del cambio. Desde dentro de tu aplicación todo reporta éxito, que es el peor modo de fallo posible: nada que atrapar, nada que reintentar y una cola de resultados que, en silencio, no coinciden con sus entradas.
El segundo fallo es el rechazo que llega como error con una frecuencia imprevisible. Un prompt que funcionó ayer devuelve hoy un error de política, porque cambió el modelo de moderación que tienes debajo, no tu solicitud. Reintentar no ayuda, el error no es determinista y el código escrito contra él acumula casos especiales para un límite que nadie publicó.
Ninguno de los dos es un límite de frecuencia ni una caída, así que ninguno aparece donde mirarías normalmente. Se manifiestan como una pérdida lenta de confianza en tu propio pipeline, y la reacción habitual es una capa defensiva de heurísticas que deforman el prompt y empeoran el resultado por un problema que nunca fue tuyo.
Modelos
La forma de la solicitud
Las claves se crean en la consola y viajan como token Bearer. Un endpoint abre el trabajo: nombra el modelo, pásale el prompt y agrega lo que ese modelo acepte. Lo que vuelve es un identificador, no una imagen: la conexión se cierra enseguida, porque un render de treinta segundos retenido dentro de una solicitud HTTP es un timeout a punto de ocurrir, y cada integración que lo intentó aprendió la misma lección.
A partir de ahí preguntas por el trabajo en vez de esperarlo. Un GET simple contra ese identificador te dice en qué punto está: todavía en cola, en pleno render, terminado o fallido. Tu proceso puede morir y reiniciarse entre esas llamadas sin perder nada, porque el trabajo pertenece al servidor y no a la conexión que lo abrió.
Hay un hábito que conviene adquirir pronto: preguntarle al endpoint del catálogo qué existe en vez de escribir identificadores de modelo en un archivo de constantes. Ese endpoint es la fuente de la que se dibuja el propio sitio y con la que se registran los movimientos de créditos, así que cambia en el instante en que algo cambia. Una lista fija en el código no cambia, y te enteras semanas después por una llamada rechazada que nombra una dimensión retirada. La página de cada modelo también lee de ese endpoint y muestra el ID que hay que enviar junto con los tamaños y costos que acepta: las páginas de la API de Seedream, la API de imágenes Qwen y la API de imágenes Wan son tres de ellas.
Imágenes de referencia y límites de frecuencia
Los modelos de edición necesitan una imagen sobre la cual trabajar, y las imágenes pasan antes por su propio endpoint. Envía el archivo, guarda la dirección que te devuelve y nómbrala al abrir el trabajo. Cualquiera que tenga la dirección puede descargarla sin sesión, y es a propósito: la máquina que genera vive fuera de tu cuenta y aun así tiene que leer los bytes.
El catálogo no difumina la frontera entre clases de modelo. Si a un modelo de referencias no le das nada que mirar, rechaza la solicitud; si a un modelo de solo texto le das un adjunto, también la rechaza, en lugar de seguir en silencio como si el archivo fuera decoración. La alternativa sería cobrarte una imagen que el render nunca abrió y reportar éxito mientras tanto.
El límite de frecuencia se aplica a cada cuenta, y el rechazo te dice cuántos segundos esperar. Ese número existe para que lo lea tu lógica de reintentos, que es un objetivo de diseño distinto al de una línea de log que alguien descifra entrecerrando los ojos después del hecho.
Un cobro que no castiga al trabajo fallido
El saldo se mueve al inicio de un trabajo y no al final, porque en ese momento se encarga la tarea. De ahí sale lo que debería importarle a quien llama de forma automatizada: un trabajo que muere dentro del proveedor devuelve sus créditos en cuanto llega al estado fallido. Nada que tramitar, nadie a quien escribir, y los dos movimientos quedan en el historial, donde tu conciliación puede encontrarlos.
Nada en la cuenta se renueva. Un servicio que dispara veinte llamadas una semana y ninguna la siguiente paga veinte llamadas, porque no hay un plan debajo cobrando un mínimo. Todos los paquetes compran créditos a la misma tarifa, y un paquete compra saldo y nada más: ninguna clave es más rápida y ninguna llega a modelos que otra clave no alcance.
Frente a los marketplaces de API generales
Si estás comparando la API de fal.ai, la de Replicate o ModelsLab para trabajo de imágenes adultas, la comparación que importa no es una tabla de funciones sino lo que hace cada una por defecto, según sus propios documentos al 12 de septiembre de 2026. El esquema que publica fal para su endpoint FLUX.1 [dev] fija enable_safety_checker en true; desactivarlo requiere una autorización en la cuenta, una solicitud sin esa autorización se revisa siempre y una imagen marcada vuelve en negro. La referencia de texto a imagen de ModelsLab también pone safety_checker en true por defecto y cambia una imagen marcada por una en blanco, mientras que sus términos de servicio, fechados el 24 de junio de 2023, solo contienen una cláusula general contra el uso ilegal o dañino y nada escrito sobre el contenido adulto como tal.
Los documentos de política se separan todavía más que los parámetros. La Política de Uso Aceptable de Novita, vigente desde el 5 de agosto de 2026, incluye el contenido sexualmente explícito entre los usos prohibidos y no describe ninguna forma de habilitar el trabajo adulto. Los términos de Replicate, actualizados por última vez el 1 de abril de 2026, excluyen la desnudez no consentida y el material sexual ilegal, y su sección 8.6 dice abiertamente que los servicios pueden generar contenido adulto gráfico, con la responsabilidad a cargo del cliente. Lee esas cláusulas antes de escribir código de integración, porque son las que deciden qué permite esa plataforma. La API de imágenes de Venice AI, con su propio valor de seguridad por defecto, se compara con la nuestra en la alternativa a Venice AI.
El cobro también tiene otra forma. ModelsLab vende planes mensuales que varían según el volumen de llamadas y la concurrencia, no según qué modelos puedes usar; la página del modelo de fal no anuncia suscripción ni compromiso mínimo y cobra ese modelo de imagen por megapíxel; Novita es de pago por uso y cobra por imagen en los modelos de imagen que revisamos. Vellria queda más cerca de los dos últimos: un saldo prepagado, un precio en créditos por imagen indicado en la página de cada modelo y nada que se renueve.
Lo que le falta a Vellria, dicho con la misma claridad. No hay SDK, así que una llamada a esta API de imágenes adultas es HTTPS simple con un cuerpo JSON desde el lenguaje que uses. La API no es compatible con OpenAI, así que un cliente de OpenAI no va a hablar con ella con solo cambiar la URL base. No hay webhooks salientes; te enteras de cómo terminó un trabajo consultándolo. Y el catálogo es solo de imágenes y video, sin modelos de texto ni de chat. Si alguno de esos puntos es un requisito, Vellria no es la pieza adecuada para esa parte de tu stack; y si el requisito es correr los pesos por tu cuenta, modelos NSFW de código abierto o una API alojada expone lo que cuesta ese camino.
El límite, dicho una sola vez
Nada reescribe el prompt, y el espacio que se abre es de verdad amplio, trabajo adulto ficticio incluido. Algunas cosas siguen cerradas sin importar la clave, el saldo o el endpoint: las personas reales identificables que nunca aceptaron aparecer, y las categorías que los términos excluyen incluso en la ficción, entre ellas la zoofilia, el incesto, los actos no consentidos y el gore extremo. Cruza esa línea y la cuenta se va, y las claves con ella.
Las verificaciones automáticas no buscan a personas reales comunes. La verificación del prompt rechaza un prompt que reconoce de una lista fija de categorías, la sexualización de un menor entre ellas, o uno que nombra a una persona conocida, y la verificación de referencias rechaza con HTTP 400 e image_blocked una imagen que reconoce como de alguien que podría tener menos de 21 años o de una cara conocida, o como portadora de texto dirigido a la verificación. Así que la regla sobre personas reales comunes es algo que tienes que hacer cumplir dentro de tu propio producto; la API no la va a detectar por ti. La página sobre lo que permite un generador de imágenes IA NSFW tiene la política completa, y la referencia de la API trae los cuerpos de solicitud, los códigos de estado y las formas de error. Para clips en vez de imágenes fijas, la API de video NSFW usa las mismas claves y la misma consulta.
Preguntas frecuentes
¿La API reescribe o modera mi prompt?
No. Lo que envía tu código es exactamente lo que genera el modelo. Lo que queda son verificaciones automáticas, una sobre el prompt, con una lista fija de categorías entre las que están los menores, y otra sobre cualquier imagen de referencia que envíes, por edad aparente y cara conocida, nunca por tono ni por lo explícito que sea. Una solicitud que atrapan vuelve como un error directo antes de que se mueva ningún crédito, en vez de sustituirse en silencio, así que tu aplicación puede tratarla como error en lugar de descubrirla en el resultado.
¿Es síncrona o tengo que consultar?
Consultas. Iniciar una generación devuelve de inmediato un ID de registro, y sigues leyendo ese registro hasta que el trabajo termina o falla. No se pierde nada si tu proceso se reinicia o se cae una conexión, porque el trabajo vive en el servidor y no dentro de la solicitud que lo creó.
¿Qué pasa con mis créditos cuando una generación falla?
La reversión es automática. El cobro ocurre al abrir el trabajo, y un fallo del lado del proveedor devuelve ese cobro en el momento en que el trabajo llega a su estado fallido. Los dos movimientos aparecen en el historial, así que nada más adelante en tu cadena tiene que conciliar una diferencia a mano.
¿Puedo enviar imágenes de referencia desde código?
Sí, con un paso de subida aparte. El archivo sube, guardas la dirección que vuelve y esa dirección nombra la imagen al abrir un trabajo. No hace falta sesión para descargarla, porque la máquina que genera está fuera de tu cuenta.
¿Hay claves o planes separados para más volumen?
No hay niveles. Las claves se emiten desde la consola y cada una llega a todo el catálogo en las mismas condiciones; el volumen es cuestión de saldo, no de plan. Los límites de frecuencia se aplican por cuenta, y una respuesta limitada trae el número de segundos que hay que esperar.
¿Hay SDK o un endpoint compatible con OpenAI?
Ninguno de los dos. Las solicitudes son HTTPS común con un cuerpo JSON y una clave Bearer, así que sirve cualquier cliente HTTP, pero no hay una biblioteca oficial que instalar, y un cliente de OpenAI apuntado a otra URL base no va a hablar esta API. Los resultados llegan consultando, no por webhook. La guía de integración paso a paso muestra el ciclo completo en código.



