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

# Get interview insights

> Retrieve the insights captured on an interview, together with the interview's metadata. Each insight is a highlighted passage: `source` says whether it was taken from the notes or from the transcript, `quote` is the highlighted passage itself (the words to quote), `text` is the same content formatted (for a recorded interview, one timestamped, speaker-attributed line per segment), `note` is the annotation the author gave it, and `cardIds` are the cards it is linked to. Insights on a recorded interview also carry `segments` (each covered segment with its speaker and timings) and a `transcriptRange`; when such an insight's excerpt can no longer be resolved it carries `excerptUnavailable: true` instead, with empty `text` and `quote`. AI suggestions the author has not accepted are not included.



## OpenAPI

````yaml https://api.vistaly.com/v1/swagger.json get /v1/interviews/{interviewId}/insights
openapi: 3.1.0
info:
  contact:
    email: support@vistaly.com
    name: Vistaly Support Team
  description: >-
    Vistaly's public API for interacting with our platform, enabling developers
    to integrate with various features such as feedback, cards, and system
    health.
  termsOfService: https://vistaly.com/terms-of-service
  title: Vistaly API
  version: '2026-09-05'
servers:
  - description: Production server
    url: https://api.vistaly.com
security: []
tags:
  - description: System-related endpoints to interact with the overall service.
    name: system
  - description: >-
      Endpoints related to card management, including the creation and
      modification of card metrics and related data.
    externalDocs:
      description: Learn more about Cards
      url: https://docs.vistaly.com/en/card-types/overview
    name: cards
  - description: >-
      Endpoints for handling insights data, such as user feedback and interview
      records.
    externalDocs:
      description: Learn more about Insights
      url: https://docs.vistaly.com/en/insights/overview
    name: insights
paths:
  /v1/interviews/{interviewId}/insights:
    get:
      tags:
        - interviews
      summary: Get interview insights
      description: >-
        Retrieve the insights captured on an interview, together with the
        interview's metadata. Each insight is a highlighted passage: `source`
        says whether it was taken from the notes or from the transcript, `quote`
        is the highlighted passage itself (the words to quote), `text` is the
        same content formatted (for a recorded interview, one timestamped,
        speaker-attributed line per segment), `note` is the annotation the
        author gave it, and `cardIds` are the cards it is linked to. Insights on
        a recorded interview also carry `segments` (each covered segment with
        its speaker and timings) and a `transcriptRange`; when such an insight's
        excerpt can no longer be resolved it carries `excerptUnavailable: true`
        instead, with empty `text` and `quote`. AI suggestions the author has
        not accepted are not included.
      parameters:
        - description: The unique identifier for the interview
          in: path
          name: interviewId
          required: true
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetInterviewInsightsResponse'
          description: Interview insights retrieved successfully
        '400':
          description: Bad request
          content:
            application/json:
              example:
                message: Bad request
              schema:
                $ref: '#/components/schemas/MessageResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              example:
                message: Unauthorized
              schema:
                $ref: '#/components/schemas/MessageResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              example:
                message: Forbidden
              schema:
                $ref: '#/components/schemas/MessageResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              example:
                message: Internal server error
              schema:
                $ref: '#/components/schemas/MessageResponse'
      security:
        - bearerAuth: []
