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.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.
| Operasi | Token | Status publik |
|---|---|---|
| Gambar | 1 / permintaan | Jalur yang didukung |
| Video tenant | 1 / bingkai yang dikirim, hingga 8 | Gabungan yang didukung |
| API teks | 1 / permintaan | Bukan 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.
curl "$BASE_URL/assets/check" \
-H "Authorization: Bearer $API_KEY" \
-F "file=@./sample.jpg" \
-F "client_asset_id=asset-001" \{
"client_asset_id": "asset-001",
"thumb_jpeg_base64": "<base64 omitted>",
}Kolom permintaan
| Kolom | Tipe | Wajib / arti |
|---|---|---|
file | JPEG/PNG | Gambar multipart kecuali sidik jarinya cocok |
thumb_jpeg_base64 | string | JPEG resolusi rendah dalam JSON kecuali sidik jarinya cocok |
client_asset_id | string | Referensi pemanggil / penanda idempotensi, opsional |
frame_sha256 / frame_phash | string | Sidik jari persis / perseptual, opsional |
| boolean | Opsional; true secara bawaan, false mengantrekan inferensi baru |
Contoh respons
{
"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.
{
"video_footprint": "stable-footprint",
"frames": [{"thumb_jpeg_base64": "[BASE64_OMITTED]"}],
}| Kolom | Tipe | Batasan |
|---|---|---|
video_footprint | string | Sidik jari pemanggil yang stabil; dianjurkan |
frames | AssetCheckRequest[] | 0–8 bingkai; gunakan 5–8 pada permintaan pertama |
| boolean | Bawaan true |
Contoh respons gabungan
{
"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.{"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.curl "$BASE_URL/reviews" \
-H "Authorization: Bearer $API_KEY" \
-F "file=@./sample.jpg" \
-F "declared_ai_use=unknown" \
-F "supplier=Example supplier"{"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
| Status | Arti |
|---|---|
| 200 / 204 | Selesai atau dihapus |
| 400 | Masukan tidak sah atau tidak didukung |
| 401 / 403 | Kunci hilang, kunci tidak sah, atau cakupan tidak memadai |
| 404 | Sumber daya tenant tidak ditemukan |
| 413 | Unggahan melebihi batas maksimum yang disetel |
| 422 | Validasi JSON bertipe gagal |
| 429 | Batas laju per kunci terlampaui |
| 503 | Ketergantungan 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.
NU