Documentazione API
ISO 27001SOC 2 CertifiedGDPR Compliant

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.jpg

Richiesta 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' # Attachment

Limiti 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/detect

Richiesta 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'elaborazione
  • generate_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/query

Richiesta 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 rilevamento
  • detection_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 Pillow
  • ocr: Risultati dall'analisi Optical Character Recognition per rilevamento watermark
  • ml_model: Risultati dal modello di machine learning
  • preview_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 immagine
  • analysis_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'immagine
  • analysis_results.detailedReasoning: Spiegazione di 2-4 frasi del perché l'immagine è stata classificata in questo modo
  • analysis_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-credits

Richiesta 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/health

Richiesta 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 ErroreSignificato
400Bad Request -- La tua richiesta non è valida.
403Forbidden -- La chiave API non è valida o non ci sono crediti sufficienti per l'elaborazione immagini.
404Not Found -- La risorsa specificata non esiste.
405Method Not Allowed -- Hai provato ad accedere a una risorsa con un metodo non valido.
406Not Acceptable -- Hai richiesto un formato che non è JSON.
410Gone -- La risorsa a questo endpoint è stata rimossa.
422Invalid Request Body -- Il tuo corpo richiesta è formattato in modo errato o non valido o ha parametri mancanti.
429Too Many Requests -- Stai inviando troppe richieste! Rallenta!
500Internal Server Error -- Abbiamo avuto un problema con il nostro server. Riprova più tardi.
503Service 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:

  1. Verifica che la tua chiave API sia corretta
  2. Controlla se la tua chiave API è attiva nel tuo account
  3. Prova a rigenerare la tua chiave API

"Not enough credits" (403)

Causa: Crediti insufficienti per l'elaborazione immagini

Soluzione:

  1. Controlla i tuoi crediti rimanenti usando /check-user-credits
  2. Acquista crediti aggiuntivi se necessario
  3. 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:

  1. Verifica che il formato immagine sia supportato (JPG, JPEG, PNG, WebP, JFIF, HEIC, HEIF, AVIF, BMP, TIFF, TIF)
  2. Assicurati che il file non sia corrotto
  3. 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:

  1. Ridimensiona o comprimi l'immagine a meno di 10MB
  2. Controlla la dimensione del file prima di caricare
  3. Usa formati più efficienti come WebP quando possibile

Problemi di Elaborazione

"Request timeout" (WebSocket)

Causa: L'elaborazione dell'immagine ha richiesto troppo tempo

Soluzione:

  1. Prova con un'immagine più piccola o meno complessa
  2. Controlla se il servizio sta sperimentando alto carico
  3. Riprova la richiesta

Stato Documento "failed"

Causa: Elaborazione fallita per vari motivi

Soluzione:

  1. Controlla se l'immagine soddisfa i requisiti minimi (1KB - 10MB)
  2. Verifica che l'immagine sia in un formato supportato
  3. Verifica che l'upload sia completato con successo prima di inviare per il rilevamento
  4. 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:

  1. Assicurati di usare l'URL pre-signed immediatamente dopo averlo ricevuto (può scadere)
  2. Verifica che l'header Content-Type sia corretto per il formato immagine
  3. Rimuovi gli spazi dal nome del file prima di caricare
  4. 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:

  1. Rimuovi tutti gli spazi dal nome del file prima di richiedere l'URL pre-signed
  2. Usa solo caratteri alfanumerici, trattini e underscore nel nome del file
  3. 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.