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 Kallasmaa, Founder & CEOLast updated 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.
| Name | In | Type | Default | Notes |
|---|---|---|---|---|
| area* | path | enum | — | One of visibility, prompt, page, source, competitor, topic, platform, bot. Each returns one row per thing of that kind. |
| days | query | integer | 30 | The window, from 1 to 365. |
| order | query | enum | worst_first | Or best_first. The default puts the rows worth acting on at the top. |
| limit | query | integer | 20 | Maximum 100. |
| filter | query | string | — | Free-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.
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”
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.”
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
- GET /v1/searchGET /v1/search — find a prompt, page or session by wording
- GET /v1/prompts/{prompt}GET /v1/prompts/{id} — one tracked question, its rivals and its sources
- GET /v1/pagesGET /v1/pages — what one URL of yours earns in AI answers
- GET /v1/accountGET /v1/account — the call to make before you report any number