API di Rilevamento Immagini AI
Documentazione completa per integrare l'API di rilevamento immagini AI di TruthScan nelle tue applicazioni.
Provalo senza codice visitando il nostro endpoint FastAPI: https://detect-image.truthscan.com/docs
Autenticazione
TruthScan usa chiavi API per consentire l'accesso all'API. Puoi ottenere la tua chiave API al in alto nella pagina del nostro portale sviluppatori.
TruthScan si aspetta che la chiave API sia inclusa in tutte le richieste API al server in un corpo richiesta che assomiglia al seguente:
{
"key": "YOUR API KEY GOES HERE"
}Devi sostituire IL TUO CHIAVE API VA QUI con la tua chiave API personale.
Rilevatore di Immagini AI
Rileva (Processo in 3 Passaggi)
Il flusso di lavoro di Rilevamento Immagini AI consiste nei seguenti passaggi:
- Ottieni un URL di Upload Pre-signed
- Carica l'Immagine
- Invia l'Immagine per il Rilevamento
1. Ottieni un URL di Upload Pre-signed
Inizia richiedendo un URL pre-signed dall'API. Questo URL ti permette di caricare in modo sicuro il tuo file immagine sul server di archiviazione.
Formati File Supportati
JPG, JPEG, PNG, WebP, JFIF, HEIC, HEIF, AVIF, BMP, TIFF, TIF
Nota Importante
È necessario rimuovere gli spazi dal nome del file immagine quando si richiede un URL pre-signed.
GET https://detect-image.truthscan.com/get-presigned-url?file_name=example.jpgRichiesta di Esempio
curl -X GET 'https://detect-image.truthscan.com/get-presigned-url?file_name=example.jpg' \
--header 'apikey: YOUR API KEY GOES HERE'Risposta di Esempio
{
"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. Carica l'Immagine
Usa il 'presigned_url' fornito per caricare la tua immagine tramite una richiesta PUT. Assicurati che il tipo di contenuto corretto sia impostato in base al tuo formato immagine.
Nota Importante
È necessario rimuovere gli spazi dal nome del file immagine quando si carica l'immagine.
Richiesta di Esempio
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' # AttachmentLimiti Dimensione File
- Dimensione file minima: 1KB
- Dimensione file massima: 10MB
Assicurati che il formato del file rimanga coerente durante il processo di upload. Un upload riuscito restituirà un codice di stato 200.
3. Invia Immagine per Rilevamento AI
Dopo il caricamento, invia l'immagine per il rilevamento AI facendo riferimento al 'file_path' dal passaggio precedente.
POST https://detect-image.truthscan.com/detectRichiesta di Esempio
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
}'Il 'FILE_PATH' si riferisce al percorso ottenuto dalla risposta nel passaggio iniziale, 'Ottieni un URL di Upload Pre-signed'.
Parametri Opzionali
generate_preview: Imposta su 'true' per generare un URL di anteprima per l'immagine (default: 'false')document_type: Tipo di documento (default: 'Immagine')email: Indirizzo email per l'elaborazionegenerate_analysis_details: Imposta su 'true' per abilitare risultati di analisi AI approfondita (default: 'false'). Quando abilitato, la risposta query includerà i campi analysis_results_status e analysis_results.
Risposta di Esempio
{
"id": "77565038-9e3d-4e6a-8c80-e20785be5ee9",
"status": "pending"
}La risposta include un ID immagine unico per tracciare lo stato del rilevamento.
Interroga
Questo endpoint accetta un id immagine restituito dalla richiesta /detect. E restituisce lo stato della sottomissione dell'immagine così come il risultato completo dell'operazione di Rilevamento AI, inclusi metadata, OCR e analisi del modello ML.
POST https://detect-image.truthscan.com/queryRichiesta di Esempio
curl -X 'POST' \
'https://detect-image.truthscan.com/query' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"id": "IMAGE-ID-GOES-HERE"
}'Risposta di Esempio
{
"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/..."
}Interpretazione Risultato
result: Punteggio da 1-100 che indica la probabilità che l'immagine sia generata da AI. Punteggi più alti = maggiore probabilità AI.final_result: La determinazione complessiva (es. 'Generato da AI', 'Reale', 'Modificato Digitalmente', 'Modificato da AI')confidence: Il punteggio di confidenza del rilevamentodetection_step: Indica lo stadio in cui il rilevamento è stato completato. 1 = Solo metadata restituiti, 2 = Restituisce metadata e OCR, 3 = Restituisce metadata, OCR e risultati modello ML (più completo)metadata: Informazioni estratte dai metadata dell'immagine usando ExifTool e Pillowocr: Risultati dall'analisi Optical Character Recognition per rilevamento watermarkml_model: Risultati dal modello di machine learningpreview_url: URL all'immagine di anteprima (se generate_preview era impostato su true)heatmap_status: Stato della generazione heatmap ('pending' o 'ready'). Nota: La generazione heatmap è asincrona. Inizialmente, heatmap_status sarà 'pending' e heatmap_url può essere assente o null. Quando pronto, heatmap_status diventa 'ready' e heatmap_url è popolato.heatmap_url: URL all'immagine heatmap, disponibile quando heatmap_status è 'ready'. Disponibile solo per immagini con punteggio >= 20.analysis_results_status: Stato dell'analisi AI approfondita ('pending', 'done', 'skipped' o null). Quando 'pending', continua a interrogare l'endpoint /query — l'analisi è ancora in elaborazione in background. Quando 'done', il campo analysis_results contiene l'analisi completata. Quando 'skipped', null o assente, l'analisi approfondita non è disponibile per questa immagine.analysis_results: Risultati dell'analisi AI approfondita (disponibili quando analysis_results_status è 'done'). Contiene: agreement (strong/moderate/weak/disagreement), confidence (0-100), keyIndicators (array di anomalie visive rilevate), detailedReasoning (spiegazione), visualPatterns (array di pattern stilistici) e recommendations (elementi azionabili).
Nota Importante
La generazione heatmap è asincrona. Inizialmente, heatmap_status sarà 'pending' e heatmap_url può essere assente o null. Quando pronto, heatmap_status diventa 'ready' e heatmap_url è popolato. Le heatmap sono generate solo per immagini con punteggio >= 20.
Qui, "result": 90.24 indica un'alta probabilità che l'immagine sia stata generata da AI. "final_result": "Generato da AI" fornisce una determinazione chiara e "confidence": 90.24 indica alta confidenza in questo risultato. Il campo "detection_step": 3 indica che è stata completata l'analisi completa (metadata, OCR e modello ML). "heatmap_status": "ready" e "heatmap_url" forniscono accesso alla heatmap visiva che mostra le aree rilevate come generate da AI.
Risultati Analisi (Analisi Approfondita Asincrona)
Quando imposti 'generate_analysis_details' su 'true' nella richiesta /detect, TruthScan esegue un'analisi AI approfondita in background dopo che il rilevamento iniziale è completato. La risposta query iniziale restituirà con stato 'done' e i tuoi risultati di rilevamento pronti all'uso, ma il campo analysis_results_status potrebbe essere ancora 'pending'. Puoi usare i risultati iniziali immediatamente e opzionalmente interrogare per il completamento dell'analisi approfondita.
1. Il Risultato Iniziale Si Stabilizza (Analisi Ancora Pending)
Quando invii con 'generate_analysis_details': true e interroghi per la prima volta con stato 'done', i risultati di rilevamento core (result, final_result, confidence) sono pronti. Tuttavia, analysis_results_status potrebbe essere 'pending' — questo significa che l'analisi AI approfondita è ancora in elaborazione in background.
{
"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
}
}Cosa fare
Puoi usare i risultati di rilevamento iniziali (result, final_result, confidence, metadata, ocr, ml_model) immediatamente. Se hai bisogno anche dell'analisi approfondita, continua a interrogare l'endpoint /query con lo stesso ID immagine fino a quando analysis_results_status cambia da 'pending'.
2. Continua a Interrogare per i Risultati dell'Analisi
Continua a chiamare l'endpoint /query con lo stesso ID immagine. Controlla il campo analysis_results_status in ogni risposta. Quando cambia da 'pending' a 'done', l'oggetto analysis_results sarà popolato.
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. Analisi Completata — Risposta Completa
Una volta che analysis_results_status è 'done', l'oggetto analysis_results contiene l'analisi AI approfondita completa con livello di accordo, confidenza, indicatori chiave, ragionamento dettagliato, pattern visivi e raccomandazioni.
{
"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/..."
}Quando l'Analisi Non È Disponibile
Se analysis_results_status è 'skipped', null o assente, l'analisi approfondita non sarà prodotta per questa immagine. Questo succede quando 'generate_analysis_details' non era impostato su 'true' nella richiesta /detect, o per certi tipi di immagini e scenari di rilevamento. Dovresti trattare i risultati di rilevamento iniziali come definitivi.
{
"status": "done",
"result": 12.5,
"result_details": {
"analysis_results_status": "skipped",
"analysis_results": null
}
}Campi Risultati Analisi
analysis_results_status: 'pending' = ancora in elaborazione, 'done' = risultati disponibili, 'skipped' / null / assente = non disponibile per questa immagineanalysis_results.agreement: Quanto fortemente l'analisi approfondita concorda con il rilevamento iniziale (strong / moderate / weak / disagreement)analysis_results.confidence: Punteggio di confidenza dell'analisi approfondita (0-100)analysis_results.keyIndicators: Array di specifiche anomalie visive rilevate nell'immagineanalysis_results.detailedReasoning: Spiegazione di 2-4 frasi del perché l'immagine è stata classificata in questo modoanalysis_results.visualPatterns: Array di pattern stilistici trovati (es. pattern di rumore tipici dei modelli di diffusione)analysis_results.recommendations: Array di raccomandazioni azionabili per ulteriore verifica
Controlla Crediti Utente
Questo endpoint accetta l'apikey degli utenti tramite l'header. E restituisce i dettagli dei crediti degli utenti.
GET https://detect-image.truthscan.com/check-user-creditsRichiesta di Esempio
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'Risposta di Esempio
{
"baseCredits": 10000,
"boostCredits": 1000,
"credits": 11000
}Health Check
Questo endpoint ti permette di controllare lo stato del servizio di rilevamento immagini AI.
GET https://detect-image.truthscan.com/healthRichiesta di Esempio
curl -X 'GET' \
'https://detect-image.truthscan.com/health' \
-H 'accept: application/json'Risposta di Esempio
{
"status": "healthy",
"timestamp": "2024-01-15T10:30:00Z"
}Una risposta "healthy" indica che il servizio sta operando normalmente.
Errori
La maggior parte degli errori saranno da parametri incorretti inviati all'API. Ricontrolla i parametri di ogni chiamata API per assicurarti che sia formattata correttamente e prova a eseguire il codice di esempio fornito.
I codici di errore generici che usiamo sono conformi allo standard REST:
| Codice Errore | Significato |
|---|---|
| 400 | Bad Request -- La tua richiesta non è valida. |
| 403 | Forbidden -- La chiave API non è valida o non ci sono crediti sufficienti per l'elaborazione immagini. |
| 404 | Not Found -- La risorsa specificata non esiste. |
| 405 | Method Not Allowed -- Hai provato ad accedere a una risorsa con un metodo non valido. |
| 406 | Not Acceptable -- Hai richiesto un formato che non è JSON. |
| 410 | Gone -- La risorsa a questo endpoint è stata rimossa. |
| 422 | Invalid Request Body -- Il tuo corpo richiesta è formattato in modo errato o non valido o ha parametri mancanti. |
| 429 | Too Many Requests -- Stai inviando troppe richieste! Rallenta! |
| 500 | Internal Server Error -- Abbiamo avuto un problema con il nostro server. Riprova più tardi. |
| 503 | Service Unavailable -- Siamo temporaneamente offline per manutenzione. Per favore riprova più tardi. |
Problemi Comuni e Soluzioni
Problemi di Autenticazione
"User verification failed" (403)
Causa: Chiave API non valida o scaduta
Soluzione:
- Verifica che la tua chiave API sia corretta
- Controlla se la tua chiave API è attiva nel tuo account
- Prova a rigenerare la tua chiave API
"Not enough credits" (403)
Causa: Crediti insufficienti per l'elaborazione immagini
Soluzione:
- Controlla i tuoi crediti rimanenti usando /check-user-credits
- Acquista crediti aggiuntivi se necessario
- Ottimizza la dimensione dell'immagine prima dell'upload per consumare meno crediti
Problemi di Validazione Input
"Unsupported file format" (400)
Causa: Formato immagine non supportato o invalido inviato
Soluzione:
- Verifica che il formato immagine sia supportato (JPG, JPEG, PNG, WebP, JFIF, HEIC, HEIF, AVIF, BMP, TIFF, TIF)
- Assicurati che il file non sia corrotto
- Controlla che l'header Content-Type sia corretto quando carichi
"File too large" (400)
Causa: La dimensione del file supera il limite di 10MB
Soluzione:
- Ridimensiona o comprimi l'immagine a meno di 10MB
- Controlla la dimensione del file prima di caricare
- Usa formati più efficienti come WebP quando possibile
Problemi di Elaborazione
"Request timeout" (WebSocket)
Causa: L'elaborazione dell'immagine ha richiesto troppo tempo
Soluzione:
- Prova con un'immagine più piccola o meno complessa
- Controlla se il servizio sta sperimentando alto carico
- Riprova la richiesta
Stato Documento "failed"
Causa: Elaborazione fallita per vari motivi
Soluzione:
- Controlla se l'immagine soddisfa i requisiti minimi (1KB - 10MB)
- Verifica che l'immagine sia in un formato supportato
- Verifica che l'upload sia completato con successo prima di inviare per il rilevamento
- Contatta il supporto se il problema persiste
Problemi di Upload
"Image upload failed" (403/400)
Causa: URL pre-signed non valido o scaduto, o problemi con il server di archiviazione
Soluzione:
- Assicurati di usare l'URL pre-signed immediatamente dopo averlo ricevuto (può scadere)
- Verifica che l'header Content-Type sia corretto per il formato immagine
- Rimuovi gli spazi dal nome del file prima di caricare
- Prova a generare un nuovo URL pre-signed se quello corrente è scaduto
"Invalid pre-signed URL" (400)
Causa: Nome file con spazi o URL pre-signed scaduto/corrotto
Soluzione:
- Rimuovi tutti gli spazi dal nome del file prima di richiedere l'URL pre-signed
- Usa solo caratteri alfanumerici, trattini e underscore nel nome del file
- Genera un nuovo URL pre-signed se necessario
Hai Bisogno di Aiuto?
Per maggiori informazioni sull'uso della nostra API o per supporto tecnico, contattaci.
Domande Frequenti API
Trova risposte alle domande più comuni sulla nostra API di rilevamento immagini AI.