AKILI API
REST API for security scans and OSINT modules. Responses stream as plain text during scans, then finish with a JSON report. Sign in on the web app or use named API keys from the dashboard.
—
Quick start
1. Create an account and open Developers in the dashboard.
2. Generate a named live key (ak_live_…).
3. POST to a scan endpoint with Authorization: Bearer <session> or X-API-Key.
4. Read the stream until you see COMPLETE:{...json...}, or fetch the report later by scan_id.
curl -X POST BASE/api/v1/scan/website \
-H "Authorization: Bearer YOUR_JWT" \
-H "X-API-Key: ak_live_xxxx" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com"}'
Authentication
All scan routes require a signed-in user. Use either method below (both can be sent together).
| Header | Description |
|---|---|
Authorization | Bearer <JWT> from POST /api/v1/auth/login or register |
X-API-Key | Named key from POST /api/v1/keys/generate (ak_live_ or ak_test_) |
X-Session-Token | Same JWT as Bearer (browser convenience) |
Content-Type | application/json on POST bodies |
Session endpoints
Body: email, password, confirm_password, optional name, phone.
{"email":"you@example.com","password":"secret123","confirm_password":"secret123","name":"Ada Lovelace"}{"email":"you@example.com","password":"secret123"}Returns user and usage (plan, monthly module counts, caps).
Streaming scans
Scan POST endpoints return text/plain with one line per event, for example:
[AKILI] Starting website assessment…
[TOOL] fingerprint — running
[FOUND] Missing HSTS header
[DONE] Report ready
COMPLETE:{"scan_id":"…","score":72,"grade":"B",…}Parse the final line starting with COMPLETE: as JSON, or call GET /api/v1/report/{scan_id} afterward.
Rate limits
Limits depend on your plan and module. Response headers:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Max requests in the window |
X-RateLimit-Remaining | Requests left |
X-RateLimit-Reset | Unix reset time |
X-AKILI-Tier | Effective tier (free, trial, premium, sandbox) |
HTTP 429 when monthly module quota or hourly cap is exceeded. HTTP 403 for premium-only modules on free plan.
Scan endpoints
All require authentication. Body must be JSON. Unless noted, response is a streaming scan.
Website security: headers, SSL, DNS, ports, tech stack.
{"url":"https://example.com"}Misconfiguration and exposure checks (CORS, cookies, etc.).
{"url":"https://example.com"}{"domain":"example.com"}{"ip":"8.8.8.8"}Public OSINT only — authorized due diligence.
{"name":"Jane Doe","keywords":"engineer Lagos"}{"email":"user@example.com"}{"domain":"example.com"}Premium / trial. ASN and organizational footprint.
{"name":"Acme Corp","domain":"acme.com"}{"name":"Acme Corp","domain":"acme.com"}Generic API scanner: exercises common HTTP methods and returns per-method responses and optional diffs vs GET.
Body (JSON):
{
"url": "https://example.com",
"methods": ["GET", "POST"],
"headers": {"X-Test": "1"},
"form_payload": {"q":"test"},
"auth": {"type":"basic","username":"u","password":"p"},
"timeout": 8,
"diff": true
}Notes: POST/PUT/PATCH will send a small non-destructive payload by default. Use `form_payload` to send `application/x-www-form-urlencoded` data.
Multi-module template: pre_launch, freelancer, vendor, full, etc.
{"template":"pre_launch","target":"https://example.com"}Reports & history
Full JSON report for a completed scan (must belong to your account).
Paginated list of your scans. Query params: type, q (target filter).
Delete one report from your history.
API keys
{"name":"Production CI","sandbox":false}Lists named keys (preview only, not the secret).
Revoke a key.
Sandbox
Mock data for demos — use ak_test_ keys or sandbox routes without hitting live targets.
Scenarios include clean_scan, risky_scan. Same modules as production sandbox paths.
Instant mock JSON report (no stream).
Errors
| Status | Typical cause |
|---|---|
401 | Missing or invalid session / API key |
403 | Module not on your plan |
404 | Unknown scan_id or report not yours |
429 | Rate or monthly quota exceeded |
400 | Validation (URL, email, IP, key name missing) |
Plans
Public list of modules, trial length, and limit tables.
API and optional Groq LLM connectivity status.