Rootquill REST API.
Base URL: https://api.rootquill.com. Auth: Authorization: Bearer rq_live_.... JSON in, JSON out.
Auth
Create an account. Body: {email, password, plan}. Returns {apiKey, account}.
Exchange email + password for a session API key.
Who am I? Returns the account for the Bearer token.
Revokes the Bearer token used for this request.
Change password. Body: {currentPassword, newPassword}.
List your API keys (masked). Marks the one used for this request as current.
Issue a new API key. Body: {label}. Returns the full key — shown once.
Revoke an API key.
Sites
List your sites with open / fixed issue counts.
Add a site. Body: {url, label}. 402 if plan limit reached (owners bypass).
Update the site's label.
Remove a site (keeps historical issues).
Scanner
Scan a URL. Body: {url, siteId?}. Returns new + existing issues. 422 if the target URL can't be fetched.
// response { "siteId": "...", "scannedUrl": "https://example.com", "newIssues": 4, "existingIssues": 0, "issues": [{ "kind": "missing-canonical", "severity": "med", ... }] }
Issues
List issues, severity-ranked, impact-ranked within severity.
Fetch a single issue.
Fixes
Return a step-by-step fix plan + patch. Pass ai=1 to use the AI backend for a tailored plan.
Mark an issue. Body: {status: "fixed" | "skipped" | "in-progress"}.
Analytics
Totals + per-site breakdown. Numbers computed from your real issue data, plus Cloudflare Analytics (page views, uniques, bandwidth, threats) if the site maps to a zone on your Cloudflare account.
Announcements
Active announcements targeted at your account.
Owner-only. Post a new announcement.
Support
Your tickets.
Open a ticket. Body: {subject, body, priority}.
Admin (owner-only)
Platform-wide totals: accounts, MRR, sites, issues, tickets, Stripe webhook events.
Search / filter accounts.
Full dossier: sites, issues, keys, tickets.
Update role / status / plan.
Revoke every API key for an account (without banning).
Hard-delete an account (cascades sites, issues, keys).
Every open support ticket across the platform.
Recent activity feed: signups, bans, payments.
Webhooks
Stripe webhook receiver. Verifies signature with STRIPE_WEBHOOK_SECRET. Not authed — don't call directly.
Errors
400— malformed input401— invalid or missing API key402— plan limit reached (upgrade)403— account banned or owner-required action404— not found422— scan target unreachable or non-HTML (not a server error)429— rate limited by Cloudflare WAF500— unhandled error (please file a support ticket with the request id)