AI Chats History
const url = 'https://sitechecker.pro/api/v1/ai-visibility/ai-chats/history?project_id=12345&date_from=2026-02-19&date_to=2026-05-19&metric=visibility&entity_scope=owner&history_grouping=daily&include_owner=true';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://sitechecker.pro/api/v1/ai-visibility/ai-chats/history?project_id=12345&date_from=2026-02-19&date_to=2026-05-19&metric=visibility&entity_scope=owner&history_grouping=daily&include_owner=true' \ --header 'Authorization: Bearer <token>'Returns time-series points for Brand Visibility or Citation Share inside the selected range, for the project or for competitor entities. Comparing the owner against a competitor on one chart is a comparison between entities in the same period, not a previous-period comparison.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Example
12345Project ID.
Example
2026-02-19Start of the monitoring period (inclusive), ISO date (UTC).
Example
2026-05-19End of the monitoring period (inclusive), ISO date (UTC).
The single metric to chart. One request returns one metric.
Owner returns one line for the project; competitors returns one line per tracked competitor.
Bucket size for the returned points.
With entity_scope=competitors, also return the project line as a benchmark.
Filter by AI platform.
Filter by the country the prompts were run for.
Narrow the result to one tracked prompt.
Comma-separated competitor ids to chart.
Comma-separated competitor domains to chart, as an alternative to competitor_ids.
Maximum number of competitor lines to return.
Responses
Section titled “Responses”AI Chats time-series
object
Visibility / citation_share time-series inside the selected range. entity_scope=owner returns a single owner line; entity_scope=competitors returns competitor entity lines (optionally with the owner benchmark).
object
The metric that was charted, echoed back from the request.
Whether the chart covers the project or its competitors, echoed back from the request.
One entry per line in the chart.
One entity time-series line. entity_type=owner has entity_label=null and is_owner=true.
object
Whether the line is the project or a tracked competitor.
Host key of the entity.
Competitor brand; null for the owner series.
True on the project line, so it can be styled as the benchmark.
The line itself, one point per bucket.
object
Bucket start date (daily/weekly/monthly grouping).
Value of the requested metric in this bucket.
AI Chats meta block for the history endpoint: the standard block plus the bucket size that was applied to the points.
object
Project the response was built for.
Start of the period the response covers.
End of the period the response covers.
The ai_model filter that was applied, echoed back. all when the request did not narrow it down.
The country filter that was applied, echoed back. null when no country filter was sent.
Whether AI Chats tracking is connected and usable for this project.
object
Latest AI-chat data date available for this project, null when there is none.
object
Bucket size the points were grouped by.
Example
{ "data": { "metric": "visibility", "entity_scope": "owner", "series": [ { "entity_type": "owner", "entity_key": "semrush.com", "entity_label": "Semrush", "is_owner": false, "points": [ { "date": "2026-05-01", "value": 33.33 } ] } ] }, "meta": { "project_id": 12345, "date_from": "2026-05-01", "date_to": "2026-05-31", "ai_model": "all", "country": null, "source_status": { "ai_chat": "connected" }, "data_freshness": { "ai_chat_date": "2026-06-30" }, "history_grouping": "daily" }}Missing or invalid API key
Returned as INVALID_API_KEY when the key is missing or unknown, and as REVOKED_API_KEY when the key exists but was revoked — the latter needs a new key.
object
object
Example
{ "error": { "code": "INVALID_API_KEY", "message": "Invalid or missing API key." }}No active API entitlement for the account, or the project belongs to another account
Returned as MISSING_PUBLIC_API_ACCESS when the account has no active API entitlement, and as ACCESS_DENIED when the requested project belongs to another account.
object
object
Example
{ "error": { "code": "MISSING_PUBLIC_API_ACCESS", "message": "API access is not available: the account has no active API entitlement." }}Project not found
The exact missing resource is in error.code: PROJECT_NOT_FOUND, SEGMENT_NOT_FOUND, CRAWL_NOT_FOUND, KEYWORD_NOT_FOUND, OPPORTUNITY_NOT_FOUND, SNAPSHOT_UNAVAILABLE or NOT_FOUND.
object
object
Example
{ "error": { "code": "PROJECT_NOT_FOUND", "message": "Project not found." }}Validation error or unsupported filter
Rejected query parameters. error.code is VALIDATION_ERROR for parameter validation (including a query parameter the endpoint does not accept), or INVALID_DATE_RANGE / INVALID_FILTER / INVALID_EVENT_TYPE / UNSUPPORTED_FILTER / UNSUPPORTED_DIMENSION / UNSUPPORTED_METRIC / UNSUPPORTED_SCOPE / SEGMENT_FILTER_UNSUPPORTED for module-specific rules.
object
object
Example
{ "error": { "code": "VALIDATION_ERROR", "message": "project_id is required." }}Rate limit exceeded — retry after the interval in the Retry-After header
object
object
Example
{ "error": { "code": "RATE_LIMIT_EXCEEDED", "message": "Rate limit exceeded. Try again later." }}Internal server error
object
object
Example
{ "error": { "code": "INTERNAL_ERROR", "message": "Internal server error." }}