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/pages — what one URL of yours earns in AI answers

Everything recorded for a single page on your site — its citation rate overall and per platform, and the prompts whose answers cited it.

Karl-Gustav KallasmaaKarl-Gustav Kallasmaa, Founder & CEOLast updated
GET /v1/pagesNeeds read scopeSpends no creditsMCP tool: get_page

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/pages \
  --data-urlencode "url=https://acme.com/pricing" \
  -H "Authorization: Bearer atn_live_<your key>"

Parameters

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

NameInTypeDefaultNotes
url*querystringAn absolute URL, exactly as it appears on the site. Not a path, and not a normalised variant.
daysqueryinteger30The window, from 1 to 365. Page-level citations are sparse, so a short window often reports nothing.

The response (200)

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

{
  "url": "https://acme.com/pricing",
  "title": "Pricing — Acme",
  "citation": { "value": 0.04, "n": 120 },
  "delta": { "value": null, "real": false },
  "platforms": {
    "perplexity": { "tracked": true, "readable": true, "rate": { "value": 0.09, "n": 60 } }
  },
  "prompts": [
    { "id": "prm_8f21", "text": "best crm for small teams", "rate": { "value": 0.08, "n": 25 } }
  ]
}

What goes wrong, and what it means

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

The response comes back empty
Check crawler activity 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.
The title is null
The page could not be read when the title was collected. It is a fact about our read, not a judgement about your markup.
A trailing slash or a query string returns different results
The URL is matched as it appears on the site. Send the canonical form you actually publish rather than a variant you assume is equivalent.

What this endpoint cannot tell you

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

  • It cannot tell you whether AI systems have fetched the page at all. That is a different pipeline entirely, read through the bot area of the analytics endpoint, and a page can be fetched constantly and never cited or cited from something learned months ago and never re-fetched.
  • It cannot tell you that a page is good or bad. A citation count says the page was chosen, in this window, for the prompts you happen to track — change the prompt set and the ranking changes with it.

Most measurement of AI search stops at the workspace level, which is useless for deciding what to do on a Tuesday. This endpoint goes down to the URL: you hand it one page of yours and it tells you what that page earns in answers.

What comes back

Three things, in ascending order of usefulness. There is a citation rate with its denominator, which is the headline. There is a per-platform breakdown, which tells you whether one surface likes the page and another ignores it. And there is a list of the tracked prompts whose answers actually cited it, each with its own rate.

That last list is the one worth building on. It is a direct statement of what question a page is answering in the eyes of a model, which is often not the question you wrote it to answer. A pricing page that gets cited for a comparison prompt is telling you something you cannot learn from your own analytics, and it is telling you in the model's terms rather than yours.

Send the URL you actually publish

The parameter is an absolute URL, matched as it appears on the site. That is stricter than it sounds, and it is the most common source of an unexpectedly empty response: a trailing slash you do not serve, an http scheme you redirect away, a query string that your canonical form drops. Send the canonical URL you publish and nothing else.

A null title is not an error either. It means the page could not be read when the title was collected — a fact about our fetch, not a verdict on your markup.

Empty is a diagnosis, not a dead end

If a page comes back with nothing, the temptation is to rewrite it. Resist that for one more call. Crawler activity lives in the bot area of the analytics endpoint, and it answers a question this endpoint cannot: has any AI system actually fetched this page?

The two outcomes lead to completely different work. A page fetched constantly and never cited is reachable and not chosen, which is a content and structure problem. A page nothing has fetched cannot be cited by anything, and no amount of rewriting changes that — the work is in robots rules, bot filtering at the CDN, auth walls, or whether the page renders without JavaScript at all.

It is worth being precise about why those two numbers must not be reconciled. Crawlers and models are separate systems on separate schedules. A page can be fetched every day and never appear in an answer, and it can be cited from something a model absorbed months ago and has not re-fetched since. Reading crawl frequency as demand, or a citation as proof of a recent fetch, is the classic mistake here.

Sparse by nature

Page-level citations are thin. Most individual pages collect a small number across a quarter, not across a week, which means the default thirty-day window will show a lot of your site at zero for reasons of sampling rather than quality. Widen the window before drawing conclusions, and keep the window fixed between runs so that two measurements are comparable at all.

And treat the citation count for what it is: evidence that a page was chosen, in this window, for the prompts you happen to track. It is not a quality score. Change the prompt set and the ranking of your pages changes with it, without a single word on any page having been edited.

Its twin on the other surface

The get_page MCP tool is the same capability for an assistant: same absolute URL, same window, same fields, same advice to check crawler activity before concluding anything from an empty result.

Questions people ask

Why does the endpoint take a URL rather than an id?
Because a page on your site is already globally identified by its URL. Send it absolute and exactly as published — the match is on the URL as it appears, not on a normalised form.
My page returns nothing at all. Is it broken?
Probably not. Check the bot area of the analytics endpoint first. Nothing can cite a page it has never fetched, and access problems and content problems lead to completely different work.
Why is a thirty-day window often empty?
Page-level citations are sparse. Most pages collect a handful across a quarter rather than a week, so a short window shows zeros for reasons of sampling rather than quality.
What is in the prompts list?
The tracked prompts whose answers cited this page, each with an id, its text and a rate. It is the fastest way to see what question a page is actually answering for models.
Is there an MCP equivalent?
Yes — the get_page tool, which takes the same absolute URL and the same window.

Sources

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

  1. The Attensira API reference states that if the pages endpoint comes back empty, crawler activity should be checked before rewriting the page, because a model cannot cite a page it has never fetched.

    docs.attensira.com · retrieved

    If this comes back empty, check GET /v1/analytics/bot before rewriting the page — a model cannot cite a page it has never fetched.
  2. Attensira's documentation states that crawlers and models belong to different pipelines on different schedules, and that a page can be fetched constantly and never cited, or cited from something learned months ago and never re-fetched.

    docs.attensira.com · retrieved

    A page can be fetched constantly and never cited, or cited from something a model learned months ago and never re-fetched.

Next