Documentação da API
ISO 27001Certificado SOC 2Conforme GDPR

API de Detecção de Imagem Gerada por IA

Documentação completa para integrar a API de detecção de imagem IA da TruthScan em suas aplicações.

Teste a API sem código visitando nosso endpoint FastAPI: https://detect-image.truthscan.com/docs

Autenticação

A TruthScan usa chaves de API para permitir o acesso à API. Você pode obter sua chave de API no topo da página em nosso portal de desenvolvedores.

A TruthScan espera que a chave de API seja incluída em todas as solicitações de API para o servidor no corpo da solicitação da seguinte forma:

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

Você deve substituir YOUR API KEY GOES HERE pela sua chave de API pessoal.

Detector de Imagem IA

Detectar

O fluxo de trabalho de detecção de imagem IA consiste nas seguintes etapas:

  • Obter uma URL de upload pré-assinada
  • Fazer upload da imagem
  • Enviar a imagem para detecção

1. Obter uma URL de Upload Pré-assinada

Comece solicitando uma URL pré-assinada da API. Esta URL permite que você faça upload do arquivo de imagem para o servidor de armazenamento com segurança.

Formatos de Arquivo Suportados

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

Nota Importante

É necessário remover espaços do nome do arquivo da imagem ao solicitar uma URL pré-assinada.

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

Exemplo de Solicitação

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

Exemplo de Resposta

{
  "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. Fazer Upload da Imagem

Use a 'presigned_url' fornecida para fazer upload da sua imagem via uma solicitação PUT. Certifique-se de que o tipo de conteúdo correto está definido de acordo com o formato da sua imagem.

Nota Importante

É necessário remover espaços do nome do arquivo da imagem ao fazer upload da imagem.

Exemplo de Solicitação

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 Tamanho de Arquivo

  • Tamanho mínimo de arquivo: 1KB
  • Tamanho máximo de arquivo: 10MB

Certifique-se de que o formato do arquivo permaneça consistente durante o processo de upload. Um upload bem-sucedido retornará um código de status de 200.

3. Enviar Imagem para Detecção de IA

Após o upload, envie a imagem para detecção de IA referenciando o 'file_path' da etapa anterior.

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

Exemplo de Solicitação

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
}'

O 'FILE_PATH' refere-se ao caminho obtido da resposta na etapa inicial, 'Obter uma URL de Upload Pré-assinada'.

Parâmetros Opcionais

  • generate_preview: Defina como 'true' para gerar uma URL de preview da imagem (padrão: 'false')
  • document_type: Tipo de documento (padrão: 'Image')
  • email: Endereço de email para processamento
  • generate_analysis_details: Defina como 'true' para habilitar resultados de análise profunda de IA (padrão: 'false'). Quando habilitado, a resposta da consulta incluirá os campos analysis_results_status e analysis_results.

Exemplo de Resposta

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

A resposta inclui um ID único de imagem para rastrear o status da detecção.

Consultar

Este endpoint aceita um ID de imagem retornado pela solicitação /detect. E retorna o status do envio da imagem, bem como o resultado completo da operação de detecção de IA, incluindo metadados, OCR e análise do modelo ML.

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

Exemplo de Solicitação

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

Exemplo de Resposta

{
    "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/..."
}

Interpretação dos Resultados

  • result: Pontuação de 1-100 indicando a probabilidade de a imagem ser gerada por IA. Pontuações mais altas = maior probabilidade de IA.
  • final_result: A determinação geral (ex: 'AI Generated', 'Real', 'Digitally Edited', 'AI Edited')
  • confidence: A pontuação de confiança da detecção
  • detection_step: Indica o estágio em que a detecção foi concluída. 1 = apenas metadados retornados, 2 = retorna metadados e OCR, 3 = retorna metadados, OCR e resultados do modelo ML (mais completo)
  • metadata: Informações extraídas dos metadados da imagem usando ExifTool e Pillow
  • ocr: Resultados da análise de Reconhecimento Óptico de Caracteres para detecção de marca d'água
  • ml_model: Resultados do modelo de aprendizado de máquina
  • preview_url: URL de preview da imagem (apenas se generate_preview=true foi usado)
  • heatmap_status: Status da geração do mapa de calor ('pending' ou 'ready'). Nota: A geração do mapa de calor é assíncrona. Inicialmente, heatmap_status será 'pending' e heatmap_url pode estar ausente ou nulo. Quando pronto, heatmap_status se torna 'ready' e heatmap_url é preenchido.
  • heatmap_url: URL para a imagem do mapa de calor, disponível quando heatmap_status é 'ready'. Apenas disponível para imagens com pontuação >= 20.
  • analysis_results_status: Status da análise profunda de IA ('pending', 'done', 'skipped' ou null). Quando 'pending', continue consultando o endpoint /query — a análise ainda está sendo processada em segundo plano. Quando 'done', o campo analysis_results contém a análise concluída. Quando 'skipped', null ou ausente, a análise profunda não está disponível para esta imagem.
  • analysis_results: Resultados da análise profunda de IA (disponível quando analysis_results_status é 'done'). Contém: agreement (strong/moderate/weak/disagreement), confidence (0-100), keyIndicators (array de anomalias visuais detectadas), detailedReasoning (explicação), visualPatterns (array de padrões estilísticos) e recommendations (itens acionáveis).

