Run scans from CI, push results into your dashboards, automate the boring parts of brand monitoring. Same data the web app uses, scripted however you like.
Single binary, zero config, MIT-licensed. Works in CI, scriptable as JSON output, and uses your account credentials so the same scans show up in the web app.
# install globally npm install -g misquoted # or with brew brew install misquoted/tap/misquoted # authenticate via browser SSO misquoted login # or via env var (for CI) export MISQUOTED_API_KEY="mqd_live_..."
# scan a single brand and wait misquoted scan --brand christmasornot --wait # scan all brands in your account, JSON misquoted scan --all --json > results.json # diff against the last scan misquoted diff --brand christmasornot # pipe into jq misquoted report latest --json | jq .score
name: AEO Check on: [push] jobs: aeo: runs-on: ubuntu-latest steps: - name: Run misquoted scan run: npx misquoted scan --brand $BRAND --fail-below 70 env: MISQUOTED_API_KEY: ${{ secrets.MISQUOTED_API_KEY }} BRAND: christmasornot
Same surface area as the CLI, no install required. Bearer-token auth, JSON in & out, idempotent POSTs with Idempotency-Key header.
curl https://api.misquoted.ai/v1/scans \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: a3f..." \ -d '{ "brand_id": "brnd_2v8c", "depth": "full", "wait": true }'
{
"id": "scan_8z2k...",
"brand_id": "brnd_2v8c",
"status": "completed",
"created_at": "2026-05-07T14:14:09Z",
"completed_at": "2026-05-07T14:16:42Z",
"score": {
"composite": 78,
"consensus": 82,
"accuracy": 74,
"seo_for_ai": 85,
"visibility": 71
},
"models": ["chatgpt-4o", "gemini-1.5-pro", "perplexity-sonar"],
"report_url": "https://app.misquoted.ai/r/8z2k..."
}
Limits are per-account, sliding-window. Burst is roughly 2× the per-minute limit. We return X-RateLimit-Remaining and Retry-After headers.
| Tier | Reads / min | Scans / day | Webhooks | SLO |
|---|---|---|---|---|
| Free | 30 | 1 | — | — |
| $49 Report | 60 | 3 (single report) | 1 endpoint | Best effort |
| Monitor ($399/mo) | 120 | 3 (re-scans) | 5 endpoints | 99.9% |
| Monitor Pro ($599/mo) | 300 | 10 | 20 endpoints | 99.95% |
| Agency / Enterprise | Custom | Custom | Unlimited | Custom |
Bearer tokens scoped per-key. Two key types: publishable (badge endpoint only, safe to ship in client code) and secret (all endpoints, server-side only). Rotate keys from the dashboard at any time — old keys remain valid for 24 hours after rotation.
Authorization: Bearer mqd_live_sk_8z2k... X-Idempotency-Key: # optional, for POSTs X-Request-ID: # optional, echoed in response
Free accounts get one publishable key. Paid accounts get unlimited keys with granular scopes.