Aiso API Documentation | AI Visibility, Citations and MCP
Aiso API
Programmatic access to your AI visibility data. Query tracked prompts, brand mentions, visibility, sentiment, position, and the sources cited by ChatGPT and Gemini. All endpoints return JSON and authenticate with a per-account API key.
This API is in beta. Endpoints and response shapes may evolve.
Authentication
Include your API key in the x-api-key header on every request. You have one key per account. For project-specific calls, also send x-aiso-project-id with the project UUID. Generate a key in the Aiso app. Keys are stored as SHA-256 hashes, so the raw key is shown once on creation and cannot be retrieved again.
Example Requests
curl -X GET "https://app.getaiso.com/api/v1/projects" \
-H "x-api-key: aiso_abc123..."
curl -X GET "https://app.getaiso.com/api/v1/prompts" \
-H "x-api-key: aiso_abc123..." \
-H "x-aiso-project-id: YOUR_PROJECT_UUID"
Rate limits
Default limits are 10 requests per minute and 20 requests per day per API key. Admins can adjust these per user. Every response includes headers you can use to manage retries.
| Header | Description |
|---|---|
X-RateLimit-Limit |
Max requests in the current window. |
X-RateLimit-Remaining |
Requests remaining before throttling. |
X-RateLimit-Reset |
Seconds until the window resets. |
Base URL
https://app.getaiso.com/api/v1
Models and filtering
Aiso tracks two AI models. Use gpt for OpenAI ChatGPT with web search and gemini for Google Gemini with Google Search grounding. Report endpoints accept a flexible query body with dates, pagination, dimensions, filters, and sort order.
| Parameter | Type | Description |
|---|---|---|
start_date |
string (YYYY-MM-DD) | Snapshots on or after this date. |
end_date |
string (YYYY-MM-DD) | Snapshots on or before this date. |
limit |
number (1–10,000) | Max rows. Default 1,000. |
offset |
number | Skip N rows. Default 0. |
dimensions |
string[] | Break down by prompt_id, model_id, date, week, or month. |
filters |
object[] | `{ field, operator: "in" |
order_by |
object[] | `{ field, direction: "asc" |
Example Report Body
{
"start_date": "2025-09-01",
"end_date": "2025-10-01",
"dimensions": ["date"],
"filters": [
{ "field": "model_id", "operator": "in", "values": ["gpt"] }
],
"order_by": [{ "field": "visibility", "direction": "desc" }],
"limit": 100
}
Key Endpoints
GET/projects
Returns project metadata. Without x-aiso-project-id, it lists all projects with summary fields. With the header, it returns one project including full domain_data.
POST/projects
Requires domain only. The server runs domain analysis once, saves domain_data, and returns it. Optional fields: country, language, entity_type, and prompts.
GET/prompts
List the prompts tracked in the project. Optionally filter by topic with ?topic=pricing.
GET/brands
List the tracked brands, meaning your brand plus its competitors.
GET/snapshots
List analysis snapshots. Each snapshot is one visibility analysis run.
POST/reports/brands
Measure visibility for your brand and competitors across tracked prompts. Each result includes mention rate, sentiment, and average position.
POST/reports/domains
Find the domains cited by AI models in their responses. Filter by model_id or domain, then order by used_count or citation_count.
POST/reports/urls
Drill into individual cited pages. Filter with model_id, domain, or url.
Common Requests
Overall visibility for all brands
{ }
Daily visibility trend for your brand
{
"dimensions": ["date"],
"filters": [
{ "field": "brand_id", "operator": "in", "values": ["Your Brand"] }
]
}
Visibility by AI model (GPT vs Gemini)
{
"dimensions": ["model_id"]
}
Troubleshooting
| Status | Meaning |
|---|---|
400 |
Missing x-aiso-project-id on a project-scoped route, or missing required body field |
401 |
Missing or invalid API key |
403 |
Visibility data not available yet (analysis not run) |
409 |
Setup or prompt write already completed for this project |
429 |
Rate limit exceeded |
Errors
Error responses always return { "error": "message" }.
| Status | Meaning |
|---|---|
401 |
Missing or invalid API key. |
403 |
Visibility data not available yet. |
409 |
Setup or prompt write already completed, or project limit reached. |
404 |
Project or resource not found. |
429 |
Rate limit exceeded. |
500 |
Internal server error. |