---
title: "Get internal link data"
method: GET
path: "/site-health/links"
tags: ["Site Health"]
---

# Get internal link data

`GET /site-health/links`

## Request

- Base URL: `https://next.frase.io/api/v1`
- URL: `https://next.frase.io/api/v1/site-health/links`
- Auth: one of:
  - API key in header `X-API-KEY`
  - HTTP bearer

Internal-link facts from the latest completed audit, in one of two modes decided by which query parameter you send. Pass page_id for one page's inbound and outbound internal links. Pass site_id (and no page_id) for a site-level summary of orphans, dead ends and top-authority pages. The two modes return DIFFERENT payload shapes — see the response schema's oneOf. If both are sent, page_id wins.

## Query parameters

- `page_id` string, uuid
- `site_id` string, uuid

## Response `200`

Per-page links (page_id mode) or the site-level link summary (site_id mode).

- object
  - `data` union
    - object: Keys are camelCase here, unlike the snake_case used elsewhere in this API — that is the shape the endpoint has always returned and it is not changing.
      - `linksIn` object[]: Other pages of the same crawl that link TO this page.
        - `url` string
        - `path` string
        - `title` string
        - `isNavigation` boolean: True when the link was found in site chrome (nav, header, footer) rather than in the body. Absent when unknown.
      - `linksOut` object[]: Pages of the same crawl this page links to.
        - `url` string
        - `path` string
        - `title` string
        - `isNavigation` boolean
    - object
      - `audit_id` string, uuid: The latest completed audit this summary was drawn from.
      - `total_pages` integer
      - `links_measured` boolean: Whether the internal link graph's EDGES were measured. Keyed on is_orphan / is_dead_end, which need no site root. False when the crawl extracted no edges, in which case the two lists below mean 'not measured' rather than 'none found'.
      - `depth_measured` boolean: Whether click depth was measured. Keyed on click_depth ONLY — the sole traversal column that is genuinely NULL when unmeasured (is_orphan defaults to false in the schema). False when the crawl contained no site root to walk from. This payload publishes no depth figure; the flag reports whether the audit has one at all.
      - `link_metrics_scope` 'site' | 'run' | 'mixed' | 'unknown': Which node set the two lists below were measured over. This payload reads ONE audit's rows, while the link columns are written by a site-wide count over the site's resolved page set — so a row speaks for the site only when it is that URL's winning row and predates the count. "mixed" is ordinary for an older audit whose pages have since been re-crawled; "unknown" = the site has never been counted and nothing is withheld. Additive.
      - `link_graph_node_count` integer, nullable: URLs in the site-wide link graph. A NODE count — one per normalized URL — not a page count, and not comparable with total_pages. null = never counted. Additive.
      - `link_metrics_measured_at` string, date-time, nullable: When that site-wide count was taken. null = never counted. Additive.
      - `orphan_pages` object[]: Up to 25 pages with no inbound internal link. Empty means 'none found' only when links_measured is true.
        - `url` string
        - `title` string: Empty string when the crawl recorded no title.
      - `dead_end_pages` object[]: Up to 25 pages with no outbound internal link. Same links_measured caveat as orphan_pages.
        - `url` string
        - `title` string
      - `top_authority_pages` object[]: Up to 10 pages by authority score, descending.
        - `url` string
        - `title` string
        - `authority_score` integer
  - `request_id` string

## Other responses

- `400`: Neither page_id nor site_id was sent, or the one sent is not a valid UUID.
- `404`: The page is not in this organization, the page has no crawl behind it (a standalone single-page result has no link graph), or the site has no completed audit.

---

[API](https://skmtc.dev/frase/apis/frase-api.md) · [All operations](https://skmtc.dev/frase/apis/frase-api/llms.txt) · [OpenAPI document](https://skmtc.dev/frase/apis/frase-api/revisions/7fb75d89f7a4?raw)
