AI Image Detection API
TruthScan AI image detection API'sini uygulamalarınıza entegre etmek için eksiksiz dokümantasyon.
Kod yazmadan denemek için FastAPI endpoint'imize gidin: https://detect-image.truthscan.com/docs
Authentication
TruthScan API'ye erişim için API key kullanır. API key'inizi developer portalında sayfanın üst kısmından.
API key, sunucuya giden isteklerde aşağıdaki gibi JSON body içinde olmalıdır (endpoint yalnızca header auth belirtiyorsa, örn. check-user-credits, istisna):
{
"key": "YOUR API KEY GOES HERE"
}YOUR API KEY GOES HERE ifadesini kişisel API key'inizle değiştirmelisiniz.
AI Image Detector
Detect (3 adımlı süreç)
AI Image Detection akışı şu adımlardan oluşur:
- Pre-signed Upload URL alın
- Görüntüyü yükleyin
- Görüntüyü detection için gönderin
1. Pre-signed Upload URL alın
Önce API'den pre-signed URL isteyin. Bu URL, görüntü dosyanızı depolama sunucusuna güvenli şekilde yüklemenizi sağlar.
Desteklenen dosya formatları
JPG, JPEG, PNG, WebP, JFIF, HEIC, HEIF, AVIF, BMP, TIFF, TIF, GIF, SVG, PDF
Dosya adı
Pre-signed URL isterken görüntü dosya adındaki boşlukları kaldırın.
PDF dosyalarında yalnızca ilk görüntü detection için kullanılır (tek dosya akışı).
ZIP'i bulk upload ile gönderecekseniz bu endpoint'te .zip dosya adı kullanın.
Query parameters
- file_name (zorunlu) — Orijinal dosya adı; sunucu normalize edebilir (boşluk ve güvensiz karakterler düzeltilir). Bulk upload için .zip uzantısı kullanın.
- expiration (isteğe bağlı) — Pre-signed URL ömrü saniye cinsinden (varsayılan: 3600).
GET https://detect-image.truthscan.com/get-presigned-url?file_name=example.jpgÖrnek istek
curl -X GET 'https://detect-image.truthscan.com/get-presigned-url?file_name=example.jpg' \
--header 'apikey: YOUR API KEY GOES HERE'Örnek yanıt
{
"status": "success",
"presigned_url": "https://nyc3.digitaloceanspaces.com/ai-image-detector-dev/uploads/581d47c7-3ef4-42af-88d9-6dab6bf69389_20250611-121955_example.jpg...",
"file_path": "uploads/example.jpg",
"document_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}document_id bu yükleme isteği için yeni üretilen bir UUID'dir (korelasyon/loglama). /detect veya /bulk-upload için kullanacağınız id, bu endpoint'lere gönderdiğinizde atanır; /detect'e isteğe bağlı id vermezseniz sunucu atar.
2. Görüntüyü yükleyin
Verilen presigned_url ile görüntünüzü PUT isteğiyle yükleyin. Görüntü formatınıza uygun Content-Type'ı doğru ayarlayın.
Dosya adı
Yükleme sırasında görüntü dosya adındaki boşlukları kaldırın.
Content-Type'ı dosya uzantınızla birebir eşleştirin
- image/jpeg: jpg, jpeg, jfif
- image/png: png
- image/webp: webp
- image/heic: heic
- image/heif: heif
- image/avif: avif
- image/bmp: bmp
- image/tiff: tiff, tif
- image/gif: gif
- image/svg+xml: svg
- application/pdf: pdf
Sık yapılan hatalar
- image/jpg kullanmayın (yanlış). image/jpeg kullanın.
- Dosya ile header'ı eşleştirmeyin (ör. .png dosya + image/jpeg).
- Uzantıyı değiştirip header'ı güncellemeyin (veya tersi).
- İstek/yükleme sırasında dosya adında boşluk bırakmayın.
Örnek istek
curl -X PUT 'https://nyc3.digitaloceanspaces.com/ai-image-detector-dev/uploads/581d47c7-3ef4-42af-88d9-6dab6bf69389_20250611-121955_example.jpg...' \
--header 'Content-Type: image/jpeg' \
--header 'x-amz-acl: private' \
--data-binary '@example.jpg'Ek yükleme örnekleri (PNG, PDF, SVG)
curl -X PUT '<PRESIGNED_URL_FOR_example.png>' \
--header 'Content-Type: image/png' \
--header 'x-amz-acl: private' \
--data-binary '@example.png'curl -X PUT '<PRESIGNED_URL_FOR_example.pdf>' \
--header 'Content-Type: application/pdf' \
--header 'x-amz-acl: private' \
--data-binary '@example.pdf'curl -X PUT '<PRESIGNED_URL_FOR_example.svg>' \
--header 'Content-Type: image/svg+xml' \
--header 'x-amz-acl: private' \
--data-binary '@example.svg'Dosya boyutu limitleri
- Minimum dosya boyutu: 1KB
- Maksimum dosya boyutu: 10MB
Yükleme boyunca dosya formatının tutarlı kalmasını sağlayın. Başarılı yükleme HTTP 200 döner.
3. AI detection için görüntüyü gönderin
Yüklemeden sonra, önceki adımdaki file_path ile görüntüyü AI detection için gönderin. PDF yüklemelerinde yalnızca ilk görüntü analiz/detection edilir.
POST https://detect-image.truthscan.com/detectÖrnek istek
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": true
}'FILE_PATH, pre-signed URL adımında dönen yoldur (ör. uploads/...). Örnekte gösterildiği gibi storage host'unuzla tam URL'yi oluşturun.
İsteğe bağlı parametreler
id: İsteğe bağlı UUID string. Verilmezse sunucu yeni document id üretir. Verilirse daha önce var olmamalıdır; aksi halde API hata döner.generate_preview: true ise görüntü için preview URL üretilir (varsayılan: true). false ise preview atlanır.document_type: Belge türü (varsayılan: Image).email: İşleme için e-posta adresi.generate_analysis_details: false ise ayrıntılı analiz üretilmez (varsayılan: true).generate_heatmap_overlayed: Heatmap üretildiğinde görüntünün nasıl oluşturulacağını belirler (varsayılan: true). true iken heatmap orijinal görüntü üzerine blend edilir (standart overlay). false iken servis şeffaf heatmap döner: modelden gelen alpha ile JET renkli aktivasyon haritası olan RGBA; arka plan şeffaf, UI'da composite edebilirsiniz.generate_heatmap_normalized: false iken aktivasyon haritası için kullanılan normalizasyon adımı atlanır (varsayılan: true). Heatmap görünümünü generate_heatmap_overlayed ile birlikte kontrol edin.model: Model veya routing ipucu (varsayılan: generic). Örnekler: generic, sheerid veya instance_id/model (ör. my-instance-id/generic) ile işi o instance için ayrılmış kuyruğa gönderir. Geçersiz instance_id 400 ile reddedilir.user_agent: Belgeyle birlikte saklanan isteğe bağlı string (analitik/destek).
Örnek yanıt
{
"id": "77565038-9e3d-4e6a-8c80-e20785be5ee9",
"status": "pending"
}Yanıtta detection durumunu takip etmek için benzersiz image ID bulunur.
Detection durumu ve sonuçları sorgulama
Durumu kontrol etmek ve sonuçları almak için image ID ile /query endpoint'ini kullanın.
Authentication: İstek gövdesinde yalnızca id vardır; bu çağrıda API key gönderilmez. UUID'yi bilen herkes sonuçları poll edebilir — skorları kısıtlamak istiyorsanız document ID'leri hassas kabul edin.
POST https://detect-image.truthscan.com/queryÖrnek istek
curl -X 'POST' \
'https://detect-image.truthscan.com/query' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"id": "IMAGE-ID-GOES-HERE"
}'Örnek yanıt
{
"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,
"warnings": [
{ "type": "blur_dark", "label": "Blurred" },
{ "type": "watermark", "label": "Gemini", "confidence": 0.95 },
{ "type": "screen_recapture", "label": "screen", "metrics": { "is_screen": false }, "confidence": 99.99 }
]
},
"preview_url": "https://ai-image-detector-prod.nyc3.digitaloceanspaces.com/previews/..."
}Örnek yanıt (/query, kuruluşta secure URL'ler açık)
{
"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-detect.undetectable.ai/heatmap/00fee5ff-a55b-42fb-b7c7-d14f05ae0769",
"analysis_results_status": "ready",
"analysis_results": null
},
"preview_url": "https://ai-image-detect.undetectable.ai/preview/00fee5ff-a55b-42fb-b7c7-d14f05ae0769"
}Analiz sonuçları hazır olduğunda örnek yanıt
{
"id": "00fee5ff-a55b-42fb-b7c7-d14f05ae0769",
"status": "done",
"result": 90.2371538185235,
"result_details": {
"heatmap_status": "ready",
"heatmap_url": "https://ai-image-detector-prod.nyc3.digitaloceanspaces.com/uploads/....",
"analysis_results_status": "ready",
"analysis_results": {
"imageTags": ["person", "portrait", "outdoor", "vineyard", "smiling"],
"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/..."
}Sonuç alanları
is_valid: Görüntü dosyasının geçerli olup olmadığı (true/false).detection_step: Detection'ın tamamlandığı aşama: 1 = yalnızca metadata; 2 = metadata ve ocr; 3 = metadata, ocr ve ml_model.final_result: Genel sonuç (ör. "AI Generated", "Real", "Digitally Edited", "AI Edited").confidence: Detection güven skoru.metadata: ExifTool ve Pillow ile görüntü metadata'sından çıkarılan bilgiler.metadata_basic_source: Görüntünün belirli bir mobil kamera modeliyle mi çekildiği, AI aracıyla mı üretildiği veya fotoğraf düzenleme yazılımıyla mı değiştirildiği gibi ipuçları verebilir.ocr: Tarihsel alan adı ocr altında watermark detection sonucu. İki elemanlı dizi [label, score]: label tespit edilen watermark sınıfı (ör. "Gemini") veya "OCR did not detect AI"; score 0–100 ölçeğinde (veya emin değilse 0). Etiket varsa warnings içinde özetlenir.ml_model: Makine öğrenmesi modelinden gelen sonuçlar.warnings: İsteğe bağlı, heterojen uyarı nesneleri dizisi (blur_dark, watermark, screen_recapture vb.). Boş veya yok olabilir.preview_url: generate_preview true ise önizleme URL'i. Doğrudan storage veya secure URL'lerde https://<api-host>/preview/<document_id> gibi API yolu olabilir.heatmap_status: pending, ready veya failed. Heatmap üretimi asenkron.heatmap_url: heatmap_status ready olduğunda heatmap. Görünüm generate_heatmap_overlayed'a bağlıdır. Doğrudan storage veya https://<api-host>/heatmap/<document_id> API yolu (secure ise POST /heatmap/{id} ile key kullanın).analysis_results_status: pending, ready, skipped, failed veya analyzing. generate_analysis_details false ise null veya yok.analysis_results: Açıksa ayrıntılı anlatımsal analiz; aşağıdaki Analysis Result Explanation'a bakın.
Analysis result açıklaması
analysis_results hazır olduğunda tipik olarak şunları içerir: agreement (strong | moderate | weak | disagreement), imageTags (en fazla beş kısa etiket), confidence (0–100), keyIndicators, detailedReasoning, visualPatterns ve recommendations.
Notlar
- Heatmap üretimi asenkron. heatmap_status ve heatmap_url için /query ile poll edin.
- Ayrıntılı analiz generate_analysis_details=false değilse asenkron. analysis_results_status ve analysis_results için poll edin.
- Secure URL: Açıksa heatmap_url ve preview_url API host kullanabilir; key ile POST /heatmap/{id} ve POST /preview/{id} ile çekin (Secure heatmap ve preview assets).
- Ana skor hazır olduktan sonra heatmap ve analysis_results bitince almak için /query'yi tekrarlayın.
Heatmap ve overlay davranışı
heatmap_url'deki dosya /detect (veya /bulk-upload) isteğinizdeki generate_heatmap_overlayed ve generate_heatmap_normalized yansıtır: varsayılan overlay (true) normal görüntü üzerine heatmap; false genelde composite için şeffaf PNG.
Örnek: result ~90.24, final_result AI Generated ve detection_step 3 ise tam pipeline metadata, OCR ve ML model tamamlanmıştır.
Analysis results (asenkron derin analiz)
/detect'te generate_analysis_details true ise ayrıntılı analiz ana skordan sonra tamamlanabilir. analysis_results_status ready (veya skipped/failed) olana kadar /query ile poll edin.
1. İlk sonuç analizden önce hazır olabilir
Çekirdek detection (result, final_result, confidence), analysis_results_status hâlâ pending iken hazır olabilir.
{
"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
}
}Ne yapmalı
Çekirdek alanları hemen kullanın; analysis_results gerekiyorsa poll etmeye devam edin.
2. Poll etmeye devam
analysis_results_status pending'den çıkana kadar aynı id ile /query çağırın.
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. Analiz tamam
analysis_results_status ready olduğunda analysis_results agreement, imageTags, confidence, keyIndicators, detailedReasoning, visualPatterns ve recommendations içerir.
{
"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": {
"imageTags": [
"person",
"portrait",
"outdoor",
"vineyard",
"smiling"
],
"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/..."
}Analiz yoksa
analysis_results_status skipped, failed veya yoksa veya generate_analysis_details false ise çekirdek detection'ı nihai kabul edin.
{
"status": "done",
"result": 12.5,
"result_details": {
"analysis_results_status": "skipped",
"analysis_results": null
}
}Analysis results alanları
- analysis_results_status: pending | ready | skipped | failed | analyzing
- analysis_results.agreement: strong | moderate | weak | disagreement
- analysis_results.imageTags: kısa açıklayıcı etiketler
- analysis_results.confidence: 0–100
- analysis_results.keyIndicators: somut ipuçları
- analysis_results.detailedReasoning: kısa açıklama
- analysis_results.visualPatterns: daha geniş örüntüler
- analysis_results.recommendations: sonraki adımlar
Bulk upload (ZIP)
ZIP yükleyerek tek istekte birden fazla görüntü gönderin. Akış tek görüntüyle aynı: presign (ZIP adı) → PUT ZIP → POST /bulk-upload → /query poll.
1. Pre-signed upload URL (ZIP)
get-presigned-url ile .zip dosya adı kullanın (ör. images.zip).
GET https://detect-image.truthscan.com/get-presigned-url?file_name=images.zipÖrnek istek
curl -X GET 'https://detect-image.truthscan.com/get-presigned-url?file_name=images.zip' \
--header 'apikey: YOUR API KEY GOES HERE'2. ZIP'i yükleyin
ZIP'i presigned URL'e Content-Type: application/zip ile PUT edin.
curl -X PUT '<PRESIGNED_URL_FOR_images.zip>' \
--header 'Content-Type: application/zip' \
--header 'x-amz-acl: private' \
--data-binary '@images.zip'ZIP limitleri
- Maksimum ZIP boyutu: 100MB
- Bulk başına en fazla 50 görüntü
- Görüntü başına: minimum 1KB, maksimum 10MB
ZIP içinde desteklenen formatlar
JPG, JPEG, PNG, WebP, JFIF, HEIC, HEIF, AVIF, BMP, TIFF, TIF, GIF, SVG
ZIP içindeki PDF desteklenmez, atlanır.
SVG dosyaları detection öncesi PNG'ye dönüştürülür.
3. ZIP'i bulk detection için gönderin
POST /bulk-upload ile key ve yüklenen ZIP yolunu gösteren url.
İsteğe bağlı parametreler
generate_preview: true ise görüntüler için preview URL (varsayılan: false).generate_analysis_details: true ise ayrıntılı analiz (varsayılan: false).generate_heatmap_overlayed: /detect ile aynı (overlay veya şeffaf RGBA heatmap).generate_heatmap_normalized: /detect ile aynı (varsayılan: true).model: Model alanı: generic, sheerid veya instance_id/model formatı.
Örnek istek
curl -X 'POST' \
'https://detect-image.truthscan.com/bulk-upload' \
-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": false,
"model": "generic"
}'Örnek yanıt
{
"id": "77565038-9e3d-4e6a-8c80-e20785be5ee9",
"status": "pending",
"expected_count": 12
}id, status pending ve ZIP'ten analiz edilecek görüntü sayısı expected_count döner.
Bulk ZIP sonuçlarının güncellenmesi
- Gönderimden sonra işlem başlayana kadar status pending, sonra analyzing.
- results her görüntü için listelenir; bitene kadar result ve result_details null olabilir.
- İsteğe bağlı heatmap ve analiz ayrıntıları result_details içinde hazır olana kadar pending olabilir.
- results'taki tüm görüntüler bittiğinde genel status done olur; batch tamamlanamazsa failed olabilir.
- ZIP bitmeden önce kısmi sonuç için /query çağrılabilir.
4. Bulk upload sonuçlarını sorgulama
/bulk-upload'tan dönen id ile POST /query kullanın. Tek görüntü ile aynı endpoint; yanıt şekli id'nin tek görüntü mü ZIP batch mi olduğuna göre değişir.
curl -X 'POST' \
'https://detect-image.truthscan.com/query' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"id": "77565038-9e3d-4e6a-8c80-e20785be5ee9"
}'Örnek yanıt (hâlâ işleniyor)
{
"id": "3b81fb24-dd23-40e7-ae95-82f823f44098",
"status": "analyzing",
"results": [
{
"id": "4600c7e5-00ec-469d-9117-ff20e0f1c1fa",
"status": "done",
"result": 44.0006,
"result_details": {},
"filename": "photo1.jpg",
"preview_url": null
},
{
"id": "2f770c89-352a-4d53-b6a3-a2147ca2c0ae",
"status": "pending",
"result": null,
"result_details": null,
"filename": "photo2.jpg",
"preview_url": null
}
],
"skipped": []
}Yanıt alanları (bulk ZIP)
- id — Bulk istek id.
- status — önce pending, sonra analyzing, ardından done veya failed.
- results — Analiz edilen her görüntü için giriş (id, status, result, result_details, filename, varsa preview_url).
- skipped — Analiz edilmeyen dosyalar (desteklenmeyen tür, boyut vb.); status failed ve sebep result_details'ta.
Faturalandırma: Kredi yalnızca başarıyla analiz edilen görüntüler için kullanılır. Başarısız SVG dönüşümleri ve atlanan dosyalar faturalanmaz.
Secure heatmap ve preview asset'leri
/query'de heatmap_url veya preview_url API host'u gösteriyorsa (doğrudan object storage değil), baytları POST ve key ile indirin.
POST /heatmap/{id}
POST /preview/{id}
İstek gövdesi JSON: { "key": "YOUR-API-KEY-GOES-HERE" }
Heatmap yanıtları (HTTP status ve Content-Type kontrol edin)
- 200 + binary (image/png vb.) — Heatmap dosyası hazır. X-Heatmap-Status set edilmiş olabilir.
- 202 + JSON — heatmap_status pending; /query ile poll edip tekrar deneyin.
- 200 + JSON — Sunulacak heatmap yok (isteğe bağlı özellik, failed vb.); sunucu hatası değil.
- 500 + JSON — Kayıtlı heatmap_url var ancak storage'dan indirilemedi; sonra tekrar deneyin.
- 404 + JSON — Document id bulunamadı.
- 403 + JSON — API key bu belgeye ait değil.
Preview: POST /preview/{id} ham preview baytları döner. Önizleme yoksa (generate_preview false) 404 + JSON.
Örnekler
curl -X POST 'https://detect-image.truthscan.com/heatmap/00fee5ff-a55b-42fb-b7c7-d14f05ae0769' \
-H 'Content-Type: application/json' \
-d '{"key":"YOUR-API-KEY-GOES-HERE"}' \
--output heatmap.pngcurl -X POST 'https://detect-image.truthscan.com/preview/00fee5ff-a55b-42fb-b7c7-d14f05ae0769' \
-H 'Content-Type: application/json' \
-d '{"key":"YOUR-API-KEY-GOES-HERE"}' \
--output preview.pngInternal: kuruluş kullanımını Stripe ile senkron (job secret)
Yalnızca güvenilir backend job'ları; genel API müşterileri için değil. x-job-secret header'ı sunucu JOB_SECRET ile eşleşmelidir. Belirli tarih aralığı için metered TruthScan kuruluş kullanımını Stripe'a senkronlar.
POST /organizations/{org_id}/usage/sync-to-stripe
Headers: x-job-secret: <JOB_SECRET>
Body JSON: start_date, end_date, isteğe bağlı Stripe meter idempotency için idempotency_id.
success, organization_id, total_documents, value_sent_to_stripe, report_date, message döner. Org metered değil veya gerekirken stripe_customer_id eksikse 400; 401 geçersiz secret; 404 org yok; 500 Stripe/config hataları.
Kullanıcı kredilerini kontrol etme
Bu endpoint kullanıcının apikey'ini header üzerinden alır ve kredi detaylarını döner.
GET https://detect-image.truthscan.com/check-user-creditsÖrnek istek
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'Örnek yanıt
{
"baseCredits": 10000,
"boostCredits": 1000,
"credits": 11000
}Harici entegrasyonlarda yalnızca credits alanı dolu gelir.
Health check
API sunucusunun sağlık durumunu kontrol edin.
GET https://detect-image.truthscan.com/healthÖrnek istek
curl -X 'GET' \
'https://detect-image.truthscan.com/health' \
-H 'accept: application/json'Örnek yanıt
{
"status": "healthy"
}"healthy" yanıtı servisin normal çalıştığını gösterir.
Hatalar
Çoğu hata API'ye yanlış parametre gönderilmesinden kaynaklanır. Her çağrıyı kontrol edin ve verilen örnekleri deneyin.
Kullandığımız genel hata kodları REST standardına uygundur:
| Hata kodu | Anlamı |
|---|---|
| 400 | Bad Request — İsteğiniz geçersiz. |
| 401 | Unauthorized — Geçersiz job secret (internal usage endpoint'leri) veya benzeri auth hatası. |
| 403 | Forbidden — API key geçersiz, erişim reddedildi veya işlem için yeterli kredi yok. |
| 404 | Not Found — Belirtilen kaynak yok. |
| 405 | Method Not Allowed — Kaynağa geçersiz HTTP method ile erişildi. |
| 406 | Not Acceptable — JSON olmayan bir format istendi. |
| 410 | Gone — Bu endpoint'teki kaynak kaldırıldı. |
| 422 | Invalid Request Body — Gövde formatı hatalı, geçersiz veya eksik parametre içeriyor. |
| 429 | Too Many Requests — Çok fazla istek! Hızı düşürün. |
| 500 | Internal Server Error — Sunucu tarafında sorun oluştu. Daha sonra tekrar deneyin. |
| 503 | Service Unavailable — Bakım nedeniyle geçici olarak kapalı. Daha sonra tekrar deneyin. |
Yaygın sorunlar ve çözümler
Authentication sorunları
"User verification failed" (403)
Neden: Geçersiz veya süresi dolmuş API key
Çözüm:
- API key'inizin doğru olduğunu doğrulayın
- Hesabınızda API key'in aktif olduğunu kontrol edin
- Gerekirse API key'i yeniden oluşturun
"Not enough credits" (403)
Neden: Görüntü işleme için yetersiz kredi
Çözüm:
- /check-user-credits ile kalan kredinizi kontrol edin
- Gerekirse ek kredi satın alın
Girdi doğrulama sorunları
"Input URL cannot be empty" (400)
Neden: Boş veya geçersiz URL gönderildi
Çözüm:
- url girdinizin boş olmadığından emin olun
- Görüntü adlarında başta/sonda boşluk bırakmayın
- URL encoding'in doğru olduğunu kontrol edin
"Input email is empty" (400)
Neden: URL işleme için e-posta eksik
Çözüm:
- URL gönderirken geçerli bir e-posta sağlayın
- E-posta formatının doğru olduğunu kontrol edin
"Unsupported image type" (400)
Neden: Dosya formatı desteklenmiyor
Çözüm:
- Desteklenen bir formata dönüştürün (JPG, PNG, WebP, HEIC, HEIF, AVIF, BMP, TIFF, GIF, SVG, PDF)
- Dosya uzantısının doğru olduğunu kontrol edin
"File size is too small" (400)
Neden: Görüntü dosyası minimum boyutun altında
Çözüm:
- Daha büyük bir görüntü dosyası kullanın (minimum 1KB)
- Yükleme sırasında dosyanın bozulmadığını kontrol edin
"File size exceeds limit" (400)
Neden: Görüntü dosyası çok büyük
Çözüm:
- Görüntüyü sıkıştırın veya yeniden boyutlandırın; limit dağıtıma göre ayarlanır (API hata mesajı MB cinsinden belirtir)
- Farklı bir görüntü formatı deneyin
"Invalid file type" (400)
Neden: Dosya türü doğrulaması başarısız
Çözüm:
- Dosyanın geçerli bir görüntü formatı olduğundan emin olun
- Dosyanın bozuk olmadığını kontrol edin
- MIME type ile dosya uzantısının eşleştiğini doğrulayın
İşleme sorunları
Görüntü durumu "failed"
Neden: İşleme çeşitli nedenlerle başarısız oldu
Çözüm:
- URL'nin desteklenen bir formatta olduğunu doğrulayın
- Görüntü dosyasının geçerli ve bozuk olmadığını kontrol edin
- Görüntünün boyut gereksinimlerini karşıladığından emin olun
- Sorun sürerse destek ile iletişime geçin
"User not found"
Neden: Geçersiz user ID
Çözüm:
- User ID'nin doğru olduğunu doğrulayın
- Kullanıcı hesabının aktif olduğundan emin olun
- Gerekirse yeniden kimlik doğrulayın
"File metadata could not be fetched" (500)
Neden: Yüklenen dosyaya erişilemiyor
Çözüm:
- Dosyanın başarıyla yüklendiğini doğrulayın
- Dosya URL'sinin erişilebilir olduğunu kontrol edin
- Dosyayı yeniden yüklemeyi deneyin
Upload sorunları
"Image upload failed" (403/400)
Neden: Geçersiz veya süresi dolmuş pre-signed URL veya depolama sunucusu sorunu
Çözüm:
- Pre-signed URL'i aldıktan sonra kısa sürede kullanın
- Content-Type'ın dosya formatıyla eşleştiğini doğrulayın
- Yüklemeden önce dosya adındaki boşlukları kaldırın
- Gerekirse yeni pre-signed URL oluşturun
"Invalid pre-signed URL" (400)
Neden: Dosya adında boşluk veya süresi dolmuş/bozuk pre-signed URL
Çözüm:
- Pre-signed URL istemeden önce dosya adındaki boşlukları kaldırın
- Alfanumerik karakter, tire ve alt çizgi kullanın
- Gerekirse yeni pre-signed URL oluşturun
Bulk upload sorunları
"URL must point to a ZIP file" (400)
Neden: /bulk-upload'a verilen URL bir ZIP dosyasına işaret etmiyor
Çözüm:
- get-presigned-url?file_name=images.zip (veya başka .zip adı) kullanın
- Geçerli bir ZIP'i presigned URL'e yükleyin
- bulk-upload isteğindeki url'nin o yüklenmiş ZIP'e işaret ettiğinden emin olun
"ZIP file too large" (400)
Neden: ZIP maksimum boyutu (100MB) aşıyor
Çözüm:
- Görüntü sayısını azaltın veya sıkıştırın
- Birden fazla bulk upload'a bölün
"Too many files" (400)
Neden: ZIP içinde 50'den fazla geçerli görüntü var
Çözüm:
- ZIP başına 50 veya daha az görüntü kullanın
- Birden fazla bulk upload'a bölün
"No valid images found in ZIP" (400)
Neden: ZIP'teki tüm dosyalar atlandı (desteklenmeyen format, çok küçük, geçersiz yol vb.)
Çözüm:
- Desteklenen formatları kullanın (JPG, PNG, WebP, HEIC, HEIF, AVIF, BMP, TIFF, TIF, GIF, SVG)
- Bulk içinde PDF desteklenmez
- Her görüntü en az 1KB en fazla 10MB olmalı
- Gizli dosyalar (. ile başlayan) ve path traversal (..) kullanmayın
"Document is not a bulk upload (image-zip) result" (400)
Neden: id bu yükleme türüyle eşleşmiyor (tek görüntü vs ZIP batch)
Çözüm:
- Tek görüntü gönderimleri için /detect'ten dönen id'yi kullanın
- ZIP gönderimleri için /bulk-upload'tan dönen id'yi kullanın
Yardıma mı ihtiyacınız var?
API kullanımı veya teknik destek için lütfen bizimle iletişime geçin.
API sık sorulan sorular
AI image detection API'miz hakkında en sık sorulan soruların yanıtları.