Dibuja mi repo

Leer la visibilidad

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

Devuelve Páginas por fuera como se lee en la app: cada página pública con sus señales (título, descripción, canónica, imagen, tarjeta, noindex, si está en el sitemap, datos estructurados, versiones por idioma, encabezado principal, y qué le dice el robots.txt a Googlebot, OAI-SearchBot y GPTBot), cada una con una etiqueta honesta y el archivo y la línea que la prueban. Las etiquetas no prometen indexación ni tráfico: BLOCK (algo impide que un buscador la liste), WARN (algo que conviene añadir), UNKNOWN (el código no basta para saberlo), INFO (se dice sin juzgar) y PASS.

Petición

Parámetro Dónde Descripción
repo ruta El id del repo, o owner/name con %2F.
curl "https://seerepo.com/api/v1/repos/6ad79fd8e89233277ded17c9/found" \
  -H "Authorization: Bearer $SEEREPO_KEY"

Respuesta

Campo Tipo Descripción
data.repo object El repo: su id y su nombre.
data.summary object|null Cuántas páginas públicas hay, cuántas más no se juzgaron porque no se vio su puerta (unseen), cuántas necesitan trabajo (un WARN o un BLOCK), cuántas se leyeron, cuántas están bloqueadas, las que abre su enlace y las privadas según quién entra. Y findable, el aro de Visibilidad en la app: de las públicas que quieren salir en Google, cuántas se pueden encontrar (n) de cuántas (of), y cuántas escondiste a propósito (hidden), que no cuentan; null si ninguna quiere salir. Null hasta que un escaneo las lea.
data.site object Los archivos para máquinas de cada app: de dónde sale robots, los sitemaps que anuncia, sus sitemaps y su llms.txt.
data.pages[] object Cada página pública: su ruta de archivo, su dirección, su nombre, quién entra, y sus signals[], cada una con su key, status, label, proof (su ruta, su línea y su url en GitHub en el commit escaneado) y, cuando lo hay, su value fijo y su why.
data.withLink[] object Las páginas que abre lo que trae su enlace, aparte: no deberían estar en el buscador.
data.live object|null Lo que contestó el sitio publicado el último día del proyecto en que se le preguntó (una vez al día, solo si el repo tiene sitio web o página en GitHub): el día, dónde se preguntó, cuántas páginas públicas se midieron, cuántas están bloqueadas y cuántas quedaron incompletas, y el robots.txt y el sitemap del sitio; o por qué no se preguntó nada (no-address, free, demo). Cada página trae entonces live (dónde se pidió y cómo contestó la página entera, o por qué no se pidió; redirected cuando el sitio la mandó a otra página, y entonces sus señales no se cruzan), y cada señal con su par en el sitio trae live (el estado del auditor, lo que dice y su evidencia) y agrees (si el código y el sitio dicen lo mismo, cuando los dos pudieron decirlo). Null hasta el primer día, y en el vistazo gratis.
data.search object|null Lo que dice Google Search Console, cuando el proyecto está conectado (null si no, y en un repo gratis): la ventana (from, to), sus clicks, impressions y pages, y cuántas páginas se inspeccionaron, cuántas están indexadas y cuántas no; o por qué no se leyó (reason). Cada página trae entonces su search: sus clics, impresiones, CTR, posición y, una vez inspeccionada, el veredicto de Google sobre su índice.
data.rules object La versión de las reglas con que juzgó su último escaneo, la vigente y cada cambio con su fecha: una cifra que se mueve porque cambió una regla lo dice.
data.visits object|null Lo que DataFast cuenta en el sitio en sus últimos 30 días, cuando el proyecto está conectado y ya se leyó (null si no): la ventana (from, to), el total, cada día en series[] (d, n), cada pantalla que no es una página pública en screens[] (path, n) y las direcciones que no son ninguna pantalla del código en other[] (route, n). Una visita es una persona en una pantalla en un día. Cada página de data.pages[] trae entonces la suya en visits.n.
data.reads object Si las visitas se leyeron: visits es read, unread (conectado y sin leer todavía) o na (sin conectar).
data.locked boolean Un repo del vistazo gratis: solo cuántas páginas públicas hay y cuántas necesitan trabajo, como en la app.

Ejemplo

{
  "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" }
  }
}

Autenticación

Una clave de la API como Authorization: Bearer sr_…. Mira Autenticación.

Errores

Los que tiene todo endpoint (401, 404, 429), mira Errores.