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

# Get Visibility Timeline

> Metric trends across Scans. groupBy brand compares every brand measured; groupBy platform or region instead tracks a single brand across that dimension, defaulting to the Site's tracked brand and selectable with brandId. Choose the metric with metric; filter by platform, region, or date.



## OpenAPI

````yaml /openapi/public-api-v1.json get /v1/sites/{siteId}/reports/timeline
openapi: 3.0.0
info:
  title: Onsomble API
  description: >-
    Connect Onsomble to your reporting and operational workflows. Read
    discoverability results or start a Scan from another system.
  version: 1.0.0
  contact: {}
servers:
  - url: https://api.onsomble.ai
    description: Production
security:
  - apiKeyAuth: []
tags:
  - name: Sites
    description: Sites connected to your account.
  - name: Clients
    description: Clients managed by agency accounts.
  - name: Scans
    description: Scan history, status, and controls.
  - name: Reports
    description: AI discoverability results.
paths:
  /v1/sites/{siteId}/reports/timeline:
    get:
      tags:
        - Reports
      summary: Get Visibility Timeline
      description: >-
        Metric trends across Scans. groupBy brand compares every brand measured;
        groupBy platform or region instead tracks a single brand across that
        dimension, defaulting to the Site's tracked brand and selectable with
        brandId. Choose the metric with metric; filter by platform, region, or
        date.
      operationId: getTimeline
      parameters:
        - name: siteId
          required: true
          in: path
          schema:
            type: string
        - name: promptId
          required: false
          in: query
          description: Repeat to limit to these prompts (promptIds).
          schema:
            type: array
            items:
              type: string
              format: uuid
        - name: tag
          required: false
          in: query
          description: Repeat to limit to prompts with these tags.
          schema:
            example:
              - pricing
            type: array
            items:
              type: string
        - name: category
          required: false
          in: query
          description: Repeat to limit to prompts in these categories.
          schema:
            example:
              - comparison
            type: array
            items:
              type: string
        - name: product
          required: false
          in: query
          description: Repeat to limit to prompts about these products.
          schema:
            example:
              - Car Insurance
            type: array
            items:
              type: string
        - name: persona
          required: false
          in: query
          description: Repeat to limit to prompts targeting these personas.
          schema:
            example:
              - Landlords
            type: array
            items:
              type: string
        - name: stage
          required: false
          in: query
          description: Repeat to limit to prompts in these journey stages.
          schema:
            example:
              - Decision
            type: array
            items:
              type: string
        - name: brandMention
          required: false
          in: query
          description: Limit to prompts that do, or do not, mention the tracked brand.
          schema:
            type: string
            enum:
              - mentions_tracked_brand
              - does_not_mention_tracked_brand
        - name: platform
          required: false
          in: query
          description: Repeat to select AI platforms. Omit for every platform.
          schema:
            type: array
            items:
              type: string
              enum:
                - claude_api
                - chatgpt_api
                - gemini_api
                - perplexity_sonar_pro
                - chatgpt_app
                - gemini_app
                - google_ai_summaries_app
                - google_ai_mode_app
                - microsoft_copilot_app
                - perplexity_app
        - name: region
          required: false
          in: query
          description: Repeat to select region codes. Omit for all regions.
          schema:
            example:
              - NZ:auckland
            type: array
            items:
              type: string
        - name: brand
          required: false
          in: query
          description: >-
            Repeat to limit which brands are returned (brand identity ids). Does
            not change Share of Voice denominators.
          schema:
            type: array
            items:
              type: string
              format: uuid
        - name: competitorId
          required: false
          in: query
          description: >-
            Repeat to limit to these tracked competitors (competitorId from the
            competitors catalogue). Combines with brand. A discovered competitor
            is refused until it is tracked.
          schema:
            type: array
            items:
              type: string
              format: uuid
        - name: startDate
          required: false
          in: query
          description: >-
            Inclusive lower bound, as a UTC calendar day (YYYY-MM-DD). Omit for
            none.
          schema:
            example: '2026-07-01'
            type: string
        - name: endDate
          required: false
          in: query
          description: >-
            Inclusive upper bound, as a UTC calendar day (YYYY-MM-DD). Omit for
            none.
          schema:
            example: '2026-07-31'
            type: string
        - name: metric
          required: false
          in: query
          description: Which metric the series values carry.
          schema:
            default: visibility
            type: string
            enum:
              - visibility
              - shareOfVoice
              - sentiment
              - gap
        - name: groupBy
          required: false
          in: query
          description: >-
            brand compares every brand measured. platform and region instead
            track one brand across that dimension - see brandId.
          schema:
            default: brand
            type: string
            enum:
              - brand
              - platform
              - region
        - name: brandId
          required: false
          in: query
          description: >-
            Which brand the platform and region series describe. Defaults to the
            tracked brand. Ignored when groupBy is brand, which compares every
            brand.
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TimelineReportResponseDto'
        '404':
          description: Site or brand not found.
