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

# Get Brand Perception Attribute History

> How one brand's prominence on each brand-perception attribute has moved over time: one series per attribute, each point a day and the brand's average prominence (0-100) across that day's AI answers about the attribute. These are the same scores as the competitive breakdown, split by day instead of aggregated. The brand defaults to the project's own brand. The data covers the brand-perception runs of one industry and one target market. Pass `industry` to pick the industry; omitted, it is the one with the most recent completed run. The target market is always the industry's most recently completed one and cannot be picked. Both are returned as `industry` and `target_market`. Pagination applies to attributes.



## OpenAPI

````yaml https://api.peec.ai/customer/v1/openapi/json get /brand-perception/attribute-history
openapi: 3.0.3
info:
  title: Peec AI Customer API
  description: Development documentation
  version: 1.0.0
  contact:
    name: Peec AI Team
    email: support@peec.ai
servers:
  - url: https://api.peec.ai/customer/v1
security: []
paths:
  /brand-perception/attribute-history:
    get:
      tags:
        - Brand Perception
      summary: Get Brand Perception Attribute History
      description: >-
        How one brand's prominence on each brand-perception attribute has moved
        over time: one series per attribute, each point a day and the brand's
        average prominence (0-100) across that day's AI answers about the
        attribute. These are the same scores as the competitive breakdown, split
        by day instead of aggregated. The brand defaults to the project's own
        brand. The data covers the brand-perception runs of one industry and one
        target market. Pass `industry` to pick the industry; omitted, it is the
        one with the most recent completed run. The target market is always the
        industry's most recently completed one and cannot be picked. Both are
        returned as `industry` and `target_market`. Pagination applies to
        attributes.
      operationId: getBrand-perceptionAttribute-history
      parameters:
        - name: project_id
          in: query
          required: false
          schema:
            description: Required if using a company api key
            example: or_f45b94ba-5e35-4982-93ed-285e72ee14eb
            type: string
        - name: brand
          in: query
          required: false
          schema:
            example: Porsche
            description: >-
              The brand whose history to read, spelled as the
              competitive-breakdown endpoint reports it. Omit to read the
              project's own brand.
            type: string
            minLength: 1
        - name: model_channel_ids
          in: query
          required: false
          schema:
            description: >-
              Only include answers from these AI engine channels (repeat the
              parameter for multiple values). Omit to aggregate across all
              tracked channels.
            type: array
            items:
              type: string
              enum:
                - openai-0
                - openai-1
                - qwen-0
                - openai-2
                - perplexity-0
                - perplexity-1
                - google-0
                - google-1
                - google-2
                - google-3
                - google-4
                - anthropic-0
                - anthropic-1
                - anthropic-2
                - anthropic-3
                - deepseek-0
                - meta-0
                - meta-1
                - xai-0
                - xai-1
                - microsoft-0
                - amazon-0
                - mistral-0
                - mistral-1
                - naver-0
                - openai-3
                - openai-4
                - openai-5
        - name: industry
          in: query
          required: false
          schema:
            example: Luxury Sports Cars
            description: >-
              Only read the runs dispatched for this industry, as returned by
              the brand-perception industries endpoint. Omit to read the
              industry marked `is_default` there — the one with the most recent
              completed run.
            type: string
        - name: limit
          in: query
          required: false
          schema:
            default: 1000
            type: integer
            minimum: 1
            maximum: 10000
        - name: offset
          in: query
          required: false
          schema:
            default: 0
            type: integer
            minimum: 0
            maximum: 9007199254740991
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        attribute:
                          type: string
                          example: Racing Heritage
                          description: The attribute (cluster representative name).
                        points:
                          type: array
                          items:
                            type: object
                            properties:
                              date:
                                type: string
                                format: date
                                pattern: >-
                                  ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
                                example: '2026-09-01'
                                description: The day the answers were collected.
                              score:
                                type: number
                                example: 29
                                description: >-
                                  The brand's average prominence for this
                                  attribute across that day's AI answers about
                                  it, 0-100. Answers the brand was absent from
                                  count as 0.
                            required:
                              - date
                              - score
                          description: >-
                            One point per day with data, oldest first. Every
                            attribute carries the same days, so the series line
                            up.
                      required:
                        - attribute
                        - points
                    description: >-
                      Attributes sorted by the brand's score on the latest day,
                      strongest first.
                  total_count:
                    type: number
                    example: 8
                    description: Total number of attributes, ignoring pagination
                  brand:
                    nullable: true
                    example: Ferrari
                    description: >-
                      The brand the series describe; null when no brand was
                      passed and the project has no own brand.
                    type: string
                  industry:
                    nullable: true
                    example: Luxury Sports Cars
                    description: >-
                      The industry the data was read from; null when the project
                      has no brand-perception runs yet.
                    type: string
                  target_market:
                    nullable: true
                    example: Germany
                    description: >-
                      The target market the read narrowed to within that
                      industry — its most recently completed one. Runs
                      dispatched for the industry's other markets are not
                      included.
                    type: string
                  industries:
                    description: >-
                      Every industry the project has runs for, latest-started
                      first — present only when there is more than one. Pass a
                      name as `industry` to read that one instead.
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                          example: Athleisure
                        has_completed_run:
                          type: boolean
                          description: >-
                            False while the industry's first run is still in
                            flight, so its data is partial.
                      required:
                        - name
                        - has_completed_run
                required:
                  - data
                  - total_count
                  - brand
                  - industry
                  - target_market
                description: Success
      security:
        - APIKeyHeader: []
        - APIKeyQuery: []
        - BearerAuth: []
components:
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
    APIKeyQuery:
      type: apiKey
      in: query
      name: api_key
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````