Documentation de l'API
ISO 27001SOC 2 CertifiedGDPR Compliant

API de détection d'image IA

Documentation complète pour intégrer l'API de détection d'image IA de TruthScan dans vos applications.

Essayez sans code en visitant notre endpoint FastAPI : https://detect-image.truthscan.com/docs

Authentification

TruthScan utilise des clés API pour autoriser l'accès à l'API. Vous pouvez obtenir votre clé API en haut de la page dans notre portail développeur.

TruthScan attend que la clé API soit incluse dans toutes les requêtes API au serveur dans un corps de requête qui ressemble à ceci :

{
  "key": "YOUR API KEY GOES HERE"
}

Vous devez remplacer YOUR API KEY GOES HERE par votre clé API personnelle.

Détecteur d'image IA

Détecter (processus en 3 étapes)

Le workflow de détection d'image IA consiste en les étapes suivantes :

  • Obtenir une URL de téléchargement pré-signée
  • Télécharger l'image
  • Soumettre l'image pour détection

1. Obtenir une URL de téléchargement pré-signée

Commencez par demander une URL pré-signée à l'API. Cette URL vous permet de télécharger en toute sécurité votre fichier image sur le serveur de stockage.

Formats de fichiers supportés

JPG, JPEG, PNG, WebP, JFIF, HEIC, HEIF, AVIF, BMP, TIFF, TIF

Note importante

Il est nécessaire de supprimer les espaces du nom de fichier image lors de la demande d'une URL pré-signée.

GET https://detect-image.truthscan.com/get-presigned-url?file_name=example.jpg

Exemple de requête

curl -X GET 'https://detect-image.truthscan.com/get-presigned-url?file_name=example.jpg' \
--header 'apikey: YOUR API KEY GOES HERE'

Exemple de réponse

{
  "status": "success",
  "presigned_url": "https://image-presigned-upload.ai-assets-cdn.com?file_name=581d47c7-3ef4-42af-88d9-6dab6bf69389_20250611-121955_example.jpg?...",
  "file_path": "uploads/example.jpg"
}

2. Télécharger l'image

Utilisez la 'presigned_url' fournie pour télécharger votre image via une requête PUT. Assurez-vous que le type de contenu correct est défini selon votre format d'image.

Note importante

Il est nécessaire de supprimer les espaces du nom de fichier image lors du téléchargement de l'image.

Exemple de requête

curl -X PUT 'https://image-presigned-upload.ai-assets-cdn.com?file_name=581d47c7-3ef4-42af-88d9-6dab6bf69389_20250611-121955_example.jpg?...' \
  --header 'Content-Type: image/<FILE_FORMAT - jpeg, jpg, png, webp, heic, heif, avif, bmp, tiff, tif>' \
  --header 'x-amz-acl: private' \
  --data-binary '@example.jpg' # Attachment

Limites de taille de fichier

  • Taille minimale de fichier : 1KB
  • Taille maximale de fichier : 10MB

Assurez-vous que le format de fichier reste cohérent pendant le processus de téléchargement. Un téléchargement réussi renverra un code de statut 200.

3. Soumettre l'image pour détection IA

Après le téléchargement, soumettez l'image pour détection IA en référençant le 'file_path' de l'étape précédente.

POST https://detect-image.truthscan.com/detect

Exemple de requête

curl -X 'POST' \
  'https://detect-image.truthscan.com/detect' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "key": "YOUR-API-KEY-GOES-HERE",
  "url": "https://ai-image-detector-prod.nyc3.digitaloceanspaces.com/<FILE_PATH>",
  "generate_preview": false,
  "generate_analysis_details": true
}'

Le 'FILE_PATH' fait référence au chemin obtenu de la réponse dans l'étape initiale, 'Obtenir une URL de téléchargement pré-signée'.

Paramètres optionnels

  • generate_preview: Définir à 'true' pour générer une URL d'aperçu pour l'image (par défaut : 'false')
  • document_type: Type de document (par défaut : 'Image')
  • email: Adresse email pour traitement
  • generate_analysis_details: Définir à 'true' pour activer les résultats d'analyse IA approfondie (par défaut : 'false'). Quand activé, la réponse /query inclura les champs analysis_results_status et analysis_results.

Exemple de réponse

{
    "id": "77565038-9e3d-4e6a-8c80-e20785be5ee9",
    "status": "pending"
}

La réponse inclut un ID d'image unique pour suivre le statut de détection.

Interroger

