Developers · API v1 · CLI 0.8.2

misquoted, in the shell or via REST

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.

120ms
p50 latency
99.97%
90-day uptime
14
Endpoints
MIT
CLI license
~/projects/christmasornot
$ npm install -g misquoted
+ misquoted@0.8.2
added 1 package in 1.4s

$ misquoted login
Opening browser… ✓ authenticated as alex@christmasornot.com

$ misquoted scan --brand christmasornot --wait
Scanning christmasornot.com…
├─ Crawled site (12 pages, 38s)
├─ ChatGPT (6/6 queries, 4.2s)
├─ Gemini (6/6 queries, 5.1s)
├─ Perplexity (6/6 queries, 6.8s)
└─ Scored consensus (1.1s)

Score: 78 Verified (was 24)
View → https://app.misquoted.ai/r/8z2k...
Part 01 · Command Line

The misquoted CLI

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 & auth bash
# 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_..."
Run a scan bash
# 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
CI snippet · GitHub Actions yaml
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
Part 02 · REST API

REST API

Same surface area as the CLI, no install required. Bearer-token auth, JSON in & out, idempotent POSTs with Idempotency-Key header.

POST /v1/scans curl
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
  }'
200 OK · response json
{
  "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..."
}

Endpoint reference

GET
/v1/scans
List recent scans, paginated. Filters: brand_id, status, date range.
read
POST
/v1/scans
Trigger a new scan. Sync (with wait=true) or async (returns 202 with status URL).
write
GET
/v1/scans/:id
Retrieve a single scan by ID. Includes score breakdown and report URL.
read
GET
/v1/brands
List brands in your account. Supports keyword search and pagination.
read
POST
/v1/brands
Create a new brand. Requires name + domain. Returns brand_id.
write
GET
/v1/brands/:id
Brand details, latest score, scan history summary.
read
GET
/v1/reports/:id
Full report payload — consensus matrix, claim verdicts, raw model outputs.
read
GET
/v1/reports/:id.pdf
Rendered PDF version of the report. Same content, print-formatted.
read
POST
/v1/webhooks
Register a webhook URL with event-type filters and signing secret.
write
GET
/v1/webhooks
List registered webhooks. Includes last-delivery status per endpoint.
read
DEL
/v1/webhooks/:id
Remove a webhook subscription. Already-queued deliveries still fire.
write
GET
/v1/badge/:brand_id
Public, unauthenticated. Returns the AI Readiness badge SVG (CDN-cached, 1h TTL).
public
Part 03 · Limits & Auth

Rate limits, by tier

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

Authentication

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 header http
Authorization: Bearer mqd_live_sk_8z2k...
X-Idempotency-Key: # optional, for POSTs
X-Request-ID: # optional, echoed in response

Get an API key

Free accounts get one publishable key. Paid accounts get unlimited keys with granular scopes.

Open key manager →
More for developers

Specs, SDKs, and the deep end

OpenAPI 3.1 spec TypeScript SDK Python client Full /api-docs →