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.jpgExemplo 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' # AttachmentLimites 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/detectExemplo 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 processamentogenerate_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/queryExemplo 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çãodetection_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 Pillowocr: Resultados da análise de Reconhecimento Óptico de Caracteres para detecção de marca d'águaml_model: Resultados do modelo de aprendizado de máquinapreview_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 imagemanalysis_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 imagemanalysis_results.detailedReasoning: Explicação de 2-4 frases sobre por que a imagem foi classificada desta formaanalysis_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-creditsExemplo 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/healthExemplo 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 Erro | Significado |
|---|---|
| 400 | Bad Request -- Sua solicitação é inválida. |
| 403 | Forbidden -- A chave de API é inválida ou não há créditos suficientes para processamento de imagem. |
| 404 | Not Found -- O recurso especificado não existe. |
| 405 | Method Not Allowed -- Você tentou acessar um recurso com um método inválido. |
| 406 | Not Acceptable -- Você solicitou um formato que não é JSON. |
| 410 | Gone -- O recurso neste endpoint foi removido. |
| 422 | Invalid Request Body -- O corpo da sua solicitação está formatado incorretamente ou inválido ou tem parâmetros ausentes. |
| 429 | Too Many Requests -- Você está enviando muitas solicitações! Diminua a velocidade! |
| 500 | Internal Server Error -- Tivemos um problema com nosso servidor. Tente novamente mais tarde. |
| 503 | Service 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:
- Verifique se sua chave de API está correta
- Verifique se sua chave de API está ativa em sua conta
- Tente regenerar sua chave de API
"Não há créditos suficientes" (403)
Causa: Créditos insuficientes para processamento de imagem
Solução:
- Verifique seus créditos restantes usando /check-user-credits
- Compre créditos adicionais se necessário
- 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:
- Verifique se o formato da imagem é suportado (JPG, JPEG, PNG, WebP, JFIF, HEIC, HEIF, AVIF, BMP, TIFF, TIF)
- Certifique-se de que o arquivo não está corrompido
- Verifique o Content-Type header ao fazer upload
"Arquivo muito grande" (400)
Causa: Tamanho do arquivo excede o limite de 10MB
Solução:
- Redimensione ou comprima a imagem para menos de 10MB
- Verifique o tamanho do arquivo antes do upload
- 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:
- Tente com uma imagem menor ou menos complexa
- Verifique se o serviço está passando por alta carga
- Tente novamente a solicitação
Status do Documento "falhou"
Causa: O processamento falhou por várias razões
Solução:
- Verifique se a imagem atende aos requisitos mínimos (1KB - 10MB)
- Verifique se a imagem está em um formato suportado
- Verifique se o upload foi concluído com sucesso antes de enviar para detecção
- 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:
- Certifique-se de usar a URL pré-assinada imediatamente após recebê-la (pode expirar)
- Verifique se o Content-Type header está correto para o formato da imagem
- Remova espaços do nome do arquivo antes do upload
- 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:
- Remova todos os espaços do nome do arquivo antes de solicitar a URL pré-assinada
- Use apenas caracteres alfanuméricos, hífens e underscores no nome do arquivo
- 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.