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

# List the interviews feed

> The admin interviews page as one pageable list: each campaign is a single
row carrying its progress aggregates, and campaign-less interviews are
plain rows. Rows interleave newest first, a campaign sorting at its own
creation date and a standalone interview at its own — the same order the
interviews list uses. Campaigns without interviews are not listed.

**Admin only.** Filters are not supported here: a filtered or searched
view is served by the interviews list.




## OpenAPI

````yaml /api-reference/openapi-public.yaml get /projects/{project_id}/interviews/feed/
openapi: 3.0.3
info:
  title: Clarifeye Platform API — Public API
  description: >
    Forward-facing, supported REST API for new integrators of the Clarifeye
    Platform.


    Covers the curated public surface: authentication, knowledge management

    (documents), users & teams, signals, and tool execution. New integrations

    should target these endpoints.


    ## Authentication

    All endpoints require authentication. Include the Authorization header in
    every request using either format:

    - `Authorization: Token <token_key>`

    - `Authorization: Bearer <token_key>`


    ## Service accounts and API keys

    Integrations authenticate with an **API key** of a **service account**:

    - `Authorization: Bearer <key>` (keys start with `cfk_`)


    A service account is an ordinary member (role `member`) of one organization
    that cannot log

    in. Organization admins create it and mint its keys on the organization's
    *Service

    accounts* page, and give it access to knowledge stores with ordinary store
    permissions. A

    key is valid on every endpoint and acts as its service account: it reaches
    exactly the

    stores, with exactly the rights, the account was given. An account can hold
    several keys

    (each with its own name, optional expiry and revocation), so a key can be
    rotated without

    changing identity.


    A refused key answers **403** with one of: `Invalid API key.`, `API key
    revoked.`,

    `API key expired.`, `API key disabled.` (the service account is disabled).
  version: 1.0.0
  contact:
    name: Clarifeye Support
servers:
  - url: https://eu.app.clarifeye.ai/api/v1
    description: EU
  - url: https://us.app.clarifeye.ai/api/v1
    description: US
security:
  - BearerAuth: []
  - TokenAuth: []
tags:
  - name: Users
    description: Manage users within a project
  - name: Invitations
    description: Manage project invitations
  - name: Documents
    description: Manage documents within a project
  - name: Signals
    description: Submit signals about the project's content for domain experts to review
  - name: Tools
    description: Execute configured AI tools with custom parameters
  - name: Interviews
    description: >-
      Assign, run and review structured interview conversations, and manage
      interview drafts and campaigns
  - name: Artifacts
    description: >
      Knowledge-store artifact catalog: list artifacts, create and edit custom
      artifacts,

      manage scope membership, read and publish versions, and configure the
      cohesion guide.
  - name: Knowledge Changelog
    description: Chronological log of changes to the knowledge store's artifacts.
