DEVELOPER API / V1

Developer API

Integrate AI image detection into your app. Upload an image and receive a score and verdict.

$14.99

Buy Developer once for lifetime API access. Refill with any pack.

1,500

Paid credits

Each successful API check uses one paid credit. Daily free checks are web-only.

JPEG · PNG · WebP

10 MiB / 40 MP

Results are estimates, not proof of authenticity.

Quick start

Keep API keys secret. Use them on your server only.

cURL
curl 'https://isthisimageai.org/api/v1/detect' \
  -H "Authorization: Bearer $ISTHISIMAGE_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -F 'image=@photo.jpg'
Python
import os, uuid, requests

with open("photo.jpg", "rb") as image:
    response = requests.post(
        "https://isthisimageai.org/api/v1/detect",
        headers={"Authorization": "Bearer " + os.environ["ISTHISIMAGE_API_KEY"],
                 "Idempotency-Key": str(uuid.uuid4())},
        files={"image": ("photo.jpg", image, "image/jpeg")}, timeout=120)
print(response.status_code, response.json())
Node.js
import { readFile } from 'node:fs/promises';

const form = new FormData();
form.set('image', new Blob([await readFile('photo.jpg')], { type: 'image/jpeg' }), 'photo.jpg');
const response = await fetch('https://isthisimageai.org/api/v1/detect', {
  method: 'POST',
  headers: { Authorization: 'Bearer ' + process.env.ISTHISIMAGE_API_KEY,
             'Idempotency-Key': crypto.randomUUID() },
  body: form
});
console.log(response.status, await response.json());
{"ok":true,"request_id":"…","result":{"score":0.92,"verdict":"likely_ai"},"credits_charged":1,"remaining_credits":1499}

Usage and limits

Each successful API check uses one paid credit. Daily free checks are web-only.

POST /api/v1/detect
10 / min · 2 concurrent
GET /api/v1/usage
60 / min
Idempotency-Key
UUID v4

Any confirmed Developer refund removes API access from that purchase.

400INVALID_REQUEST / INVALID_IMAGE
401INVALID_API_KEY
402INSUFFICIENT_CREDITS
403API_ACCESS_REQUIRED
409IDEMPOTENCY_CONFLICT
409REQUEST_IN_PROGRESS
409CONCURRENCY_LIMIT
413IMAGE_TOO_LARGE
415UNSUPPORTED_IMAGE
429RATE_LIMITED
503API_UNAVAILABLE / DETECTOR_UNAVAILABLE
504PROVIDER_TIMEOUT
500INTERNAL_ERROR