Cet endpoint accepte un id d'image renvoyé par la requête /detect. Et renvoie le statut de la soumission d'image ainsi que le résultat complet de l'opération de détection IA, incluant métadonnées, OCR et analyse modèle ML.

POST https://detect-image.truthscan.com/query

Exemple de requête

curl -X 'POST' \
  'https://detect-image.truthscan.com/query' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "id": "IMAGE-ID-GOES-HERE"
}'

Exemple de réponse

{
    "id": "00fee5ff-a55b-42fb-b7c7-d14f05ae0769",
    "status": "done",
    "result": 90.2371538185235,
    "result_details": {
        "is_valid": true,
        "detection_step": 3,
        "final_result": "AI Generated",
        "metadata": [
            "No Information Detected for Real/AI",
            "Could not find anything from ExifTool and Pillow metadata"
        ],
        "metadata_basic_source": "null",
        "ocr": [
            "OCR did not detect AI",
            0.0
        ],
        "ml_model": [
            "AI Generated",
            90.2371538185235
        ],
        "confidence": 90.2371538185235,
        "heatmap_status": "ready",
        "heatmap_url": "https://ai-image-detector-prod.nyc3.digitaloceanspaces.com/uploads/....",
        "analysis_results_status": "pending",
        "analysis_results": null
    },
    "preview_url": "https://ai-image-detector-prod.nyc3.digitaloceanspaces.com/previews/..."
}

Interprétation des résultats

  • result: Score de 1-100 indiquant la probabilité que l'image soit générée par l'IA. Scores plus élevés = probabilité IA plus grande.
  • final_result: La détermination globale (par ex., 'AI Generated', 'Real', 'Digitally Edited', 'AI Edited')
  • confidence: Le score de confiance de la détection
  • detection_step: Indique l'étape à laquelle la détection a été complétée. 1 = Seulement métadonnées renvoyées, 2 = Renvoie métadonnées et OCR, 3 = Renvoie métadonnées, OCR et résultats modèle ML (le plus complet)
  • metadata: Informations extraites des métadonnées d'image en utilisant ExifTool et Pillow
  • ocr: Résultats de l'analyse de reconnaissance optique de caractères pour détection de filigrane
  • ml_model: Résultats du modèle d'apprentissage automatique (classificateur basé sur ConvNeXt)
  • preview_url: URL vers l'image d'aperçu (si generate_preview était défini à true)
  • heatmap_status: Statut de génération heatmap ('pending' ou 'ready'). Note : La génération heatmap est asynchrone. Initialement, heatmap_status sera 'pending' et heatmap_url peut être absent ou null. Lorsque prêt, heatmap_status devient 'ready' et heatmap_url est rempli.
  • heatmap_url: URL vers l'image heatmap, disponible lorsque heatmap_status est 'ready'. Disponible uniquement pour images avec score >= 20.
  • analysis_results_status: Statut de l'analyse IA approfondie ('pending', 'done', 'skipped' ou null). Si 'pending', continuez d'interroger /query — l'analyse est encore en cours. Si 'done', le champ analysis_results contient l'analyse terminée. Si 'skipped', null ou absent, l'analyse approfondie n'est pas disponible pour cette image.
  • analysis_results: Résultats de l'analyse IA approfondie (disponible lorsque analysis_results_status est 'done'). Contient : agreement (strong/moderate/weak/disagreement), confidence (0-100), keyIndicators (anomalies visuelles détectées), detailedReasoning (explication), visualPatterns (motifs stylistiques), recommendations (éléments actionnables).

Note importante

La génération heatmap est asynchrone. Initialement, heatmap_status sera 'pending' et heatmap_url peut être absent ou null. Lorsque prêt, heatmap_status devient 'ready' et heatmap_url est rempli. Les heatmaps sont générées uniquement pour images avec score >= 20.

Ici, "result": 90.24 indique une probabilité élevée que l'image ait été générée par l'IA. Le "final_result": "AI Generated" fournit une détermination claire, et "confidence": 90.24 indique une confiance élevée dans ce résultat. Le champ "detection_step": 3 indique que l'analyse complète (métadonnées, OCR et modèle ML) a été complétée. Le "heatmap_status": "ready" et "heatmap_url" fournissent accès à la heatmap visuelle montrant les zones détectées comme générées par l'IA.

Résultats d'analyse (analyse approfondie asynchrone)

