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
- chatgpt — OpenAI gpt-4o-mini with the web_search tool
- gemini — Google gemini-2.5-flash with Google Search grounding
- claude — Anthropic claude-sonnet-4-5 with web_search
- perplex — Perplexity Sonar (coming soon)
Visibility score
A 0–100 weighted blend of three signals:
- Mention rate (70%) — of all prompt × engine combinations, how many cited you?
- Position quality (20%) — when cited, how high in the listed brands?
- Sentiment context (10%) — favorable / neutral / negative framing
Rate limits
- Free — 10 scans / day per IP
- Starter — 50 scans / month
- Growth — 500 scans / month
- Pro / Agency — 5,000 scans / month + 60 req/min burst
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)"]
}
}
}- 400 — invalid request body
- 401 — missing or invalid API key
- 429 — rate limit exceeded
- 500 — internal error (rare; we'll page ourselves)
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.