Nota Importante

A geração do mapa de calor é assíncrona. Inicialmente, heatmap_status será 'pending' e heatmap_url pode estar ausente ou nulo. Quando pronto, heatmap_status se torna 'ready' e heatmap_url é preenchido. Os mapas de calor são gerados apenas para imagens com pontuação >= 20.

Aqui, "result": 90.24 indica uma alta probabilidade de a imagem ter sido gerada por IA. O "final_result": "AI Generated" fornece uma determinação clara, e o "confidence": 90.24 indica alta confiança neste resultado. O campo "detection_step": 3 indica que a análise completa (metadados, OCR e modelo ML) foi concluída. O "heatmap_status": "ready" e "heatmap_url" fornecem acesso ao mapa de calor visual mostrando as áreas detectadas como geradas por IA.

Resultados de Análise (Análise Profunda Assíncrona)

Quando você define 'generate_analysis_details' como 'true' na solicitação /detect, a TruthScan executa uma análise profunda de IA em segundo plano após a conclusão da detecção inicial. A resposta inicial da consulta retornará com status 'done' e seus resultados de detecção prontos para uso, mas o campo analysis_results_status pode ainda estar 'pending'. Você pode usar os resultados iniciais imediatamente e opcionalmente consultar até que a análise profunda seja concluída.

1. Resultado Inicial Pronto (Análise Ainda Pendente)

Quando você envia com 'generate_analysis_details': true e consulta pela primeira vez com status 'done', os resultados principais de detecção (result, final_result, confidence) estão prontos. No entanto, analysis_results_status pode ser 'pending' — isso significa que a análise profunda de IA ainda está sendo processada em segundo plano.

{
    "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
    }
}

O que fazer

Você pode usar os resultados de detecção iniciais (result, final_result, confidence, metadata, ocr, ml_model) imediatamente. Se também precisar da análise profunda, continue consultando o endpoint /query com o mesmo ID de imagem até que analysis_results_status mude de 'pending'.

2. Continuar Consultando para Resultados de Análise

Continue chamando o endpoint /query com o mesmo ID de imagem. Verifique o campo analysis_results_status em cada resposta. Quando mudar de 'pending' para 'done', o objeto analysis_results estará preenchido.

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. Análise Concluída — Resposta Completa

Quando analysis_results_status for 'done', o objeto analysis_results contém a análise profunda completa de IA com nível de concordância, confiança, indicadores-chave, raciocínio detalhado, padrões visuais e recomendações.

