For the complete documentation index, see llms.txt. Every page on this site is also served as Markdown: append `.md` to any URL, or send `Accept: text/markdown`.
Attensira Logo
Attensira

REST API endpoint

GET /v1/analytics/{area} — the eight ranked slices of your data

One call returns an aggregated, ordered slice of your tracking data for a window, across eight areas from workspace visibility down to AI crawler activity.

Karl-Gustav KallasmaaKarl-Gustav Kallasmaa, Founder & CEOLast updated
GET /v1/analytics/{area}Needs read scopeSpends no creditsMCP tool: get_analytics

The request

Paste this and change the key. Every endpoint takes a bearer key and none takes a workspace id — the key names the workspace.

curl -G https://api.attensira.com/v1/analytics/prompt \
  --data-urlencode "days=30" --data-urlencode "order=worst_first" --data-urlencode "limit=1" \
  -H "Authorization: Bearer atn_live_<your key>"

Parameters

Every parameter the published reference documents, and nothing it does not.

NameInTypeDefaultNotes
area*pathenumOne of visibility, prompt, page, source, competitor, topic, platform, bot. Each returns one row per thing of that kind.
daysqueryinteger30The window, from 1 to 365.
orderqueryenumworst_firstOr best_first. The default puts the rows worth acting on at the top.
limitqueryinteger20Maximum 100.
filterquerystringFree-text filter on row labels — a topic name, a platform, a URL fragment.

The response (200)

Abbreviated, never invented — this is the shape the published reference documents.

{
  "area": "prompt",
  "days": 30,
  "rows": [
    {
      "id": "prm_8f21",
      "label": "best crm for small teams",
      "mention": { "value": 0.12, "n": 25 },
      "citation": { "value": 0.04, "n": 25 },
      "position": null,
      "delta": { "value": -0.05, "real": true },
      "platforms": {
        "chatgpt": { "tracked": true, "readable": true, "rate": { "value": 0.2, "n": 15 } },
        "claude":  { "tracked": false, "readable": false }
      }
    }
  ]
}

What goes wrong, and what it means

The condition on the left, the correct reading of it on the right.

A platform row reads tracked false
Your plan does not include that surface, so it was never queried. Treating the absence as a zero invents a failure that did not happen — check the plan with GET /v1/account before reporting any per-platform number.
A rate is null rather than zero
Nothing was measured in that window. A zero with n above zero is a measured zero and means something; a null means the question was never asked.
A delta carries real false
The change did not clear the significance test the product applies, so there is no movement you can defend in either direction. It is not a small change; it is an unproven one.
area=bot returns nothing for a page you know was fetched
These rows count only what our own collection recorded. Absence is not proof that nothing came, and crawler data has to be collected server-side to exist at all.

What this endpoint cannot tell you

The limits are part of the answer, not a disclaimer under it.

  • It cannot give you a visibility score or a sentiment reading, because Attensira has neither. What comes back are mention and citation rates with their denominators, and a position that is a mean index per source domain rather than a rank of you against competitors.
  • It cannot tell you that a platform performed badly when your plan does not track it. An untracked platform was never queried, and the response says so with tracked false rather than with a zero.
  • Competitor and source rows are workspace-wide aggregates. They cannot answer a question about one prompt's rivals or cited sources — the single-prompt endpoint already returns both, so a second call here is the wrong shape as well as unnecessary.

This is the endpoint most integrations spend most of their calls on. One request returns an aggregated, ordered slice of a workspace's tracking data for a window, and the thing that changes between one question and the next is a single path segment.

Eight areas, eight questions

The area decides what a row is. visibility gives one row for the whole workspace and is the orienting call. prompt gives one row per tracked prompt, which is where you find out what you win and lose. page ranks your own URLs by how often answers cite them. source inverts that and ranks the external domains the models lean on in your category. competitor scores the rivals you have registered. topic and platform are rollups by prompt topic and by answer surface. bot is different in kind from the other seven: it describes AI systems fetching your site rather than answering about it, and its rows carry visit counts, pages reached, a purpose mix and a last-seen timestamp instead of rates.