components:
  schemas:
    GetInterviewInsightsResponse:
      description: An interview with its insights.
      allOf:
        - $ref: '#/components/schemas/InterviewItem'
        - type: object
          properties:
            insights:
              description: >-
                The insights captured on the interview, notes insights first,
                then transcript insights, each in document order.
              items:
                $ref: '#/components/schemas/InterviewInsight'
              type: array
          required:
            - insights
    MessageResponse:
      additionalProperties: false
      properties:
        message:
          example: System provided message
          type: string
      type: object
    InterviewItem:
      additionalProperties: false
      description: A single interview.
      properties:
        id:
          description: The unique identifier for the interview.
          type: string
        capturedAt:
          description: ISO 8601 timestamp of when the interview was conducted.
          format: date-time
          type: string
        createdAt:
          description: ISO 8601 timestamp of when the interview record was created.
          format: date-time
          type: string
        source:
          description: Where the interview originated (e.g. "vistaly-api", "direct").
          type: string
        sourceUrl:
          description: Optional link to where the interview originated.
          type: string
        textPreview:
          description: A short preview of the interview's summary or notes. May be empty.
          type: string
        cardIds:
          description: IDs of the cards this interview is linked to via insights.
          items:
            type: string
          type: array
        customerUserIds:
          description: IDs of the customer users who were interviewed.
          items:
            type: string
          type: array
        interviewerUserIds:
          description: IDs of the organization members who conducted the interview.
          items:
            type: string
          type: array
        insightCount:
          description: >-
            The number of accepted insights on the interview: what GET
            /v1/interviews/{interviewId}/insights returns. AI suggestions the
            author has not accepted are counted in `suggestedInsightCount`
            instead. Normally equal to the length of that endpoint's `insights`
            array, but it can exceed it in an edge case: the count is derived
            from every fragment of the interview document, while the endpoint
            reads highlights from the notes and transcript only. Do not assume
            the two are equal.
          type: integer
        transcriptType:
          description: >-
            How the transcript was captured: `media` for an uploaded recording
            that was transcribed, `text` for a pasted transcript. Absent when
            the interview has no transcript.
          enum:
            - media
            - text
          type: string
        processed:
          description: >-
            Whether the interview's processing — transcription and AI analysis —
            has finished. Note this differs from `FeedbackItem.processed`, which
            means the feedback was analyzed for insights.
          type: boolean
        appUrl:
          description: A link to view the interview in the Vistaly app.
          type: string
        interviewees:
          description: >-
            The interviewed customers, resolved to people. An id that appears in
            `customerUserIds` but not here could not be resolved: its record is
            gone, or the batched lookup came back short. Absence here is not
            proof the person was deleted.
          items:
            $ref: '#/components/schemas/InterviewInterviewee'
          type: array
        interviewers:
          description: >-
            The organization members who conducted the interview, resolved to
            people. An id that appears in `interviewerUserIds` but not here
            could not be resolved; see `interviewees`.
          items:
            $ref: '#/components/schemas/InterviewInterviewer'
          type: array
        suggestedInsightCount:
          description: >-
            The number of AI-suggested insights awaiting the author's decision.
            Not returned by the insights endpoint.
          type: integer
      required:
        - id
        - source
        - cardIds
        - customerUserIds
        - interviewerUserIds
        - interviewees
        - interviewers
        - insightCount
        - suggestedInsightCount
        - processed
        - appUrl
      type: object
    InterviewInsight:
      additionalProperties: false
      description: A single insight captured on an interview.
      properties:
        id:
          description: The unique identifier for the insight.
          type: string
        source:
          description: >-
            Whether the insight highlights the interview's notes or its
            transcript.
          enum:
            - notes
            - transcript
          type: string
        note:
          description: The annotation the author gave the insight, when they wrote one.
          type: string
        text:
          description: >-
            The highlighted content, formatted: the marked passage of the notes
            or text transcript verbatim, or — for a recorded interview — the
            covered transcript excerpt rendered one `[HH:MM:SS] Speaker (role):
            text` line per segment. Empty when `excerptUnavailable` is set.
          type: string
        cardIds:
          description: IDs of the cards the insight is linked to.
          items:
            type: string
          type: array
        createdAt:
          description: ISO 8601 timestamp of when the insight was created, when recorded.
          format: date-time
          type: string
        transcriptRange:
          $ref: '#/components/schemas/InterviewInsightTranscriptRange'
        quote:
          description: >-
            The highlighted passage alone, with no timestamps or speaker
            prefixes — the words to quote. For a recorded interview, the covered
            segments' text joined with newlines. Empty when `excerptUnavailable`
            is set.
          type: string
        segments:
          description: >-
            For insights on a recorded interview, the covered transcript
            segments in order, each with its resolved speaker. Absent for notes
            and text-transcript insights, and when `excerptUnavailable` is set.
          items:
            $ref: '#/components/schemas/InterviewInsightSegment'
          type: array
        excerptUnavailable:
          description: >-
            Present (and `true`) when a recorded interview's insight could not
            be resolved to its excerpt: the transcript could not be read, or its
            segment ids are no longer in it because the interview was
            re-transcribed. `text` and `quote` are empty then, which is not the
            same as an empty highlight — skip or flag the insight rather than
            treating it as empty.
          enum:
            - true
          type: boolean
      required:
        - id
        - source
        - text
        - quote
        - cardIds
      type: object
    InterviewInterviewee:
      additionalProperties: false
      description: A customer who was interviewed.
      properties:
        id:
          description: The customer user's ID.
          type: string
        name:
          description: 'Display name: full name, falling back to email, then id.'
          type: string
        email:
          description: The person's email, when recorded.
          type: string
        company:
          additionalProperties: false
          description: The company the person belongs to, when one is recorded.
          properties:
            id:
              description: The company's ID.
              type: string
            name:
              description: The company's name, when recorded.
              type: string
            website:
              description: The company's website, when recorded.
              type: string
          required:
            - id
          type: object
      required:
        - id
        - name
      type: object
    InterviewInterviewer:
      additionalProperties: false
      description: An organization member who conducted an interview.
      properties:
        id:
          description: The user's ID.
          type: string
        name:
          description: 'Display name: full name, falling back to email, then id.'
          type: string
        email:
          description: The user's email, when recorded.
          type: string
      required:
        - id
        - name
      type: object
    InterviewInsightTranscriptRange:
      additionalProperties: false
      description: Where in a recorded interview's transcript an insight sits.
      properties:
        startSegmentId:
          description: ID of the first transcript segment the insight covers.
          type: string
        endSegmentId:
          description: ID of the last transcript segment the insight covers.
          type: string
        startTime:
          description: Seconds into the recording at which the excerpt starts.
          type: number
        endTime:
          description: Seconds into the recording at which the excerpt ends.
          type: number
      required:
        - startSegmentId
        - endSegmentId
      type: object
    InterviewInsightSegment:
      additionalProperties: false
      description: One transcript segment covered by an insight on a recorded interview.
      properties:
        id:
          description: The transcript segment's ID.
          type: string
        speaker:
          description: >-
            The speaker: the mapped person's display name, or the raw transcript
            label when unmapped.
          type: string
        speakerRole:
          description: The speaker's role, when the label maps to a known person.
          enum:
            - interviewer
            - interviewee
          type: string
        startTime:
          description: Seconds into the recording at which the segment starts.
          type: number
        endTime:
          description: Seconds into the recording at which the segment ends.
          type: number
        text:
          description: The segment's text.
          type: string
      required:
        - id
        - speaker
        - text
      type: object
  securitySchemes:
    bearerAuth:
      scheme: bearer
      type: http

````

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