---
title: "List a meeting's viewers"
method: GET
path: "/public-api/v1/meetings/{meeting_id}/viewers"
tags: ["meetings"]
---

# List a meeting's viewers

`GET /public-api/v1/meetings/{meeting_id}/viewers`

## Request

- Base URL: `/` (relative, and the document’s source URL is not known)
- URL: `/public-api/v1/meetings/{meeting_id}/viewers`
- Auth: HTTP bearer and API key in header `x-tenant-code`

List the users who have played the video — paginated, most recent first.

Each entry carries the play-record ``id``, one entry per distinct user.
``play_users`` is empty when no one has played the video yet. The full list
is paginated with an opaque cursor (``first`` + ``offset`` XOR
``after``); pass ``page_info.end_cursor`` / ``start_cursor`` back as
``after`` to page. Returns 404 when the video id is unknown, and 422 for a
malformed id or bad pagination params (at request validation).

## Path parameters

- `meeting_id` string, uuid, required

## Query parameters

- `first` integer: Forward page size. 1 to 200.
- `offset` integer, nullable: Offset-based pagination start (0 to 5000). Mutually exclusive with ``after`` — sending both is a 422.
- `after` string, nullable: Opaque pagination cursor from a previous response's ``page_info.end_cursor`` (next page) or ``page_info.start_cursor`` (previous page). Omit for the first page. When set, the page size comes from the cursor. Mutually exclusive with ``offset``.

## Response `200`

A page of users who played the meeting recording and pagination cursors.

- PlayUserListResponse: Response for ``GET /meetings/{meeting_id}/viewers`` — standard ``{items, page_info}``. The list uses an opaque cursor; ``play_users`` is empty when no one has played the video yet.
  - `play_users` PlayUser[], required
    - `id` string, uuid, required
  - `page_info` AppSchemasVideosPageInfo, required: Pagination cursors, same shape as the ``/phone_calls`` + ``/phone_call_legs`` lists. Both are opaque tokens. ``end_cursor`` is the next page, ``start_cursor`` the previous page — pass either back as ``after``. ``end_cursor`` is ``null`` on the last page; ``start_cursor`` is ``null`` on the first page.
    - `start_cursor` string, nullable
    - `end_cursor` string, nullable

## Other responses

- `400`: The tenant could not be resolved from the request.
- `401`: Error envelope (`public_api.unauthorized`).
- `403`: The request is not allowed for the current tenant or access configuration.
- `404`: Error envelope (`public_api.not_found`).
- `409`: Error envelope (`public_api.conflict`).
- `413`: The request body exceeds the maximum allowed size.
- `422`: Validation Error
- `429`: Rate limit exceeded. Wait for ``Retry-After`` seconds before retrying.
- `502`: Error envelope (`public_api.internal_error`).
- `503`: The request could not be served right now. Please retry.
- `504`: Error envelope (`public_api.request_timeout`).

---

[API](https://skmtc.dev/miitel/apis/miitel-public-api.md) - [All operations](https://skmtc.dev/miitel/apis/miitel-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/miitel/apis/miitel-public-api/revisions/961732756fa3?raw)
