---
title: "Load more backlink rows"
method: POST
path: "/projects/{project_id}/backlinks/rows"
tags: ["backlinks"]
---

# Load more backlink rows

`POST /projects/{project_id}/backlinks/rows`

## Request

- Base URL: `https://eu.bisibility.com/api/v1`
- URL: `https://eu.bisibility.com/api/v1/projects/{project_id}/backlinks/rows`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `/api/auth/oauth2/authorize`, token URL `/api/auth/oauth2/token`, scopes: `api:write`)

Extends the unexpired snapshot identified by snapshot_ref. Pass the reference returned by analyzeBacklinks or the previous loadMoreBacklinkRows response. estimate_only=true requires only read scope and returns a free upper-bound next-page estimate without changing the snapshot; retained pages estimate zero. max_cost_cents optionally caps the admitted estimate, with cost_limit_exceeded (422) before provider I/O. Otherwise the response contains only newly fetched rows plus the updated snapshot_ref, fetched_row_count and cost_cents.

## Path parameters

- `project_id` string, required: Public project ID; membership and token scope are enforced.

## Headers

- `Bisibility-API-Version` 'v1'
- `Idempotency-Key` string
- `X-Bisibility-Source` 'sdk' | 'cli' | 'mcp'

## Request body

- BacklinksRowsRequest
  - `estimate_only` boolean: Return the next-page estimate without provider I/O or changing the snapshot.
  - `max_cost_cents` integer: Optional upper bound on the admitted next-page cost estimate.
  - `snapshot_ref` string: Opaque snapshot_ref from the report being extended. Missing or stale references return snapshot_expired before paid I/O.
  - `include_subdomains` boolean, required
  - `limit` integer, required
  - `target` string, required
  - `target_scope` 'site' | 'page', required

## Response `200`

JSON response

- BacklinksRowsResponse
  - `data` union, required
    - object: Upper bound for the next page at the requested limit. Zero when that page is already retained. No provider request or snapshot mutation occurs.
      - `cached` boolean, required: An unexpired snapshot exists, so the paid call would cost nothing.
      - `cached_until` string, date-time, nullable, required: Expiry of that snapshot; null when there is none.
      - `cost_cents` number, required: 0 when cached, otherwise equal to estimated_cost_cents.
      - `estimate` true, required
      - `estimated_cost_cents` number, required
      - `include_subdomains` boolean, required
      - `provider` string, required
      - `target` string, required
      - `target_scope` 'site' | 'page', required
    - object
      - `history` unknown
      - `history_unavailable` unknown
      - `target_scope` 'site', required
    - object
      - `history` unknown
      - `history_unavailable` unknown, required
    - object
      - `history` unknown
      - `history_unavailable` unknown
      - `target_scope` 'page', required

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `402`: Deployment credits exhausted for a paid provider request
- `403`: Forbidden, or `byok_required`: the account runs paid provider work only on its own provider keys and none serves this request
- `404`: Not found
- `409`: snapshot_expired: the reference is missing, invalid, stale, outside the project scope, or expired; no paid request is dispatched; Unsupported API version
- `422`: unsupported_target from local validation before any paid call, needs_reauth, or cost_limit_exceeded
- `429`: budget_exhausted, in_progress, or rate_limited

---

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