---
title: "Search meetings"
method: POST
path: "/public-api/v1/meetings/list"
tags: ["meetings"]
---

# Search meetings

`POST /public-api/v1/meetings/list`

## Request

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

List meetings that match the supplied filters.

Results use cursor pagination. Send ``page_info.end_cursor`` as ``after`` to
retrieve the next page.

## Request body

- VideoSearchRequest: Request body for ``POST /meetings/list`` — filters and pagination.
  - `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``.
  - `keyword` string, nullable: Free-text match against the video title and participant names.
  - `starts_at` string, date-time, nullable: Lower bound on the meeting start time (inclusive).
  - `ends_at` string, date-time, nullable: Upper bound on the meeting start time (inclusive).
  - `platforms` VideoPlatform[]: Restrict to these recording platforms.
  - `participant_ids` string[]: Restrict to videos with these participant user ids (numeric).
  - `host_ids` string[]: Restrict to videos hosted by these user ids (numeric).
  - `my_meetings` boolean: When true, restrict to meetings the caller hosted or joined.
  - `duration__gte` integer, nullable: Minimum meeting duration, in seconds.
  - `duration__lte` integer, nullable: Maximum meeting duration, in seconds.
  - `playback_users__gte` integer, nullable: Minimum number of distinct playback users.
  - `playback_users__lte` integer, nullable: Maximum number of distinct playback users.
  - `status` 'ALL' | 'AWAITING_RECPOD_UPLOAD' | 'ANALYSIS_COMPLETE' | 'ANALYSIS_FAILED': The analysis status of a recording. Used by the ``status`` filter.
  - `tag_ids__include_and` string[]: Require videos to carry all of these tag ids.
  - `tag_ids__include_or` string[]: Require videos to carry any of these tag ids (ignored if ``tag_ids__include_and`` is set).
  - `tag_ids__exclude` string[]: Exclude videos carrying any of these tag ids.
  - `tag__exists` boolean, nullable: When set, restrict to videos that do (true) / do not (false) carry tags.
  - `video_ids` string[]: Restrict to these specific video ids.
  - `comment` string, nullable: Free-text match against comments on the video.

## Response `200`

A page of matching meetings and pagination cursors.

- VideoSearchResponse: Response uses the standard list envelope (``{items, page_info}``).
  - `videos` Video[], required: Matching meetings with lightweight metadata.
    - `id` string, uuid, required
    - `title` string, required
    - `platform` string, required
    - `starts_at` string, date-time, nullable
    - `expires_at` string, date-time, nullable
    - `duration` number, nullable
    - `participant_names` string, nullable
    - `host` VideoHost: The meeting host. ``id`` is the host's account UUID.
      - `id` string, uuid, nullable
      - `name` string, nullable
    - `created_at` string, date-time, nullable
    - `updated_at` string, date-time, nullable
  - `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)
