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

# Get Page

> One of the brand's own pages over the period: its citations and the
prompts and answers that cite it, its weekly trend, the stored rubric with
each pillar, AI crawler hits by bot and Visits from AI by assistant.
The funnel joins search, crawl, citation and visit measurements on the
newest pinned weekly scan's 28-day window, independent of period.
with_takes adds what AI took from the page: one take per prompt and
engine, read from the evidence kept with each scan up to the pin.



## OpenAPI

````yaml /api-reference/openapi.json get /v1/brands/{brand_id}/pages/{page_id}
openapi: 3.1.0
info:
  description: >-
    Read-only access to one organization's brands, as the member who created the
    API key. Each key may make 120 requests a minute. Every error is an RFC 9457
    problem (`application/problem+json`) whose `code` names it.
  summary: Read your brands' AI visibility in Heralded.
  title: Heralded API
  version: '1'
servers:
  - url: https://api.heralded.ai
security: []
paths:
  /v1/brands/{brand_id}/pages/{page_id}:
    get:
      tags:
        - v1
      summary: Get Page
      description: >-
        One of the brand's own pages over the period: its citations and the

        prompts and answers that cite it, its weekly trend, the stored rubric
        with

        each pillar, AI crawler hits by bot and Visits from AI by assistant.

        The funnel joins search, crawl, citation and visit measurements on the

        newest pinned weekly scan's 28-day window, independent of period.

        with_takes adds what AI took from the page: one take per prompt and

        engine, read from the evidence kept with each scan up to the pin.
      operationId: getPage
      parameters:
        - in: path
          name: brand_id
          required: true
          schema:
            format: uuid
            title: Brand Id
            type: string
        - in: path
          name: page_id
          required: true
          schema:
            format: uuid
            title: Page Id
            type: string
        - in: query
          name: engine
          required: false
          schema:
            anyOf:
              - enum:
                  - perplexity
                  - gemini
                  - openai
                  - google_aio
                  - ai_mode
                  - copilot
                  - claude
                type: string
              - type: 'null'
            title: Engine
        - in: query
          name: prompt
          required: false
          schema:
            anyOf:
              - format: uuid
                type: string
              - type: 'null'
            title: Prompt
        - in: query
          name: type
          required: false
          schema:
            anyOf:
              - enum:
                  - organic
                  - brand_specific
                  - competitor_comparison
                type: string
              - type: 'null'
            title: Type
        - in: query
          name: intent
          required: false
          schema:
            anyOf:
              - enum:
                  - educational
                  - problem
                  - comparison
                  - transactional
                type: string
              - type: 'null'
            title: Intent
        - in: query
          name: topic
          required: false
          schema:
            anyOf:
              - format: uuid
                type: string
              - type: 'null'
            title: Topic
        - in: query
          name: segment
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Segment
        - description: Include only scans up to this completed scan id.
          in: query
          name: as_of
          required: false
          schema:
            anyOf:
              - format: uuid
                type: string
              - type: 'null'
            description: Include only scans up to this completed scan id.
            title: As Of
        - in: query
          name: period
          required: false
          schema:
            default: 1w
            enum:
              - 1w
              - 4w
              - 12w
              - all
            title: Period
            type: string
        - in: query
          name: with_details
          required: false
          schema:
            default: false
            title: With Details
            type: boolean
        - in: query
          name: with_takes
          required: false
          schema:
            default: false
            title: With Takes
            type: boolean
        - in: query
          name: takes_limit
          required: false
          schema:
            default: 100
            maximum: 100
            minimum: 1
            title: Takes Limit
            type: integer
        - in: query
          name: takes_offset
          required: false
          schema:
            default: 0
            minimum: 0
            title: Takes Offset
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V1Page'
          description: Successful Response
        '400':
          content:
            application/problem+json:
              example:
                code: invalid_cursor
                detail: The cursor is invalid or belongs to a different query.
                instance: example-request-id
                status: 400
                title: Bad Request
                type: about:blank
              schema:
                $ref: '#/components/schemas/Problem'
          description: The cursor is invalid or belongs to a different query.
        '401':
          content:
            application/problem+json:
              example:
                code: invalid_token
                detail: >-
                  The Authorization header carries no API key Heralded knows: it
                  is missing, mistyped, revoked or expired.
                instance: example-request-id
                status: 401
                title: Unauthorized
                type: about:blank
              schema:
                $ref: '#/components/schemas/Problem'
          description: No API key, or one that is unknown, revoked or expired.
          headers:
            WWW-Authenticate:
              schema:
                example: Bearer
                type: string
        '404':
          content:
            application/problem+json:
              example:
                code: not_found
                detail: Nothing here that this API key can read.
                instance: example-request-id
                status: 404
                title: Not Found
                type: about:blank
              schema:
                $ref: '#/components/schemas/Problem'
          description: No such brand or answer, or the key's owner cannot read it.
        '409':
          content:
            application/problem+json:
              example:
                code: workspace_archived
                detail: The API key's organization is archived.
                instance: example-request-id
                status: 409
                title: Conflict
                type: about:blank
              schema:
                $ref: '#/components/schemas/Problem'
          description: The API key's organization is archived.
        '422':
          content:
            application/problem+json:
              example:
                code: invalid_request
                detail: The request's parameters are invalid; `errors` names each one.
                errors:
                  - loc:
                      - query
                      - limit
                    msg: Input should be less than or equal to 100
                    type: less_than_equal
                instance: example-request-id
                status: 422
                title: Unprocessable Content
                type: about:blank
              schema:
                $ref: '#/components/schemas/ValidationProblem'
          description: A path or query parameter is invalid.
        '429':
          content:
            application/problem+json:
              example:
                code: rate_limited
                detail: >-
                  This caller is past its requests for the minute. Retry after
                  the seconds in Retry-After.
                instance: example-request-id
                rate_limit:
                  limit: 120
                  remaining: 0
                  reset: 60
                  window: 60
                status: 429
                title: Too Many Requests
                type: about:blank
              schema:
                $ref: '#/components/schemas/RateLimitProblem'
          description: The API key made more than 120 requests in the minute.
          headers:
            Retry-After:
              description: Seconds until the key may call again.
              schema:
                example: 60
                type: integer
      security:
        - apiKey: []
