CitationsCitations Time Series

Citations Time Series

Daily count of citation entries on LLM responses that point to a tracked brand domain.

curl --request GET \
  --url 'https://api.aiclicks.io/api/v1/citations-time-series?domain_id=8f1d3c0a-2f9b-4c11-9b80-7a82e1f0c3f3&days=30' \
  --header 'Authorization: Bearer ak_live_xxx'
{
  "data": {
    "items": [
      { "date": "2026-05-19", "value": 4 },
      { "date": "2026-05-20", "value": 7 },
      { "date": "2026-05-21", "value": 2 }
    ]
  },
  "domain_id": "8f1d3c0a-2f9b-4c11-9b80-7a82e1f0c3f3",
  "days": 30,
  "generated_at": "2026-06-17T10:00:11.218Z"
}

Citations is the raw count of citation entries in LLM responses that pointed to the brand domain each day, summed across every model channel.

value = sum over models of brand_citation_count

brand_citation_count for a (date, model) is the total number of citation array entries on responses that day whose URL host matches the tracked brand. The metric uses the same per-day, per-model SQL as the prompts page Mentions chart, so the values reconcile.

A response that cites three different brand URLs contributes three. A response with no brand citations contributes zero. For the share-of-citations percentage on the same data, use GET /citability-time-series.

domain_id is a required query parameter. Use GET /api/v1/domains to discover which domains the calling key can access.

Authorizations

header
Authorizationstring
Required

Your API key formatted as Bearer ak_live_<your-key>. Create one in the dashboard under Settings → Developers.

header
X-Request-Idstring

Optional UUID for log correlation. If omitted, we generate one and echo it back in the response.

Query parameters

query
domain_idstring
Required

UUID of the domain. Find domains via GET /api/v1/domains. Omitting this returns 400.

query
daysinteger

Look-back window, 1–365. Defaults to 30. Counted as an exact window (today - days + 1), not snapped to buckets.

query
modelstring

Optional. Use one AI channel only. Give the generic name: ChatGPT, Perplexity, Gemini, AI Overviews, AI Mode, Claude, Microsoft Copilot, Grok, Meta AI, Mistral, Qwen, DeepSeek or Naver. The default is all.

query
start_datestring

Optional. The first day of a fixed window, in YYYY-MM-DD format. Send it with end_date. A fixed window overrides days.

query
end_datestring

Optional. The last day of a fixed window, in YYYY-MM-DD format. The window includes this day. Send it with start_date.

query
topic_idsarray

Optional. Use only the prompts in one of these topics. Get the UUIDs from GET /api/v1/topics. Repeat the parameter for each ID. If you also send tag_ids, the API keeps a prompt that matches a topic or a tag.

query
tag_idsarray

Optional. Use only the prompts that have one of these tags. Get the UUIDs from GET /api/v1/tags. Repeat the parameter for each ID.

query
freshboolean

Optional. If true, the API ignores the cached result and calculates a new one. The new result replaces the cached one. The default is false.

Response

dataobject
Required

The list payload.

data.itemsarray
Required

One row per day in the window, oldest first. Days with no responses are omitted.

domain_idstring
Required

Echo of the requested domain.

daysinteger
Required

Echo of the requested window.

generated_atstring
Required

ISO-8601 timestamp of when the server produced (or cached) this response.

Response headers

HeaderDescription
X-CacheHIT or MISS. Indicates whether the response came from cache.
X-Request-IdUnique request id. Echoes incoming if you set one.
X-RateLimit-LimitMax requests per minute for this key.
X-RateLimit-RemainingRequests remaining in current minute.
X-RateLimit-ResetUnix epoch seconds when the window resets.

Caching

Cached for 1 hour. The cache key includes every query parameter. Newly completed analyses appear after the TTL expires.

How citations is calculated

For each (date, model) in the window:

  1. Take every response that ran on a tracked prompt at that date and model.
  2. For each response, walk its citations array and count entries whose URL host matches the brand domain.

Then sum those per-model counts within each date — that's the day's value. The unit is citation entries, not unique URLs: if a response's citations array contains the same brand URL twice, both entries count. The brand domain is resolved from the domain's configured website host with exact-host matching.

Errors

400 Bad Requesterror

domain_id query parameter missing. Body points you at /api/v1/domains.

401 Unauthorizederror

Missing, malformed, or revoked API key.

403 Forbiddenerror

Team's developer_access flag is off, the domain belongs to a team your API key is not scoped to, or your allowed_domains allowlist excludes it.

404 Not Founderror

domain_id is malformed, does not exist, or your user is not a member of its team.

429 Too Many Requestserror

Rate limit exceeded. Inspect the Retry-After header for how long to wait.

Empty result

If no analyses ran in the window, the response is a successful 200 with an empty list:

{
  "data": { "items": [] },
  "domain_id": "8f1d3c0a-2f9b-4c11-9b80-7a82e1f0c3f3",
  "days": 30,
  "generated_at": "2026-06-17T10:00:11.218Z"
}