AI-afbeeldingsdetectie-API
Volledige documentatie voor het integreren van de AI-afbeeldingsdetectie-API van TruthScan in uw applicaties.
Probeer het zonder code via ons FastAPI-eindpunt: https://detect-image.truthscan.com/docs
Authenticatie
TruthScan gebruikt API-sleutels voor toegang tot de API. U vindt uw API-sleutel bovenaan de pagina in ons ontwikkelaarsportaal.
TruthScan verwacht dat de API-sleutel in alle API-verzoeken naar de server wordt opgenomen in een request body die er als volgt uitziet:
{
"key": "YOUR API KEY GOES HERE"
}Vervang YOUR API KEY GOES HERE door uw persoonlijke API-sleutel.
AI-afbeeldingsdetector
Detecteren (3 stappen)
De AI-afbeeldingsdetectieworkflow bestaat uit de volgende stappen:
- Vraag een vooraf ondertekende upload-URL aan
- Upload de afbeelding
- Dien de afbeelding in voor detectie
1. Vraag een vooraf ondertekende upload-URL aan
Vraag eerst een vooraf ondertekende URL aan bij de API. Met deze URL upload u uw afbeeldingsbestand veilig naar de opslagserver.
Ondersteunde bestandsformaten
JPG, JPEG, PNG, WebP, JFIF, HEIC, HEIF, AVIF, BMP, TIFF, TIF
Belangrijke opmerking
Verwijder spaties uit de afbeeldingsbestandsnaam bij het aanvragen van een vooraf ondertekende URL.
GET https://detect-image.truthscan.com/get-presigned-url?file_name=example.jpgVoorbeeldverzoek
curl -X GET 'https://detect-image.truthscan.com/get-presigned-url?file_name=example.jpg' \
--header 'apikey: YOUR API KEY GOES HERE'Voorbeeldantwoord
{
"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. Upload de afbeelding
Gebruik de opgegeven 'presigned_url' om uw afbeelding via een PUT-verzoek te uploaden. Zorg dat het juiste content type is ingesteld volgens uw afbeeldingsformaat.
Belangrijke opmerking
Verwijder spaties uit de afbeeldingsbestandsnaam bij het uploaden.
Voorbeeldverzoek
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' # AttachmentBestandsgroottelimieten
- Minimale bestandsgrootte: 1 KB
- Maximale bestandsgrootte: 10 MB
Zorg dat het bestandsformaat tijdens het uploaden gelijk blijft. Een geslaagde upload geeft statuscode 200 terug.
3. Dien afbeelding in voor AI-detectie
Na het uploaden dient u de afbeelding in voor AI-detectie door te verwijzen naar 'file_path' uit de vorige stap.
POST https://detect-image.truthscan.com/detectVoorbeeldverzoek
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
}''FILE_PATH' verwijst naar het pad uit het antwoord in de eerste stap, 'Vraag een vooraf ondertekende upload-URL aan'.
Optionele parameters
generate_preview: Zet op 'true' om een preview-URL voor de afbeelding te genereren (standaard: 'false')document_type: Documenttype (standaard: 'Image')email: E-mailadres voor verwerkinggenerate_analysis_details: Zet op 'true' voor diepe AI-analyseresultaten (standaard: 'false'). Indien ingeschakeld bevat het query-antwoord analysis_results_status en analysis_results.
Voorbeeldantwoord
{
"id": "77565038-9e3d-4e6a-8c80-e20785be5ee9",
"status": "pending"
}Het antwoord bevat een unieke afbeeldings-ID om de detectiestatus te volgen.
Query
Dit eindpunt accepteert een image id uit het /detect-verzoek en geeft de status van de indiening en het volledige resultaat van de AI-detectie, inclusief metadata, OCR en ML-modelanalyse.
POST https://detect-image.truthscan.com/queryVoorbeeldverzoek
curl -X 'POST' \
'https://detect-image.truthscan.com/query' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"id": "IMAGE-ID-GOES-HERE"
}'Voorbeeldantwoord
{
"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/..."
}Resultaat uitleggen
result: Score 1–100: waarschijnlijkheid dat de afbeelding met AI is gegenereerd. Hogere scores = grotere AI-kans.final_result: De algemene uitspraak (bijv. 'AI Generated', 'Real', 'Digitally Edited', 'AI Edited')confidence: Het betrouwbaarheidspercentage van de detectiedetection_step: Geeft aan in welke fase detectie klaar was. 1 = alleen metadata, 2 = metadata en OCR, 3 = metadata, OCR en ML (meest volledig)metadata: Informatie uit afbeeldingsmetadata via ExifTool en Pillowocr: Resultaten van OCR voor watermerkdetectieml_model: Resultaten van het machinelearningmodelpreview_url: URL naar de preview-afbeelding (als generate_preview true was)heatmap_status: Status van heatmapgeneratie ('pending' of 'ready'). Heatmaps zijn asynchroon: eerst vaak heatmap_status 'pending' en heatmap_url leeg/null; daarna 'ready' en heatmap_url gevuld.heatmap_url: URL naar de heatmap wanneer heatmap_status 'ready' is. Alleen voor afbeeldingen met score >= 20.analysis_results_status: Status van diepe AI-analyse ('pending', 'done', 'skipped' of null). Bij 'pending' blijft u /query pollen. Bij 'done' staat de analyse in analysis_results. Bij 'skipped', null of afwezig is geen diepe analyse beschikbaar.analysis_results: Diepe AI-analyseresultaten (als analysis_results_status 'done' is): agreement (strong/moderate/weak/disagreement), confidence (0–100), keyIndicators, detailedReasoning, visualPatterns en recommendations.
Belangrijke opmerking
Heatmapgeneratie is asynchroon. Eerst is heatmap_status vaak 'pending' en heatmap_url leeg/null. Als het klaar is, wordt heatmap_status 'ready' en heatmap_url gevuld. Heatmaps alleen voor afbeeldingen met score >= 20.
Hier betekent "result": 90,24 een hoge kans op AI-generatie. "final_result": "AI Generated" geeft de uitspraak, "confidence": 90,24 het vertrouwen. "detection_step": 3 betekent volledige analyse (metadata, OCR, ML). "heatmap_status": "ready" en "heatmap_url" geven toegang tot de visuele heatmap.
Analyseresultaten (asynchrone diepe analyse)
Als u 'generate_analysis_details' op 'true' zet in het /detect-verzoek, draait TruthScan na de eerste detectie een diepe AI-analyse op de achtergrond. Het eerste query-antwoord kan status 'done' hebben met uw detectieresultaten, terwijl analysis_results_status nog 'pending' kan zijn. U kunt de eerste resultaten direct gebruiken en optioneel blijven pollen voor de diepe analyse.
1. Eerste resultaat klaar (analyse nog bezig)
Bij indienen met 'generate_analysis_details': true en eerste query met status 'done' zijn de kernresultaten (result, final_result, confidence) klaar. analysis_results_status kan nog 'pending' zijn — de diepe AI-analyse loopt dan nog.
{
"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
}
}Wat te doen
U kunt de eerste detectieresultaten (result, final_result, confidence, metadata, ocr, ml_model) direct gebruiken. Voor de diepe analyse blijft u /query pollen met dezelfde image ID tot analysis_results_status niet meer 'pending' is.
2. Blijf pollen voor analyseresultaten
Roep /query opnieuw aan met dezelfde image ID. Controleer analysis_results_status. Als die van 'pending' naar 'done' gaat, wordt analysis_results gevuld.
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 volledig — volledig antwoord
Als analysis_results_status 'done' is, bevat analysis_results de volledige diepe analyse met overeenstemming, betrouwbaarheid, indicatoren, uitleg, visuele patronen en aanbevelingen.
{
"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/..."
}Wanneer analyse niet beschikbaar is
Als analysis_results_status 'skipped', null of ontbreekt, wordt geen diepe analyse gemaakt. Dat gebeurt als 'generate_analysis_details' niet 'true' was in /detect, of bij bepaalde afbeeldingen/scenario's. Beschouw de eerste detectieresultaten dan als definitief.
{
"status": "done",
"result": 12.5,
"result_details": {
"analysis_results_status": "skipped",
"analysis_results": null
}
}Velden van analyseresultaten
analysis_results_status: 'pending' = nog bezig, 'done' = resultaten klaar, 'skipped' / null / afwezig = niet beschikbaar voor deze afbeeldinganalysis_results.agreement: Hoe sterk de diepe analyse overeenkomt met de eerste detectie (strong / moderate / weak / disagreement)analysis_results.confidence: Betrouwbaarheidsscore van de diepe analyse (0–100)analysis_results.keyIndicators: Lijst van gedetecteerde visuele afwijkingenanalysis_results.detailedReasoning: Korte uitleg (2–4 zinnen) waarom de afbeelding zo is ingedeeldanalysis_results.visualPatterns: Stilistische patronen (bijv. ruis zoals bij diffusiemodellen)analysis_results.recommendations: Concrete aanbevelingen voor verdere verificatie
Controleer gebruikerscredits
Dit eindpunt accepteert de apikey van de gebruiker via de header en geeft de creditdetails terug.
GET https://detect-image.truthscan.com/check-user-creditsVoorbeeldverzoek
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'Voorbeeldantwoord
{
"baseCredits": 10000,
"boostCredits": 1000,
"credits": 11000
}Health check
Met dit eindpunt controleert u de status van de AI-afbeeldingsdetectieservice.
GET https://detect-image.truthscan.com/healthVoorbeeldverzoek
curl -X 'GET' \
'https://detect-image.truthscan.com/health' \
-H 'accept: application/json'Voorbeeldantwoord
{
"status": "healthy",
"timestamp": "2024-01-15T10:30:00Z"
}Een "healthy"-antwoord betekent dat de service normaal werkt.
Fouten
De meeste fouten komen door onjuiste parameters. Controleer elke API-aanroep en probeer de voorbeeldcode.
De algemene foutcodes volgen de REST-standaard:
| Foutcode | Betekenis |
|---|---|
| 400 | Bad Request – Uw verzoek is ongeldig. |
| 403 | Forbidden – De API-sleutel is ongeldig of er zijn onvoldoende credits voor beeldverwerking. |
| 404 | Not Found – De opgegeven resource bestaat niet. |
| 405 | Method Not Allowed – U probeerde een resource met een ongeldige methode te benaderen. |
| 406 | Not Acceptable – U vroeg een formaat dat geen JSON is. |
| 410 | Gone – De resource op dit eindpunt is verwijderd. |
| 422 | Invalid Request Body – Uw request body is onjuist of mist parameters. |
| 429 | Too Many Requests – U stuurt te veel verzoeken. Vertraag het tempo. |
| 500 | Internal Server Error – Er ging iets mis op onze server. Probeer later opnieuw. |
| 503 | Service Unavailable – We zijn tijdelijk offline voor onderhoud. Probeer later opnieuw. |
Veelvoorkomende problemen en oplossingen
Authenticatieproblemen
"User verification failed" (403)
Oorzaak: Ongeldige of verlopen API-sleutel
Oplossing:
- Controleer of uw API-sleutel klopt
- Controleer of uw API-sleutel actief is in uw account
- Genereer zo nodig een nieuwe API-sleutel
"Not enough credits" (403)
Oorzaak: Onvoldoende credits voor beeldverwerking
Oplossing:
- Controleer uw resterende credits via /check-user-credits
- Koop indien nodig extra credits
- Optimaliseer de afbeeldingsgrootte vóór upload om minder credits te verbruiken
Validatieproblemen bij invoer
"Unsupported file format" (400)
Oorzaak: Niet-ondersteund of ongeldig afbeeldingsformaat
Oplossing:
- Controleer of het formaat wordt ondersteund (JPG, JPEG, PNG, WebP, JFIF, HEIC, HEIF, AVIF, BMP, TIFF, TIF)
- Controleer of het bestand niet beschadigd is
- Controleer de Content-Type-header bij uploaden
"File too large" (400)
Oorzaak: Bestandsgrootte overschrijdt de limiet van 10 MB
Oplossing:
- Verklein of comprimeer de afbeelding tot onder 10 MB
- Controleer de bestandsgrootte vóór upload
- Gebruik waar mogelijk efficiëntere formaten zoals WebP
Verwerkingsproblemen
"Request timeout" (WebSocket)
Oorzaak: Beeldverwerking duurde te lang
Oplossing:
- Probeer een kleiner of minder complex beeld
- Controleer of de service hoge belasting heeft
- Probeer het verzoek opnieuw
Documentstatus "failed"
Oorzaak: Verwerking om diverse redenen mislukt
Oplossing:
- Controleer of de afbeelding aan de minimumvereisten voldoet (1 KB – 10 MB)
- Controleer of het formaat wordt ondersteund
- Controleer of de upload succesvol was vóór indienen voor detectie
- Neem contact op met support als het probleem aanhoudt
Uploadproblemen
"Image upload failed" (403/400)
Oorzaak: Ongeldige of verlopen vooraf ondertekende URL, of problemen met de opslagserver
Oplossing:
- Gebruik de vooraf ondertekende URL direct na ontvangst (kan verlopen)
- Controleer of de Content-Type-header klopt voor het afbeeldingsformaat
- Verwijder spaties uit de bestandsnaam vóór upload
- Genereer een nieuwe vooraf ondertekende URL als de huidige is verlopen
"Invalid pre-signed URL" (400)
Oorzaak: Bestandsnaam met spaties of verlopen/beschadigde vooraf ondertekende URL
Oplossing:
- Verwijder alle spaties uit de bestandsnaam vóór het aanvragen van de URL
- Gebruik alleen alfanumerieke tekens, koppeltekens en underscores in de bestandsnaam
- Genereer zo nodig een nieuwe vooraf ondertekende URL
Hulp nodig?
Voor meer informatie over onze API of technische ondersteuning kunt u contact met ons opnemen.
Veelgestelde vragen over de API
Antwoorden op de meest gestelde vragen over onze AI-afbeeldingsdetectie-API.