Ordering defaults to worst first, which is unusual and deliberate. A ranked list of your best results is a slide; a ranked list of your worst is a queue of work.

Reading a rate honestly

Every rate arrives as a value with its denominator attached, and every delta arrives with a flag saying whether the movement is real. Those two shapes are the whole ethic of the endpoint, and skipping them is how a dashboard ends up confidently wrong.

A null value means nothing was measured — the surface was not tracked, or no run succeeded in the window. A zero with a denominator above zero means something quite different: the readings happened and you were not named. Collapsing those two into a single reported zero turns an absence of evidence into evidence of absence, which is the single most common misreading of any AI-visibility number.

The delta carries the same discipline. A change arrives with a flag saying whether it cleared the significance test, and when the flag is false there is no movement you can defend in either direction. It is not a small change. It is an unproven one, and the field exists so that a weekly report cannot narrate noise.

The plan is part of the answer

Per-platform rows carry two booleans before they carry a rate. tracked says whether your plan includes that surface at all, and readable says whether it could be read. A row that is not tracked was never queried, so the correct thing to say about it is nothing. Before publishing any per-platform figure, fetch the account endpoint: the plan's platform list is the authority on which surfaces were ever asked, and no amount of analytics can recover a measurement that was not taken.

Where to stop and call something else

Two areas are workspace-wide aggregates and are frequently misused. If your question is "which competitors show up against this one prompt" or "what sources did this prompt's answers cite", the single-prompt endpoint already returns both lists inline, and a second call here answers a broader question you did not ask.

Likewise, if a page looks like it underperforms, check the bot area before rewriting anything. A model can only cite a page it has fetched, so a page nothing has fetched has an access problem rather than a content problem, and those lead to completely different work.

Its twin on the other surface

The get_analytics MCP tool takes the same eight areas with the same defaults and returns the same shapes. The only wire difference worth knowing is historical: the older words group and engine for the topic and platform rollups are no longer accepted on either surface, so an integration carrying them needs updating rather than debugging.

Questions people ask

Which area should I call first?
visibility. It has one row for the whole workspace and orients you before you drill into prompts, pages or sources. Everything else is a decomposition of it.
What does the n on a rate mean?
The denominator — how many readings the rate was computed from. A rate with a small n is not evidence, and the field exists so you can see that rather than infer it.
Why does a competitor rate not add up to 100 percent with mine?
Because competitor rates use the same denominator as yours rather than dividing a category between you. They are each brand's own mention rate, so nothing sums to one.
Can I filter to a single platform?
Yes, through the free-text filter parameter, which matches on row labels. For a per-platform rollup across the workspace, call the platform area instead.
What is the difference between the page area and GET /v1/pages?
The area ranks all of your pages against each other. The pages endpoint returns everything recorded for one URL, including the prompts whose answers cited it.

Sources

Every factual statement above, with the page it came from and the date that page was read.

  1. The Attensira analytics endpoint takes an area path parameter with eight documented values — visibility, prompt, page, source, competitor, topic, platform and bot.

    docs.attensira.com · retrieved

    area | path | enum | — | Required. See the table below
  2. Attensira's tool reference states that a per-platform row with tracked false was never queried because the plan does not include it, and that treating it as 0% invents a failure that did not happen.

    docs.attensira.com · retrieved

    tracked: false means your plan does not include that platform, so it was never queried, and treating it as 0% invents a failure that did not happen.
  3. Attensira's tool reference states that a null delta with real false means the change did not clear a two-proportion z-test at 95%, so there is no change that can be proven in either direction.

    docs.attensira.com · retrieved

    A `null` delta with `real: false` means the change did not clear a two-proportion z-test at 95%, so there is no change you can prove, in either direction.

Next