Lumirank API docs

How reports work

The 3 reports, the query parameters they all take, and the rows they return.

The 3 reports

EndpointEach row isUse it to learn
GET /v1/reports/visibilityyour brand in 1 groupHow often AI answers name my brand, how high they rank it, and how positive they are about it.
GET /v1/reports/brands1 brand in 1 group: your brand and each tracked competitorHow my brand compares with its competitors, and what my share of voice is.
GET /v1/reports/citations1 cited domain in 1 group, or 1 cited page with the url dimensionWhich websites and pages AI engines cite for my prompts.

A group is a set of answers that have the same values for the dimensions you ask for, for example the same week and the same engine. With no dimensions, the whole date range is 1 group. See Dimensions.

Query parameters

Every report takes the same query parameters. Every parameter is optional:

GET /v1/reports/brands?start_date=2026-09-01&end_date=2026-09-30&dimensions=week,engine&country=US,GB&order_by=share_of_voice:desc
ParameterDefaultMore details
start_date, end_datethe last 30 daysDates and time zones
dimensionsnoneDimensions
engine, country, prompt_id, intent, and the filters of each reportno filterFilters
include_archivedfalse: the answers of archived prompts are left outFilters
order_by, limit, offsetdepends on the reportSorting and paging

A report is a normal GET request, so you can use the same URL in a script, a spreadsheet, or a BI tool. Reports never change any data, so a read key can call them.

What a report returns

Each row is a JSON object with 1 key per column. So pandas.DataFrame(body["data"]) turns the rows into a table directly:

{
  "data": [
    {
      "week": "2026-09-14",
      "engine": "chatgpt",
      "competitor_id": "5e0b3f71-9a2c-4d8e-b6f4-2c1d0e9f8a73",
      "competitor_name": "Acme",
      "is_self": true,
      "answers": 412,
      "mentions": 173,
      "visibility": 0.4199,
      "ranked": 160,
      "share_of_voice": 0.2871
    }
  ],
  "meta": {
    "report": "brands",
    "start_date": "2026-09-01",
    "end_date": "2026-09-30",
    "dimensions": ["week", "engine"],
    "country": ["US", "GB"],
    "include_archived": false,
    "order_by": ["share_of_voice:desc"],
    "limit": 1000,
    "offset": 0,
    "total": 48,
    "has_more": false,
    "data_through": "2026-09-30T06:41:12Z"
  }
}

This example shows 1 row and leaves out some of its columns. meta lists the parameters the report used, with the defaults filled in, so you can see exactly what it counted. data_through is the time of the newest answer inside the date range.

Rules for all reports

  • Rates are fractions from 0 to 1, rounded to 4 decimals. When a rate has nothing to divide by, it is null.
  • You can add up counts across rows, but not rates or averages. See Metrics.
  • A group with no answers has no row.
  • In the brands report, every group with answers has a row for every brand in the report, with mentions: 0 when no answer named the brand. So a chart of a competitor has a point for every week, even a week when no answer named it.

On this page