AI visibility
Track how your brand appears across AI answer engines. These endpoints live under /v1/ai/generate and require the api-key header. See Authentication and What is AI visibility?.
Run a visibility report
POST /v1/ai/generate/seo-site-report
Queues a visibility report job for your workspace.
| Field | Type | Description |
|---|---|---|
websiteurl | string | HTTPS site to analyze (required unless refreshing with stored inputs) |
competitors | string[] | Competitor URLs or names |
prompts | string[] | Buyer prompts to evaluate (plan prompt limits apply) |
refresh | boolean | Re-run using the previous report when true |
curl https://api.krastie.ai/v1/ai/generate/seo-site-report \
-H "api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"websiteurl": "https://example.com",
"competitors": ["https://competitor.com"],
"prompts": ["best tools for AI visibility tracking"]
}'
{
"message": "Report queued",
"jobId": "123"
}
Poll with Async jobs until the job completes, then fetch the report.
Refresh an existing report
curl https://api.krastie.ai/v1/ai/generate/seo-site-report \
-H "api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"refresh": true}'
Refresh reuses the previous websiteurl, competitors, and prompts when you omit overrides. Paid plans allow a limited number of refreshes per 24 hours.
Prefill competitors and prompts
POST /v1/ai/generate/seo-site-report/prefill
Suggests competitors and prompts from a website. Useful before queuing a full report.
| Field | Type | Description |
|---|---|---|
websiteurl | string | Required HTTPS URL |
competitors | string[] | Optional seed competitors |
prompts | string[] | Optional seed prompts (must stay within plan limit) |
curl https://api.krastie.ai/v1/ai/generate/seo-site-report/prefill \
-H "api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"websiteurl":"https://example.com"}'
{
"message": "Prefill suggestions generated successfully",
"promptLimit": 20,
"input": {
"websiteurl": "https://example.com",
"competitors": [],
"prompts": []
},
"suggestions": {
"competitors": [],
"prompts": []
},
"prefill": {
"competitors": [],
"prompts": []
}
}
Use prefill.competitors and prefill.prompts when calling the report endpoint.
Get the latest report
GET /v1/ai/generate/seo-site-report
| Query | Description |
|---|---|
sort | desc (default) or asc by createdAt |
curl "https://api.krastie.ai/v1/ai/generate/seo-site-report" \
-H "api-key: YOUR_KEY"
When no report exists:
{
"message": "Seo Geo Report not found",
"isEmpty": true
}
When a report exists, the response includes (shape abbreviated):
{
"message": "Seo Geo Report fetched successfully",
"isEmpty": false,
"input": {
"websiteurl": "https://example.com",
"competitors": [],
"prompts": []
},
"scores": {
"aiVisibility": {
"score": 72,
"interpretation": null,
"providers": {}
}
},
"report": {},
"recommendations": [],
"refreshMeta": { "count": 0 }
}
Get visibility history
GET /v1/ai/generate/seo-site-report/history
Returns chronological score points for charts (overall, self, and competitor fields).
curl https://api.krastie.ai/v1/ai/generate/seo-site-report/history \
-H "api-key: YOUR_KEY"
{
"message": "Seo Geo Report history fetched successfully",
"points": [
{
"timestamp": "2026-07-01T12:00:00.000Z",
"time": "2026-07-01T12:00:00.000Z",
"overall": 70,
"self": 68
}
]
}
Limits and errors
| Status | Common cause |
|---|---|
400 | Missing/invalid websiteurl, no prior report for refresh, or too many prompts for the plan |
403 | Free audit already used, refresh blocked on free plan, or AI credit limit reached |
429 | Refresh limit reached (paid plans: limited refreshes per 24h) |
500 | Failed to queue or generate the report |
Website URLs must use https:// (not http://). Prompt counts are capped by plan. See Errors & rate limits.