Documentación de la API

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.

Primeros pasos

  1. 1Crea una cuenta y verifica tu dirección de email. La verificación es lo que libera los 1.000 créditos gratis: una cuenta sin verificar no tiene ninguno.
  2. 2Copia tu clave API desde el panel. Se crea automáticamente con la cuenta.
  3. 3Envía tu primera petición. Toda la integración es un POST con una cabecera Bearer.

URL base

https://www.wasitaigenerated.com/api/v1

Autenticación

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_KEY

Guarda 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.

Créditos y límites

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.

EndpointCosteCon 1.000 créditos gratis
/detect/text1 crédito por palabra~1.000 palabras
/detect/image300 créditos por imagen3 imágenes
/detect/video300 créditos por fotograma analizado (16–50 por clip)—
/detect/video300 créditos por fotograma suelto3 fotogramas
50.000
créditos — 10 $, pago único
300.000
créditos — 49 $, pago único
1.500.000
créditos — 199 $, pago único

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.

POST/api/v1/detect/text

Detecta 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.

Cuerpo de la petición

CampoTipoNotas
contentstringObligatorio. El texto que se va a analizar.
textstringSe acepta como alias de content.
modestringOpcional. "depth" devuelve una puntuación real para cada frase (para resaltarlas). Omítelo si solo necesitas la puntuación del documento.
modelstringOpcional. 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.

Example request

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..."
  }'

Response

{
  "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 }
}
  • isAI: veredicto para todo el documento (score > 50).
  • confidence: de 0 a 1, la solidez del veredicto.
  • score: probabilidad calibrada de 0 a 100 de que el texto esté generado por IA.
  • verdict: la puntuación por tramos: 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.
  • model: el modelo de detección que produjo el resultado.
  • sentences[]: veredicto y puntuaciones ai/human por frase, para resaltarlas en tu propia interfaz. Los valores reales por frase requieren mode: "depth".
  • humanizedHint: solo aparece, con el valor 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».
  • inputAnomalies: solo aparece cuando el texto contenía caracteres ocultos (homoglifos cirílicos, caracteres de ancho cero, espacios exóticos) que suelen usarse para burlar a los detectores. Se eliminaron antes del análisis.
  • subclassProbs: distribución por clases (human / ai / ai_edited / humanized). Es un dato de diagnóstico; puede faltar cuando la petición la atendió el modelo de respaldo.

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.

POST/api/v1/detect/image

Detecta 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.

Request

Envía la imagen como multipart/form-data con el nombre de campo file.

  • Formatos admitidos: PNG, JPG, JPEG, GIF, WebP
  • Tamaño máximo: 4MB por petición

Example request

curl -X POST https://www.wasitaigenerated.com/api/v1/detect/image \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@/path/to/image.jpg"

Response

{
  "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"
  }
}
  • verified: cuando es 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.
  • c2pa: la credencial de contenido interpretada, o 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.
  • provenance: heurísticas de plataforma y marcas de agua (no criptográficas), con su propio confidence: high / medium / low / none.
  • patterns: etiquetas: 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.
  • confidence: de 0 a 1, según el modelo de detección.
  • detailed.scores: probabilidad de IA frente a humano, en porcentaje.

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.

POST/api/v1/detect/video

Detecta 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.

Request

Dos formas de enviar el archivo:

  • multipart/form-data con el nombre de campo file, hasta 4MB
  • application/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.
  • Clips: MP4, MOV, WebM, AVI. Los fotogramas se muestrean de forma uniforme a lo largo del clip, 10 por minuto, como máximo 50.
  • Fotogramas sueltos: PNG, JPG, JPEG, WebP
  • El tipo de archivo determina el modo; detailed.mode lo devuelve.
  • Prevé un timeout de 60 s.

Example request

# 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"}'

Response

{
  "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
  }
}
  • isAI / confidence: el veredicto para el clip y su fiabilidad (de 0 a 1).
  • detailed.mode: video para un clip, frame para un fotograma suelto.
  • detailed.framesAnalyzed / framesFlaggedAi: cuántos fotogramas muestreados se puntuaron y cuántos parecían generados por IA. Solo para clips.
  • detailed.frames: puntuaciones por fotograma, cuando el modelo las devuelve.

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.

Servidor MCP

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.

Endpoint

https://www.wasitaigenerated.com/api/mcp

Conexión

Los 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"

Herramientas

  • 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.

Errores

Los fallos devuelven un cuerpo JSON con un campo error y, a menudo, un message legible.

400 Bad Request
Falta el contenido del texto, falta el archivo de imagen o vídeo o no es compatible, o no se puede descargar la url del vídeo.
401 Unauthorized
Falta la cabecera Authorization, está mal formada o la clave no es válida.
402 Payment Required
No hay créditos suficientes (insufficient_credits). El cuerpo incluye required y available para que puedas mostrar cuánto falta.
403 Forbidden
plan_without_api: Pro es solo para la web. La API funciona con créditos, API Business o Enterprise.
413 Payload Too Large
El texto, la imagen o el vídeo supera el límite de tamaño. Divide el texto, reduce la imagen o pasa los clips de más de 4MB por url (hasta 50MB).
429 Too Many Requests
rate_limited: más de 120 peticiones por minuto con esta clave API. Espera los segundos que indica la cabecera Retry-After y vuelve a intentarlo.
500 Internal Server Error
Algo ha fallado por nuestra parte. Reintenta con backoff exponencial; si persiste, contacta con soporte.

Ejemplo: sin créditos

{
  "error": "Insufficient credits",
  "message": "You need 300 credits for image detection. You have 120 credits remaining.",
  "required": 300,
  "available": 120
}

Buenas prácticas

Llámala de forma asíncrona

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.

Trata la puntuación como un indicio, no como un veredicto

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.

Usa los archivos originales

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.

Divide los documentos largos

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.

Gestiona el 402 de forma explícita

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.

Soporte

¿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.