{
    "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 a Análise Não Está Disponível

Se analysis_results_status for 'skipped', null ou ausente, a análise profunda não será produzida para esta imagem. Isso acontece quando 'generate_analysis_details' não foi definido como 'true' na solicitação /detect, ou para certos tipos de imagem e cenários de detecção. Trate os resultados de detecção iniciais como finais.

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

Campos dos Resultados de Análise

  • analysis_results_status: 'pending' = ainda processando, 'done' = resultados disponíveis, 'skipped' / null / ausente = não disponível para esta imagem
  • analysis_results.agreement: Quão fortemente a análise profunda concorda com a detecção inicial (strong / moderate / weak / disagreement)
  • analysis_results.confidence: Pontuação de confiança da análise profunda (0-100)
  • analysis_results.keyIndicators: Array de anomalias visuais específicas detectadas na imagem
  • analysis_results.detailedReasoning: Explicação de 2-4 frases sobre por que a imagem foi classificada desta forma
  • analysis_results.visualPatterns: Array de padrões estilísticos encontrados (ex: padrões de ruído típicos de modelos de difusão)
  • analysis_results.recommendations: Array de recomendações acionáveis para verificação adicional

Verificar Créditos do Usuário

Este endpoint aceita o apikey do usuário via header. E retorna detalhes de créditos do usuário.

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

Exemplo de Solicitação

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'

Exemplo de Resposta

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

Verificação de Saúde

Este endpoint permite verificar o status do serviço de detecção de imagem IA.

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

Exemplo de Solicitação

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

Exemplo de Resposta

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

A resposta "healthy" indica que o serviço está funcionando normalmente.

Erros

A maioria dos erros será de parâmetros incorretos sendo enviados para a API. Verifique novamente os parâmetros de cada chamada de API para garantir que esteja formatado corretamente e tente executar o código de exemplo fornecido.

Os códigos de erro genéricos que usamos estão em conformidade com o padrão REST:

Código de ErroSignificado
400Bad Request -- Sua solicitação é inválida.
403Forbidden -- A chave de API é inválida ou não há créditos suficientes para processamento de imagem.
404Not Found -- O recurso especificado não existe.
405Method Not Allowed -- Você tentou acessar um recurso com um método inválido.
406Not Acceptable -- Você solicitou um formato que não é JSON.
410Gone -- O recurso neste endpoint foi removido.
422Invalid Request Body -- O corpo da sua solicitação está formatado incorretamente ou inválido ou tem parâmetros ausentes.
429Too Many Requests -- Você está enviando muitas solicitações! Diminua a velocidade!
500Internal Server Error -- Tivemos um problema com nosso servidor. Tente novamente mais tarde.
503Service Unavailable -- Estamos temporariamente offline para manutenção. Tente novamente mais tarde.

Problemas Comuns e Soluções

Problemas de Autenticação

"Verificação de usuário falhou" (403)

Causa: Chave de API inválida ou expirada

Solução:

  1. Verifique se sua chave de API está correta
  2. Verifique se sua chave de API está ativa em sua conta
  3. Tente regenerar sua chave de API

"Não há créditos suficientes" (403)

Causa: Créditos insuficientes para processamento de imagem

Solução:

  1. Verifique seus créditos restantes usando /check-user-credits
  2. Compre créditos adicionais se necessário
  3. Otimize o tamanho das imagens antes do upload para consumir menos créditos

Problemas de Validação de Entrada

"Formato de arquivo não suportado" (400)

Causa: Formato de imagem não suportado ou inválido enviado

Solução:

  1. Verifique se o formato da imagem é suportado (JPG, JPEG, PNG, WebP, JFIF, HEIC, HEIF, AVIF, BMP, TIFF, TIF)
  2. Certifique-se de que o arquivo não está corrompido
  3. Verifique o Content-Type header ao fazer upload

"Arquivo muito grande" (400)

Causa: Tamanho do arquivo excede o limite de 10MB

Solução:

  1. Redimensione ou comprima a imagem para menos de 10MB
  2. Verifique o tamanho do arquivo antes do upload
  3. Use formatos mais eficientes como WebP quando possível

Problemas de Processamento

"Tempo limite da solicitação" (WebSocket)

Causa: O processamento da imagem demorou muito tempo

Solução:

  1. Tente com uma imagem menor ou menos complexa
  2. Verifique se o serviço está passando por alta carga
  3. Tente novamente a solicitação

Status do Documento "falhou"

Causa: O processamento falhou por várias razões

Solução:

  1. Verifique se a imagem atende aos requisitos mínimos (1KB - 10MB)
  2. Verifique se a imagem está em um formato suportado
  3. Verifique se o upload foi concluído com sucesso antes de enviar para detecção
  4. Entre em contato com o suporte se o problema persistir

Problemas de Upload

"Falha no upload da imagem" (403/400)

Causa: URL pré-assinada inválida ou expirada, ou problemas com o servidor de armazenamento

Solução:

  1. Certifique-se de usar a URL pré-assinada imediatamente após recebê-la (pode expirar)
  2. Verifique se o Content-Type header está correto para o formato da imagem
  3. Remova espaços do nome do arquivo antes do upload
  4. Tente gerar uma nova URL pré-assinada se a atual expirou

"URL pré-assinada inválida" (400)

Causa: Nome de arquivo com espaços ou URL pré-assinada expirada/corrompida

Solução:

  1. Remova todos os espaços do nome do arquivo antes de solicitar a URL pré-assinada
  2. Use apenas caracteres alfanuméricos, hífens e underscores no nome do arquivo
  3. Gere uma nova URL pré-assinada se necessário

Precisa de Ajuda?

Para mais informações sobre como usar nossa API ou para suporte técnico, entre em contato conosco.

Perguntas Frequentes sobre a API

Encontre respostas para as perguntas mais comuns sobre nossa API de detecção de imagem IA.