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

# List content recommendations



## OpenAPI

````yaml /api-reference/openapi.json get /api/v2/brands/{brand_id}/content_studio/recommendations
openapi: 3.0.1
info:
  title: Cognizo Public API
  version: v1
  description: >-
    Public REST API for Cognizo. Authenticate with an API key via the
    `X-API-KEY` header.
servers:
  - url: https://core.cognizo.ai
security:
  - apiKey: []
paths:
  /api/v2/brands/{brand_id}/content_studio/recommendations:
    parameters:
      - name: brand_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
    get:
      tags:
        - ContentStudio
      summary: List content recommendations
      operationId: list_brand_content_studio_recommendations
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
        - name: page_size
          in: query
          required: false
          schema:
            type: integer
        - name: filter[types]
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - social_post
                - earned_3rd_party
                - owned_create
                - owned_refresh
                - no_action
          required: false
          style: form
          explode: true
        - name: filter[intents]
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - T
                - C
                - I
                - 'N'
          required: false
          style: form
          explode: true
        - name: filter[impacts]
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - high
                - medium
                - low
          required: false
          style: form
          explode: true
        - name: filter[state]
          in: query
          required: false
          description: |-
            Filter by user state — default new:
             * `new` 
             * `saved` 
             * `done` 
             * `dismissed` 
             
          schema:
            enum:
              - new
              - saved
              - done
              - dismissed
            type: string
        - name: filter[states]
          in: query
          schema:
            type: array
            items:
              enum:
                - new
                - saved
                - done
                - dismissed
              type: string
          required: false
          style: form
          explode: true
      responses:
        '200':
          description: rows returned
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/content_studio_recommendation'
                  meta:
                    allOf:
                      - $ref: '#/components/schemas/pagination_meta'
                      - type: object
                        properties:
                          regenerate_quota:
                            $ref: '#/components/schemas/daily_quota'
                        required:
                          - regenerate_quota
                required:
                  - data
                  - meta
        '404':
          description: brand not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '500':
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
components:
  schemas:
    content_studio_recommendation:
      type: object
      properties:
        id:
          type: string
          format: uuid
        brand_id:
          type: string
          format: uuid
        topic_id:
          type: string
          format: uuid
          nullable: true
        topic_name:
          type: string
          nullable: true
        intent:
          type: string
          enum:
            - T
            - C
            - I
            - 'N'
          nullable: true
          description: Transactional / Commercial / Informational / Navigational
        type:
          type: string
          enum:
            - social_post
            - earned_3rd_party
            - owned_create
            - owned_refresh
            - no_action
          description: v2 fine-grained recommendation type
        legacy_type:
          type: string
          nullable: true
          enum:
            - social
            - earned
            - owned
            - no_action
          description: Backward-compat collapse of `type` for 3-bucket clients
        impact:
          type: string
          enum:
            - high
            - medium
            - low
          nullable: true
        severity:
          type: number
          nullable: true
          description: 0..1 volume-weighted urgency score
        action:
          type: string
        action_url:
          type: string
          nullable: true
          description: >-
            Set when the rec is marked done (#788): the page refreshed/created,
            the outlet pitched, or the channel engaged. Also added to the
            brand's watch list. User-overridable on completion.
        suggested_action_url:
          type: string
          nullable: true
          description: >-
            Destination derived from evidence; the completion UI pre-fills its
            action_url input with action_url || suggested_action_url.
        channel:
          type: object
          nullable: true
          description: >-
            Earned/social recs only — the specific outlet/community the action
            targets.
          properties:
            platform:
              type: string
              enum:
                - reddit
                - youtube
                - linkedin
                - x
                - web
            name:
              type: string
            url:
              type: string
        reason:
          type: string
        details:
          type: string
          nullable: true
          description: Markdown bullets — concrete next-step instructions
        format:
          type: string
          nullable: true
          enum:
            - listicle
            - how_to_guide
            - comparison
            - product_review
            - alternative
            - article
            - case_study
            - pricing_breakdown
            - features
            - documentation
            - homepage
            - about
            - category_page
            - resource
            - social_post
            - earned_pitch
            - null
          description: Content format the LLM picked (sanitized to the allowed set)
        suggested_title:
          type: string
          nullable: true
        target_word_count:
          type: integer
          nullable: true
        required_elements:
          type: array
          items:
            type: string
        archived:
          type: boolean
          description: System-managed stale-prune flag; never set by user actions
        completed:
          type: boolean
          description: Legacy mirror of state=='done' — kept for backward-compat readers
        state:
          type: string
          enum:
            - new
            - saved
            - done
            - dismissed
          description: User-facing lifecycle state
        state_changed_at:
          type: string
          format: date-time
          nullable: true
          description: Last user-driven transition timestamp
        dismissed_at:
          type: string
          format: date-time
          nullable: true
          description: Stamp captured on the new→dismissed transition for cooldown revive
        completed_at:
          type: string
          format: date-time
          nullable: true
          description: Legacy timestamp — mirrors state_changed_at when state==done
        evidence:
          type: object
          additionalProperties: true
          description: >-
            Structured router + generator evidence (router reason, problem
            counts, citation landscape, refresh signals, complementary URL,
            discovery-trigger details).
        target_prompt_ids:
          type: array
          items:
            type: string
            format: uuid
        target_urls:
          type: array
          items:
            type: string
          description: >-
            URLs to refresh (owned_refresh) or competitor URLs to outrank
            (owned_create)
        top_competitors:
          type: array
          items:
            type: object
            additionalProperties: true
        target_prompts:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
              text:
                type: string
                nullable: true
        audience_id:
          type: string
          format: uuid
          nullable: true
        audience_name:
          type: string
          nullable: true
        created_at:
          type: string
          format: date-time
          nullable: true
      required:
        - id
        - brand_id
        - type
        - state
    pagination_meta:
      type: object
      properties:
        page:
          type: integer
        page_size:
          type: integer
        total_items:
          type: integer
        total_pages:
          type: integer
        counts:
          type: object
          additionalProperties:
            type: integer
      required:
        - page
        - page_size
        - total_items
        - total_pages
    daily_quota:
      type: object
      properties:
        limit:
          type: integer
        used:
          type: integer
        remaining:
          type: integer
        resets_at:
          type: string
          format: date-time
      required:
        - limit
        - used
        - remaining
        - resets_at
    error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
            details:
              type: array
              items:
                $ref: '#/components/schemas/error_detail'
          required:
            - code
            - message
      required:
        - error
    error_detail:
      type: object
      properties:
        field:
          type: string
          nullable: true
        code:
          type: string
        message:
          type: string
      required:
        - code
        - message
        - field
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-API-KEY

````