¿Prefiere una biblioteca de cliente? Use nuestros SDKs oficiales en lugar de llamar directamente a la API REST. Ver Documentación de SDKs de Cliente
Precios y créditos
Cada detección de imagen exitosa consume créditos. Las cargas masivas en ZIP solo facturan las imágenes que completan el análisis; los archivos omitidos o fallidos no se cobran.
TruthScan espera que la clave de API se incluya en las solicitudes al servidor en un cuerpo JSON como el siguiente (salvo que un endpoint documente solo autenticación por cabecera, p. ej. check-user-credits):
{
"key": "YOUR API KEY GOES HERE"
}
Debe sustituir YOUR API KEY GOES HERE por su clave de API personal.
Límites de velocidad
La API aplica un cupo de solicitudes por minuto para cada clave de API. Los endpoints de escritura cuestan más que los de lectura. El cupo por defecto es de 60 solicitudes por minuto — contáctenos si necesita un cupo mayor.
Pesos por endpoint
Cada llamada descuenta su peso de su cupo por minuto:
Endpoint
Tipo
Peso
POST /detect
Escritura
1
POST /bulk-upload
Escritura
1
GET /get-presigned-url
Lectura
0.2
GET /check-user-credits
Lectura
0.2
POST /heatmap/{id}
Lectura
0.2
POST /preview/{id}
Lectura
0.2
POST /query
Lectura
Sin límite
GET /health
Lectura
Sin límite
Ejemplo: con un cupo de 60/minuto puede enviar hasta 60 llamadas de escritura, hasta ~300 llamadas de lectura, o cualquier mezcla cuyo total ponderado se mantenga ≤ 60 por minuto.
Respuesta limitada (HTTP 429)
Cuando supera su cupo por minuto, la API devuelve:
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 3
X-RateLimit-Retry-After: 3
Content-Type: application/json
{
"error": "Too many requests"
}
Cabeceras de respuesta de rate limit
X-RateLimit-Limit — su cupo por minuto.
X-RateLimit-Remaining — llamadas restantes en el minuto en curso (tras esta solicitud).
X-RateLimit-Reset — (solo en 429) segundos hasta que pueda enviar otra solicitud de escritura.
X-RateLimit-Retry-After — (solo en 429) mismo valor que X-RateLimit-Reset, al estilo Retry-After.
Comportamiento recomendado del cliente
Vigile X-RateLimit-Remaining en respuestas correctas para regular el ritmo de sus solicitudes.
Ante un 429, espere al menos X-RateLimit-Retry-After segundos antes de reintentar — use backoff exponencial con jitter.
Para lotes prefiera POST /bulk-upload (una llamada procesa hasta 50 imágenes) en lugar de muchas /detect en paralelo.
Detector de imágenes con IA
Detect (proceso en 3 pasos)
El flujo de detección de imágenes con IA consta de los siguientes pasos:
Obtener una URL de carga preautorizada
Subir la imagen
Enviar la imagen para la detección
1. Obtener una URL de carga preautorizada
Empiece solicitando una URL preautorizada a la API. Esta URL permite subir el archivo de imagen de forma segura al servidor de almacenamiento.
Elimine los espacios del nombre del archivo de imagen al solicitar una URL preautorizada.
En archivos PDF solo se detectará la primera imagen (flujo de un solo archivo).
Use un nombre de archivo .zip en este endpoint cuando vaya a enviar un ZIP mediante carga masiva.
Parámetros de consulta
file_name (obligatorio) — Nombre de archivo original; el servidor puede normalizarlo (se ajustan espacios y caracteres no seguros). Use la extensión .zip para carga masiva.
expiration (opcional) — Duración de la URL preautorizada en segundos (predeterminado: 3600).
GET https://detect-image.truthscan.com/get-presigned-url?file_name=example.jpg
Ejemplo de solicitud
curl -X GET 'https://detect-image.truthscan.com/get-presigned-url?file_name=example.jpg' \
--header 'apikey: YOUR API KEY GOES HERE'
document_id es un UUID nuevo generado para esta solicitud de carga (para correlación y registro). El id que use para /detect o /bulk-upload se asigna al enviar esos endpoints salvo que pase un id opcional en /detect.
Tipo de archivo no admitido / parámetros incorrectos
403
{"error": "..."}
Clave API no válida
404
{"error": "..."}
Falló la validación de la clave TruthScan
500
{"error": "..."}
Error del servidor
2. Subir la imagen
Use la presigned_url proporcionada para subir la imagen mediante una solicitud PUT. Asegúrese de establecer el Content-Type correcto según el formato de la imagen.
Nombre de archivo
Elimine los espacios del nombre del archivo de imagen al subirla.
Establezca Content-Type para que coincida exactamente con la extensión del archivo
image/jpeg: jpg, jpeg, jfif
image/png: png
image/webp: webp
image/heic: heic
image/heif: heif
image/avif: avif
image/bmp: bmp
image/tiff: tiff, tif
image/gif: gif
image/svg+xml: svg
application/pdf: pdf
Errores habituales que debe evitar
No use image/jpg (incorrecto). Use image/jpeg.
No desajuste archivo y cabecera (p. ej., archivo .png con image/jpeg).
No cambie la extensión sin actualizar la cabecera (ni al revés).
No incluya espacios en los nombres de archivo al solicitar o subir.
Asegúrese de que el formato del archivo se mantenga coherente durante la subida. Una subida correcta devuelve HTTP 200.
Respuesta del PUT en almacenamiento
El paso 2 es un PUT directo al almacenamiento de objetos (URL prefirmada), no a nuestra API. La carga de una imagen y la carga masiva ZIP funcionan igual.
El éxito devuelve HTTP 200 con cuerpo vacío — por diseño. No hay JSON que analizar.
Tras el PUT a presigned_url: considere res.ok (estado 200–299) como éxito. No llame a response.json() en éxito — se espera un cuerpo vacío. Informe errores solo en respuestas distintas de 2xx.
3. Enviar la imagen para la detección con IA
Tras la subida, envíe la imagen para la detección con IA referenciando el file_path del paso anterior. En cargas PDF solo se analizará o detectará la primera imagen.
FILE_PATH es la ruta devuelta en el paso de la URL preautorizada (p. ej. uploads/...). Construya la URL completa con su host de almacenamiento como en el ejemplo.
Parámetros opcionales
id: Cadena UUID opcional. Si se omite, el servidor genera un nuevo id de documento. Si se indica, no debe existir ya; de lo contrario la API devuelve un error.
generate_preview: Establezca true para generar una URL de vista previa de la imagen (predeterminado: true). Establezca false para omitir la generación de vista previa.
document_type: Tipo de documento (predeterminado: Image).
email: Dirección de correo electrónico para el procesamiento.
generate_analysis_details: Establezca false para omitir el análisis detallado (predeterminado: true).
generate_heatmap: Con false, se omite por completo la generación del mapa de calor (predeterminado: true). Los mapas de calor solo se producen para imágenes clasificadas como IA cuando este valor es true. Las imágenes reales nunca reciben mapa de calor.
generate_heatmap_overlayed: Controla cómo se produce la imagen del mapa de calor cuando se genera uno (predeterminado: true). Solo aplica cuando generate_heatmap es true y la imagen está clasificada como generada por IA. Con true, el mapa de calor se mezcla con la imagen original (superposición habitual). Con false, el servicio devuelve un mapa de calor transparente: una imagen RGBA con el mapa de activación en color JET y alfa del modelo, con fondo transparente para poder componerla en su interfaz.
generate_heatmap_normalized: Con false, la generación del mapa de calor omite el paso de normalización usado para el mapa de activación (predeterminado: true). Solo aplica cuando generate_heatmap es true y la imagen está clasificada como generada por IA. Úselo junto con generate_heatmap_overlayed para controlar el aspecto del mapa de calor.
model: Pista de modelo o enrutamiento (predeterminado: generic). Ejemplos admitidos: generic o instance_id/model (p. ej. my-instance-id/generic) para enviar el trabajo a una cola dedicada de esa instancia. Los instance_id no válidos se rechazan con 400.
user_agent: Cadena opcional almacenada con el documento para analítica o soporte.
Validación de flags del mapa de calor
Si generate_heatmap es false, no establezca explícitamente generate_heatmap_overlayed o generate_heatmap_normalized en true. La API devuelve 422 Unprocessable Entity con mensajes como "generate_heatmap_overlayed cannot be true when generate_heatmap is false." o "generate_heatmap_normalized cannot be true when generate_heatmap is false."
Ejemplo de solicitud (mapa de calor habilitado, predeterminado)
La respuesta incluye un id de imagen único para seguir el estado de la detección.
Respuestas HTTP
Estado
Cuerpo
Cuándo
200
JSON: id, status (típicamente "pending")
Trabajo aceptado — esto es lo que devuelve la API en caso de éxito
400
{"error": "..."}
Validación (sin URL, archivo no subido, tamaño/tipo, id duplicado, modelo incorrecto, conflicto de flag heatmap, etc.)
403
{"error": "..."}
Clave no válida / créditos insuficientes
422
{"error": "..."}
Cuerpo de solicitud no válido (p. ej. generate_heatmap_overlayed true cuando generate_heatmap es false)
500
{"error": "..."}
Error del servidor
Cualquier respuesta 2xx cuyo JSON incluya id y status es éxito — no solo HTTP 200. Proxies u otras pilas HTTP pueden devolver 201 o 202 para aceptación asíncrona; valide el cuerpo JSON.
Consultar estado y resultados de la detección
Para comprobar el estado y obtener los resultados, use el endpoint /query con el id de la imagen.
Autenticación: el cuerpo de la solicitud solo incluye id; la API no envía clave de API en esta llamada. Cualquiera que conozca el UUID puede consultar resultados: trate los ids de documento como sensibles si necesita restringir quién puede ver las puntuaciones.
confidence: Puntuación de confianza de la detección.
final_label_confidence: Qué tan seguro está el modelo de `final_result`, de 0 a 100. Léalo como “esta imagen es N% [etiqueta]”. Por ejemplo, `final_result`: `"AI Generated"` con `final_label_confidence`: `90` significa que el modelo está 90% seguro de que la imagen es generada por IA; `final_result`: `"Real"` con `final_label_confidence`: `80` significa que el modelo está 80% seguro de que es real.
metadata: Información extraída de los metadatos de la imagen con ExifTool y Pillow.
metadata_basic_source: Puede indicar si la imagen se capturó con un modelo concreto de cámara móvil, se generó con una herramienta de IA o se modificó con software de edición fotográfica.
ocr: Resultado de detección de marcas de agua bajo el nombre histórico ocr. Array de dos elementos [label, score]: label es una clase de marca de agua detectada (p. ej. "Gemini") u "OCR did not detect AI"; score está en escala 0–100 (o 0 si no hay certeza). Se resume en warnings cuando hay label.
ml_model: Resultados del modelo de aprendizaje automático.
warnings: Array opcional de objetos de advertencia heterogéneos (tipo blur_dark, watermark, screen_recapture, etc.). Puede estar vacío u omitirse.
preview_url: URL de la imagen de vista previa si generate_preview era true. Puede ser almacenamiento directo o, con URLs seguras, una ruta de API como https://<api-host>/preview/<document_id>.
heatmap_status: pending, ready o failed. Se omite cuando la imagen no es generada por IA o cuando generate_heatmap era false al enviar. La generación del mapa de calor es asíncrona y solo se ejecuta para imágenes clasificadas como IA cuando generate_heatmap es true.
heatmap_url: Presente cuando heatmap_status es ready, la imagen fue clasificada como IA y generate_heatmap estaba habilitado al enviar. El aspecto depende de generate_heatmap_overlayed. Puede ser almacenamiento directo o ruta de API https://<api-host>/heatmap/<document_id> (use POST /heatmap/{id} con clave cuando sea seguro).
analysis_results_status: pending, ready, skipped, failed o analyzing. Se omite o es null cuando generate_analysis_details era false.
analysis_results: Análisis narrativo detallado cuando está habilitado; véase Explicación del resultado de análisis más abajo.
Explicación del resultado de análisis
Cuando analysis_results está listo, suele incluir: agreement (strong | moderate | weak | disagreement), imageTags (hasta cinco etiquetas breves), confidence (0–100), keyIndicators, detailedReasoning, visualPatterns y recommendations.
Notas
La generación del mapa de calor es asíncrona y solo se ejecuta para imágenes clasificadas como IA cuando generate_heatmap es true (predeterminado). Consulte /query hasta que heatmap_status sea ready.
El análisis detallado es asíncrono salvo que generate_analysis_details=false. Consulte analysis_results_status y analysis_results.
URLs seguras: si están activadas, heatmap_url y preview_url pueden usar el host de la API; obtenga con POST /heatmap/{id} y POST /preview/{id} con su clave (véase Activos de mapa de calor y vista previa seguros).
Vuelva a consultar /query tras la puntuación principal para recoger heatmap y analysis_results cuando terminen.
Comportamiento del mapa de calor y la superposición
El archivo en heatmap_url refleja generate_heatmap_overlayed y generate_heatmap_normalized de su solicitud /detect (o /bulk-upload) cuando generate_heatmap era true: la superposición por defecto (true) es una imagen normal con el mapa de calor superpuesto; false suele ser un PNG con transparencia para componer. Las imágenes reales y las solicitudes con generate_heatmap: false omiten heatmap_status y heatmap_url.
Ejemplo de respuesta (imagen IA, mapa de calor deshabilitado al enviar)
Ejemplo: result ~90,24 con final_result AI Generated y detection_step 3 significa que el pipeline completo de metadatos, OCR y modelo ML finalizó.
Resultados de análisis (análisis profundo asíncrono)
Cuando generate_analysis_details es true en /detect, el análisis detallado puede completarse después de la puntuación principal. Consulte /query hasta que analysis_results_status sea ready (o skipped/failed).
1. El resultado inicial puede estar listo antes que el análisis
La detección principal (result, final_result, confidence) puede completarse mientras analysis_results_status sigue en pending.
Cuando analysis_results_status es ready, analysis_results incluye agreement, imageTags, confidence, keyIndicators, detailedReasoning, visualPatterns y recommendations.
{
"id": "00fee5ff-a55b-42fb-b7c7-d14f05ae0769",
"status": "done",
"result": 90.2371538185235,
"result_details": {
"is_valid": true,
"detection_step": 3,
"final_result": "AI Generated",
"confidence": 90.2371538185235,
"final_label_confidence": 90.2371538185235,
"heatmap_status": "ready",
"heatmap_url": "https://ai-image-detector-prod.nyc3.digitaloceanspaces.com/uploads/....",
"analysis_results_status": "done",
"analysis_results": {
"imageTags": [
"person",
"portrait",
"outdoor",
"vineyard",
"smiling"
],
"agreement": "strong",
"confidence": 92,
"keyIndicators": [
"Unnaturally smooth skin texture",
"Consistent lighting anomalies"
],
"detailedReasoning": "The image shows clear signs of AI generation with unnaturally smooth textures and consistent lighting patterns not typical of real photography.",
"visualPatterns": [
"Uniform noise pattern typical of diffusion models"
],
"recommendations": [
"Cross-reference with original source if available",
"Check for metadata inconsistencies",
"Compare with known AI generation patterns"
]
}
},
"preview_url": "https://ai-image-detector-prod.nyc3.digitaloceanspaces.com/previews/..."
}
Cuando el análisis no está disponible
Si analysis_results_status es skipped, failed o está ausente, o generate_analysis_details era false, considere la detección principal como definitiva.
Envíe varias imágenes en una sola solicitud subiendo un ZIP. El flujo replica el de una imagen: presign (nombre .zip) → PUT ZIP → POST /bulk-upload → consultar /query.
1. Obtener una URL de carga preautorizada (ZIP)
Use get-presigned-url con un nombre de archivo .zip (p. ej. images.zip).
GET https://detect-image.truthscan.com/get-presigned-url?file_name=images.zip
Ejemplo de solicitud
curl -X GET 'https://detect-image.truthscan.com/get-presigned-url?file_name=images.zip' \
--header 'apikey: YOUR API KEY GOES HERE'
2. Subir el ZIP
Haga PUT del ZIP a la URL preautorizada con Content-Type: application/zip.
Los archivos PDF dentro del ZIP no están admitidos y se omitirán.
Los archivos SVG se convierten a PNG antes de la detección.
3. Enviar el ZIP para detección masiva
POST /bulk-upload con key y url apuntando a la ruta del ZIP subido.
Parámetros opcionales
generate_preview: true para generar URLs de vista previa (predeterminado: false).
generate_analysis_details: true para generar análisis detallado (predeterminado: false).
generate_heatmap: Con false, se omite por completo la generación del mapa de calor (predeterminado: true). Los mapas de calor solo se producen para imágenes clasificadas como IA cuando este valor es true. Las imágenes reales nunca reciben mapa de calor.
generate_heatmap_overlayed: Mismo comportamiento que /detect (superposición frente a mapa de calor RGBA transparente). Solo aplica cuando generate_heatmap es true y la imagen está clasificada como generada por IA.
generate_heatmap_normalized: Mismo comportamiento que /detect (predeterminado: true). Solo aplica cuando generate_heatmap es true y la imagen está clasificada como generada por IA.
model: Dominio del modelo: generic o formato instance_id/model.
Validación de flags del mapa de calor
Si generate_heatmap es false, no establezca explícitamente generate_heatmap_overlayed o generate_heatmap_normalized en true. La API devuelve 422 Unprocessable Entity con mensajes como "generate_heatmap_overlayed cannot be true when generate_heatmap is false." o "generate_heatmap_normalized cannot be true when generate_heatmap is false."
Devuelve id, status pending y expected_count (cuántas imágenes del ZIP se analizarán).
Respuestas HTTP
Estado
Cuerpo
Cuándo
200
JSON: id, status, expected_count
Trabajo masivo aceptado
400
{"error": "..."} (may include skipped)
Fallos de validación del ZIP
403
{"error": "..."}
Autenticación / créditos
500
{"error": "..."}
Error del servidor
Misma regla que /detect: cualquier 2xx con id, status y expected_count (si está presente) es éxito.
Cómo se actualizan los resultados del ZIP masivo
Tras el envío, el estado es pending hasta que empiece el procesamiento; luego analyzing.
results enumera cada imagen; las entradas pendientes tienen result y result_details en null hasta terminar.
Los mapas de calor opcionales y el análisis detallado pueden seguir pendientes dentro de result_details hasta estar listos.
Cuando todas las imágenes en results han terminado, el estado global pasa a done. Si el lote no puede completarse, el estado puede ser failed.
Puede llamar a /query antes de que el ZIP termine para ver resultados parciales.
4. Consultar resultados de carga masiva
Use POST /query con el id de /bulk-upload. Mismo endpoint que para una sola imagen; la forma de la respuesta depende de si el id es una imagen o un lote ZIP.
status — pending, luego analyzing, luego done o failed.
results — Una entrada por imagen en análisis (id, status, result, result_details, filename, preview_url cuando exista).
skipped — Archivos no analizados (tipo no admitido, tamaño, etc.) con status failed y motivo en result_details.
Facturación: los créditos solo se consumen por imágenes analizadas correctamente. Las conversiones SVG fallidas y los archivos omitidos no se facturan.
Activos de mapa de calor y vista previa seguros
Cuando heatmap_url o preview_url en /query apuntan al host de la API (no al almacenamiento de objetos directo), descargue los bytes con POST y su clave.
POST /heatmap/{id}
POST /preview/{id}
Cuerpo JSON de la solicitud: { "key": "YOUR-API-KEY-GOES-HERE" }
Respuestas del mapa de calor (compruebe el estado HTTP y Content-Type)
200 + binario (image/png, etc.) — Archivo de mapa de calor disponible. Puede establecerse X-Heatmap-Status.
202 + JSON — heatmap_status pending; consulte /query y reintente.
200 + JSON — No hay mapa de calor que servir (función opcional, error, etc.); no es error del servidor.
500 + JSON — Existe heatmap_url almacenado pero no se pudo descargar el archivo del almacenamiento; reintente más tarde.
404 + JSON — Id de documento no encontrado.
403 + JSON — La clave de API no es propietaria de este documento.
Vista previa: POST /preview/{id} devuelve los bytes en bruto de la vista previa. 404 con JSON si no se generó vista previa (generate_preview era false).
Una respuesta "healthy" indica que el servicio funciona con normalidad.
Errores
La mayoría de los errores se deben a parámetros incorrectos enviados a la API. Revise cada llamada e intente con los ejemplos proporcionados.
Los códigos de error genéricos que usamos se ajustan al estándar REST:
Código de error
Significado
400
Bad Request — Su solicitud no es válida.
401
Unauthorized — Secreto de job no válido (endpoints de uso interno) u otro fallo de autenticación similar.
403
Forbidden — La clave de API no es válida, se denegó el acceso o no hay créditos suficientes para la operación.
404
Not Found — El recurso indicado no existe.
405
Method Not Allowed — Intentó acceder a un recurso con un método no válido.
406
Not Acceptable — Solicitó un formato que no es JSON.
410
Gone — El recurso de este endpoint ha sido eliminado.
422
Invalid Request Body — El cuerpo de la solicitud está mal formateado, no es válido o faltan parámetros.
429
Too Many Requests — Ha superado el rate limit de su clave de API (consulte Límites de velocidad). El cuerpo es {"error":"Too many requests"}; la cabecera X-RateLimit-Retry-After indica cuántos segundos esperar antes de reintentar.
500
Internal Server Error — Hubo un problema en nuestro servidor. Inténtelo de nuevo más tarde.
503
Service Unavailable — Estamos temporalmente fuera de servicio por mantenimiento. Inténtelo de nuevo más tarde.
Problemas frecuentes y soluciones
Problemas de autenticación
"User verification failed" (403)
Causa: Clave de API no válida o caducada
Solución:
Compruebe que la clave de API sea correcta
Verifique que la clave esté activa en su cuenta
Pruebe a regenerar la clave de API
"Not enough credits" (403)
Causa: Créditos insuficientes para el procesamiento de imágenes
Solución:
Consulte los créditos restantes con /check-user-credits
Compre créditos adicionales si es necesario
Problemas de validación de entrada
"Input URL cannot be empty" (400)
Causa: URL vacía o no válida enviada
Solución:
Asegúrese de que la entrada url no esté vacía
Elimine espacios iniciales o finales en los nombres de imagen
Compruebe que la codificación de URL sea correcta
"Input email is empty" (400)
Causa: Falta el correo para el procesamiento por URL
Solución:
Proporcione un correo electrónico válido al enviar URLs
Compruebe el formato del correo
"Unsupported image type" (400)
Causa: Formato de archivo no admitido
Solución:
Convierta a un formato admitido (JPG, PNG, WebP, HEIC, HEIF, AVIF, BMP, TIFF, GIF, SVG, PDF)
Compruebe que la extensión del archivo sea correcta
"File size is too small" (400)
Causa: El archivo de imagen está por debajo del tamaño mínimo
Solución:
Use un archivo de imagen mayor (mínimo 1 KB)
Compruebe si la imagen se corrompió durante la subida
"File size exceeds limit" (400)
Causa: El archivo de imagen es demasiado grande
Solución:
Comprima o redimensione la imagen; el máximo depende del despliegue (el mensaje de error de la API indica el límite en MB)
Pruebe con otro formato de imagen
"Invalid file type" (400)
Causa: Falló la validación del tipo de archivo
Solución:
Asegúrese de que el archivo sea un formato de imagen válido
Compruebe que el archivo no esté corrupto
Verifique que el tipo MIME coincida con la extensión
Problemas de procesamiento
Estado de imagen "failed"
Causa: El procesamiento falló por diversos motivos
Solución:
Verifique que la URL tenga un formato admitido
Compruebe que el archivo de imagen sea válido y no esté corrupto
Asegúrese de que la imagen cumpla los requisitos de tamaño
Contacte con soporte si el problema continúa
"User not found"
Causa: Id de usuario no válido
Solución:
Verifique que el id de usuario sea correcto
Asegúrese de que la cuenta de usuario esté activa
Vuelva a autenticarse si es necesario
"File metadata could not be fetched" (500)
Causa: No se pudo acceder al archivo subido
Solución:
Verifique que el archivo se subió correctamente
Compruebe que la URL del archivo sea accesible
Intente volver a subir el archivo
Problemas de subida
"Image upload failed" (403/400)
Causa: URL preautorizada no válida o caducada, o problemas con el servidor de almacenamiento
Solución:
Use la URL preautorizada en cuanto la reciba
Verifique que Content-Type coincida con el formato del archivo
Elimine espacios del nombre de archivo antes de subir
Genere una nueva URL preautorizada si hace falta
"Invalid pre-signed URL" (400)
Causa: Nombre de archivo con espacios o URL preautorizada caducada o corrupta
Solución:
Elimine espacios del nombre de archivo antes de solicitar la URL preautorizada
Use caracteres alfanuméricos, guiones y guiones bajos
Genere una nueva URL preautorizada si hace falta
Problemas de carga masiva
"URL must point to a ZIP file" (400)
Causa: La URL proporcionada a /bulk-upload no apunta a un archivo ZIP
Solución:
Use get-presigned-url?file_name=images.zip (u otro nombre .zip)
Suba un ZIP válido a la URL preautorizada
Asegúrese de que la solicitud bulk-upload apunte con url a ese ZIP subido
"ZIP file too large" (400)
Causa: El ZIP supera el tamaño máximo (100 MB)
Solución:
Reduzca el número de imágenes o comprímalas
Divida en varias cargas masivas
"Too many files" (400)
Causa: El ZIP contiene más de 50 imágenes válidas
Solución:
Reduzca a 50 imágenes o menos por ZIP
Divida en varias cargas masivas
"No valid images found in ZIP" (400)
Causa: Todos los archivos del ZIP se omitieron (formato no admitido, demasiado pequeños, ruta no válida, etc.)
Respuestas a las preguntas más habituales sobre nuestra API de detección de imágenes con IA.
Puede obtener su clave de API en su cuenta de TruthScan (portal para desarrolladores). La clave aparece en la parte superior de la página de su cuenta.
JPG, JPEG, PNG, WebP, JFIF, HEIC, HEIF, AVIF, BMP, TIFF, TIF, GIF, SVG y PDF. En PDF solo se detecta o analiza la primera imagen en el flujo de un solo archivo. El PDF dentro de cargas ZIP masivas se omite.
Archivos sueltos: mínimo 1 KB, máximo 10 MB. ZIP masivo: hasta 100 MB por archivo, hasta 50 imágenes por lote, cada imagen entre 1 KB y 10 MB.
1) Obtener una URL de carga preautorizada, 2) Subir con PUT y Content-Type correcto, 3) POST /detect con key y url construida a partir de su file_path. Use /query para consultar resultados.
Según la API de origen: generate_preview predetermina a true; generate_analysis_details predetermina a true. Establézcalos explícitamente si necesita otro comportamiento.
Solicite una URL preautorizada para un archivo .zip, suba el ZIP, POST /bulk-upload y consulte /query con el id devuelto. Los PDF dentro del ZIP se omiten; los SVG se convierten a PNG.
Cada detección de imagen correcta consume créditos. Consulte /check-user-credits. Facturación masiva: los créditos solo aplican a imágenes analizadas correctamente; los archivos omitidos no se facturan.
1 = solo metadatos; 2 = metadatos y ocr; 3 = metadatos, ocr y ml_model (pipeline completo).
Cuando generate_analysis_details es true, consulte /query para analysis_results_status. Cuando esté ready, analysis_results incluye agreement, imageTags, confidence, keyIndicators, detailedReasoning, visualPatterns y recommendations.
Sí. Cada clave de API tiene un cupo de solicitudes por minuto — 60 por defecto. Los endpoints de escritura (/detect, /bulk-upload) cuentan con peso 1; los de lectura (/get-presigned-url, /check-user-credits, /heatmap/{id}, /preview/{id}) cuentan con peso 0,2. /query y /health no están limitados. Si supera el cupo recibirá HTTP 429 con X-RateLimit-Retry-After. Contáctenos si necesita un cupo mayor.