API documentation

Run scans programmatically.

One REST endpoint, JSON in, JSON out. Available on Pro / Agency plans. Free plans can call it for development, rate-limited to 10 scans / day.

Quick start

Send a POST to https://airankgrow.com/api/scan with a JSON body containing a domain. The response includes the visibility score, per-prompt and per-engine breakdown, and the brands cited.

curl -X POST https://airankgrow.com/api/scan \
  -H "content-type: application/json" \
  -H "authorization: Bearer YOUR_API_KEY" \
  -d '{"domain":"stripe.com"}'

Authentication

Pass your API key as a Bearer token in the Authorization header. Generate one in your dashboard under Settings → API keys. Free-tier scans (no Bearer token) are rate-limited to 10 / day per IP.

Request

POST /api/scan

Body:

{
  "domain": "stripe.com",      // required, the domain to scan
  "email": "[email protected]"   // optional, for free-tier lead capture
}

Response

Returns 200 with a JSON body on success.

{
  "id": "cmpgqltck00029nqp36g0rgqb",
  "domain": "stripe.com",
  "brandName": "Stripe",
  "category": "saas",
  "visibilityScore": 42,
  "prompts": ["What is...", ...],
  "results": [
    {
      "engine": "chatgpt",          // chatgpt | gemini | claude
      "prompt": "What is...",
      "mentioned": true,
      "position": 1,                 // null if not cited
      "citationContext": "...",
      "allBrandsCited": ["Stripe", "PayPal", ...]
    },
    // one result per (prompt, engine) combination
  ]
}

Engines covered

Visibility score

A 0–100 weighted blend of three signals:

Rate limits

Error responses

Errors return non-2xx HTTP codes with a JSON error body.

{
  "error": "Invalid request",
  "details": {
    "fieldErrors": {
      "domain": ["String must contain at least 3 character(s)"]
    }
  }
}

Webhooks (Pro / Agency)

On Pro plans, you can register webhook URLs that fire when a scheduled scan completes. We POST the same response body as the scan endpoint, plus a scheduledScanId field.

SDKs & tooling

We don't maintain official SDKs — the API is simple enough that fetch() or requests.post()covers 99% of use cases. Community SDKs welcome; ping us and we'll list them.


See pricing for API access →