Reference

API documentation

Every endpoint is served from /api/public/v1 and requires an approved API key. Create one from the dashboard.

Authentication

Send your key as a bearer token. x-api-key and ?key= are also accepted.

curl https://your-domain/api/public/v1/filters \
  -H "Authorization: Bearer lll_your_key_here"

Identity forwarding

If you build a bot or app on top of the API, tell us who your end user is. Each user then gets their own upstream allowance, so one heavy user can't rate-limit everyone else. The caller's IP is always forwarded automatically.

  • X-Forward-User-Uuid header or ?uuid= — a stable UUID for the user in your app.
  • X-Forward-Discord-Id header or ?discord= — the user's Discord snowflake.

Per-user buckets allow 10 checks/minute and 200/hour. Always send the same value for the same person — never a random value per request, and never your own server's IP.

curl https://your-domain/api/public/v1/check/cleanbrowsing/example.com \
  -H "Authorization: Bearer lll_your_key_here" \
  -H "X-Forward-Discord-Id: 1234567890123456789"

Limits

  • 60 requests per minute per key.
  • Up to 5 active keys per account.
  • Free web checker: 20 links per run, 200 links per hour per IP.

Endpoints

GET/api/public/v1/filters

Returns every filter id available for checks, plus its display name and category.

{
  "filters": [
    { "id": "cleanbrowsing", "name": "CleanBrowsing", "kind": "dns" }
  ]
}
GET/api/public/v1/lightspeed/:site

LightSpeed content scan. Fetches the site and scores its page for game and proxy signals, returning a verdict of DETECTED, Not Detected or Unavailable, plus the scores and matched signals.

curl "https://your-domain/api/public/v1/lightspeed/example.com" \
  -H "Authorization: Bearer lll_your_key_here"

{
  "site": "example.com",
  "verdict": "Not Detected",
  "gameScore": 0,
  "proxyScore": 0,
  "gameDetected": false,
  "proxyDetected": false,
  "signals": { "gameText": [], "proxyBrands": [] },
  "ms": 210
}
POST/api/public/v1/lightspeed

Batch LightSpeed scan: up to 20 sites per request, one full result each.

curl -X POST "https://your-domain/api/public/v1/lightspeed" \
  -H "Authorization: Bearer lll_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"sites":["example.com","another-site.org"]}'

{
  "results": [
    { "site": "example.com", "verdict": "Not Detected", "gameScore": 0, "proxyScore": 0, "...": "..." }
  ],
  "rejected": []
}
GET/api/public/v1/check/:filter/:site

Checks one site against one filter.

{
  "site": "example.com",
  "filter": "cleanbrowsing",
  "status": "unblocked",
  "category": null,
  "ms": 82
}
POST/api/public/v1/bulk

Checks many sites against many filters in one call (max 50 sites × 10 filters).

curl -X POST https://your-domain/api/public/v1/bulk \
  -H "Authorization: Bearer lll_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"links":["example.com"],"filters":["cleanbrowsing","quad9"]}'
GET/api/public/v1/check-all/:site

Checks a site against every filter. Streams server-sent events by default; append ?mode=static for a single JSON response.

curl -N "https://your-domain/api/public/v1/check-all/example.com?key=lll_your_key_here"

curl "https://your-domain/api/public/v1/check-all/example.com?mode=static" \
  -H "Authorization: Bearer lll_your_key_here"
POST/api/public/v1/gen-api-key

Owner keys only. Mints a new API key and attaches the requester's details, so a third-party bot can hand out keys. Every mint is logged.

curl -X POST https://your-domain/api/public/v1/gen-api-key \
  -H "Authorization: Bearer lll_owner_key" \
  -H "Content-Type: application/json" \
  -d '{"discord_id":"1234567890","username":"someone","email":"someone@example.com"}'
GET/api/public/v1/me

Returns the account behind a key: weekly quota, key tier, and the linked Discord account (ID, username, email and every server the user is in). When no Discord account is connected the response includes a connect_url to start linking.

curl https://your-domain/api/public/v1/me \
  -H "Authorization: Bearer lll_your_key_here"
GET/api/public/v1/discord/:id

Owner keys only. Looks up a linked Discord account by Discord ID, username or account email — useful for bots that need to resolve who a key belongs to.

curl https://your-domain/api/public/v1/discord/1234567890 \
  -H "Authorization: Bearer lll_owner_key"

Connect Discord

  1. 1. Sign in and open your dashboard.
  2. 2. Press “Link your Discord” and approve the Discord consent screen.
  3. 3. We store your Discord ID, username, email and server list — readable through /api/public/v1/me.

API calls are mirrored to the owner’s Discord log channel; owner-tier accounts are never logged.

GET/logo

The LLLogan mark as a raw PNG — safe to hotlink in embeds and bots.

https://your-domain/logo
GET/api/public/status

No key required. Current health plus 24h uptime history: hourly buckets and recent incidents.

{
  "status": "operational",
  "latencyMs": 331,
  "history": {
    "uptime24h": 0.998,
    "hours": [{ "start": "...", "uptime": 1, "state": "operational", "samples": 58 }],
    "incidents": [{ "start": "...", "end": "...", "state": "degraded", "samples": 2 }]
  }
}

Errors

  • 401 — missing, invalid or revoked key.
  • 403 — account not approved yet.
  • 429 — rate limit exceeded.

Filter catalogue (27)

Aristotle K12aristotlek12
Blocksiblocksi
Blocksi AIblocksiai
Ciscocisco
CleanBrowsingcleanbrowsing
ContentKeepercontentkeeper
Deledaodeledao
DNSFilterdnsfilter
Forcepointforcepoint
FortiGuardfortiguard
Gagglegaggle
GoGuardian v2goguardianv2
GoGuardian v3goguardianv3
Haparahapara
ibossiboss
LanSchool v1lanschoolv1
Lightspeedlightspeed
Linewizelimewize
Palo Altopaloalto
Questitoquestito
Securlysecurly
Sensosenso
Smoothwall v1smoothwallv1
Smoothwall v2smoothwallv2
Sophossopho
StudentKeeperstudentkeeper
Zscalerzscaler