Dos endpoints, un Bearer token y respuestas en JSON. Todo lo que necesitas para detectar texto e imágenes generados por IA desde tu propio backend.
URL base
Cada petición debe llevar tu clave API como Bearer token. No hay ningún otro esquema de autenticación ni ningún nivel sin autenticar.
Authorization: Bearer YOUR_API_KEYGuarda la clave en el servidor. Gasta tu saldo de créditos, así que cualquier cosa que la envíe a un navegador o a una app móvil es un agujero en tu facturación. Pasa la llamada por tu propio backend.
El uso se mide en créditos. Los créditos se descuentan antes de ejecutar la detección. Con API Business, las llamadas a la API y al MCP consumen primero los 3.000.000 de créditos mensuales del plan y después tu saldo de créditos.
| Endpoint | Coste | Con 1.000 créditos gratis |
|---|---|---|
| /detect/text | 1 crédito por palabra | ~1.000 palabras |
| /detect/image | 300 créditos por imagen | 3 imágenes |
| /detect/video | 300 créditos por fotograma analizado (16–50 por clip) | — |
| /detect/video | 300 créditos por fotograma suelto | 3 fotogramas |
Los créditos de pago único no caducan y sirven en la web, en la API y en el servidor MCP. API Business cuesta 299 $/mes e incluye 3.000.000 de créditos de API y MCP cada mes, además de informes PDF white-label y soporte prioritario. Pro (14,99 $/mes) es solo para la web y no incluye acceso a la API. Cada clave API tiene un límite de 120 peticiones por minuto (por encima, 429 con Retry-After), así que procesa los lotes de forma secuencial o con una concurrencia moderada. Enterprise ofrece límites a medida y un SLA. Consulta los precios para ver todos los planes.
/api/v1/detect/textDetecta texto generado por ChatGPT, GPT-4, Claude, Gemini y otros modelos de lenguaje. Devuelve un veredicto para todo el documento y una puntuación para cada frase.
| Campo | Tipo | Notas |
|---|---|---|
| content | string | Obligatorio. El texto que se va a analizar. |
| text | string | Se acepta como alias de content. |
| mode | string | Opcional. "depth" devuelve una puntuación real para cada frase (para resaltarlas). Omítelo si solo necesitas la puntuación del documento. |
| model | string | Opcional. Por defecto, "tropa-3". Pasa "tropa-1" para fijar una generación anterior mientras recalibras tus umbrales. "tropa-2" se sigue aceptando y lo atiende tropa-3. Mismo coste en créditos. |
curl -X POST https://www.wasitaigenerated.com/api/v1/detect/text \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Your text content here..."
}'{
"isAI": true,
"confidence": 0.92,
"score": 92.3,
"verdict": "ai",
"model": "tropa-3",
"patterns": ["AI patterns detected"],
"analysis": {
"likelihood": "AI-generated",
"reasoning": "Overall AI score: 92.3%"
},
"sentences": [
{
"text": "The sentence that was analyzed.",
"isAI": true,
"confidence": 0.95,
"scores": { "ai": 0.95, "human": 0.05 }
}
],
"humanizedHint": "possibly_humanized",
"inputAnomalies": { "homoglyph": 13, "zero_width": 0, "exotic_space": 0, "fullwidth": 0, "variation_selector": 0 },
"subclassProbs": { "human": 0.0, "ai": 0.71, "ai_edited": 0.02, "humanized": 0.27 }
}score > 50).human (< 40), uncertain (40–70), likely_ai (70–90), ai (≥ 90). Con uncertain, envíalo a una persona para que lo revise en lugar de marcarlo automáticamente.mode: "depth".possibly_humanized, cuando el modelo atribuye la señal de IA sobre todo a un posprocesado con un humanizador. Su ausencia no significa nada: la señal es precisa, pero solo salta en ~40% de los textos humanizados, así que nunca muestres un estado de «no humanizado».Coste: 1 crédito por palabra. Consulta la guía de la API de detección de texto para ver patrones de integración y ejemplos prácticos.
/api/v1/detect/imageDetecta imágenes generadas por IA o manipuladas sintéticamente. Si el archivo conserva credenciales de contenido C2PA, el resultado se verifica criptográficamente en lugar de estimarse.
Envía la imagen como multipart/form-data con el nombre de campo file.
curl -X POST https://www.wasitaigenerated.com/api/v1/detect/image \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@/path/to/image.jpg"{
"isAI": true,
"confidence": 0.99,
"verified": true,
"c2pa": {
"vendor": "OpenAI",
"generator": "ChatGPT",
"generatorVersion": null,
"softwareAgent": null,
"issuer": "OpenAI",
"signedAt": "2024-08-06T21:53:37+00:00",
"signatureValid": true,
"trusted": false,
"validationState": "Valid",
"validationCodes": ["signingCredential.untrusted"],
"sourceType": "trainedAlgorithmicMedia",
"isAI": true,
"actions": ["c2pa.created"],
"ingredients": 0,
"manifestCount": 1
},
"provenance": {
"platform": null,
"watermarks": [],
"signals": [],
"confidence": "none"
},
"patterns": ["ai_verified", "c2pa_signed", "synthetic_artifacts"],
"analysis": {
"likelihood": "high",
"reasoning": "AI-generated imagery detected with 99.0% confidence. Verified AI-generated: content credentials signed by ChatGPT (OpenAI) on 2024-08-06."
},
"detailed": {
"scores": { "ai": 99.0, "human": 1.0 },
"model": "v1.1"
}
}true, la imagen lleva una credencial de contenido C2PA cuya firma es válida y que declara el archivo como generado por IA. Eso es una certeza, no una puntuación, y fuerza isAI: true independientemente del modelo de píxeles. Cuando es false, el veredicto procede del análisis de los píxeles por el modelo.null si el archivo no lleva ninguna. issuer es el emisor del certificado X.509 y el único campo que no se puede falsificar; vendor y generator se derivan de él y del manifiesto (OpenAI / ChatGPT, Google, Microsoft, Adobe, Leica, …). signatureValid es la comprobación criptográfica; trusted exige además que el emisor figure en una lista de confianza de C2PA y actualmente siempre es false. sourceType es trainedAlgorithmicMedia para contenido de IA y digitalCapture para una foto de cámara firmada: un manifiesto válido con isAI: false es un indicio de que la imagen es real.confidence: high / medium / low / none.ai_verified, c2pa_signed (manifiesto válido, sea de IA o no), c2pa_invalid (la firma no es válida), c2pa_marker (marcadores sin un manifiesto legible), high_ai_confidence, synthetic_artifacts, human_generated.Coste: 300 créditos por imagen. Consulta la guía de la API de detección de imágenes para ver patrones de moderación y umbrales.
/api/v1/detect/videoDetecta vídeo generado por IA. Envía un clip completo para puntuarlo a partir de fotogramas muestreados, o un fotograma suelto de un vídeo (miniatura, captura de pantalla) para puntuar solo ese fotograma con el modelo de vídeo.
Dos formas de enviar el archivo:
multipart/form-data con el nombre de campo file, hasta 4MBapplication/json con {"url": "https://…"} apuntando a un archivo accesible públicamente, hasta 50MB. Usa esta opción para la mayoría de los clips reales.detailed.mode lo devuelve.# Clip up to 4MB, uploaded directly
curl -X POST https://www.wasitaigenerated.com/api/v1/detect/video \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@/path/to/clip.mp4"
# Larger clip (up to 50MB), passed by URL
curl -X POST https://www.wasitaigenerated.com/api/v1/detect/video \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/clip.mp4"}'{
"isAI": true,
"confidence": 0.94,
"creditsCharged": 4800,
"verified": false,
"patterns": ["ai_generated_frames", "synthetic_artifacts"],
"analysis": {
"likelihood": "high",
"reasoning": "AI-generated video detected with 94.0% confidence. 15 of 16 frames flagged as AI-generated."
},
"detailed": {
"scores": { "ai": 94.0, "human": 6.0 },
"model": "video-v1",
"mode": "video",
"framesAnalyzed": 16,
"framesFlaggedAi": 15,
"videoDurationSec": 8.2
}
}video para un clip, frame para un fotograma suelto.Coste: 300 créditos por fotograma analizado. Un clip muestrea 10 fotogramas por minuto, como mínimo 16 y como máximo 50, así que cuesta entre 4.800 y 15.000 créditos. El mínimo se cobra por adelantado y el resto cuando se conoce el número de fotogramas; creditsCharged en la respuesta indica lo que costó la llamada. Un fotograma suelto cuesta 300 créditos.
La detección también está disponible a través del Model Context Protocol, así que un asistente de IA puede revisar texto e imágenes por sí mismo en lugar de que tú copies y pegues resultados. No hay nada que instalar: el servidor está alojado y te conectas a una URL.
https://www.wasitaigenerated.com/api/mcpLos clientes compatibles con OAuth obtienen todo lo que necesitan desde el propio endpoint y abren el navegador para que apruebes la conexión. Los clientes que usan una cabecera estática pueden usar una clave API:
claude mcp add --transport http wasitaigenerated \
https://www.wasitaigenerated.com/api/mcp \
--header "Authorization: Bearer $WAI_API_KEY"detect_ai_text: puntúa un fragmento, con desglose por frases. Cuesta 1 crédito por palabra.detect_ai_image: comprueba una imagen por URL o en base64, incluidas las credenciales de contenido C2PA. Cuesta 300 créditos.get_credit_balance: consulta tu saldo restante. Gratis.Las llamadas de un asistente gastan tus créditos exactamente igual que la API REST. Un agente al que le pidas revisar un documento largo gastará un crédito por palabra, así que conviene indicarle el presupuesto.
Los fallos devuelven un cuerpo JSON con un campo error y, a menudo, un message legible.
{
"error": "Insufficient credits",
"message": "You need 300 credits for image detection. You have 120 credits remaining.",
"required": 300,
"available": 120
}Con cargas grandes, la detección lleva su tiempo. Pon la llamada en cola y actualiza el registro cuando vuelva, en lugar de bloquear una petición de cara al usuario. Configura un timeout de cliente generoso: 60s para texto y vídeo, 120s para imágenes.
La detección es probabilística. Un texto de IA muy editado se lee como humano, y algunos textos humanos son realmente formulaicos. Envía los elementos marcados a una persona, muéstrale el desglose por frases y deja que decida. Sancionar automáticamente por una cifra de confianza genera reclamaciones que no podrás defender.
Las capturas de pantalla y las imágenes recomprimidas pierden señal, y una captura elimina por completo las credenciales de contenido. Por eso una captura claramente sintética puede volver con verified: false. Envía el archivo original siempre que lo tengas.
Un cuerpo muy largo devuelve 413. Divídelo en secciones de unos pocos miles de palabras y agrega los resultados. Un texto largo es más fiable que un par de frases: las entradas muy cortas simplemente no tienen suficiente señal.
Los créditos se descuentan en cada llamada, así que una integración con mucho tráfico puede quedarse sin saldo a mitad de un lote. Captura el 402, detén el lote y avisa a alguien: la respuesta te dice exactamente cuánto te faltaba.
¿Preguntas sobre la integración, precios por volumen, un SLA o un endpoint que necesitas y que aún no existe? Escríbenos. Las peticiones de funciones que vienen de integraciones reales tienen prioridad.