Lorsque vous définissez 'generate_analysis_details' à 'true' dans la requête /detect, TruthScan exécute une analyse IA approfondie en arrière-plan après la détection initiale. La réponse initiale à la requête /query renverra un statut 'done' avec vos résultats de détection prêts à l'emploi, mais le champ analysis_results_status peut encore être 'pending'. Vous pouvez utiliser les résultats initiaux immédiatement et éventuellement interroger pour que l'analyse approfondie se termine.

1. Résultat initial établi (analyse encore en attente)

Lorsque vous soumettez avec 'generate_analysis_details': true et interrogez avec un statut 'done', les résultats de détection principaux (result, final_result, confidence) sont prêts. Cependant, analysis_results_status peut être 'pending' — cela signifie que l'analyse IA approfondie est encore en cours en arrière-plan.

{
    "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,
        "analysis_results_status": "pending",
        "analysis_results": null
    }
}

Que faire

Vous pouvez utiliser les résultats de détection initiaux (result, final_result, confidence, metadata, ocr, ml_model) immédiatement. Si vous avez aussi besoin de l'analyse approfondie, continuez d'interroger l'endpoint /query avec le même ID d'image jusqu'à ce que analysis_results_status passe de 'pending'.

2. Continuez à interroger pour les résultats d'analyse

Continuez d'appeler l'endpoint /query avec le même ID d'image. Vérifiez le champ analysis_results_status à chaque réponse. Lorsqu'il passe de 'pending' à 'done', l'objet analysis_results sera rempli.

curl -X 'POST' \
  'https://detect-image.truthscan.com/query' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "id": "00fee5ff-a55b-42fb-b7c7-d14f05ae0769"
}'

3. Analyse terminée — Réponse complète

Une fois que analysis_results_status est 'done', l'objet analysis_results contient l'analyse IA approfondie complète avec niveau d'accord, confiance, indicateurs clés, raisonnement détaillé, motifs visuels et recommandations.

