Wistia Analytics:Webinar API

The Analytics:Webinar API from Wistia — 5 operation(s) for analytics:webinar.

Operations 5

GET /analytics/webinars/{webinarId} Show Webinar Analytics
GET /analytics/webinars/{webinarId}/registration Show Webinar Registration Timeseries
GET /analytics/webinars/{webinarId}/traffic Show Webinar Traffic Breakdown
GET /analytics/webinars/{webinarId}/audience Show Webinar Audience
GET /analytics/webinars/{webinarId}/histograms Show Webinar Histograms

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/wistia-analytics-webinar-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

wistia-analytics-webinar-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Data Analytics:Webinar API
  description: Wistia Data API
  version: edge-version
servers:
- url: https://api.wistia.com/modern
tags:
- name: Analytics:Webinar
  x-wistia-mcp-toolsets: analytics
  x-displayName: Analytics:Webinar
paths:
  /analytics/webinars/{webinarId}:
    get:
      summary: Show Webinar Analytics
      x-wistia-mcp-annotations:
        read_only_hint: true
        read_only_hint_justification: This tool only reads webinar analytics from the account and does not modify any data.
        open_world_hint: false
        open_world_hint_justification: This tool only queries records inside the account and does not reach external services.
        destructive_hint: false
        destructive_hint_justification: This tool is read-only and does not make any changes.
        idempotent_hint: true
        idempotent_hint_justification: Reading data does not change any state, so repeated calls have no additional effect.
      x-speakeasy-group: analyticsWebinar
      x-speakeasy-name-override: get
      description: 'Retrieve aggregate analytics for a webinar. This endpoint provides

        Bottler-powered analytics including registrations, attendance, engagement,

        chat activity, and poll results.


        <!--- HIDE-MCP -->

        ## Requires api token with one of the following permissions

        ```

        Read detailed stats

        ```

        <!--- /HIDE-MCP -->

        '
      parameters:
      - name: webinarId
        in: path
        description: The hashed ID of the webinar.
        required: true
        schema:
          description: The hashed ID of the webinar (e.g., "abc123xyz")
          type: string
      - name: include_post_event
        in: query
        description: Whether to include on-demand viewing data after the live event ended.
        required: false
        schema:
          type: boolean
          default: false
      - name: post_event_start_date
        in: query
        description: Start date for the post-event analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date. Only used when include_post_event is true.
        required: false
        schema:
          type: string
          format: date
      - name: post_event_end_date
        in: query
        description: End date for the post-event analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date. Only used when include_post_event is true.
        required: false
        schema:
          type: string
          format: date
      responses:
        '200':
          description: Success response with aggregate analytics for the webinar.
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                allOf:
                - type: object
                  properties:
                    registrations:
                      description: The total number of registrations for the webinar.
                      type:
                      - integer
                      - 'null'
                    imported_registrations:
                      description: The number of registrations imported from external sources.
                      type:
                      - integer
                      - 'null'
                    on_demand_registrations:
                      description: The number of registrations for on-demand viewing.
                      type:
                      - integer
                      - 'null'
                    imported_on_demand_registrations:
                      description: The number of on-demand registrations imported from external sources.
                      type:
                      - integer
                      - 'null'
                    total_watch_time:
                      description: Total watch time across all attendees in seconds.
                      type:
                      - integer
                      - 'null'
                    average_watch_time:
                      description: Average watch time per attendee in seconds.
                      type:
                      - integer
                      - 'null'
                    attendance:
                      description: The total number of attendees who joined the live event.
                      type:
                      - integer
                      - 'null'
                    chatted_attendees:
                      description: The number of attendees who sent at least one chat message.
                      type:
                      - integer
                      - 'null'
                    engagement_rate:
                      description: The average engagement rate for attendees (between 0 and 1).
                      type:
                      - number
                      - 'null'
                      format: float
                    chats:
                      description: The total number of chat messages sent during the event.
                      type:
                      - integer
                      - 'null'
                    currently_watching:
                      description: The number of viewers currently watching (0 for completed events).
                      type:
                      - integer
                      - 'null'
                    engaged_attendees:
                      description: The number of attendees who were actively engaged.
                      type:
                      - integer
                      - 'null'
                    impressions:
                      description: The total number of registration page impressions.
                      type:
                      - integer
                      - 'null'
                    on_demand_impressions:
                      description: The number of on-demand page impressions.
                      type:
                      - integer
                      - 'null'
                    on_demand_plays:
                      description: The number of on-demand video plays.
                      type:
                      - integer
                      - 'null'
                    on_demand_engagement_rate:
                      description: The engagement rate for on-demand viewers (between 0 and 1).
                      type:
                      - number
                      - 'null'
                      format: float
                    event_time:
                      description: The duration of the live event in seconds.
                      type:
                      - integer
                      - 'null'
                    qa_questions:
                      description: The total number of Q&A questions asked during the event.
                      type:
                      - integer
                      - 'null'
                    poll_questions:
                      description: Poll questions and their response data.
                      type:
                      - array
                      - 'null'
                      items:
                        type: object
                        unevaluatedProperties: false
                        properties:
                          id:
                            description: The poll question ID.
                            type: integer
                          poll_id:
                            description: The poll ID this question belongs to.
                            type: integer
                          text:
                            description: The question text.
                            type: string
                          response_count:
                            description: The total number of responses.
                            type: integer
                          options:
                            description: The available answer options and their response counts.
                            type:
                            - array
                            - 'null'
                            items:
                              type: object
                              unevaluatedProperties: false
                              properties:
                                id:
                                  description: The option ID.
                                  type: integer
                                text:
                                  description: The option text.
                                  type: string
                                count:
                                  description: The number of times this option was selected.
                                  type: integer
                                percent:
                                  description: The percentage of respondents who selected this option.
                                  type: number
                                  format: float
        '401':
          description: Unauthorized, invalid or missing token
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  code:
                    description: A machine-readable identifier for the specific authorization failure.
                    type: string
                    enum:
                    - unauthorized_credentials
                    - account_inactive
                    - unauthorized_scope
                    - unauthorized_params
                  error:
                    type: string
                    examples:
                    - Invalid credentials.
        '403':
          description: Forbidden, token is valid but account does not have access to feature
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    type: string
                    examples:
                    - Webinars are not available on your current plan
        '404':
          description: Webinar not found or does not belong to account
          content: {}
        '409':
          description: The event has not yet reached a terminal state. Analytics are only available after the event has ended.
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    description: Error message indicating the event has not ended.
                    type: string
                    examples:
                    - Aggregate analytics are not available until the event has ended
        '422':
          description: Unprocessable entity
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    description: Error message detailing why the request could not be processed.
                    type: string
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    type: string
                    examples:
                    - Internal server error
        '503':
          description: Analytics service is temporarily unavailable
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    type: string
                    examples:
                    - Analytics service is temporarily unavailable
      tags:
      - Analytics:Webinar
      security:
      - BearerAuth: []
  /analytics/webinars/{webinarId}/registration:
    get:
      summary: Show Webinar Registration Timeseries
      x-wistia-mcp-annotations:
        read_only_hint: true
        read_only_hint_justification: This tool only reads webinar registration timeseries from the account and does not modify any data.
        open_world_hint: false
        open_world_hint_justification: This tool only queries records inside the account and does not reach external services.
        destructive_hint: false
        destructive_hint_justification: This tool is read-only and does not make any changes.
        idempotent_hint: true
        idempotent_hint_justification: Reading data does not change any state, so repeated calls have no additional effect.
      x-speakeasy-group: analyticsWebinar
      x-speakeasy-name-override: getRegistration
      description: 'Retrieve registration timeseries data for a webinar with configurable

        granularity. Returns an array of timestamped registration metric buckets

        including impressions, registrations, and completion rates.


        <!--- HIDE-MCP -->

        ## Requires api token with one of the following permissions

        ```

        Read detailed stats

        ```

        <!--- /HIDE-MCP -->

        '
      parameters:
      - name: webinarId
        in: path
        description: The hashed ID of the webinar.
        required: true
        schema:
          description: The hashed ID of the webinar (e.g., "abc123xyz")
          type: string
      - name: granularity
        in: query
        description: The time granularity for the timeseries data.
        required: true
        schema:
          type: string
          enum:
          - daily
          - weekly
          - monthly
      - name: include_post_event
        in: query
        description: Whether to include on-demand viewing data after the live event ended.
        required: false
        schema:
          type: boolean
          default: false
      - name: post_event_start_date
        in: query
        description: Start date for the post-event analytics period in ISO 8601 format (YYYY-MM-DD). Inclusive — the range starts at the beginning of this date. Only used when include_post_event is true.
        required: false
        schema:
          type: string
          format: date
      - name: post_event_end_date
        in: query
        description: End date for the post-event analytics period in ISO 8601 format (YYYY-MM-DD). Exclusive — the range ends before the beginning of this date. Only used when include_post_event is true.
        required: false
        schema:
          type: string
          format: date
      responses:
        '200':
          description: Success response with registration timeseries data.
          content:
            application/json:
              schema:
                type: array
                items:
                  unevaluatedProperties: false
                  allOf:
                  - type: object
                    properties:
                      timestamp:
                        description: The start of the time bucket in ISO 8601 format.
                        type: string
                        format: date-time
                  - type: object
                    properties:
                      registrations:
                        description: The number of registrations in this time period.
                        type:
                        - integer
                        - 'null'
                      impressions:
                        description: The number of registration page impressions in this time period.
                        type:
                        - integer
                        - 'null'
                      on_demand_registrations:
                        description: The number of on-demand registrations in this time period.
                        type:
                        - integer
                        - 'null'
                      on_demand_impressions:
                        description: The number of on-demand page impressions in this time period.
                        type:
                        - integer
                        - 'null'
                      completion_rate:
                        description: The completion rate for attendees in this time period (between 0 and 1).
                        type:
                        - number
                        - 'null'
                        format: float
                      on_demand_completion_rate:
                        description: The completion rate for on-demand viewers in this time period (between 0 and 1).
                        type:
                        - number
                        - 'null'
                        format: float
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    description: Error message detailing the reason for the bad request.
                    type: string
                    examples:
                    - Bad request
                  errors:
                    description: Array of error messages detailing the reasons for the bad request.
                    type: array
                    items:
                      type: string
        '401':
          description: Unauthorized, invalid or missing token
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  code:
                    description: A machine-readable identifier for the specific authorization failure.
                    type: string
                    enum:
                    - unauthorized_credentials
                    - account_inactive
                    - unauthorized_scope
                    - unauthorized_params
                  error:
                    type: string
                    examples:
                    - Invalid credentials.
        '403':
          description: Forbidden, token is valid but account does not have access to feature
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    type: string
                    examples:
                    - Webinars are not available on your current plan
        '404':
          description: Webinar not found or does not belong to account
          content: {}
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    type: string
                    examples:
                    - Internal server error
        '503':
          description: Analytics service is temporarily unavailable
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    type: string
                    examples:
                    - Analytics service is temporarily unavailable
      tags:
      - Analytics:Webinar
      security:
      - BearerAuth: []
  /analytics/webinars/{webinarId}/traffic:
    get:
      summary: Show Webinar Traffic Breakdown
      x-wistia-mcp-annotations:
        read_only_hint: true
        read_only_hint_justification: This tool only reads webinar traffic breakdown from the account and does not modify any data.
        open_world_hint: false
        open_world_hint_justification: This tool only queries records inside the account and does not reach external services.
        destructive_hint: false
        destructive_hint_justification: This tool is read-only and does not make any changes.
        idempotent_hint: true
        idempotent_hint_justification: Reading data does not change any state, so repeated calls have no additional effect.
      x-speakeasy-group: analyticsWebinar
      x-speakeasy-name-override: getTraffic
      description: 'Retrieve traffic breakdown analytics for a webinar, grouped by a specified dimension

        such as UTM campaign, UTM source, UTM medium, or referrer domain.


        <!--- HIDE-MCP -->

        ## Requires api token with one of the following permissions

        ```

        Read detailed stats

        ```

        <!--- /HIDE-MCP -->

        '
      parameters:
      - name: webinarId
        in: path
        description: The hashed ID of the webinar.
        required: true
        schema:
          description: The hashed ID of the webinar (e.g., "abc123xyz")
          type: string
      - name: group_by
        in: query
        description: The dimension to group traffic data by.
        required: true
        schema:
          type: string
          enum:
          - utm_campaign
          - utm_source
          - utm_medium
          - referrer_domain
      - name: sort_by
        in: query
        description: The metric to sort results by.
        required: false
        schema:
          type: string
          enum:
          - registrations
          - attendees
          - impressions
          default: registrations
      - name: sort_direction
        in: query
        description: The sort direction.
        required: false
        schema:
          type: string
          enum:
          - asc
          - desc
          default: desc
      responses:
        '200':
          description: Success response with traffic breakdown data.
          content:
            application/json:
              schema:
                type: array
                items:
                  unevaluatedProperties: false
                  type: object
                  description: Each item contains the group_by field and associated metrics.
                  properties:
                    utm_campaign:
                      description: The UTM campaign value (present when group_by is utm_campaign).
                      type:
                      - string
                      - 'null'
                    utm_source:
                      description: The UTM source value (present when group_by is utm_source).
                      type:
                      - string
                      - 'null'
                    utm_medium:
                      description: The UTM medium value (present when group_by is utm_medium).
                      type:
                      - string
                      - 'null'
                    referrer_domain:
                      description: The referrer domain (present when group_by is referrer_domain).
                      type:
                      - string
                      - 'null'
                    registrations:
                      description: The number of registrations from this traffic source.
                      type: integer
                    attendees:
                      description: The number of attendees from this traffic source.
                      type: integer
                    impressions:
                      description: The number of registration page impressions from this traffic source.
                      type: integer
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    description: Error message detailing the reason for the bad request.
                    type: string
                    examples:
                    - Bad request
                  errors:
                    description: Array of error messages detailing the reasons for the bad request.
                    type: array
                    items:
                      type: string
        '401':
          description: Unauthorized, invalid or missing token
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  code:
                    description: A machine-readable identifier for the specific authorization failure.
                    type: string
                    enum:
                    - unauthorized_credentials
                    - account_inactive
                    - unauthorized_scope
                    - unauthorized_params
                  error:
                    type: string
                    examples:
                    - Invalid credentials.
        '403':
          description: Forbidden, token is valid but account does not have access to feature
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    type: string
                    examples:
                    - Webinars are not available on your current plan
        '404':
          description: Webinar not found or does not belong to account
          content: {}
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    type: string
                    examples:
                    - Internal server error
        '503':
          description: Analytics service is temporarily unavailable
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  error:
                    type: string
                    examples:
                    - Analytics service is temporarily unavailable
      tags:
      - Analytics:Webinar
      security:
      - BearerAuth: []
  /analytics/webinars/{webinarId}/audience:
    get:
      summary: Show Webinar Audience
      x-wistia-mcp-annotations:
        read_only_hint: true
        read_only_hint_justification: This tool only reads webinar audience from the account and does not modify any data.
        open_world_hint: false
        open_world_hint_justification: This tool only queries records inside the account and does not reach external services.
        destructive_hint: false
        destructive_hint_justification: This tool is read-only and does not make any changes.
        idempotent_hint: true
        idempotent_hint_justification: Reading data does not change any state, so repeated calls have no additional effect.
      x-speakeasy-group: analyticsWebinar
      x-speakeasy-name-override: getAudience
      description: 'Retrieve audience data for a webinar. Returns a paginated list of

        registrants with their attendance status, engagement metrics,

        attribution data, and per-attendee histograms.


        <!--- HIDE-MCP -->

        ## Requires api token with one of the following permissions

        ```

        Read detailed stats

        ```

        <!--- /HIDE-MCP -->

        '
      parameters:
      - name: webinarId
        in: path
        description: The hashed ID of the webinar.
        required: true
        schema:
          description: The hashed ID of the webinar (e.g., "abc123xyz")
          type: string
      - name: per_page
        in: query
        description: Number of results to return (max 100).
        required: false
        schema:
          type: integer
          default: 25
          minimum: 1
          maximum: 100
      - name: cursor
        in: query
        description: Cursor for pagination. Use the value from the previous response's page_info.end_cursor.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success response with webinar audience data.
          content:
            application/json:
              schema:
                unevaluatedProperties: false
                type: object
                properties:
                  data:
                    type: array
                    items:
                      unevaluatedProperties: false
                      allOf:
                      - type: object
                        properties:
                          first_name:
                            description: The registrant's first name.
                            type:
                            - string
                            - 'null'
                          last_name:
                            description: The registrant's last name.
                            type:
                            - string
                            - 'null'
                          email:
                            description: The registrant's email address.
                            type:
                            - string
                            - 'null'
                          phone_number:
                            description: The registrant's phone number.
                            type:
                            - string
                            - 'null'
                          company:
                            description: The registrant's company name.
                            type:
                            - string
                            - 'null'
                          job_title:
                            description: The registrant's job title.
                            type:
                            - string
                            - 'null'
                          country:
                            description: The registrant's country.
                            type:
                            - string
                            - 'null'
                          registered_at:
                            description: When the registrant registered in ISO 8601 format.
                            type:
                            - string
                            - 'null'
                            format: date-time
                          attended_at:
                            description: When the registrant joined the live event in ISO 8601 format.
                            type:
                            - string
                            - 'null'
                            format: date-time
                          attendance_status:
                            description: Whether the registrant attended the event.
                            type:
                            - string
                            - 'null'
                          restriction_status:
                            description: The registrant's restriction status (e.g., approved, blocked).
                            type:
                            - string
                            - 'null'
                          origin_method:
                            description: How the registrant was added (e.g., registration_form, import).
                            type:
                            - string
                            - 'null'
                          utm_campaign:
                            description: The UTM campaign that referred this registrant.
                            type:
                            - string
                            - 'null'
                          utm_source:
                            description: The UTM source that referred this registrant.
                            type:
                            - string
                            - 'null'
                          utm_medium:
                            description: The UTM medium that referred this registrant.
                            type:
                            - string
                            - 'null'
                          referrer_domain:
                            description: The referring domain for this registrant.
                            type:
                            - string
                            - 'null'
                          ip_country:
                            description: 

# --- truncated at 32 KB (44 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/wistia/refs/heads/main/openapi/wistia-analytics-webinar-api-openapi.yml