Developers

API Documentation

Detect AI builders, tech stacks, hosting, and confidence scores for any URL — programmatically.

Base URLhttps://www.aiwebsitedetector.com/api/v1
FormatJSON
AuthAPI Key (Bearer / header)

Authentication

Every request must include your API key. You can pass it two ways:

Option A — Authorization header

Authorization: Bearer YOUR_API_KEY

Option B — X-Api-Key header

X-Api-Key: YOUR_API_KEY

API keys are available on the dashboard. Contact us if you need a key.

Endpoints

POSTGET/api/v1/scanDetect a website

Scans a URL and returns the detected builder, tech stack, hosting, and confidence score. Results are cached for 1 hour — subsequent requests for the same URL return instantly.

Request body (POST)

{ "url": "https://example.com" }

Query param (GET)

GET /api/v1/scan?url=https://example.com

Example — cURL

curl -X POST https://www.aiwebsitedetector.com/api/v1/scan \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://framer.com"}'

Response

{
  "url":          "https://framer.com",
  "builder":      "Framer",
  "builderSlug":  "framer",
  "confidence":   "high",
  "category":     "visual-builder",
  "technologies": ["React", "Framer Motion", "Cloudflare"],
  "hosting":      "Framer",
  "siteType":     "marketing",
  "cached":       false
}

Response fields

FieldTypeDescription
urlstringResolved final URL after redirects
builderstring | nullDetected builder name (e.g. Framer, Webflow, WordPress)
builderSlugstring | nullSlug identifier for the builder
confidence"high" | "medium" | "low" | nullDetection confidence level
categorystring | nullBuilder category (ai-builder, cms, ecommerce, etc.)
technologiesstring[]Detected technologies and services
hostingstring | nullDetected hosting provider
siteTypestring | nullType of site (marketing, ecommerce, blog, etc.)
cachedbooleantrue if result was served from cache
GET/api/v1/meAPI key info & usage

Returns your API key details, current usage, and remaining quota for the billing month.

Example — cURL

curl https://www.aiwebsitedetector.com/api/v1/me \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

{
  "name":                "My App",
  "email":               "you@example.com",
  "plan":                "starter",
  "requests_used":       42,
  "requests_limit":      1000,
  "requests_remaining":  958,
  "resets_on":           "2026-04-01",
  "last_used_at":        "2026-03-27T10:30:00.000Z",
  "created_at":          "2026-03-01T00:00:00.000Z"
}

Rate Limits

Per-minute limit

30

requests / minute per key

Monthly limit

Plan-based

resets on the 1st of each month

Rate limit headers are included in every response:

X-RateLimit-Limit: 30
X-RateLimit-Remaining: 28
X-RateLimit-Reset: 1743084060
Retry-After: 60   # only on 429 responses

When the per-minute limit is exceeded you'll receive a 429 Too Many Requests response. When monthly quota is exceeded the scan endpoint returns 429 until the next reset.

Error Codes

StatusMeaning
200Success
400Bad request — missing or invalid url parameter
401Unauthorized — missing, invalid, or revoked API key
429Rate limit exceeded — slow down or check monthly quota
500Server error — scan failed (try again)
503Service unavailable — maintenance or API access disabled

All error responses include an error field with a human-readable message.

Code Examples

Node.js / fetch

const res = await fetch("https://www.aiwebsitedetector.com/api/v1/scan", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ url: "https://example.com" }),
});
const data = await res.json();
console.log(data.builder, data.confidence);

Python

import requests

response = requests.post(
    "https://www.aiwebsitedetector.com/api/v1/scan",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={"url": "https://example.com"},
)
data = response.json()
print(data["builder"], data["confidence"])

Need a higher quota or have questions? Get in touch →