Moderar contenido NSFW
Toda plataforma que permite que extraños suban imágenes necesita, tarde o temprano, un filtro entre 'enviado' y 'publicado'. Este endpoint revisa cada imagen en busca de contenido adulto o explícito y devuelve una señal clara —segura, marcada o explícita— antes de que llegue a la pantalla de otro usuario.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
El momento en que moderar deja de ser opcional
Una aplicación de citas, un foro, un marketplace con fotos de usuarios, una sección de comentarios que acepta imágenes: todos están a una sola subida mala de un ticket de soporte, un problema de imagen pública o una violación de política. La revisión manual no escala más allá de un volumen pequeño, y para cuando una persona marca algo, puede que ya lo haya visto otro usuario. image.moderate existe para ocupar ese espacio, revisando cada imagen automáticamente antes de la publicación y no después de una queja.
Qué devuelve realmente la revisión
Envía una imagen por POST a /image/moderate y recibe un veredicto de moderación que describe la probabilidad de contenido adulto o explícito, para que su aplicación fije su propio umbral: aprobar automáticamente lo claramente seguro, rechazar automáticamente lo claramente explícito y enviar la zona gris a un moderador humano. La decisión de dónde trazar esas líneas queda enteramente en sus manos —la API entrega la señal, no la política.
Revisar al ritmo real de las subidas
Las subidas rara vez llegan de una en una a un ritmo predecible; se disparan cuando se dispara el tráfico. Por eso el endpoint es asíncrono: acepta la imagen, devuelve un task_id de inmediato para que el flujo de subida nunca se detenga, y entrega el veredicto momentos después por webhook, o mediante un enlace firmado que puede consultar durante 24 horas.
Una capa, no toda la política de moderación
La detección automática de contenido NSFW es una primera línea de defensa bien establecida en la moderación de contenido, pero es deliberadamente estrecha: marca una categoría específica de contenido, no cualquier tipo de subida dañina. La mayoría de los sistemas en producción la combinan con otros controles —filtros de lenguaje en los textos, límites de tasa para cuentas nuevas, revisión humana de todo lo que supere cierto puntaje de riesgo— en lugar de tratar una sola señal como toda la estrategia de moderación.
Cómo encaja en un flujo de subida
El patrón común es llamar a image.moderate justo después de que la imagen llega al almacenamiento y antes de mostrarla a cualquier otro usuario, manteniéndola en estado pendiente hasta que llegue el veredicto. Combínela con image.quality para también rechazar archivos rotos o inutilizables en el mismo paso, de modo que una sola compuerta de moderación cubra tanto la seguridad como la higiene técnica básica. El precio es una pequeña tarifa fija por solicitud más una tarifa por imagen, ambas publicadas; las revisiones fallidas se reintentan automáticamente hasta tres veces y nunca se cobran si siguen fallando.
Qué puede hacer con ella
Aplicaciones de citas y redes sociales
Revise automáticamente cada foto de perfil antes de que sea visible para otros usuarios, reduciendo casi a cero la exposición a contenido explícito.
Marketplaces con fotos de usuarios
Modere las imágenes de los anuncios al momento de subirlas para que los vendedores no puedan publicar contenido explícito en lugar del producto.
Foros comunitarios y comentarios
Revise las imágenes adjuntas a publicaciones o comentarios antes de que se muestren públicamente, sin depender solo de reportes posteriores.
Plataformas de contenido generado por usuarios
Pase cada subida por moderación desde su ingreso, mucho antes de que llegue a un feed de contenido o a un sistema de recomendaciones.
Preguntas frecuentes
¿Qué tan precisa es la API de detección NSFW?
Devuelve un veredicto basado en probabilidad, no un juicio garantizado, así que la mayoría de los equipos fijan su propio umbral y envían los casos límite a revisión humana.
¿Moderar imágenes es gratis?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Qué incluye el resultado de la moderación?
Un veredicto que indica la probabilidad de contenido adulto o explícito, que su aplicación puede mapear a acciones de permitir, bloquear o revisar manualmente.
¿Cómo se cobra image.moderate?
Una pequeña tarifa base por solicitud más una tarifa por imagen, ambas publicadas en esta página, sin tokens ni créditos inventados.
¿Esto puede reemplazar a un equipo humano de moderación?
Reemplaza la primera revisión, no todo el proceso; la mayoría de las plataformas siguen enviando las imágenes marcadas o límite a una persona antes de la decisión final.
¿Puedo moderar imágenes en bloque antes de una migración?
Sí, cada imagen es una tarea asíncrona independiente, así que un backlog de imágenes existentes puede revisarse igual que las subidas en vivo.
¿Qué tan rápido llegan los resultados de moderación?
Cada solicitud devuelve un task_id de inmediato, y el veredicto llega después por webhook firmado, o por un enlace firmado válido por 24 horas.
¿Qué pasa si falla una revisión de moderación?
Se reintenta automáticamente hasta tres veces; si sigue fallando recibe un error claro y no se le cobra esa solicitud.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/image/moderate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"image":"https://ejemplo.com/imagen.jpg"}'const res = await fetch("https://api.kit.forhosting.com/image/moderate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"image": "https://ejemplo.com/imagen.jpg"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/moderate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"image": "https://ejemplo.com/imagen.jpg"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/moderate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"image":"https://ejemplo.com/imagen.jpg"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"image":"https://ejemplo.com/imagen.jpg"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/moderate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"image": "https://ejemplo.com/imagen.jpg"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.moderate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 15 |
max_megapixels | 12 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |