NUNUapakah ini dibuat AI?

Halaman ini adalah salinan untuk dibaca; tombol dan formulir di dalamnya tidak aktif di sini. Pemeriksa yang berfungsi ada di halaman depan, dan akun serta API tetap berjalan di isthisaigenerated.app.

Referensi API · Beta terbuka

Bangun dengan konteks.

Panduan klien yang praktis untuk gambar, video sampel, pekerjaan, dan berkas tinjauan.

API pemeriksa publik

Pemeriksa situs gratis memanggil endpoint yang aman untuk browser tanpa kunci API tenant. Gambar dan video sampel tidak memiliki kuota pemindaian harian atau bulanan. Batas ukuran media, piksel terdekode, jumlah bingkai, dan validasi tetap berlaku. Permintaan memerlukan izin tepat berupa Origin.

POST /v1/public/image-checkMultipart JPEG/PNG, maksimal 4 MB dan 25 juta piksel terdekode.
POST /v1/public/video-checkJSON dengan 1–5 bingkai sampel, badan permintaan maksimal 30 MB. Analisis bingkai sampel, bukan analisis deepfake temporal.
GET /v1/public/jobs/{job_id}Polling pekerjaan gambar/video dengan header tertutup X-Job-Token header.
POST /v1/public/feedbackKirim umpan balik hasil gambar seminimal mungkin memakai token hasil yang telah ditandatangani.
Contoh gambar publik
curl --fail-with-body -sS https://api.isthisaigenerated.app/v1/public/image-check \
  -H 'Origin: https://isthisaigenerated.app' \
  -F 'file=@./photo.jpg'

# A fresh image queues. The reply then carries job_id and job_token; poll with the
# token in the header until status is "completed", starting about a second later.
curl --fail-with-body -sS https://api.isthisaigenerated.app/v1/public/jobs/JOB_ID \
  -H 'Origin: https://isthisaigenerated.app' \
  -H 'X-Job-Token: JOB_TOKEN'

Hasilnya adalah sinyal peringatan, bukan bukti asal-usul. Lihat referensi Swagger langsung, atau unduh OpenAPI JSON untuk skema permintaan dan respons, header, serta kode kesalahan.

Akun tanpa kata sandi dan kunci API

POST /v1/auth/magic-links menerima sebuah email dan selalu mengembalikan teks penerimaan yang umum. Pakai token sekali-pakainya dengan POST /v1/auth/magic-links/consume; responsnya memasang cookie sesi HTTP-only dan mengembalikan token CSRF. Simpan CSRF di sessionStorage, kirim credentials: include, dan sertakan X-CSRF-Token beserta Origin tepercaya pada penulisan dari browser.

GET /v1/model-infoModel gambar aktif, backend, ambang batas, dan kebijakan hanya-peringatan.
GET /v1/accountEmail, tenant, peran, pemakaian gratis, saldo berbayar, dan total yang tersedia.
GET / POST / DELETE /v1/account/api-keysMenampilkan metadata, membuat kunci yang hanya ditampilkan sekali, atau mencabutnya. Penulisan memerlukan pemilik + CSRF.

Integrasi server mengirim Authorization: Bearer $API_KEY. Jangan pernah menaruh kunci di kode browser, localStorage, URL, log, atau atribut data.

Token dan penagihan prabayar

Setiap akun menerima 100 token gratis tiap bulan UTC. Token berbayar tidak hangus. Paketnya 1.000 seharga €5, 5.000 seharga €25 , dan 20.000 seharga €100: €0,005/token, pembayaran Stripe sekali bayar, tanpa langganan dan tanpa tagihan kelebihan otomatis.

OperasiTokenStatus publik
Gambar1 / permintaanJalur yang didukung
Video tenant1 / bingkai yang dikirim, hingga 8Gabungan yang didukung
API teks1 / permintaanBukan jalur publik yang didukung
POST /v1/billing/checkout-sessionsSesi pemilik + CSRF + Idempotency-Key yang baru; badan permintaan hanya berisi bundle_code. Alihkan hanya ke url yang dikembalikan.
GET /v1/billing/orders/{order_id}Status pesanan dalam cakupan tenant.
GET /v1/billing/ledgerBuku besar token berbayar.

HTTP 402 berarti token habis, 409 berarti kunci idempotensi bentrok, dan 503 berarti penagihan sedang tidak tersedia.

Pemeriksaan gambar

POST /v1/assets/check menerima JSON dengan JPEG base64 atau multipart dengan berkas JPEG/PNG.

Multipart
curl "$BASE_URL/assets/check" \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@./sample.jpg" \
  -F "client_asset_id=asset-001" \

Bentuk JSON
{
  "client_asset_id": "asset-001",
  "thumb_jpeg_base64": "<base64 omitted>",
  
}

Kolom permintaan

KolomTipeWajib / arti
fileJPEG/PNGGambar multipart kecuali sidik jarinya cocok
thumb_jpeg_base64stringJPEG resolusi rendah dalam JSON kecuali sidik jarinya cocok
client_asset_idstringReferensi pemanggil / penanda idempotensi, opsional
frame_sha256 / frame_phashstringSidik jari persis / perseptual, opsional
booleanOpsional; true secara bawaan, false mengantrekan inferensi baru

Contoh respons

200 JSON
{
  "asset_id": "asset_example", "job_id": null, "status": "known",
  "label": "possible_synthetic_indicators", "score": 0,84,
  "confidence": null, "thresholds": {"possible_synthetic_indicators": 0,8},
  "source": "model", "model": "active-model-version",
  "cached": false, "ttl_seconds": 86400
}

Penanda dan angka di sini menggambarkan skemanya; itu bukan hasil tolok ukur dan bukan keluaran yang dijamin.

Video sampel

POST /v1/videos/check-frames menerima hingga 8 objek permintaan gambar ditambah sebuah penanda stabil video_footprint. Gunakan 5–8 bingkai yang mewakili. Ini bukan analisis deepfake temporal.

Permintaan JSON
{
  "video_footprint": "stable-footprint",
  "frames": [{"thumb_jpeg_base64": "[BASE64_OMITTED]"}],
  
}

KolomTipeBatasan
video_footprintstringSidik jari pemanggil yang stabil; dianjurkan
framesAssetCheckRequest[]0–8 bingkai; gunakan 5–8 pada permintaan pertama
booleanBawaan true

Contoh respons gabungan

200 JSON
{
  "status": "known", "label": "possible_synthetic_indicators",
  "score": 0,83, "median_score": 0,83, "mean_score": 0,82,
  "max_score": 0,86, "frame_count": 6, "scored_frame_count": 6,
  "pending_frame_count": 0, "frames": [], "cached": false,
  "source": "video_aggregate"
}

Respons sungguhan memuat objek respons per bingkai. Ulangi dengan footprint yang sama dan tanpa bingkai untuk mencari di cache. Bila tidak ditemukan, ia mengembalikan unknown.

Pekerjaan dan aset tersimpan

Inferensi gambar berjalan asinkron: respons awalnya berisi status: processing dan sebuah job_id. Tidak ada mode sinkron — dulu ada kolom sync yang didokumentasikan di sini, tetapi tidak pernah ada yang membacanya.

GET /v1/jobs/{job_id}Polling processing, completed atau failed. Pekerjaan yang selesai memuat result.
GET /v1/assets/{asset_id}Ambil hasil lengkap dalam cakupan tenant.
Pekerjaan selesai
{"job_id":"job_example","status":"completed","result":{"asset_id":"asset_example","status":"known","label":"possible_synthetic_indicators"}}

Kebijakan klien yang dianjurkan: polling setelah 1, 2, 4, 8 lalu 10 detik; batasi setiap jeda berikutnya pada 10 detik dan berhenti setelah 60 detik atau saat completed/failed. Saat ini server tidak menjamin batas waktu itu dan tidak menyediakan webhook atau kontrak Retry-After .

Siklus peninjauan manusia

POST /v1/reviewsMultipart file, wajib declared_ai_use, pemasok dan catatan bersifat opsional.
GET /v1/reviewsMenampilkan berkas tenant; belum ada kontrak paginasi selama beta.
GET /v1/reviews/{review_id}Ambil satu berkas.
POST /v1/reviews/{review_id}/decisionCatat disclose, no_disclosure, reject, atau recheck.
GET /v1/reviews/{review_id}/exportEkspor JSON.
DELETE /v1/reviews/{review_id}Hapus; berhasil berarti 204.
Buat tinjauan
curl "$BASE_URL/reviews" \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@./sample.jpg" \
  -F "declared_ai_use=unknown" \
  -F "supplier=Example supplier"

JSON keputusan
{"decision":"disclose","reviewer":"reviewer@example.invalid","rationale":"Disclosure selected after source and detector review."}

Respons tinjauan memuat review_id, status pending/completed, hash konten, nama berkas, pernyataan, asal-usul, detektor, keputusan opsional, kebijakan, serta cap waktu dibuat/diperbarui. Ia tidak pernah menolak atau menerbitkan konten secara otomatis.

Status HTTP

StatusArti
200 / 204Selesai atau dihapus
400Masukan tidak sah atau tidak didukung
401 / 403Kunci hilang, kunci tidak sah, atau cakupan tidak memadai
404Sumber daya tenant tidak ditemukan
413Unggahan melebihi batas maksimum yang disetel
422Validasi JSON bertipe gagal
429Batas laju per kunci terlampaui
503Ketergantungan produksi atau worker belum siap

Kesalahan memakai {"detail":"error_code"}; misalnya {"detail":"invalid_api_key"}. Setiap respons memuat X-Request-ID. Pengiriman gambar asinkron saat ini tetap mengembalikan respons endpoint biasa dengan status: processing; jangan berasumsi HTTP 202.