components:
  schemas:
    TimelineReportResponseDto:
      type: object
      properties:
        metric:
          type: string
          enum:
            - visibility
            - shareOfVoice
            - sentiment
            - gap
          example: visibility
        groupBy:
          type: string
          enum:
            - brand
            - platform
            - region
          example: brand
        brand:
          nullable: true
          description: >-
            The Site's tracked brand, or the one named by brandId. Under groupBy
            platform or region this is the brand every series describes; under
            brand it identifies the tracked brand among them. Null when the Site
            has no brand yet.
          type: object
          allOf:
            - $ref: '#/components/schemas/PublicReportBrandDto'
        series:
          type: array
          items:
            $ref: '#/components/schemas/TimelineSeriesDto'
        filters:
          $ref: '#/components/schemas/AppliedReportFiltersDto'
      required:
        - metric
        - groupBy
        - brand
        - series
        - filters
    PublicReportBrandDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Pass back as brandId to re-scope a report to this brand.
        name:
          type: string
          example: Acme
      required:
        - id
        - name
    TimelineSeriesDto:
      type: object
      properties:
        key:
          type: string
          example: acme
          description: >-
            Stable series key: brand key, platform ID, or region code depending
            on groupBy.
        label:
          type: string
          example: Acme
        platform:
          description: Present when groupBy is platform.
          allOf:
            - $ref: '#/components/schemas/PublicPlatformDto'
        points:
          type: array
          items:
            $ref: '#/components/schemas/TimelinePointDto'
      required:
        - key
        - label
        - points
    AppliedReportFiltersDto:
      type: object
      properties:
        platform:
          example:
            - chatgpt_app
            - chatgpt_api
          description: Platform IDs applied to the report. Empty means all.
          type: array
          items:
            type: string
        region:
          example:
            - NZ
            - AU
          description: Region codes applied to the report. Empty means all.
          type: array
          items:
            type: string
        startDate:
          type: string
          nullable: true
          example: '2026-07-01'
          description: UTC calendar day.
        endDate:
          type: string
          nullable: true
          example: '2026-07-31'
          description: UTC calendar day.
      required:
        - platform
        - region
        - startDate
        - endDate
    PublicPlatformDto:
      type: object
      properties:
        id:
          type: string
          example: chatgpt_app
          description: Stable ID for the platform and collection method.
        name:
          type: string
          example: ChatGPT
        method:
          type: string
          enum:
            - web
            - api
          example: web
          description: >-
            How Onsomble collected the result: from the public website or
            through an API.
      required:
        - id
        - name
        - method
    TimelinePointDto:
      type: object
      properties:
        date:
          type: string
          example: '2026-07-31'
          description: >-
            The UTC calendar day of the Scan. Use `completedAt` for the exact
            time, to show the day in your user's time zone.
        completedAt:
          type: string
          nullable: true
          format: date-time
          example: '2026-07-31T09:42:00.000Z'
          description: >-
            When the Scan finished, as an ISO 8601 UTC timestamp. Format it in
            your user's time zone to show the day. Null when not known.
        value:
          type: number
          example: 62.5
          nullable: true
          description: >-
            Metric value at this Scan. Sentiment uses the same scale as the
            Scorecard report. Null when the Scan produced no evidence for this
            series.
        scanId:
          type: string
          format: uuid
          nullable: true
          description: The Scan behind this point, when attributable.
      required:
        - date
        - value
        - scanId
  securitySchemes:
    apiKeyAuth:
      scheme: bearer
      bearerFormat: ons_…
      type: http
      description: An API key created in Settings → Account → API Keys.

````

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