Developer API
Check any website from your own app. Send a URL, get back the verdict, AI score, detected technologies and the evidence as JSON.
Authentication
Every request needs an API key. Send it in the X-API-Key header, or as an api_key parameter if you can't set headers. Keys are issued by the owner of this site: request one below.
X-API-Key: YOUR_KEY
Scan a website
Runs a full scan and returns the report. A new scan usually takes 5 to 30 seconds, so allow a timeout of about 2 minutes.
GETPOST
https://websnipr.com/api/scan.php
Parameters
| Name | Type | Description |
|---|---|---|
url Required | string | The website to scan, with or without https://, e.g. example.com. |
fresh | 0 or 1 | 1 skips saved results and always runs a new scan. |
api_key | string | Only if you can't send the X-API-Key header. |
Example request
curl -H "X-API-Key: YOUR_KEY" \
"https://websnipr.com/api/scan.php?url=example.com"
<?php
$ch = curl_init("https://websnipr.com/api/scan.php?url=" . urlencode("example.com"));
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["X-API-Key: YOUR_KEY"],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 120,
]);
$report = json_decode(curl_exec($ch), true);
echo $report["verdict_label"], " (", $report["ai_score"], "%)";
const res = await fetch(
"https://websnipr.com/api/scan.php?url=" + encodeURIComponent("example.com"),
{ headers: { "X-API-Key": "YOUR_KEY" } }
);
const report = await res.json();
console.log(report.verdict_label, report.ai_score);
import requests
r = requests.get(
"https://websnipr.com/api/scan.php",
params={"url": "example.com"},
headers={"X-API-Key": "YOUR_KEY"},
timeout=120,
)
report = r.json()
print(report["verdict_label"], report["ai_score"])
Response
A JSON object. Successful scans return HTTP 200 with "success": true. Example, shortened:
{
"success": true,
"cached": false,
"id": "k3m9x2p7qa",
"report_url": "https://websnipr.com/report/k3m9x2p7qa/example-com",
"url": "https://example.com/",
"verdict": "partial",
"verdict_label": "AI-Assisted",
"ai_score": 58,
"confidence": "medium",
"ai_parts": [
"Written content"
],
"headline": "AI appears to have been used for: Written content.",
"platform": "WordPress",
"categories": {
"platform": {
"score": 0
},
"code": {
"score": 12
},
"content": {
"score": 71
},
"media": {
"score": 0
}
},
"technologies": [
"WordPress",
"jQuery"
],
"technology_details": [
{
"name": "WordPress",
"group": "CMS & site generators",
"ai": null,
"version": "6.6.2",
"found_in": "generator"
}
],
"meta": {
"title": "Example",
"canonical": "https://example.com/",
"og": {
"og:title": "Example"
},
"jsonld": [
"Organization"
]
},
"http": {
"status": 200,
"http_version": "2",
"time": 0.214,
"https": true
},
"snapshot_url": "https://websnipr.com/snapshot.php?id=k3m9x2p7qa",
"findings": [
{
"type": "ai",
"category": "content",
"title": "AI-typical phrasing",
"weight": 34,
"evidence": [
"\"elevate your\" x3"
]
}
],
"stats": {
"pages": 4,
"words": 1830
}
}
Response fields
| Field | Type | Description |
|---|---|---|
verdict | string | full AI-Generated, partial AI-Assisted or none No AI Detected. |
verdict_label | string | The verdict as shown on the website. |
ai_score | integer | AI likelihood from 0 to 100. |
confidence | string | low, medium or high: how much evidence the verdict is based on. |
ai_parts | array | Which parts look AI-made: design & code, written content, images. |
platform | string|null | The detected builder or CMS, e.g. Lovable or WordPress. |
categories | object | Score per check: platform, code, content and media. |
technology_details | array | Every technology found, with its group, version and whether it is an AI builder. |
meta | object | Title, description, canonical URL, Open Graph, X card, structured data and other tags. |
http | object | Status, protocol, response time, HTTPS certificate, redirects, security headers and all headers. |
authority | object|null | Domain authority from Open PageRank: score (0 to 10), rank and domain. Null when no key is set or the domain is unknown. |
seo | object | SEO audit of the home page: score (0 to 100) and every check with its status and explanation. |
links | object | Internal and outbound link counts, social profiles and the domains the site links to. |
files | object | robots.txt (including AI crawler rules), sitemap, llms.txt, ads.txt, security.txt and humans.txt when found. |
findings | array | The evidence behind the verdict: type (ai, human, info), title, weight and samples. |
report_url | string | Shareable report page for this scan. |
snapshot_url | string|null | Screenshot of the site, when snapshots are enabled. |
health | object|null | Site health: overall score (0 to 100), grade (A to F) and the parts it is made of (seo, security, performance, accessibility). |
why | object | The findings that moved the AI score most: raised and lowered, each with title, category and points. |
security | object|null | Security score, grade and checks (HTTPS, certificate, headers, cookies, mixed content). |
performance | object|null | Speed score, grade, checks and raw metrics (response time, HTML size, scripts, images, third-party domains). |
privacy | object|null | Tracking level (low, medium, high), the trackers found with their category, consent tool, privacy policy link and cookies. |
accessibility | object|null | Accessibility score, grade and checks from an automatic check of the home page. |
readability | object|null | Words, reading time, Flesch reading ease, school grade and sentence length. |
link_check | object|null | Links on the home page that were checked, with the broken ones and their status. |
domain | object|null | Registration and expiry dates, registrar, status and DNSSEC (RDAP). |
dns | object|null | Name servers, DNS and email provider, MX, SPF, DMARC, DKIM, CAA and verified services. |
server | object|null | Server IP, hosting network, owner and country. |
pdf_url | string|null | Download link for the PDF report, when PDFs are enabled. |
cached | boolean | True when a recent saved result was returned instead of a new scan. |
Errors
Errors return "success": false and a readable error message.
{
"success": false,
"error": "Invalid or disabled API key."
}
| Status | Meaning | When it happens |
|---|---|---|
| 401 | Unauthorized | The API key is missing, wrong or disabled. |
| 403 | Forbidden | The API is turned off on this site. |
| 422 | Unprocessable | The site could not be scanned: invalid address, unreachable, blocked or not a web page. |
| 429 | Too many requests | The key reached its daily limit or the hourly rate limit. |
| 500 | Server error | Something went wrong while scanning. Try again later. |
Limits & caching
- Per key, per hour
- 120 scans
- Per key, per day
- Set for each key by the site owner
- Saved results
- Reused for 24 hours. Don't count against the hourly limit
Request API access
Tell us a little about your project and we'll email you a key once your request is approved.