paths:
  /projects/{project_id}/interviews/feed/:
    get:
      tags:
        - Interviews
      summary: List the interviews feed
      description: >
        The admin interviews page as one pageable list: each campaign is a
        single

        row carrying its progress aggregates, and campaign-less interviews are

        plain rows. Rows interleave newest first, a campaign sorting at its own

        creation date and a standalone interview at its own — the same order the

        interviews list uses. Campaigns without interviews are not listed.


        **Admin only.** Filters are not supported here: a filtered or searched

        view is served by the interviews list.
      operationId: listInterviewsFeed
      parameters:
        - $ref: '#/components/parameters/ProjectId'
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PaginatedResponse'
                  - type: object
                    properties:
                      results:
                        type: array
                        items:
                          $ref: '#/components/schemas/InterviewFeedItem'
                      status_counts:
                        type: object
                        description: >
                          Number of interviews per status across every interview
                          in the

                          project, campaign or not (not just the returned page).
                          Keys are

                          the status values; legacy conversations without a
                          status are

                          counted under "none". Absent keys mean zero.
                        additionalProperties:
                          type: integer
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  parameters:
    ProjectId:
      name: project_id
      in: path
      required: true
      description: UUID of the project
      schema:
        type: string
        format: uuid
    Limit:
      name: limit
      in: query
      description: Maximum number of results per page
      schema:
        type: integer
        default: 100
        minimum: 1
        maximum: 1000
    Offset:
      name: offset
      in: query
      description: Number of results to skip for pagination
      schema:
        type: integer
        default: 0
        minimum: 0
  schemas:
    PaginatedResponse:
      type: object
      properties:
        count:
          type: integer
          description: Total number of results
        next:
          type: string
          format: uri
          nullable: true
          description: URL to next page of results
        previous:
          type: string
          format: uri
          nullable: true
          description: URL to previous page of results
        results:
          type: array
          items: {}
    InterviewFeedItem:
      type: object
      description: One row of the interviews feed — a campaign or a standalone interview.
      required:
        - kind
      properties:
        kind:
          type: string
          enum:
            - campaign
            - interview
        campaign:
          $ref: '#/components/schemas/InterviewCampaign'
          description: Present when `kind` is `campaign`.
        interview:
          $ref: '#/components/schemas/InterviewListItem'
          description: Present when `kind` is `interview`.
    InterviewCampaign:
      type: object
      description: >
        A named, project-scoped group of interviews (e.g. a workshop wave or

        rollout round). Created lazily via `campaign_name` on the assign
        endpoint;

        names are unique per project (case-insensitive).
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        name:
          type: string
        created_at:
          type: string
          format: date-time
          readOnly: true
        interview_count:
          type: integer
          readOnly: true
          description: Number of interviews in the campaign.
    InterviewListItem:
      type: object
      description: >-
        Lightweight interview representation used in list responses (omits the
        transcript).
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        name:
          type: string
          nullable: true
        created_by:
          type: string
          format: uuid
          readOnly: true
        created_by_email:
          type: string
          format: email
          nullable: true
          readOnly: true
        type:
          type: string
        assigned_to:
          type: string
          format: uuid
          nullable: true
          readOnly: true
        assigned_by:
          type: string
          format: uuid
          nullable: true
          readOnly: true
        assigned_to_email:
          type: string
          format: email
          nullable: true
          readOnly: true
        assigned_by_email:
          type: string
          format: email
          nullable: true
          readOnly: true
        is_pending_invite:
          type: boolean
          readOnly: true
        import_info:
          allOf:
            - $ref: '#/components/schemas/ImportedInterviewInfo'
          nullable: true
          readOnly: true
        meeting_info:
          allOf:
            - $ref: '#/components/schemas/MeetingInfo'
          nullable: true
          readOnly: true
        status:
          type: string
          nullable: true
          readOnly: true
          enum:
            - pending
            - in_progress
            - completed
          description: Null for imported interviews until their transcript parse completes.
        campaign:
          allOf:
            - $ref: '#/components/schemas/InterviewCampaignRef'
          nullable: true
          readOnly: true
          description: Campaign this interview belongs to; null for ad hoc interviews.
        first_message_preview:
          type: string
          description: Truncated preview of the first user message in the transcript.
        message_count:
          type: integer
          description: Number of conversational messages in the transcript.
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
    Error:
      type: object
      properties:
        error:
          type: string
          description: Error message
      example:
        error: User not found
    ImportedInterviewInfo:
      type: object
      description: >
        Parse-pipeline state of an imported external transcript (interviews of
        type

        "imported-interview"). Null on every other interview type. The raw
        submitted

        transcript is never returned — the parsed `chat_history` is the
        transcript.
      properties:
        import_status:
          type: string
          enum:
            - parsing
            - ready
            - failed
          description: >
            "parsing" while the async parse runs (transcript not yet readable),

            "ready" once chat_history holds the speaker-labeled turns (status
            becomes

            "completed"), "failed" when parsing errored.
        participants:
          type: array
          description: >-
            Participant names (importer-supplied or inferred from the
            transcript).
          items:
            type: string
        interview_date:
          type: string
          format: date
          nullable: true
          description: Date the conversation happened (importer-supplied or inferred).
        error:
          type: string
          nullable: true
          description: Failure detail when import_status is "failed".
    MeetingInfo:
      type: object
      description: >
        Set on conversations of type `meeting` — the transcript of a call Clara
        attended

        as a bot (CLA-1843). The conversation is created post-call, so this
        block is always

        complete when present. Every turn of such a transcript is `role: user`
        with a

        `speaker` name and a `meeting_offset_ms`; attribute by speaker.
      properties:
        meeting_id:
          type: string
          format: uuid
        platform:
          type: string
          enum:
            - google_meet
            - zoom
            - microsoft_teams
        participants:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              name:
                type: string
              is_host:
                type: boolean
        duration_ms:
          type: integer
          nullable: true
        started_at:
          type: string
          format: date-time
          nullable: true
        url:
          type: string
          nullable: true
          description: Relative in-app path of the meeting page (recording, insights).
    InterviewCampaignRef:
      type: object
      description: Nested campaign reference carried by interviews.
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
  responses:
    Unauthorized:
      description: Unauthorized - missing or invalid authentication
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Authentication credentials were not provided.
    Forbidden:
      description: Forbidden - insufficient permissions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: You do not have permission to perform this action.
    NotFound:
      description: Not found - resource does not exist
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Not found.
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >
        Use `Authorization: Bearer <token>`. The token is either a user token /
        OAuth access

        token, or a service-account API key (`cfk_...`). A key is valid on every
        endpoint and

        acts as its service account, an organization member with per-store
        permissions.

        Refused keys answer 403 with `Invalid API key.`, `API key revoked.`,

        `API key expired.` or `API key disabled.`.
    TokenAuth:
      type: apiKey
      in: header
      name: Authorization
      description: 'Use Authorization: Token <token>'

````

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