The grader, as an API.
Real website audits over one REST call: performance and Core Web Vitals, SEO, AI visibility, accessibility, and security, from real Google Lighthouse and axe-core data. Async jobs, webhook delivery, per-key quotas. Free tier, no card.
One call, real data back.
Start an audit with your key. You get a job id back instantly, then poll it or let us POST the result to your webhook when it's done.
cURL
curl -X POST https://grader-api.luxeplatforms.com/v1/audit \
-H "Authorization: Bearer lxg_live_your_key" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
# → { "status": "queued", "id": "42", "poll": "/v1/audit/42" }JavaScript
const res = await fetch("https://grader-api.luxeplatforms.com/v1/audit", {
method: "POST",
headers: {
Authorization: "Bearer lxg_live_your_key",
"Content-Type": "application/json",
},
body: JSON.stringify({ url: "https://example.com" }),
});
const { id } = await res.json();Python
import requests
r = requests.post(
"https://grader-api.luxeplatforms.com/v1/audit",
headers={"Authorization": "Bearer lxg_live_your_key"},
json={"url": "https://example.com"},
)
job_id = r.json()["id"]Base URL: https://grader-api.luxeplatforms.com · Auth: Authorization: Bearer <key> (server-side only, never ship a key to the browser)
Priced on throughput, not nickel-and-dimed.
| Plan | Price | Audits | Rate | Notes | |
|---|---|---|---|---|---|
| Free | $0 | 25 / mo | 5 / min | Test & build | Get a key → |
| Starter | $9 / mo | 250 / mo | 10 / min | $0.05 / audit over | Subscribe → |
| Pro | $39 / mo | 2,000 / mo | 20 / min | $0.03 / audit over | Subscribe → |
| Agency | $199 / mo | 15,000 / mo | 60 / min | White-label · $0.02 over | Subscribe → |
| Enterprise | Custom | Custom | Dedicated | SLA · own capacity | Contact → |
The public grader UI stays free for humans. These limits are for programmatic API access. Overage steps down as you scale, so heavier use gets cheaper per audit.
POST /v1/audit
Start an audit. Returns a job id immediately (or a cached result if the same URL was graded in the last 30 minutes). Pass an optional webhookURL and we'll POST the finished report to it.
POST /v1/audit
{
"url": "https://example.com",
"webhook": "https://you.com/hooks/grader" // optional
}
// 200
{ "status": "queued", "id": "42", "poll": "/v1/audit/42", "position": 0 }
// or, on a cache hit:
{ "status": "completed", "cached": true, "result": { ... } }GET /v1/audit/:id
Poll a job. Returns queued, active, then completed with the full report (grade, per-category scores, findings, screenshots, crawl, and a shareable report id).
GET /v1/audit/42
{ "status": "completed", "result": {
"url": "https://example.com/",
"grade": "B", "overall": 88, "issueCount": 6,
"categories": [ { "id": "performance", "score": 79, "findings": [ ... ] }, ... ],
"shareId": "1c48a2784742"
} }GET /v1/usage
Your key's current tier, monthly usage, and limits.
GET /v1/usage
{ "tier": "free", "monthlyLimit": 25, "used": 3,
"remaining": 22, "perMinuteLimit": 5, "resets": "2026-07 (UTC month)" }Skip the polling.
Register a webhookon the audit request and we'll POST the completed report straight to you the moment it's done. Same payload as a finished poll.
POST https://you.com/hooks/grader
{
"event": "audit.completed",
"result": { "url": "...", "grade": "B", "overall": 88, "categories": [ ... ], "shareId": "..." }
}Every delivery is signed. Verify the X-Grader-Signature header (t=timestamp,v1=hmac) against your webhook signing secret from the dashboard so you know the call is really from us:
import crypto from "crypto";
const sig = req.headers["x-grader-signature"]; // "t=...,v1=..."
const { t, v1 } = Object.fromEntries(sig.split(",").map((p) => p.split("=")));
const expected = crypto
.createHmac("sha256", WEBHOOK_SIGNING_SECRET)
.update(t + "." + rawBody)
.digest("hex");
const valid = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(v1));Want a key?
The API is live. We're handing out keys to early developers now. Tell us what you're building and we'll get you set up.
Request an API keyAlready subscribed? Sign in to your dashboard