> ## Documentation Index
> Fetch the complete documentation index at: https://bisibility.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Analyze backlinks

> Requires write scope because cache misses spend provider budget. estimate_only is a free dry run, and max_cost_cents is a best-effort pre-estimate gate. Snapshots are cached for 24 hours. Aggregated referring-domain, page, and anchor views are consumer-side and must be labeled "within fetched rows".



## OpenAPI

````yaml /openapi.snapshot.json get /projects/{projectId}/backlinks
openapi: 3.1.0
info:
  description: >-
    Public REST API for bisibility keyword rank tracking. Clients may optionally
    declare v1 with the Bisibility-API-Version header. Resource IDs use strict
    v3 prefixed public IDs and list cursors are version 3.
  title: bisibility Public API
  version: 1.0.0
servers:
  - url: /api/v1
security: []
tags:
  - description: >-
      Discover the API contract, capabilities, health, and public provider
      pricing.
    name: discovery
    x-group: Discovery
  - description: Manage the authenticated account and personal access tokens.
    name: account-access
    x-group: Account & Access
  - description: Create projects and manage their core settings.
    name: projects
    x-group: Projects
  - description: Create, list, and revoke API keys.
    name: api-keys
    x-group: API Keys
  - description: Manage tracked keywords and exact keyword matching.
    name: keywords
    x-group: Keywords
  - description: Run rank checks and retrieve rank-check history.
    name: rank-checks
    x-group: Rank Checks
  - description: Research keywords, metrics, locations, and ranked keyword suggestions.
    name: keyword-research
    x-group: Keyword Research
  - description: Analyze backlinks and page through backlink snapshots.
    name: backlinks
    x-group: Backlinks
  - description: Analyze domain visibility and load its history, keywords, and pages.
    name: domain-overview
    x-group: Domain Overview
  - description: Read project analytics, traffic snapshots, and search-performance data.
    name: analytics
    x-group: Analytics
  - description: Manage alert rules, triggered alerts, and notification preferences.
    name: alerts
    x-group: Alerts
  - description: Manage project competitors.
    name: competitors
    x-group: Competitors
  - description: Inspect and configure project sitemap monitoring.
    name: sitemap-monitoring
    x-group: Sitemap Monitoring
  - description: Save keywords for later without putting them under rank tracking.
    name: saved-keywords
    x-group: Saved Keywords
  - description: Create, list, and delete saved views.
    name: saved-views
    x-group: Saved Views
  - description: Ingest and list project signals.
    name: signals
    x-group: Signals
  - description: Connect and configure external providers.
    name: providers
    x-group: Providers
  - description: Create and manage webhook endpoints.
    name: webhooks
    x-group: Webhooks
  - description: Manage team members and invitations.
    name: team
    x-group: Team
  - description: Manage migration tokens and instance import sessions.
    name: migration
    x-group: Migration
paths:
  /projects/{projectId}/backlinks:
    get:
      tags:
        - backlinks
      summary: Analyze backlinks
      description: >-
        Requires write scope because cache misses spend provider budget.
        estimate_only is a free dry run, and max_cost_cents is a best-effort
        pre-estimate gate. Snapshots are cached for 24 hours. Aggregated
        referring-domain, page, and anchor views are consumer-side and must be
        labeled "within fetched rows".
      operationId: analyzeBacklinks
      parameters:
        - description: >-
            API contract version requested by the client. Omit this header to
            use the current backward-compatible behavior.
          in: header
          name: Bisibility-API-Version
          required: false
          schema:
            enum:
              - v1
            type: string
        - description: Domain for site scope or full URL for page scope.
          in: query
          name: target
          required: true
          schema:
            type: string
        - in: query
          name: target_scope
          schema:
            default: site
            enum:
              - site
              - page
            type: string
        - description: Ignored when target_scope is page.
          in: query
          name: include_subdomains
          schema:
            default: true
            type: boolean
        - in: query
          name: result_limit
          schema:
            default: 100
            enum:
              - 100
              - 300
              - 500
              - 1000
            type: integer
        - description: Provider-side row mode applied over the full corpus.
          in: query
          name: mode
          schema:
            default: as_is
            enum:
              - as_is
              - one_per_domain
            type: string
        - description: >-
            Return a free cache-aware provider cost estimate without a paid
            call.
          in: query
          name: estimate_only
          schema:
            default: false
            type: boolean
        - in: query
          name: fresh
          schema:
            default: false
            type: boolean
        - description: Best-effort pre-estimate provider cost gate, in cents.
          in: query
          name: max_cost_cents
          schema:
            minimum: 1
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BacklinksResponse'
          description: JSON response
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Bad request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Not found
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Unsupported API version
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: >-
            unsupported_target from local validation before any paid call,
            needs_reauth, or cost_limit_exceeded
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: budget_exhausted, in_progress, or rate_limited
      security:
        - ProjectApiKey: []
        - PersonalAccessToken: []