{
    "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,
        "heatmap_status": "ready",
        "heatmap_url": "https://ai-image-detector-prod.nyc3.digitaloceanspaces.com/uploads/....",
        "analysis_results_status": "done",
        "analysis_results": {
            "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/..."
}

Quand l'analyse n'est pas disponible

Si analysis_results_status est 'skipped', null ou absent, l'analyse approfondie ne sera pas produite pour cette image. Cela se produit lorsque 'generate_analysis_details' n'a pas été défini à 'true' dans la requête /detect, ou pour certains types d'images et scénarios de détection. Vous devez traiter les résultats de détection initiaux comme définitifs.

{
    "status": "done",
    "result": 12.5,
    "result_details": {
        "analysis_results_status": "skipped",
        "analysis_results": null
    }
}

Champs des résultats d'analyse

  • analysis_results_status: 'pending' = encore en cours, 'done' = résultats disponibles, 'skipped' / null / absent = non disponible pour cette image
  • analysis_results.agreement: À quel point l'analyse approfondie est d'accord avec la détection initiale (strong / moderate / weak / disagreement)
  • analysis_results.confidence: Score de confiance de l'analyse approfondie (0-100)
  • analysis_results.keyIndicators: Tableau des anomalies visuelles spécifiques détectées dans l'image
  • analysis_results.detailedReasoning: Explication en 2-4 phrases de pourquoi l'image a été classée ainsi
  • analysis_results.visualPatterns: Tableau des motifs stylistiques trouvés (ex : motifs de bruit typiques des modèles de diffusion)
  • analysis_results.recommendations: Tableau des recommandations actionnables pour vérification supplémentaire

Vérifier les crédits utilisateur

Cet endpoint accepte l'apikey de l'utilisateur via l'en-tête. Et renvoie les détails de crédit de l'utilisateur.

GET https://detect-image.truthscan.com/check-user-credits

Exemple de requête

curl -X 'GET' \
  'https://detect-image.truthscan.com/check-user-credits' \
  -H 'apikey: YOUR API KEY GOES HERE' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json'

Exemple de réponse

{
    "baseCredits": 10000,
    "boostCredits": 1000,
    "credits": 11000
}

Vérification de santé

Cet endpoint vous permet de vérifier le statut du service de détection d'image IA.

GET https://detect-image.truthscan.com/health

Exemple de requête

curl -X 'GET' \
  'https://detect-image.truthscan.com/health' \
  -H 'accept: application/json'

Exemple de réponse

{
    "status": "healthy",
    "timestamp": "2024-01-15T10:30:00Z"
}

Une réponse "healthy" indique que le service fonctionne normalement.

Erreurs

La plupart des erreurs proviendront de paramètres incorrects envoyés à l'API. Vérifiez doublement les paramètres de chaque appel API pour vous assurer qu'il est correctement formaté, et essayez d'exécuter le code d'exemple fourni.

Les codes d'erreur génériques que nous utilisons sont conformes à la norme REST :

Code d'erreurSignification
400Requête invalide -- Votre requête est invalide.
403Interdit -- La clé API est invalide, ou il n'y a pas suffisamment de crédits pour le traitement d'image.
404Non trouvé -- La ressource spécifiée n'existe pas.
405Méthode non autorisée -- Vous avez essayé d'accéder à une ressource avec une méthode invalide.
406Non acceptable -- Vous avez demandé un format qui n'est pas JSON.
410Disparu -- La ressource à cet endpoint a été supprimée.
422Corps de requête invalide -- Votre corps de requête est formaté incorrectement ou invalide ou a des paramètres manquants.
429Trop de requêtes -- Vous envoyez trop de requêtes ! Ralentissez !
500Erreur serveur interne -- Nous avons eu un problème avec notre serveur. Réessayez plus tard.
503Service indisponible -- Nous sommes temporairement hors ligne pour maintenance. Veuillez réessayer plus tard.

Problèmes courants et solutions

Problèmes d'authentification

"Échec de vérification utilisateur" (403)

Cause: Clé API invalide ou expirée

Solution:

  1. Vérifiez que votre clé API est correcte
  2. Vérifiez si votre clé API est active dans votre compte
  3. Essayez de régénérer votre clé API

"Pas assez de crédits" (403)

Cause: Crédits insuffisants pour traitement d'image

Solution:

  1. Vérifiez vos crédits restants en utilisant /check-user-credits
  2. Achetez des crédits supplémentaires si nécessaire
  3. Optimisez la taille de l'image avant téléchargement pour consommer moins de crédits

Problèmes de validation d'entrée

"Format de fichier non supporté" (400)

Cause: Format d'image non supporté ou invalide soumis

Solution:

  1. Vérifiez que le format d'image est supporté (JPG, JPEG, PNG, WebP, JFIF, HEIC, HEIF, AVIF, BMP, TIFF, TIF)
  2. Assurez-vous que le fichier n'est pas corrompu
  3. Vérifiez l'en-tête Content-Type lors du téléchargement

"Fichier trop volumineux" (400)

Cause: La taille du fichier dépasse la limite de 10MB

Solution:

  1. Redimensionnez ou compressez l'image à moins de 10MB
  2. Vérifiez la taille du fichier avant le téléchargement
  3. Utilisez des formats plus efficaces comme WebP lorsque possible

Problèmes de traitement

"Timeout de requête" (WebSocket)

Cause: Le traitement d'image a pris trop de temps

Solution:

  1. Essayez avec une image plus petite ou moins complexe
  2. Vérifiez si le service connaît une charge élevée
  3. Réessayez la requête

Statut document "failed"

Cause: Le traitement a échoué pour diverses raisons

Solution:

  1. Vérifiez si l'image répond aux exigences minimales (1KB - 10MB)
  2. Vérifiez que l'image est dans un format supporté
  3. Vérifiez que le téléchargement s'est terminé avec succès avant de soumettre pour détection
  4. Contactez le support si le problème persiste

Problèmes de téléchargement

"Échec du téléchargement d'image" (403/400)

Cause: URL pré-signée invalide ou expirée, ou problèmes avec le serveur de stockage

Solution:

  1. Assurez-vous d'utiliser l'URL pré-signée immédiatement après l'avoir reçue (peut expirer)
  2. Vérifiez que l'en-tête Content-Type est correct pour le format d'image
  3. Supprimez les espaces du nom de fichier avant le téléchargement
  4. Essayez de générer une nouvelle URL pré-signée si la actuelle a expiré

"URL pré-signée invalide" (400)

Cause: Nom de fichier avec espaces ou URL pré-signée expirée/corrompue

Solution:

  1. Supprimez tous les espaces du nom de fichier avant de demander une URL pré-signée
  2. Utilisez uniquement des caractères alphanumériques, tirets et underscores dans le nom de fichier
  3. Générez une nouvelle URL pré-signée si nécessaire

Besoin d'aide ?

Pour plus d'informations sur l'utilisation de notre API ou pour le support technique, veuillez nous contacter.

Questions fréquemment posées sur l'API

Trouvez des réponses aux questions les plus courantes sur notre API de détection d'image IA.