List mentions
/v1/mentionsReturns 1 row for each brand that a complete answer ranks or names, oldest answer first. Inside an answer, the ranked brands come first. A brand that the answer names only in its text has position: null. Your own brand has rows too, with is_self: true.
To get the rows of 1 brand, send its competitor_id. For example, the id of Globex returns every answer that ranks or names Globex.
Authorization
apiKey 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
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.
dateThe 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.
dateThe 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.
Return only the rows of 1 brand. Send an id from /v1/competitors, or the competitor_id from /v1/brand for your own brand.
The engines to include, separated by commas: chatgpt, gemini, perplexity, ai_mode, copilot, google_ai_overview, claude. Without it, every engine is included.
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.
Send true to include the answers of archived prompts. The default is false: they are left out, as in the dashboard.
falseThe number of rows on each page, from 1 to 100. The default is 50.
int32The number of rows to skip before this page starts. The default is 0. For the next page, add limit to offset.
int32Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/mentions?start_date=2026-09-01&end_date=2026-09-30&prompt_id=a41e7c52-3d6b-4f0a-9c8e-1b2d3e4f5a60&competitor_id=c77d2e91-5b4a-4f3c-8d2e-7a6b5c4d3e21&engine=chatgpt%2Cperplexity&country=US&include_archived=true&limit=50&offset=0"mentions
{ "data": [ { "answer_id": "f3a91c27-8d4e-4b5f-a6c7-9e0f1a2b3c4d", "answered_at": "2026-10-07T04:12:55Z", "engine": "chatgpt", "country": "US", "prompt_id": "a41e7c52-3d6b-4f0a-9c8e-1b2d3e4f5a60", "competitor_id": "c77d2e91-5b4a-4f3c-8d2e-7a6b5c4d3e21", "competitor_name": "Globex", "is_self": false, "position": 1, "sentiment": 55 }, { "answer_id": "f3a91c27-8d4e-4b5f-a6c7-9e0f1a2b3c4d", "answered_at": "2026-10-07T04:12:55Z", "engine": "chatgpt", "country": "US", "prompt_id": "a41e7c52-3d6b-4f0a-9c8e-1b2d3e4f5a60", "competitor_id": "5e0b3f71-9a2c-4d8e-b6f4-2c1d0e9f8a73", "competitor_name": "Acme", "is_self": true, "position": 2, "sentiment": 42 } ], "meta": { "total": 5310, "limit": 2, "offset": 0, "has_more": true }}List citations GET
Returns 1 row for each source that a complete answer cites, oldest answer first, then in the order of the sources in the answer. To get the rows of 1 domain, send `domain`. For example, `domain=g2.com` returns every citation of `g2.com`. For the total citations of each domain or page, use the citations report.
Get the brands report GET
Compares your brand with your tracked competitors. The report has 1 row for each brand in each group, with the brand's visibility and share of voice. It counts every brand by the same rules as the comparison charts in the dashboard. Every brand in the report has a row in every group that has answers, with `mentions: 0` when no answer named the brand. `visibility` counts the answers that rank a brand or name it in the text. `share_of_voice` counts only the answers that rank it, and the shares of all brands in a group add up to 1. The `competitor_id` filter only chooses which rows to return after the numbers are calculated, so it does not change `share_of_voice`.