components:
  schemas:
    V1Page:
      properties:
        ai_visits:
          anyOf:
            - type: integer
            - type: 'null'
          title: Ai Visits
        ai_visits_by_assistant:
          items:
            $ref: '#/components/schemas/V1AssistantVisits'
          title: Ai Visits By Assistant
          type: array
        answers_link:
          anyOf:
            - $ref: '#/components/schemas/AnswersLink'
            - type: 'null'
        change:
          $ref: '#/components/schemas/V1PageChange'
        changed_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          description: When the crawl last saw its content change.
          title: Changed At
        checks:
          description: >-
            Each check the latest content pass made of the page against rival
            pages.
          items:
            $ref: '#/components/schemas/V1PageCheck'
          title: Checks
          type: array
        citation_evidence:
          default: complete
          enum:
            - complete
            - partial
            - unavailable
          title: Citation Evidence
          type: string
        citation_share_pct:
          anyOf:
            - type: number
            - type: 'null'
          description: >-
            This page's share of the citations the brand's own pages earn. Null
            where a weekly scan it covers could not keep all its citations.
          title: Citation Share Pct
        citations:
          anyOf:
            - type: integer
            - type: 'null'
          description: Null where a weekly scan it covers could not keep all its citations.
          title: Citations
        cited_in:
          enum:
            - tracked
            - elsewhere
            - search_only
            - never
          title: Cited In
          type: string
        cited_on:
          items:
            $ref: '#/components/schemas/V1PagePrompt'
          title: Cited On
          type: array
        coverage:
          anyOf:
            - $ref: '#/components/schemas/V1VisitCoverage'
            - type: 'null'
        crawled_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Crawled At
        crawler_bots:
          items:
            $ref: '#/components/schemas/V1CrawlerBot'
          title: Crawler Bots
          type: array
        crawler_hits:
          anyOf:
            - type: integer
            - type: 'null'
          title: Crawler Hits
        crawler_hits_days:
          title: Crawler Hits Days
          type: integer
        delivered_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          description: When Heralded delivered the page, if it did.
          title: Delivered At
        delivery_cited_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          description: The first weekly scan after the delivery that cited the page.
          title: Delivery Cited At
        engines_citing:
          description: >-
            The engines citing the page. A floor unless citation_evidence is
            complete.
          title: Engines Citing
          type: integer
        engines_read:
          title: Engines Read
          type: integer
        first_cited_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          description: >-
            The first kept citation's time. A floor unless citation_evidence is
            complete.
          title: First Cited At
        funnel:
          $ref: '#/components/schemas/PageFunnel'
        funnel_series:
          description: >-
            The funnel on each weekly scan's 28-day window, oldest first, back
            as far as the plan's history reads. Empty without a weekly scan in
            that history.
          items:
            $ref: '#/components/schemas/PageFunnelPoint'
          title: Funnel Series
          type: array
        id:
          format: uuid
          title: Id
          type: string
        last_cited_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          description: >-
            The last kept citation's time. A floor unless citation_evidence is
            complete.
          title: Last Cited At
        meta:
          $ref: '#/components/schemas/Meta'
          description: Normalized query and newest included scan.
        page_type:
          title: Page Type
          type: string
        page_type_decided_by:
          enum:
            - model
            - model_url
            - rule
          title: Page Type Decided By
          type: string
        page_type_source:
          enum:
            - member
            - heralded
          title: Page Type Source
          type: string
        path:
          title: Path
          type: string
        period:
          $ref: '#/components/schemas/V1Period'
        piece:
          anyOf:
            - $ref: '#/components/schemas/TopicPiece'
            - type: 'null'
        prompts:
          anyOf:
            - type: integer
            - type: 'null'
          description: Null where a weekly scan it covers could not keep all its citations.
          title: Prompts
        prompts_tracked:
          title: Prompts Tracked
          type: integer
        read:
          description: Whether Heralded holds the page's text.
          title: Read
          type: boolean
        reason:
          anyOf:
            - type: string
            - type: 'null'
          description: Why the latest content pass wants the page improved.
          title: Reason
        rival_urls:
          description: The rival pages those checks compared it with.
          items:
            type: string
          title: Rival Urls
          type: array
        rubric:
          anyOf:
            - $ref: '#/components/schemas/V1PageRubricDetail'
            - type: 'null'
        search:
          anyOf:
            - $ref: '#/components/schemas/V1PageSearch'
            - type: 'null'
        search_clicks:
          anyOf:
            - type: integer
            - type: 'null'
          description: >-
            Search Console clicks over the bound property's 28-day read; null
            without a read returning the page.
          title: Search Clicks
        section:
          title: Section
          type: string
        takes:
          anyOf:
            - $ref: '#/components/schemas/PageTakeList'
            - type: 'null'
          description: >-
            What AI took from the page, read from the evidence frozen with each
            scan and pinned by as_of. Present with with_takes. Open an item's
            answer at answers/{answer_read_id}.
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
        topic:
          anyOf:
            - type: string
            - type: 'null'
          description: The tracked prompt the content pass matched it to.
          title: Topic
        topic_source:
          enum:
            - member
            - heralded
          title: Topic Source
          type: string
        trend:
          description: Citations in each weekly scan.
          items:
            $ref: '#/components/schemas/V1PageTrendPoint'
          title: Trend
          type: array
        unavailable_scans:
          default: 0
          title: Unavailable Scans
          type: integer
        unread_state:
          anyOf:
            - enum:
                - blocked
                - failed
                - not_tried
              type: string
            - type: 'null'
          title: Unread State
        url:
          title: Url
          type: string
      required:
        - meta
        - funnel
        - funnel_series
        - search
        - takes
        - answers_link
        - piece
        - page_type_decided_by
        - period
        - id
        - url
        - path
        - section
        - title
        - page_type
        - page_type_source
        - topic
        - topic_source
        - reason
        - cited_in
        - change
        - citations
        - citation_share_pct
        - prompts
        - prompts_tracked
        - engines_citing
        - engines_read
        - first_cited_at
        - last_cited_at
        - citation_evidence
        - unavailable_scans
        - crawled_at
        - changed_at
        - read
        - unread_state
        - delivered_at
        - delivery_cited_at
        - search_clicks
        - trend
        - cited_on
        - rubric
        - checks
        - rival_urls
        - crawler_hits
        - crawler_hits_days
        - crawler_bots
        - ai_visits
        - ai_visits_by_assistant
        - coverage
      title: V1Page
      type: object
    Problem:
      description: |-
        An RFC 9457 problem. `type` is always `about:blank`, so `title` is the
        status's name, and `code` is what a client branches on.
      properties:
        code:
          title: Code
          type: string
        detail:
          title: Detail
          type: string
        instance:
          default: ''
          title: Instance
          type: string
        status:
          title: Status
          type: integer
        title:
          title: Title
          type: string
        type:
          const: about:blank
          default: about:blank
          title: Type
          type: string
      required:
        - type
        - title
        - status
        - detail
        - code
        - instance
      title: Problem
      type: object
    ValidationProblem:
      properties:
        code:
          title: Code
          type: string
        detail:
          title: Detail
          type: string
        errors:
          items:
            $ref: '#/components/schemas/ValidationIssue'
          title: Errors
          type: array
        instance:
          default: ''
          title: Instance
          type: string
        status:
          title: Status
          type: integer
        title:
          title: Title
          type: string
        type:
          const: about:blank
          default: about:blank
          title: Type
          type: string
      required:
        - type
        - title
        - status
        - detail
        - code
        - instance
        - errors
      title: ValidationProblem
      type: object
    RateLimitProblem:
      properties:
        code:
          title: Code
          type: string
        detail:
          title: Detail
          type: string
        instance:
          default: ''
          title: Instance
          type: string
        rate_limit:
          $ref: '#/components/schemas/RateLimitValues'
        status:
          title: Status
          type: integer
        title:
          title: Title
          type: string
        type:
          const: about:blank
          default: about:blank
          title: Type
          type: string
      required:
        - type
        - title
        - status
        - detail
        - code
        - instance
        - rate_limit
      title: RateLimitProblem
      type: object
    V1AssistantVisits:
      properties:
        assistant:
          title: Assistant
          type: string
        sessions:
          title: Sessions
          type: integer
      required:
        - assistant
        - sessions
      title: V1AssistantVisits
      type: object
    AnswersLink:
      properties:
        href:
          title: Href
          type: string
      required:
        - href
      title: AnswersLink
      type: object
    V1PageChange:
      properties:
        at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          description: On last_cited, when AI last cited the page.
          title: At
        delta:
          anyOf:
            - type: number
            - type: 'null'
          description: >-
            Average citations per weekly scan gained or lost against the
            period's baseline; null where the kind is not a quantity.
          title: Delta
        kind:
          enum:
            - improved
            - dropped
            - new
            - quiet
            - last_cited
            - never
            - unmeasured
          title: Kind
          type: string
      required:
        - kind
        - delta
        - at
      title: V1PageChange
      type: object
    V1PageCheck:
      properties:
        detail:
          anyOf:
            - type: string
            - type: 'null'
          title: Detail
        key:
          title: Key
          type: string
        short:
          description: Whether the page fell short on the check.
          title: Short
          type: boolean
      required:
        - key
        - short
        - detail
      title: V1PageCheck
      type: object
    V1PagePrompt:
      properties:
        answers:
          items:
            $ref: '#/components/schemas/V1PageRead'
          title: Answers
          type: array
        intent:
          anyOf:
            - type: string
            - type: 'null'
          title: Intent
        prompt_id:
          anyOf:
            - format: uuid
              type: string
            - type: 'null'
          title: Prompt Id
        query_id:
          title: Query Id
          type: string
        text:
          title: Text
          type: string
      required:
        - prompt_id
        - text
        - intent
        - query_id
        - answers
      title: V1PagePrompt
      type: object
    V1VisitCoverage:
      properties:
        end:
          format: date
          title: End
          type: string
        start:
          format: date
          title: Start
          type: string
      required:
        - start
        - end
      title: V1VisitCoverage
      type: object
    V1CrawlerBot:
      properties:
        bot:
          title: Bot
          type: string
        category:
          anyOf:
            - enum:
                - training
                - ai_search
                - user_fetch
                - search_engine
              type: string
            - type: 'null'
          title: Category
        hits:
          title: Hits
          type: integer
        operator:
          anyOf:
            - type: string
            - type: 'null'
          title: Operator
      required:
        - bot
        - operator
        - hits
        - category
      title: V1CrawlerBot
      type: object
    PageFunnel:
      properties:
        ai_visits:
          anyOf:
            - type: integer
            - type: 'null'
          description: >-
            Visits from AI attributed by GA4 in window, a floor because visits
            often carry no referrer. Null without a complete read of the current
            property covering this page for that window.
          title: Ai Visits
        blocked:
          anyOf:
            - type: integer
            - type: 'null'
          description: >-
            Blocked requests from AI categories in window, across all
            verification states. Plugin counts are a floor. Null when
            unmeasured.
          title: Blocked
        cited:
          anyOf:
            - type: integer
            - type: 'null'
          description: >-
            Frozen citations with default filters from weekly scans completed
            inside window. Null without scans or with incomplete citation
            evidence.
          title: Cited
        crawled:
          anyOf:
            - type: integer
            - type: 'null'
          description: >-
            Served training and AI-search requests in window, verified true or
            unknown. Plugin counts are a floor. Null when this page is
            unmeasured.
          title: Crawled
        crawler_bots:
          anyOf:
            - items:
                $ref: '#/components/schemas/PageCrawlerBot'
              type: array
            - type: 'null'
          description: >-
            Per-bot served requests in window, verified true or unknown,
            including search engines. Categories come from the frozen
            measurement. Null when this page is unmeasured; empty when no
            requests qualify.
          title: Crawler Bots
        fetched_live:
          anyOf:
            - type: integer
            - type: 'null'
          description: >-
            Served user-fetch requests in window, verified true or unknown.
            Plugin counts are a floor. Null when this page is unmeasured.
          title: Fetched Live
        not_found:
          anyOf:
            - type: integer
            - type: 'null'
          description: >-
            Not-found requests from AI categories in window, across all
            verification states. Plugin counts are a floor. Null when
            unmeasured.
          title: Not Found
        search_clicks:
          anyOf:
            - type: integer
            - type: 'null'
          description: >-
            Search Console clicks in window. Null without a complete read of the
            current property returning this page for that window.
          title: Search Clicks
        search_engine_crawls:
          anyOf:
            - type: integer
            - type: 'null'
          description: >-
            Served search-engine requests in window, verified true or unknown.
            Plugin counts are a floor. Null when this page is unmeasured.
          title: Search Engine Crawls
        search_impressions:
          anyOf:
            - type: integer
            - type: 'null'
          description: >-
            Search Console impressions in window. Null without a complete read
            of the current property returning this page for that window.
          title: Search Impressions
        sources:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          description: >-
            Crawler sources recorded for window. Null without a crawler
            measurement.
          title: Sources
        unverified:
          anyOf:
            - type: integer
            - type: 'null'
          description: >-
            Known-unverified requests from AI categories in window, across all
            outcomes. Unknown verification does not count here. Plugin counts
            are a floor. Null when unmeasured.
          title: Unverified
        window:
          anyOf:
            - $ref: '#/components/schemas/PageFunnelWindow'
            - type: 'null'
          description: >-
            28 whole days ending two days before the newest pinned weekly scan
            started. Independent of period and figure filters. Null without a
            weekly scan.
      required:
        - window
        - sources
        - crawler_bots
        - search_clicks
        - search_impressions
        - crawled
        - fetched_live
        - cited
        - ai_visits
        - blocked
        - not_found
        - unverified
        - search_engine_crawls
      title: PageFunnel
      type: object
    PageFunnelPoint:
      description: |-
        The funnel on one weekly scan's window. Each value is null on the same
        terms as the funnel's.
      properties:
        ai_visits:
          anyOf:
            - type: integer
            - type: 'null'
          title: Ai Visits
        cited:
          anyOf:
            - type: integer
            - type: 'null'
          title: Cited
        crawled:
          anyOf:
            - type: integer
            - type: 'null'
          title: Crawled
        end:
          description: Last day of the scan's 28-day window, inclusive.
          format: date
          title: End
          type: string
        fetched_live:
          anyOf:
            - type: integer
            - type: 'null'
          title: Fetched Live
        search_clicks:
          anyOf:
            - type: integer
            - type: 'null'
          title: Search Clicks
        start:
          description: First day of the scan's 28-day window, inclusive.
          format: date
          title: Start
          type: string
      required:
        - start
        - end
        - search_clicks
        - crawled
        - fetched_live
        - cited
        - ai_visits
      title: PageFunnelPoint
      type: object
    Meta:
      properties:
        data_as_of:
          anyOf:
            - $ref: '#/components/schemas/DataAsOf'
            - type: 'null'
        query:
          additionalProperties:
            $ref: '#/components/schemas/JsonValue'
          title: Query
          type: object
      required:
        - query
        - data_as_of
      title: Meta
      type: object
    V1Period:
      properties:
        excluded_reports:
          title: Excluded Reports
          type: integer
        first_answer_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: First Answer At
        last_answer_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Last Answer At
        preset:
          enum:
            - 1w
            - 4w
            - 12w
            - all
          title: Preset
          type: string
        reports:
          title: Reports
          type: integer
      required:
        - preset
        - reports
        - first_answer_at
        - last_answer_at
        - excluded_reports
      title: V1Period
      type: object
    TopicPiece:
      description: |-
        The piece a Missing topic already has, in the words Studio uses.

        `piece_id` is null while the order is still being placed: the brand's
        first order is dispatched before its writing profile exists, and the
        piece row is written once the worker has one.
      properties:
        action_id:
          title: Action Id
          type: string
        piece_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Piece Id
        stage:
          title: Stage
          type: string
        stage_words:
          title: Stage Words
          type: string
      required:
        - action_id
        - piece_id
        - stage
        - stage_words
      title: TopicPiece
      type: object
    V1PageRubricDetail:
      properties:
        pillars:
          items:
            $ref: '#/components/schemas/V1PagePillar'
          title: Pillars
          type: array
        priority:
          description: >-
            The rubric's finding: ineligible, answer_gap and substance_gap are
            gaps.
          enum:
            - ineligible
            - unmeasured
            - answer_gap
            - substance_gap
            - ready
          title: Priority
          type: string
        score:
          description: >-
            Value times gap as the newest scan with page records scored the
            page; zero without a gap. Higher is a better fix.
          title: Score
          type: number
      required:
        - priority
        - score
        - pillars
      title: V1PageRubricDetail
      type: object
    V1PageSearch:
      properties:
        clicks:
          anyOf:
            - type: integer
            - type: 'null'
          title: Clicks
        impressions:
          anyOf:
            - type: integer
            - type: 'null'
          title: Impressions
        pages_read:
          anyOf:
            - type: integer
            - type: 'null'
          title: Pages Read
        position:
          anyOf:
            - type: number
            - type: 'null'
          title: Position
        state:
          enum:
            - ready
            - not_connected
            - unavailable
            - no_data
          title: State
          type: string
        top_queries:
          default: []
          items:
            type: string
          title: Top Queries
          type: array
        top_queries_read:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Top Queries Read
        unavailable_reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Unavailable Reason
        window_end:
          anyOf:
            - type: string
            - type: 'null'
          title: Window End
        window_start:
          anyOf:
            - type: string
            - type: 'null'
          title: Window Start
      required:
        - state
        - unavailable_reason
        - window_start
        - window_end
        - clicks
        - impressions
        - position
        - top_queries
        - top_queries_read
        - pages_read
      title: V1PageSearch
      type: object
    PageTakeList:
      description: >-
        Newest read first. `total` counts the supported takes; `pending` counts

        the current matches whose support has not been decided yet, `rejected`
        the

        ones Jev said the passage does not support, and `unavailable` the citing

        cells whose evidence could not be kept. None of the three is in `items`
        or

        `total`.
      properties:
        has_more:
          default: false
          title: Has More
          type: boolean
        items:
          items:
            $ref: '#/components/schemas/PageTake'
          title: Items
          type: array
        limit:
          minimum: 1
          title: Limit
          type: integer
        offset:
          minimum: 0
          title: Offset
          type: integer
        pending:
          default: 0
          minimum: 0
          title: Pending
          type: integer
        rejected:
          default: 0
          minimum: 0
          title: Rejected
          type: integer
        total:
          minimum: 0
          title: Total
          type: integer
        unavailable:
          default: 0
          minimum: 0
          title: Unavailable
          type: integer
      required:
        - items
        - total
        - limit
        - offset
        - has_more
        - pending
        - unavailable
        - rejected
      title: PageTakeList
      type: object
    V1PageTrendPoint:
      properties:
        break_label:
          anyOf:
            - type: string
            - type: 'null'
          title: Break Label
        breaks:
          items:
            $ref: '#/components/schemas/KeyChange'
          title: Breaks
          type: array
        citations:
          anyOf:
            - type: integer
            - type: 'null'
          description: Null where the weekly scan could not keep all its citations.
          title: Citations
        completed_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Completed At
        key:
          anyOf:
            - $ref: '#/components/schemas/ComparabilityKey'
            - type: 'null'
        prompts_changed:
          default: false
          title: Prompts Changed
          type: boolean
        run_number:
          anyOf:
            - type: integer
            - type: 'null'
          title: Run Number
      required:
        - key
        - breaks
        - prompts_changed
        - run_number
        - completed_at
        - citations
        - break_label
      title: V1PageTrendPoint
      type: object
    ValidationIssue:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          title: Loc
          type: array
        msg:
          title: Msg
          type: string
        type:
          title: Type
          type: string
      required:
        - loc
        - msg
        - type
      title: ValidationIssue
      type: object
    RateLimitValues:
      properties:
        limit:
          title: Limit
          type: integer
        remaining:
          title: Remaining
          type: integer
        reset:
          title: Reset
          type: integer
        window:
          title: Window
          type: integer
      required:
        - limit
        - window
        - remaining
        - reset
      title: RateLimitValues
      type: object
    V1PageRead:
      properties:
        answer_id:
          anyOf:
            - format: uuid
              type: string
            - type: 'null'
          title: Answer Id
        answered_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Answered At
        cites_page:
          description: Whether this answer cited the page.
          title: Cites Page
          type: boolean
        engine:
          enum:
            - perplexity
            - gemini
            - openai
            - google_aio
            - ai_mode
            - copilot
            - claude
          title: Engine
          type: string
        mentioned:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Mentioned
        recommended:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Recommended
        states:
          anyOf:
            - $ref: '#/components/schemas/AnswerReadStates'
            - type: 'null'
        strength:
          anyOf:
            - type: string
            - type: 'null'
          title: Strength
        strength_label:
          anyOf:
            - type: string
            - type: 'null'
          title: Strength Label
      required:
        - engine
        - cites_page
        - mentioned
        - recommended
        - answered_at
        - answer_id
        - strength
        - strength_label
        - states
      title: V1PageRead
      type: object
    PageCrawlerBot:
      description: One bot's served requests for one page over the recorded crawler window.
      properties:
        bot:
          title: Bot
          type: string
        category:
          anyOf:
            - enum:
                - training
                - ai_search
                - user_fetch
                - search_engine
              type: string
            - type: 'null'
          title: Category
        hits:
          title: Hits
          type: integer
        operator:
          anyOf:
            - type: string
            - type: 'null'
          title: Operator
      required:
        - bot
        - operator
        - category
        - hits
      title: PageCrawlerBot
      type: object
    PageFunnelWindow:
      properties:
        clamped:
          description: >-
            True when the weekly scan this window belongs to completed before
            that history began. Crawler, visit and search measurements are then
            null.
          title: Clamped
          type: boolean
        end:
          description: Last day of the funnel window, inclusive.
          format: date
          title: End
          type: string
        history_days:
          description: >-
            Days back from today that the plan reads crawler, visit and search
            measurements.
          title: History Days
          type: integer
        start:
          description: First day of the funnel window, inclusive.
          format: date
          title: Start
          type: string
      required:
        - start
        - end
        - history_days
        - clamped
      title: PageFunnelWindow
      type: object
    DataAsOf:
      properties:
        completed_at:
          format: date-time
          title: Completed At
          type: string
        id:
          format: uuid
          title: Id
          type: string
      required:
        - id
        - completed_at
      title: DataAsOf
      type: object
    JsonValue: {}
    V1PagePillar:
      properties:
        detail:
          anyOf:
            - type: string
            - type: 'null'
          description: What a failing pillar measured; null otherwise.
          title: Detail
        key:
          enum:
            - eligible
            - answers
            - substance
          title: Key
          type: string
        status:
          enum:
            - pass
            - fail
            - unmeasured
          title: Status
          type: string
      required:
        - key
        - status
        - detail
      title: V1PagePillar
      type: object
    PageTake:
      description: One answer's take from one page.
      properties:
        answer_read_id:
          title: Answer Read Id
          type: string
        claim:
          title: Claim
          type: string
        engine_id:
          title: Engine Id
          type: string
        passage:
          title: Passage
          type: string
        prompt_text:
          title: Prompt Text
          type: string
        prompt_uid:
          title: Prompt Uid
          type: string
        read_at:
          title: Read At
          type: string
        segment:
          $ref: '#/components/schemas/AnswerReadSegment'
        states:
          $ref: '#/components/schemas/AnswerReadStates'
      required:
        - answer_read_id
        - prompt_uid
        - prompt_text
        - engine_id
        - segment
        - read_at
        - states
        - claim
        - passage
      title: PageTake
      type: object
    KeyChange:
      description: One part of the instrument that changed between two reads.
      properties:
        added:
          default: []
          items:
            type: string
          title: Added
          type: array
        part:
          enum:
            - engines
            - market
            - score_version
            - answer_pack_version
          title: Part
          type: string
        removed:
          default: []
          items:
            type: string
          title: Removed
          type: array
        value:
          anyOf:
            - type: string
            - type: 'null'
          title: Value
      required:
        - part
        - added
        - removed
        - value
      title: KeyChange
      type: object
    ComparabilityKey:
      description: |-
        The instrument one read was taken with. A part that cannot be told is
        None, and a None part never breaks a series: a run whose answers the
        retention sweep took no longer says which engines it asked.
      properties:
        answer_pack_version:
          anyOf:
            - type: integer
            - type: 'null'
          title: Answer Pack Version
        engines:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Engines
        markets:
          additionalProperties:
            type: string
          default: {}
          title: Markets
          type: object
        passes:
          anyOf:
            - type: integer
            - type: 'null'
          title: Passes
        score_version:
          title: Score Version
          type: string
      required:
        - engines
        - markets
        - score_version
        - answer_pack_version
        - passes
      title: ComparabilityKey
      type: object
    AnswerReadStates:
      description: >-
        The four words for how one answer treated the brand (D32, D37).


        The wire shape of `app.scans.scoring.axes.AnswerAxes`, which is where
        the

        reading itself is decided — the report, the roll-ups and this history
        all

        read one answer the same way. `None` is unmeasured and never a zero.
      properties:
        icon_states:
          $ref: '#/components/schemas/IconStates'
          readOnly: true
        mentioned:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Mentioned
        praised:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Praised
        recommended:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Recommended
        understood:
          anyOf:
            - type: number
            - type: 'null'
          title: Understood
      required:
        - mentioned
        - understood
        - recommended
        - praised
        - icon_states
      title: AnswerReadStates
      type: object
    AnswerReadSegment:
      properties:
        geo:
          title: Geo
          type: string
        label:
          title: Label
          type: string
        persona_id:
          title: Persona Id
          type: string
      required:
        - label
        - persona_id
        - geo
      title: AnswerReadSegment
      type: object
    IconStates:
      description: Each axis as the icon a row draws for it.
      properties:
        mentioned:
          enum:
            - 'yes'
            - partial
            - 'no'
            - not_measured
          title: Mentioned
          type: string
        praised:
          enum:
            - 'yes'
            - partial
            - 'no'
            - not_measured
          title: Praised
          type: string
        recommended:
          enum:
            - 'yes'
            - partial
            - 'no'
            - not_measured
          title: Recommended
          type: string
        understood:
          enum:
            - 'yes'
            - partial
            - 'no'
            - not_measured
          title: Understood
          type: string
      required:
        - mentioned
        - understood
        - recommended
        - praised
      title: IconStates
      type: object
  securitySchemes:
    apiKey:
      description: 'An API key, sent as `Authorization: Bearer hrld_...`.'
      scheme: bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.