Skip to content

Reporting endpoints

The read-only Omnipresence reporting API: the two routes, the eight resources they expose, every shared parameter, and how paging works.

Updated October 20, 2026

Read-only, versioned, and backed by the same read layer as the dashboard. Two routes cover it.

List your projects

GET /api/v1/projects
Authorization: Bearer omni_sk_...
http

Every project the key's account owns, with the ids the next route needs.

Read one resource

GET /api/v1/projects/:id/:resource
http

Where :resource is one of:

ResourceWhat comes back
overviewThe rates, share of voice and counts behind the overview screen
promptsTracked prompts, windowed
ai-searchesFan-out searches
sourcesSources, with ownership and citation state
citationsOne row per cited or retrieved source per run
runsOne row per probe
opportunitiesThe deduped source opportunity list
timeseriesA daily series for one metric

Shared parameters

ParameterValues
from, toYYYY-MM-DD. Omitted, a default window applies.
modegrounded, training or all. Default all.
limit1 to 200. Default 50.
cursorThe opaque cursor from a previous response, for runs and citations.
searchCase-insensitive substring match.
kindtracked, research or all.
external_idYour own prompt id, for joining to a study.

The timeseries metrics

timeseries needs a metric, one of:

  • mention_rate
  • share_of_voice
  • fanout_presence

An unknown metric returns a 400 that names the valid ones, so you do not have to guess from a response shape.

Response shape

JSON, with the payload under data. Figures are numbers rather than formatted strings, dates are ISO 8601, and money is in cents. A list carries the total and tells you whether it was truncated, so you can tell a short page from the end of the data.

Paging

Ask for the window you want, take the page size you want up to 200, and follow the cursor. Never page by incrementing an offset: runs and citations page on a keyset so a run is never split across two pages and nothing is skipped when new data lands mid-read.

A worked example

The grounded Visibility Score for last month, and the prompts behind it:

GET /api/v1/projects/PROJECT_ID/overview?from=2026-09-01&to=2026-09-30&mode=grounded
GET /api/v1/projects/PROJECT_ID/prompts?from=2026-09-01&to=2026-09-30&limit=200
http

For a one-off pull rather than something recurring, the CSV or XLSX export from the Runs screen is less work and carries the same records.

Questions about reporting endpoints

Will the numbers match the dashboard?
Yes. The API is backed by the same read layer as the console and the MCP, so a figure pulled here is the figure on screen.
Can I write through the API?
No. Every write lives on the MCP connection, which keeps the audit trail in one place.
Why does a list stop at 200?
That is the maximum page size. Follow the cursor the response gives you rather than raising the limit.

Related

Was this page helpful?

Not tracking yet?

Seven days free, on your own model key. Point it at one brand and read what comes back.

Start your free trial