Vapi Insight API

The Insight API from Vapi — 4 operation(s) for insight.

Operations 7

POST /reporting/insight Create Insight #
GET /reporting/insight Get Insights #
PATCH /reporting/insight/{id} Update Insight #
GET /reporting/insight/{id} Get Insight #
DELETE /reporting/insight/{id} Delete Insight #
POST /reporting/insight/{id}/run Run Insight #
POST /reporting/insight/preview Preview Insight #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/vapi-insight-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

vapi-insight-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Vapi Analytics Insight API
  description: Voice AI for developers.
  version: '1.0'
  contact: {}
servers:
- url: https://api.vapi.ai
tags:
- name: Insight
paths:
  /reporting/insight:
    post:
      operationId: InsightController_create
      summary: Create Insight
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
              - $ref: '#/components/schemas/CreateBarInsightFromCallTableDTO'
                title: CreateBarInsightFromCallTableDTO
              - $ref: '#/components/schemas/CreatePieInsightFromCallTableDTO'
                title: CreatePieInsightFromCallTableDTO
              - $ref: '#/components/schemas/CreateLineInsightFromCallTableDTO'
                title: CreateLineInsightFromCallTableDTO
              - $ref: '#/components/schemas/CreateTextInsightFromCallTableDTO'
                title: CreateTextInsightFromCallTableDTO
              discriminator:
                propertyName: type
                mapping:
                  bar: '#/components/schemas/CreateBarInsightFromCallTableDTO'
                  pie: '#/components/schemas/CreatePieInsightFromCallTableDTO'
                  line: '#/components/schemas/CreateLineInsightFromCallTableDTO'
                  text: '#/components/schemas/CreateTextInsightFromCallTableDTO'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/BarInsight'
                - $ref: '#/components/schemas/PieInsight'
                - $ref: '#/components/schemas/LineInsight'
                - $ref: '#/components/schemas/TextInsight'
                discriminator:
                  propertyName: type
                  mapping:
                    bar: '#/components/schemas/BarInsight'
                    pie: '#/components/schemas/PieInsight'
                    line: '#/components/schemas/LineInsight'
                    text: '#/components/schemas/TextInsight'
      tags:
      - Insight
      security:
      - bearer: []
    get:
      operationId: InsightController_findAll
      summary: Get Insights
      parameters:
      - name: id
        required: false
        in: query
        schema:
          type: string
      - name: page
        required: false
        in: query
        description: This is the page number to return. Defaults to 1.
        schema:
          minimum: 1
          type: number
      - name: sortOrder
        required: false
        in: query
        description: This is the sort order for pagination. Defaults to 'DESC'.
        schema:
          enum:
          - ASC
          - DESC
          type: string
      - name: sortBy
        required: false
        in: query
        description: This is the column to sort by. Defaults to 'createdAt'.
        schema:
          enum:
          - createdAt
          - duration
          - cost
          type: string
      - name: limit
        required: false
        in: query
        description: This is the maximum number of items to return. Defaults to 100.
        schema:
          minimum: 0
          maximum: 1000
          type: number
      - name: createdAtGt
        required: false
        in: query
        description: This will return items where the createdAt is greater than the specified value.
        schema:
          format: date-time
          type: string
      - name: createdAtLt
        required: false
        in: query
        description: This will return items where the createdAt is less than the specified value.
        schema:
          format: date-time
          type: string
      - name: createdAtGe
        required: false
        in: query
        description: This will return items where the createdAt is greater than or equal to the specified value.
        schema:
          format: date-time
          type: string
      - name: createdAtLe
        required: false
        in: query
        description: This will return items where the createdAt is less than or equal to the specified value.
        schema:
          format: date-time
          type: string
      - name: updatedAtGt
        required: false
        in: query
        description: This will return items where the updatedAt is greater than the specified value.
        schema:
          format: date-time
          type: string
      - name: updatedAtLt
        required: false
        in: query
        description: This will return items where the updatedAt is less than the specified value.
        schema:
          format: date-time
          type: string
      - name: updatedAtGe
        required: false
        in: query
        description: This will return items where the updatedAt is greater than or equal to the specified value.
        schema:
          format: date-time
          type: string
      - name: updatedAtLe
        required: false
        in: query
        description: This will return items where the updatedAt is less than or equal to the specified value.
        schema:
          format: date-time
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InsightPaginatedResponse'
      tags:
      - Insight
      security:
      - bearer: []
  /reporting/insight/{id}:
    patch:
      operationId: InsightController_update
      summary: Update Insight
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
              - $ref: '#/components/schemas/UpdateBarInsightFromCallTableDTO'
                title: UpdateBarInsightFromCallTableDTO
              - $ref: '#/components/schemas/UpdatePieInsightFromCallTableDTO'
                title: UpdatePieInsightFromCallTableDTO
              - $ref: '#/components/schemas/UpdateLineInsightFromCallTableDTO'
                title: UpdateLineInsightFromCallTableDTO
              - $ref: '#/components/schemas/UpdateTextInsightFromCallTableDTO'
                title: UpdateTextInsightFromCallTableDTO
              discriminator:
                propertyName: type
                mapping:
                  bar: '#/components/schemas/UpdateBarInsightFromCallTableDTO'
                  pie: '#/components/schemas/UpdatePieInsightFromCallTableDTO'
                  line: '#/components/schemas/UpdateLineInsightFromCallTableDTO'
                  text: '#/components/schemas/UpdateTextInsightFromCallTableDTO'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/BarInsight'
                - $ref: '#/components/schemas/PieInsight'
                - $ref: '#/components/schemas/LineInsight'
                - $ref: '#/components/schemas/TextInsight'
                discriminator:
                  propertyName: type
                  mapping:
                    bar: '#/components/schemas/BarInsight'
                    pie: '#/components/schemas/PieInsight'
                    line: '#/components/schemas/LineInsight'
                    text: '#/components/schemas/TextInsight'
      tags:
      - Insight
      security:
      - bearer: []
    get:
      operationId: InsightController_findOne
      summary: Get Insight
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/BarInsight'
                - $ref: '#/components/schemas/PieInsight'
                - $ref: '#/components/schemas/LineInsight'
                - $ref: '#/components/schemas/TextInsight'
                discriminator:
                  propertyName: type
                  mapping:
                    bar: '#/components/schemas/BarInsight'
                    pie: '#/components/schemas/PieInsight'
                    line: '#/components/schemas/LineInsight'
                    text: '#/components/schemas/TextInsight'
      tags:
      - Insight
      security:
      - bearer: []
    delete:
      operationId: InsightController_remove
      summary: Delete Insight
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/BarInsight'
                - $ref: '#/components/schemas/PieInsight'
                - $ref: '#/components/schemas/LineInsight'
                - $ref: '#/components/schemas/TextInsight'
                discriminator:
                  propertyName: type
                  mapping:
                    bar: '#/components/schemas/BarInsight'
                    pie: '#/components/schemas/PieInsight'
                    line: '#/components/schemas/LineInsight'
                    text: '#/components/schemas/TextInsight'
      tags:
      - Insight
      security:
      - bearer: []
  /reporting/insight/{id}/run:
    post:
      operationId: InsightController_run
      summary: Run Insight
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InsightRunDTO'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InsightRunResponse'
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InsightRunResponse'
      tags:
      - Insight
      security:
      - bearer: []
  /reporting/insight/preview:
    post:
      operationId: InsightController_preview
      summary: Preview Insight
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
              - $ref: '#/components/schemas/CreateBarInsightFromCallTableDTO'
                title: CreateBarInsightFromCallTableDTO
              - $ref: '#/components/schemas/CreatePieInsightFromCallTableDTO'
                title: CreatePieInsightFromCallTableDTO
              - $ref: '#/components/schemas/CreateLineInsightFromCallTableDTO'
                title: CreateLineInsightFromCallTableDTO
              - $ref: '#/components/schemas/CreateTextInsightFromCallTableDTO'
                title: CreateTextInsightFromCallTableDTO
              discriminator:
                propertyName: type
                mapping:
                  bar: '#/components/schemas/CreateBarInsightFromCallTableDTO'
                  pie: '#/components/schemas/CreatePieInsightFromCallTableDTO'
                  line: '#/components/schemas/CreateLineInsightFromCallTableDTO'
                  text: '#/components/schemas/CreateTextInsightFromCallTableDTO'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InsightRunResponse'
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InsightRunResponse'
      tags:
      - Insight
      security:
      - bearer: []
