Draw my repo

Get the visibility

GET https://seerepo.com/api/v1/repos/:repo/found

Returns Pages outside as it reads in the app: each public page with its signals (title, description, canonical, image, card, noindex, sitemap entry, structured data, versions by language, main heading, and what robots.txt tells Googlebot, OAI-SearchBot and GPTBot), each with an honest label and the file and line that prove it. The labels promise no indexing and no traffic: BLOCK (something stops a search engine), WARN (something worth adding), UNKNOWN (the code can't tell), INFO (said without judging) and PASS.

Request

Parameter Where Description
repo path The repo's id, or owner/name with %2F.
curl "https://seerepo.com/api/v1/repos/6ad79fd8e89233277ded17c9/found" \
  -H "Authorization: Bearer $SEEREPO_KEY"

Response

Field Type Description
data.repo object The repo: its id and its name.
data.summary object|null How many public pages, how many more weren't judged because their door wasn't seen (unseen), how many need work (a WARN or a BLOCK), how many were read, how many are blocked, the pages opened by their link and the private ones by who gets in. And findable, Visibilidad's ring in the app: of the public pages that want to be on Google, how many can be found (n) of how many (of), and how many you hid on purpose (hidden), which don't count; null if none wants to be. Null until a scan reads them.
data.site object Each app's files for machines: where robots comes from, the sitemaps it announces, its sitemaps and its llms.txt.
data.pages[] object Each public page: its path, route, name, who gets in, and its signals[], each with its key, status, label, proof (its path, line and url on GitHub at the scanned commit) and, when there is one, its fixed value and its why.
data.withLink[] object The pages opened by what their link carries, apart: they shouldn't be in search.
data.live object|null What the published site answered on the project's last day it was asked (once a day, only when the repo has a website or a GitHub homepage): the day, where it was asked, how many public pages were measured, blocked and incomplete, and the site's robots.txt and sitemap; or why nothing was asked (no-address, free, demo). Each page then carries live (where it was asked and how the whole page answered, or why it wasn't; redirected when the site sent it to another page, and then its signals aren't crossed), and each signal with a pair on the site carries live (the auditor's status, what it says and its evidence) and agrees (whether the code and the site say the same, when both could tell). Null until the first day, and on the free look.
data.search object|null What Google Search Console says, when the project is connected to it (null otherwise, and on a free repo): the window (from, to), its clicks, impressions and pages, and how many pages were inspected, indexed and not; or why it wasn't read (reason). Each page then has its search: its clicks, impressions, CTR, position and, once inspected, Google's index verdict.
data.rules object The version of the rules its last scan judged with, the current one, and each change with its date: a figure that moves because a rule changed says so.
data.visits object|null What DataFast counts on the site in its last 30 days, when the project is connected to it and it has been read (null otherwise): the window (from, to), the total, each day in series[] (d, n), each screen that isn't a public page in screens[] (path, n) and the addresses that are no screen of the code in other[] (route, n). A visit is one person on one screen in one day. Each page in data.pages[] then brings its own in visits.n.
data.reads object Whether the visits were read: visits is read, unread (connected and not read yet) or na (not connected).
data.locked boolean A repo on the free look: only how many public pages there are and how many need work, as in the app.

Example

{
  "status": "success",
  "data": {
    "repo": { "id": "6ad79fd8e89233277ded17c9", "name": "shop" },
    "summary": { "public": 12, "unseen": 0, "needWork": 4, "checked": 12, "blocked": 1, "withLink": 1, "private": { "signed-in": 8, "member": 0, "owner": 1 }, "findable": { "n": 10, "of": 11, "hidden": 1 } },
    "site": [{ "app": "app", "robots": { "path": "app/robots.ts", "computed": false }, "announced": [{ "url": "https://shop.example/sitemap.xml", "line": 8 }], "sitemaps": ["app/sitemap.ts"], "llms": null }],
    "pages": [
      {
        "path": "app/checkout/page.tsx",
        "route": "/checkout",
        "name": "Pay",
        "who": "anyone",
        "read": true,
        "signals": [{ "key": "title", "status": "ok", "label": "PASS", "proof": { "path": "app/checkout/page.tsx", "line": 3 }, "value": "Pay | Shop", "by": "rule" }]
      }
    ],
    "withLink": [],
    "live": { "d": "2026-10-21", "at": "2026-10-21T15:00:00.000Z", "origin": "https://shop.example", "from": "website", "pages": 12, "measured": 12, "blocked": 0, "incomplete": 1, "site": [] },
    "rules": { "version": 1, "current": 1, "changes": [{ "folder": "found", "version": 1, "d": "2026-10-21", "id": "found-1", "what": "Each public page's search signals read from the code, labeled as foundvia-discovery labels them" }] },
    "locked": false,
    "visits": null,
    "reads": { "visits": "na" }
  }
}

Authentication

An API key as Authorization: Bearer sr_…. See Authentication.

Errors

The ones every endpoint has (401, 404, 429), see Errors.