List answers
/v1/answersReturns AI answers with their text, 1 row per answer, oldest first. The list has only complete answers, the same answers as the Results page of the dashboard: an answer that is still running or that failed is not in the list. start_date and end_date select answers by answered_at.
To get the brands and sources in each answer, call /v1/mentions and /v1/citations, and match their rows to the answers by answer_id. The answers of archived prompts are left out unless you send include_archived=true.
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.
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/answers?start_date=2026-09-01&end_date=2026-09-30&prompt_id=a41e7c52-3d6b-4f0a-9c8e-1b2d3e4f5a60&engine=chatgpt%2Cperplexity&country=US&include_archived=true&limit=50&offset=0"answers
{ "data": [ { "id": "f3a91c27-8d4e-4b5f-a6c7-9e0f1a2b3c4d", "prompt_id": "a41e7c52-3d6b-4f0a-9c8e-1b2d3e4f5a60", "prompt_text": "What is the best CRM for a 5 person sales team?", "engine": "chatgpt", "country": "US", "answered_at": "2026-10-07T04:12:55Z", "brand_mentioned": true, "brand_position": 2, "brand_sentiment": 42, "brands_ranked": 6, "citation_count": 9, "text": "For a 5 person team, the strongest options are Globex, Acme, and Initech.", "text_format": "markdown" } ], "meta": { "total": 1240, "limit": 1, "offset": 0, "has_more": true }}Update a competitor PATCH
Changes the status of a competitor to `tracked`, `suggested`, or `dismissed`, the same as the Competitors page of the dashboard. Reports use the new status at once, for past dates too. Your own brand's id gets status `400`, because the status of your own brand cannot change.
Get an answer GET
Returns 1 complete answer, with the brands it ranks or names and the sources it cites. The id of another brand's answer, or of an answer that is not complete, gets status `404`.