components:
  schemas:
    EventsTableNumberCondition:
      type: object
      properties:
        column:
          type: string
          description: The number field name from the event data
          example: latency
        operator:
          type: string
          description: Number comparison operator
          example: '>='
          enum:
          - '='
          - '!='
          - '>'
          - '>='
          - <
          - <=
        value:
          type: number
          description: The number value to compare
          example: 1000
      required:
      - column
      - operator
      - value
    UpdatePieInsightFromCallTableDTO:
      type: object
      properties:
        name:
          type: string
          description: This is the name of the Insight.
          minLength: 1
          maxLength: 255
        type:
          type: string
          description: 'This is the type of the Insight.

            It is required to be `pie` to create a pie insight.'
          enum:
          - pie
        formulas:
          type: array
          description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight.

            The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html

            A formula is created by using the query names as the variable.

            The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result.

            For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this:

            ```

            {{[''Query 1'']}} / {{[''Query 2'']}} * 100

            ```


            ```

            ({{[Query 1]}} * 10) + {{[Query 2]}}

            ```

            This will take the


            You can also use the query names as the variable in the formula.'
          items:
            $ref: '#/components/schemas/InsightFormula'
        timeRange:
          $ref: '#/components/schemas/InsightTimeRange'
        groupBy:
          type: string
          description: 'This is the group by column for the insight when table is `call`.

            These are the columns to group the results by.

            All results are grouped by the time range step by default.'
          example:
          - assistant_id
          enum:
          - assistantId
          - workflowId
          - squadId
          - phoneNumberId
          - type
          - endedReason
          - customerNumber
          - campaignId
          - artifact.structuredOutputs[OutputID]
        queries:
          type: array
          description: These are the queries to run to generate the insight.
          items:
            oneOf:
            - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn'
              title: JSONQueryOnCallTableWithStringTypeColumn
            - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn'
              title: JSONQueryOnCallTableWithNumberTypeColumn
            - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn'
              title: JSONQueryOnCallTableWithStructuredOutputColumn
    BarInsight:
      type: object
      properties:
        name:
          type: string
          description: This is the name of the Insight.
          minLength: 1
          maxLength: 255
        type:
          type: string
          description: 'This is the type of the Insight.

            It is required to be `bar` to create a bar insight.'
          enum:
          - bar
        formulas:
          type: array
          description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight.

            The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html

            A formula is created by using the query names as the variable.

            The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result.

            For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this:

            ```

            {{[''Query 1'']}} / {{[''Query 2'']}} * 100

            ```


            ```

            ({{[Query 1]}} * 10) + {{[Query 2]}}

            ```

            This will take the


            You can also use the query names as the variable in the formula.'
          items:
            $ref: '#/components/schemas/InsightFormula'
        metadata:
          description: This is the metadata for the insight.
          allOf:
          - $ref: '#/components/schemas/BarInsightMetadata'
        timeRange:
          $ref: '#/components/schemas/InsightTimeRangeWithStep'
        groupBy:
          type: string
          description: 'This is the group by column for the insight when table is `call`.

            These are the columns to group the results by.

            All results are grouped by the time range step by default.'
          example:
          - assistant_id
          enum:
          - assistantId
          - workflowId
          - squadId
          - phoneNumberId
          - type
          - endedReason
          - customerNumber
          - campaignId
          - artifact.structuredOutputs[OutputID]
        queries:
          type: array
          description: These are the queries to run to generate the insight.
          items:
            oneOf:
            - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn'
              title: JSONQueryOnCallTableWithStringTypeColumn
            - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn'
              title: JSONQueryOnCallTableWithNumberTypeColumn
            - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn'
              title: JSONQueryOnCallTableWithStructuredOutputColumn
            - $ref: '#/components/schemas/JSONQueryOnEventsTable'
              title: JSONQueryOnEventsTable
        id:
          type: string
          description: This is the unique identifier for the Insight.
        orgId:
          type: string
          description: This is the unique identifier for the org that this Insight belongs to.
        createdAt:
          format: date-time
          type: string
          description: This is the ISO 8601 date-time string of when the Insight was created.
        updatedAt:
          format: date-time
          type: string
          description: This is the ISO 8601 date-time string of when the Insight was last updated.
        systemKey:
          type: string
          description: Stable server-owned identifier for system-created insights.
      required:
      - type
      - queries
      - id
      - orgId
      - createdAt
      - updatedAt
    InsightTimeRangeWithStep:
      type: object
      properties:
        step:
          type: string
          description: 'This is the group by step for aggregation.


            If not provided, defaults to group by day.'
          enum:
          - minute
          - hour
          - day
          - week
          - month
          - quarter
          - year
        start:
          type: object
          description: 'This is the start date for the time range.


            Should be a valid ISO 8601 date-time string or relative time string.

            If not provided, defaults to the 7 days ago.


            Relative time strings of the format "-{number}{unit}" are allowed.


            Valid units are:

            - d: days

            - h: hours

            - w: weeks

            - m: months

            - y: years'
          example: '"2025-01-01" or "-7d" or "now"'
        end:
          type: object
          description: 'This is the end date for the time range.


            Should be a valid ISO 8601 date-time string or relative time string.

            If not provided, defaults to now.


            Relative time strings of the format "-{number}{unit}" are allowed.


            Valid units are:

            - d: days

            - h: hours

            - w: weeks

            - m: months

            - y: years'
          example: '"2025-01-01" or "now"'
        timezone:
          type: string
          description: 'This is the timezone you want to set for the query.


            If not provided, defaults to UTC.'
    EventsTableStringCondition:
      type: object
      properties:
        column:
          type: string
          description: The string field name from the event data
          example: provider
        operator:
          type: string
          description: String comparison operator
          example: '='
          enum:
          - '='
          - '!='
          - contains
          - notContains
        value:
          type: string
          description: The string value to compare
          example: openai
      required:
      - column
      - operator
      - value
    LineInsightMetadata:
      type: object
      properties:
        xAxisLabel:
          type: string
          minLength: 1
          maxLength: 40
        yAxisLabel:
          type: string
          minLength: 1
          maxLength: 40
        yAxisMin:
          type: number
        yAxisMax:
          type: number
        name:
          type: string
          minLength: 1
          maxLength: 255
    FilterNumberArrayTypeColumnOnCallTable:
      type: object
      properties:
        column:
          type: string
          description: 'This is the column in the call table that will be filtered on.

            Number Array Type columns are the same as Number Type columns, but provides the ability to filter on multiple values provided as an array.

            Must be a valid column for the selected table.'
          example: duration
          enum:
          - duration
          - cost
          - averageModelLatency
          - averageVoiceLatency
          - averageTranscriberLatency
          - averageTurnLatency
          - averageEndpointingLatency
        operator:
          type: string
          description: 'This is the operator to use for the filter.

            The operator must be `in` or `not_in`.'
          example: '"in" or "not_in"'
          enum:
          - in
          - not_in
          - is_empty
          - is_not_empty
        value:
          description: This is the value to filter on.
          type: array
          items:
            type: number
      required:
      - column
      - operator
      - value
    UpdateBarInsightFromCallTableDTO:
      type: object
      properties:
        name:
          type: string
          description: This is the name of the Insight.
          minLength: 1
          maxLength: 255
        type:
          type: string
          description: 'This is the type of the Insight.

            It is required to be `bar` to create a bar insight.'
          enum:
          - bar
        formulas:
          type: array
          description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight.

            The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html

            A formula is created by using the query names as the variable.

            The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result.

            For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this:

            ```

            {{[''Query 1'']}} / {{[''Query 2'']}} * 100

            ```


            ```

            ({{[Query 1]}} * 10) + {{[Query 2]}}

            ```

            This will take the


            You can also use the query names as the variable in the formula.'
          items:
            $ref: '#/components/schemas/InsightFormula'
        metadata:
          description: This is the metadata for the insight.
          allOf:
          - $ref: '#/components/schemas/BarInsightMetadata'
        timeRange:
          $ref: '#/components/schemas/InsightTimeRangeWithStep'
        groupBy:
          type: string
          description: 'This is the group by column for the insight when table is `call`.

            These are the columns to group the results by.

            All results are grouped by the time range step by default.'
          example:
          - assistant_id
          enum:
          - assistantId
          - workflowId
          - squadId
          - phoneNumberId
          - type
          - endedReason
          - customerNumber
          - campaignId
          - artifact.structuredOutputs[OutputID]
        queries:
          type: array
          description: These are the queries to run to generate the insight.
          items:
            oneOf:
            - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn'
              title: JSONQueryOnCallTableWithStringTypeColumn
            - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn'
              title: JSONQueryOnCallTableWithNumberTypeColumn
            - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn'
              title: JSONQueryOnCallTableWithStructuredOutputColumn
            - $ref: '#/components/schemas/JSONQueryOnEventsTable'
              title: JSONQueryOnEventsTable
    JSONQueryOnCallTableWithNumberTypeColumn:
      type: object
      properties:
        type:
          type: string
          description: This is the type of query. Only allowed type is "vapiql-json".
          example: vapiql-json
          enum:
          - vapiql-json
        table:
          type: string
          description: This is the table that will be queried.
          enum:
          - call
        filters:
          type: array
          description: 'This is the filters to apply to the insight.

            The discriminator automatically selects the correct filter type based on column and operator.'
          items:
            oneOf:
            - $ref: '#/components/schemas/FilterStringTypeColumnOnCallTable'
            - $ref: '#/components/schemas/FilterStringArrayTypeColumnOnCallTable'
            - $ref: '#/components/schemas/FilterNumberTypeColumnOnCallTable'
            - $ref: '#/components/schemas/FilterNumberArrayTypeColumnOnCallTable'
            - $ref: '#/components/schemas/FilterDateTypeColumnOnCallTable'
            - $ref: '#/components/schemas/FilterStructuredOutputColumnOnCallTable'
        column:
          type: string
          enum:
          - cost
          - duration
          - averageModelLatency
          - averageVoiceLatency
          - averageTranscriberLatency
          - averageTurnLatency
          - averageEndpointingLatency
          - artifact.structuredOutputs[OutputID]
          description: 'This is the column that will be queried in the selected table.

            Available columns depend on the selected table.

            Number Type columns are columns where the rows store Number data'
          example: duration
        operation:
          type: string
          enum:
          - average
          - sum
          - min
          - max
          description: 'This is the aggregation operation to perform on the column.

            When the column is a number type, the operation must be one of the following:

            - average

            - sum

            - min

            - max'
          example: sum
        name:
          type: string
          description: 'This is the name of the query.

            It will be used to label the query in the insight board on the UI.'
          example: Total Calls
      required:
      - type
      - table
      - column
      - operation
    LineInsight:
      type: object
      properties:
        name:
          type: string
          description: This is the name of the Insight.
          minLength: 1
          maxLength: 255
        type:
          type: string
          description: 'This is the type of the Insight.

            It is required to be `line` to create a line insight.'
          enum:
          - line
        formulas:
          type: array
          description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight.

            The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html

            A formula is created by using the query names as the variable.

            The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result.

            For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this:

            ```

            {{[''Query 1'']}} / {{[''Query 2'']}} * 100

            ```


            ```

            ({{[Query 1]}} * 10) + {{[Query 2]}}

            ```

            This will take the


            You can also use the query names as the variable in the formula.'
          items:
            $ref: '#/components/schemas/InsightFormula'
        metadata:
          description: This is the metadata for the insight.
          allOf:
          - $ref: '#/components/schemas/LineInsightMetadata'
        timeRange:
          $ref: '#/components/schemas/InsightTimeRangeWithStep'
        groupBy:
          type: string
          description: 'This is the group by column for the insight when table is `call`.

            These are the columns to group the results by.

            All results are grouped by the time range step by default.'
          example:
          - assistant_id
          enum:
          - assistantId
          - workflowId
          - squadId
          - phoneNumberId
          - type
          - endedReason
          - customerNumber
          - campaignId
          - artifact.structuredOutputs[OutputID]
        queries:
          type: array
          description: These are the queries to run to generate the insight.
          items:
            oneOf:
            - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn'
              title: JSONQueryOnCallTableWithStringTypeColumn
            - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn'
              title: JSONQueryOnCallTableWithNumberTypeColumn
            - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn'
              title: JSONQueryOnCallTableWithStructuredOutputColumn
        id:
          type: string
          description: This is the unique identifier for the Insight.
        orgId:
          type: string
          description: This is the unique identifier for the org that this Insight belongs to.
        createdAt:
          format: date-time
          type: string
          description: This is the ISO 8601 date-time string of when the Insight was created.
        updatedAt:
          format: date-time
          type: string
          description: This is the ISO 8601 date-time string of when the Insight was last updated.
        systemKey:
          type: string
          description: Stable server-owned identifier for system-created insights.
      required:
      - type
      - queries
      - id
      - orgId
      - createdAt
      - updatedAt
    InsightRunResponse:
      type: object
      properties:
        id:
          type: string
        insightId:
          type: string
        orgId:
          type: string
        createdAt:
          format: date-time
          type: string
        updatedAt:
          format: date-time
          type: string
      required:
      - id
      - insightId
      - orgId
      - createdAt
      - updatedAt
    BarInsightMetadata:
      type: object
      properties:
        xAxisLabel:
          type: string
          minLength: 1
          maxLength: 40
        yAxisLabel:
          type: string
          minLength: 1
          maxLength: 40
        yAxisMin:
          type: number
        yAxisMax:
          type: number
        name:
          type: string
          minLength: 1
          maxLen

# --- truncated at 32 KB (76 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/vapi/refs/heads/main/openapi/vapi-insight-api-openapi.yml