List cited URLs

GET
/brands/{brandId}/citations/urls

Individual pages the engines cited, with their category and page type.

Authorization

BearerAuth
headerAuthorizationBearer <token>

An instance admin key from ADMIN_API_KEYS, or an organization key (elmo_…) issued from the dashboard.

Path Parameters

brandId*string

Brand identifier.

Query Parameters

start*string

Inclusive lower bound of the window, an ISO 8601 timestamp such as 2026-01-01T00:00:00Z. Aligned down to the quarter hour, the grain analytics are aggregated at; where a response repeats the window, it repeats the aligned one. A bare YYYY-MM-DD is rejected: that is /prompts/{promptId}/snapshot's spelling and means a local calendar day there.

Formatdate-time
end*string

Exclusive upper bound of the window, an ISO 8601 timestamp, also aligned down to the quarter hour. The window is half-open: a run at exactly end is outside it. start and end inside one quarter-hour bucket leave an empty window and are rejected.

Formatdate-time
model?string

Restrict to one model, e.g. chatgpt. See GET /models.

tags?string

Comma-separated prompt tags. Only prompts carrying at least one of them are counted.

Response Body

List cited URLs

application/json
  1. response
brandId*string
range*

The window the response was computed over, echoed back as the half-open instants it resolved to.

totals*
data*array<>

Every URL cited over the window, ordered by citation count.

curl -X GET 'https://app.elmohq.com/api/v1/brands/string/citations/urls?start=2019-08-24T14%3A15%3A22Z&end=2019-08-24T14%3A15%3A22Z'
{  "brandId": "string",  "range": {    "start": "2019-08-24T14:15:22Z",    "end": "2019-08-24T14:15:22Z"  },  "totals": {    "citations": 0,    "uniqueDomains": 0,    "uniqueUrls": 0  },  "data": [    {      "url": "http://example.com",      "domain": "string",      "title": "string",      "category": "brand",      "pageType": "homepage",      "count": 0,      "promptCount": 0,      "isNew": true    }  ]}