components:
  schemas:
    BacklinksResponse:
      properties:
        data:
          $ref: '#/components/schemas/BacklinksSnapshot'
      required:
        - data
      type: object
    Problem:
      properties:
        detail:
          type: string
        docs_url:
          type: string
        errors: {}
        instance:
          type: string
        status:
          type: integer
        title:
          type: string
        type:
          type: string
      required:
        - type
        - title
        - status
        - detail
        - instance
        - docs_url
      type: object
    BacklinksSnapshot:
      properties:
        cached:
          type: boolean
        cached_until:
          format: date-time
          type: string
        cost_cents:
          minimum: 0
          type: number
        estimate:
          type: boolean
        estimated_cost_cents:
          minimum: 0
          type: number
        fetched_at:
          format: date-time
          type: string
        fetched_row_count:
          minimum: 0
          type: integer
        history:
          items:
            properties:
              lost_links:
                minimum: 0
                type: integer
              month:
                pattern: ^\d{4}-(0[1-9]|1[0-2])$
                type: string
              new_links:
                minimum: 0
                type: integer
            required:
              - month
              - new_links
              - lost_links
            type: object
          maxItems: 12
          minItems: 12
          type: array
        include_subdomains:
          type: boolean
        provider:
          type: string
        rows:
          items:
            properties:
              anchor:
                type: string
              domain_authority:
                description: Referring domain authority from provider domain_from_rank.
                maximum: 100
                minimum: 0
                type: integer
              first_seen:
                format: date
                type: string
              flags:
                description: sitewide is derived from a links_count heuristic.
                items:
                  enum:
                    - nofollow
                    - ugc
                    - sponsored
                    - image
                    - sitewide
                  type: string
                type: array
                uniqueItems: true
              links_count:
                minimum: 0
                type: integer
              lost_at:
                description: Provider lost_date, verbatim.
                format: date
                type:
                  - string
                  - 'null'
              source_domain:
                type: string
              source_url:
                type: string
              spam_score:
                minimum: 0
                type: number
              status:
                description: Derived from provider is_new and is_lost.
                enum:
                  - active
                  - new
                  - lost
                type: string
              target_url:
                type: string
            required:
              - source_domain
              - source_url
              - anchor
              - target_url
              - flags
              - domain_authority
              - spam_score
              - links_count
              - first_seen
              - lost_at
              - status
            type: object
          type: array
        summary:
          properties:
            backlinks_total:
              minimum: 0
              type: integer
            broken_backlinks:
              minimum: 0
              type: integer
            broken_pages:
              minimum: 0
              type: integer
            dofollow_pct:
              maximum: 100
              minimum: 0
              type: number
            domain_rank:
              maximum: 100
              minimum: 0
              type: integer
            lost_backlinks:
              description: Provider-lifetime count.
              minimum: 0
              type: integer
            lost_referring_domains:
              description: Provider-lifetime count.
              minimum: 0
              type: integer
            new_backlinks:
              description: Provider-lifetime count.
              minimum: 0
              type: integer
            new_referring_domains:
              description: Provider-lifetime count.
              minimum: 0
              type: integer
            referring_domains_total:
              minimum: 0
              type: integer
            referring_pages:
              minimum: 0
              type: integer
            spam_score:
              minimum: 0
              type: number
          required:
            - backlinks_total
            - referring_domains_total
            - domain_rank
            - spam_score
            - dofollow_pct
            - referring_pages
            - broken_backlinks
            - broken_pages
            - new_backlinks
            - lost_backlinks
            - new_referring_domains
            - lost_referring_domains
          type: object
        target:
          type: string
        target_scope:
          enum:
            - site
            - page
          type: string
        total_rows_available:
          minimum: 0
          type: integer
      required:
        - target
        - target_scope
        - include_subdomains
        - cached
        - fetched_at
        - cached_until
        - provider
        - cost_cents
        - summary
        - history
        - rows
        - fetched_row_count
        - total_rows_available
      type: object
  securitySchemes:
    ProjectApiKey:
      bearerFormat: bsb_key_live_...
      description: >-
        Project-scoped API key. It cannot access account routes or create
        additional projects.
      scheme: bearer
      type: http
    PersonalAccessToken:
      bearerFormat: bsb_pat_live_...
      description: >-
        Personal access token for account routes and projects visible to the
        authenticated user.
      scheme: bearer
      type: http

````