Lumirank API docs
Reports

Get the citations report

GET/v1/reports/citations

Shows the websites and pages that AI engines cite for your prompts. The report has 1 row for each cited domain, or 1 row for each cited page with the url dimension. The counts are the same as in the domain and URL tables on the Citations page of the dashboard.

If dimensions has neither domain nor url, the report adds domain. So dimensions=week returns 1 row for each week and domain. In each group, the citation_share of all rows adds up to 1. citation_rate divides by the answers that the visibility report gives for the same group. The citations in the answers of archived prompts are left out unless you send include_archived=true. This applies to the citations and to the answers that citation_rate divides by.

Authorization

apiKey
AuthorizationBearer <token>

An API key that you create in the Lumirank dashboard, on the Settings > API keys page. Send it in the Authorization header: Bearer lr_....

In: header

Query Parameters

start_date?string

The first day of the date range, as a UTC date in the format YYYY-MM-DD. The range includes this day. The default is 29 days before end_date, so the default range is 30 days.

Formatdate
end_date?string

The last day of the date range, as a UTC date in the format YYYY-MM-DD. The range includes this day. The default is today. The range can be at most 90 days long.

Formatdate
dimensions?string

How to split the report into rows. Send domain (the default) or url, but not both. You can add up to 3 more, separated by commas: day, week, or month (only 1 of these 3), engine, country, and prompt.

engine?string

The engines to include, separated by commas: chatgpt, gemini, perplexity, ai_mode, copilot, google_ai_overview, claude. Without it, every engine is included.

country?string

The countries to include, separated by commas, as 2-letter ISO 3166-1 country codes in capital or small letters. Without it, every country is included.

prompt_id?string

The ids of the prompts to include, separated by commas. Without it, every prompt that is not archived is included. The id of an archived prompt gets status 400 unless you send include_archived=true.

intent?string

The intents of the prompts to include, separated by commas: brand, comparison, how_to, informational, other. The intent of a prompt is what its question asks for. Intent is only a filter: you cannot use it as a dimension.

domain?string

The cited domains to include, separated by commas, in small letters and without www., for example g2.com.

is_own_domain?string

Send true for only your own domains, or false for only the other domains. Without it, the report has both.

content_type?string

The page types to include, separated by commas: social_media, community, blog, docs, news, education, brand, government. The report counts only the citations of pages of these types.

include_archived?boolean

Send true to include the answers of archived prompts. The default is false: they are left out, as in the dashboard.

Defaultfalse
order_by?string

How to sort the rows. Send up to 3 columns, separated by commas. Add :asc after a column for the smallest values first, or :desc for the largest first. Without either, the order is asc. You can sort by any column that the report returns. The default order is by the time dimension if you ask for one, then by citations, largest first.

limit?integer

The number of rows on each page, from 1 to 10000. The default is 1000.

Formatint32
offset?integer

The number of rows to skip before this page starts, from 0 to 100000. The default is 0.

Formatint32

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/reports/citations?start_date=2026-09-01&end_date=2026-09-30&dimensions=week%2Curl&engine=chatgpt%2Cperplexity&country=US&prompt_id=a41e7c52-3d6b-4f0a-9c8e-1b2d3e4f5a60&intent=comparison&domain=g2.com%2Creddit.com&is_own_domain=false&content_type=community&include_archived=true&order_by=citations%3Adesc&limit=1000&offset=0"

top domains

{  "data": [    {      "domain": "g2.com",      "is_own_domain": false,      "domain_rating": 91,      "citations": 88,      "cited_answers": 61,      "citation_share": 0.0412,      "citation_rate": 0.1481,      "last_cited_at": "2026-09-30T05:12:00Z"    },    {      "domain": "acme.com",      "is_own_domain": true,      "domain_rating": 64,      "citations": 57,      "cited_answers": 49,      "citation_share": 0.0267,      "citation_rate": 0.1189,      "last_cited_at": "2026-09-30T04:40:00Z"    }  ],  "meta": {    "report": "citations",    "start_date": "2026-09-01",    "end_date": "2026-09-30",    "dimensions": [      "domain"    ],    "include_archived": false,    "order_by": [      "citations:desc"    ],    "limit": 1000,    "offset": 0,    "total": 214,    "has_more": false,    "data_through": "2026-09-30T05:12:00Z"  }}