API
The Asky API lets you pull your AI-search visibility data into your own systems: a data warehouse, a BI tool, an internal dashboard, or any automation you run.
It is a REST API over HTTPS. It returns JSON, uses standard HTTP status codes, and authenticates with a workspace API key you create on the Connections page.
Reads are included on every Asky plan, and writes on Scale and above. Owners and admins create keys on the API tab of the Connections page (click your name at the bottom of the sidebar, then Connections). If you do not see that tab, contact us and we will check your workspace’s access.
Base URL
https://api.askylabs.com/v1Every request must use HTTPS. Requests over plain HTTP are refused rather than redirected, because a redirect would send your API key over an unencrypted connection first.
Reads and writes
Reads work on every plan. Writes work on Scale and above, and cover the things you manage in the app: prompts, topics, tags, competitors, Brand Knowledge documents, writing styles, plan items, Brand Alignment settings, and starting scans and audits. For example:
- Create a prompt and update a prompt
- Create a topic and create a competitor
- Update a task’s status
- Start a technical audit
The full list is under Endpoints in the sidebar.
Keys are read-only by default. A key only gets write permissions if you choose Read and Write when you create it, and only if the workspace holds the write entitlement at that moment. If yours does not, a write returns 403 plan_required and a leaked key cannot alter anything.
Every write also requires an Idempotency-Key, so a retried request cannot apply twice.
What you can read
| Area | Examples |
|---|---|
| Visibility | Daily visibility and mention rate, per engine, per topic, per country |
| Competitors | Share of voice, rankings, and per-competitor profiles |
| Prompts | Tracked prompts, their metrics over time, individual executions, and the AI answers behind them |
| Citations | Cited domains and URLs, earned mentions, and per-domain drill-downs |
| Website | Indexed pages and how they perform as citation sources |
The full endpoint list lives in the OpenAPI specification , which is generated from the same definitions that serve the API, so it never drifts from the implementation.
Your first request
curl https://api.askylabs.com/v1/me \
-H "Authorization: Bearer asky_sk_..."{
"data": {
"workspace_id": "8f14e45f-...",
"scopes": ["read:basic", "read:visibility", "read:citations", "read:prompts",
"read:opportunities", "read:website", "read:content"],
"brand_access": "all",
"created_by": "8f14e45f-..."
},
"request_id": "req_01J8Z3K9QW"
}See the quickstart for a complete walkthrough.
Response shape
Every successful response is a JSON object with the same top-level keys.
{
"data": [ ... ],
"pagination": { "limit": 20, "has_more": true, "next_cursor": "eyJrIjoi..." },
"meta": { "period": { "start_date": "2026-07-15", "end_date": "2026-08-14" } },
"request_id": "req_01J8Z3K9QW"
}dataholds the result. It is an object for single resources and an array for lists.paginationappears only on list endpoints. See pagination.metadescribes the result set rather than any row in it, most often the date window actually used. It appears only where an endpoint has something to say.request_ididentifies this exact request in our logs. Include it in any support conversation.
Errors use a different envelope, described in error handling.
Treat response objects as open. We add fields within a version, so your client must ignore properties it does not recognise. See versioning.
Where to go next
- Quickstart creates a key and walks through a first integration.
- API keys explains how authentication works and what a key can reach.
- Manage API keys covers rotation, revocation, and storage.
- Pagination, filtering and expanding responses cover reading data at scale.
- Common integrations shows the patterns most people build.
- Error handling covers what to retry, and testing covers how to prove it works.
If you want your AI assistant to query Asky conversationally rather than writing an integration, use the MCP server instead. It reads the same data through a different door.