Deux endpoints, un Bearer token, des réponses JSON. Tout ce qu'il vous faut pour détecter les textes et images générés par IA depuis votre propre backend.
URL de base
Chaque requête doit transmettre votre clé API sous forme de Bearer token. Il n'existe aucun autre mode d'authentification ni aucun accès non authentifié.
Authorization: Bearer YOUR_API_KEYGardez la clé côté serveur. Elle consomme votre solde de crédits : tout ce qui l'envoie vers un navigateur ou une application mobile ouvre une brèche dans votre facturation. Faites plutôt passer l'appel par votre propre backend.
L'utilisation est décomptée en crédits. Les crédits sont débités avant l'exécution de la détection. Avec API Business, les appels API et MCP puisent d'abord dans les 3 000 000 de crédits mensuels de la formule, puis dans votre solde de crédits.
| Endpoint | Coût | Avec 1 000 crédits gratuits |
|---|---|---|
| /detect/text | 1 crédit par mot | ~1 000 mots |
| /detect/image | 300 crédits par image | 3 images |
| /detect/video | 300 crédits par image analysée (16 à 50 par clip) | — |
| /detect/video | 300 crédits par image isolée | 3 images |
Les crédits à l'unité n'expirent jamais et fonctionnent sur le site, l'API et le serveur MCP. API Business coûte 299 $/mois avec 3 000 000 de crédits API et MCP chaque mois, plus des rapports PDF en marque blanche et un support prioritaire. Pro (14,99 $/mois) est réservé au site et n'inclut pas l'accès à l'API. Chaque clé API est limitée à 120 requêtes par minute (429 avec Retry-After au-delà) : traitez donc les lots de manière séquentielle ou avec une concurrence modérée. Enterprise propose des limites sur mesure et un SLA. Consultez les tarifs pour la liste complète des formules.
/api/v1/detect/textDétecte les textes générés par ChatGPT, GPT-4, Claude, Gemini et d'autres modèles de langage. Renvoie un verdict pour l'ensemble du document et un score pour chaque phrase.
| Champ | Type | Remarques |
|---|---|---|
| content | string | Obligatoire. Le texte à analyser. |
| text | string | Accepté comme alias de content. |
| mode | string | Facultatif. "depth" renvoie un vrai score pour chaque phrase (pour la mise en surbrillance). À omettre si seul le score du document vous intéresse. |
| model | string | Facultatif. Par défaut "tropa-3". Passez "tropa-1" pour rester sur une génération antérieure le temps de recalibrer vos seuils. "tropa-2" est toujours accepté et servi par tropa-3. Même coût en crédits. |
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). En cas de uncertain, confiez la relecture à une personne plutôt que de signaler automatiquement.mode: "depth".possibly_humanized, lorsque le modèle attribue le signal IA principalement à un post-traitement par un humaniseur. Son absence ne signifie rien : le signal est précis mais ne se déclenche que sur ~40 % des textes humanisés, n'affichez donc jamais un état « non humanisé ».Coût : 1 crédit par mot. Consultez le guide de l'API de détection de texte pour des modèles d'intégration et des exemples concrets.
/api/v1/detect/imageDétecte les images générées par IA ou manipulées de façon synthétique. Lorsque le fichier contient encore des Content Credentials C2PA, le résultat est vérifié cryptographiquement plutôt qu'estimé.
Envoyez l'image en multipart/form-data avec le nom de champ 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, l'image contient un Content Credential C2PA dont la signature est valide et qui déclare le fichier comme généré par IA. C'est une certitude, pas un score, et cela force isAI: true quel que soit le modèle d'analyse des pixels. Lorsqu'il vaut false, le verdict provient de l'analyse des pixels par le modèle.null si le fichier n'en contient pas. issuer est l'émetteur du certificat X.509 et le seul champ impossible à falsifier ; vendor et generator en sont déduits, ainsi que du manifeste (OpenAI / ChatGPT, Google, Microsoft, Adobe, Leica, …). signatureValid est la vérification cryptographique ; trusted exige en plus que l'émetteur figure sur une liste de confiance C2PA et vaut actuellement toujours false. sourceType vaut trainedAlgorithmicMedia pour un contenu IA et digitalCapture pour une photo d'appareil signée : un manifeste valide avec isAI: false indique que l'image est authentique.confidence : high / medium / low / none.ai_verified, c2pa_signed (manifeste valide, IA ou non), c2pa_invalid (signature invalide), c2pa_marker (marqueurs sans manifeste lisible), high_ai_confidence, synthetic_artifacts, human_generated.Coût : 300 crédits par image. Consultez le guide de l'API de détection d'images pour des modèles de modération et des seuils.
/api/v1/detect/videoDétecte les vidéos générées par IA. Envoyez un clip entier pour l'évaluer sur des images échantillonnées, ou une image isolée tirée d'une vidéo (miniature, capture d'écran) pour n'évaluer que celle-ci avec le modèle vidéo.
Deux façons d'envoyer le fichier :
multipart/form-data avec le nom de champ file, jusqu'à 4 Moapplication/json avec {"url": "https://…"} pointant vers un fichier accessible publiquement, jusqu'à 50 Mo. C'est la méthode à utiliser pour la plupart des clips réels.detailed.mode le renvoie.# 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 pour un clip, frame pour une image isolée.Coût : 300 crédits par image analysée. Un clip est échantillonné à 10 images par minute, au moins 16 et au plus 50 : il coûte donc de 4 800 à 15 000 crédits. Le minimum est débité d'avance, le reste une fois le nombre d'images connu ; creditsCharged dans la réponse indique ce qu'a coûté l'appel. Une image isolée coûte 300 crédits.
La détection est aussi disponible via le Model Context Protocol : un assistant IA peut ainsi vérifier lui-même textes et images, sans que vous ayez à copier-coller des résultats. Rien à installer : le serveur est hébergé et vous vous connectez à une URL.
https://www.wasitaigenerated.com/api/mcpLes clients compatibles OAuth récupèrent tout ce dont ils ont besoin depuis l'endpoint lui-même et ouvrent un navigateur pour que vous approuviez la connexion. Les clients qui utilisent un en-tête statique peuvent passer par une clé API :
claude mcp add --transport http wasitaigenerated \
https://www.wasitaigenerated.com/api/mcp \
--header "Authorization: Bearer $WAI_API_KEY"detect_ai_text : évalue un passage, avec une analyse phrase par phrase. Coûte 1 crédit par mot.detect_ai_image : vérifie une image par URL ou en base64, y compris les Content Credentials C2PA. Coûte 300 crédits.get_credit_balance : lit votre solde restant. Gratuit.Les appels effectués par un assistant consomment vos crédits exactement comme l'API REST. Un agent chargé de vérifier un long document dépensera un crédit par mot : mieux vaut lui indiquer le budget.
En cas d'échec, la réponse contient un corps JSON avec un champ error et souvent un message lisible.
{
"error": "Insufficient credits",
"message": "You need 300 credits for image detection. You have 120 credits remaining.",
"required": 300,
"available": 120
}Sur les gros volumes de données, la détection prend du temps. Mettez l'appel en file d'attente et mettez à jour l'enregistrement à son retour, plutôt que de bloquer une requête côté utilisateur. Prévoyez un timeout client généreux : 60s pour le texte et la vidéo, 120s pour les images.
La détection est probabiliste. Un texte IA fortement retravaillé se lit comme un texte humain, et certains écrits humains sont réellement stéréotypés. Transmettez les éléments signalés à une personne, montrez-lui l'analyse phrase par phrase et laissez-la décider. Sanctionner automatiquement sur la base d'un indice de confiance génère des réclamations indéfendables.
Les captures d'écran et les images réencodées perdent du signal, et une capture d'écran supprime entièrement les Content Credentials : c'est pourquoi une capture manifestement synthétique peut revenir avec verified: false. Envoyez le fichier d'origine quand vous l'avez.
Un corps très long renvoie une 413. Découpez-le en sections de quelques milliers de mots et agrégez les résultats. Un texte long est plus fiable que quelques phrases : les entrées très courtes ne contiennent tout simplement pas assez de signal.
Les crédits sont débités à chaque appel : une intégration très sollicitée peut se retrouver à court en plein lot. Interceptez la 402, arrêtez le lot et alertez quelqu'un ; la réponse indique précisément combien il vous manquait.
Une question sur l'intégration, les tarifs au volume, un SLA, ou un endpoint dont vous avez besoin et qui n'existe pas encore ? Écrivez-nous. Les demandes de fonctionnalités issues d'intégrations réelles sont prioritaires.