Get the pages
GET https://seerepo.com/api/v1/repos/:repo/pages
Returns the Pages folder as it reads in the app: every page with its name, its route, who gets in, and the states it handles or misses, each with the file and line that prove it. The pages are grouped by the map's top-level modules, in the map's order.
Request
| Parameter | Where | Description |
|---|---|---|
repo |
path | The repo's id, or owner/name with %2F. |
curl "https://seerepo.com/api/v1/repos/6ad79fd8e89233277ded17c9/pages" \
-H "Authorization: Bearer $SEEREPO_KEY"
Response
| Field | Type | Description |
|---|---|---|
data.repo |
object | The repo: its id and its name. |
data.summary |
object | How many pages, how many were read, how many states are missing or halfway, and how many are ready (ready): the ones that handle every state they show, the same figure as Arreglos' ring in the app. ready is null with no page read. |
data.columns[] |
object | One per top-level module: its key (the module's path, or / for the pages in no module: the root's own and Data's, which the folder shows last as «Outside the modules»), its name and its pages' paths. |
data.screens[].name |
string | What a person calls the page. |
data.screens[].route |
string | Its address, like /checkout. |
data.screens[].who |
string | Who gets in: anyone, people (the door wasn't seen: a repo with its own sign-in where no page was proved private, a Python view, or a page of SvelteKit, TanStack, React Router, Vue, Nuxt or Angular whose guard isn't read yet; it doesn't say they ask for a session), with-link, signed-in, member, owner or operator (only those who run the product). |
data.screens[].whoBy |
string | haiku when who gets in was read by the AI, whose line proved a narrower door than the rules saw. Absent when the rules said it. |
data.screens[].states[] |
object | Each state: its name, ok, half or missing, and its proof (its path, line and url on GitHub at the scanned commit). |
data.screens[].does |
string|null | What it does, in one sentence. |
data.screens[].dropped |
number | How many things the AI said of the page and the scan threw out: a state the rules already read, one said twice or with no line that proves it, or who gets in without a line that proves it. They are never shown as true. Absent with none. data.summary.dropped is their sum. |
data.rules |
object | The version of the rules its last scan judged the states with, the current one, and each change with its date (since the 21st of October, loading is asked only of a screen that waits on data): a figure that moves because a rule changed says so. |
data.locked |
boolean | A repo on the free look: its states come as shapes (how many and how many are missing, not which), with no proof, what it does or its last change, as in the app. |
data.screens[].redirects |
object | Only when the page just takes whoever opens it somewhere else: its normal path ends in a redirect and all it draws is its error, or an effect navigates with no condition. The line that does it (path, line and its url on GitHub) and to when the code names the route. Absent on a page. |
data.apart[] |
object | The page files that aren't pages, by why: why (next.devPage, a page only development serves; next.flagPage, one behind a flag; next.redirectPage, one that only sends you to another; next.errorPage, the one shown when something went wrong), n (how many) and routes (the first five, in order). Absent with none. |
data.unread |
string | python in a Python repo: Python has no Pages yet, its views are read by file and who gets in to each isn't known. Absent otherwise. |
Example
{
"status": "success",
"data": {
"summary": { "screens": 2, "read": 2, "missing": 1, "half": 0, "ready": 1 },
"columns": [{ "key": "/checkout", "name": "Checkout", "screens": ["app/checkout/page.tsx"] }],
"screens": [
{
"path": "app/checkout/page.tsx",
"route": "/checkout",
"name": "Pay",
"who": "anyone",
"statesRead": true,
"states": [{ "key": "error", "name": "Error", "status": "missing", "by": "rule" }]
}
],
"rules": { "version": 2, "current": 2, "changes": [{ "folder": "pages", "version": 1, "d": "2026-10-21", "id": "pages-1", "what": "Each screen's states read by rules with their proof: loading, error, empty, signed out and phone" }, { "folder": "pages", "version": 2, "d": "2026-10-21", "id": "pages-2", "what": "Loading is asked only of a screen that waits on data; a static page no longer misses it" }] },
"locked": false
}
}
Authentication
An API key as Authorization: Bearer sr_…. See Authentication.
Errors
The ones every endpoint has (401, 404, 429), see Errors.