Draw my repo

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.