---
title: "Create meeting"
method: POST
path: "/meetings"
---

# Create meeting

`POST /meetings`

Creates a transient room that is available between creation and an hour after the given end date. After this time the room will be automatically deleted.
The URL to this room is present in the response.

## Request body

- object
  - `endDate` string, date-time, required — When the meeting ends. By default in UTC but a timezone can be specified, e.g. 2025-05-07T17:42:49-05:00. This has to be the same or after the current date.
  - `startDate` string, date-time — (DEPRECATED - value is ignored) Start time now defaults to time of request
  - `isLocked` boolean — The initial lock state of the room. If true, only hosts will be able to let in other participants and change lock state.
  - `roomMode` 'group' | 'normal' — The mode and size of the created transient room. `normal` is the default room mode and should be used for meetings up to 4 participants. `group` should be used for meetings that require more than 4 participants.
  - `roomNamePrefix` string — This will be used as the prefix for the room name. The string should be lowercase, and spaces will be automatically removed. 39 character max
  - `roomNamePattern` 'uuid' | 'human-short' — The format of the randomly generated room name. `uuid` is the default room name pattern and follows the usual 8-4-4-4-12 pattern. `human-short` generates a shorter string made up of six distinguishable characters.
  - `templateType` 'viewerMode' — If provided, the room will be created with the given template type. Each template defines a set of properties needed for a particular use-case. Currently the only supported template type is "viewerMode". This will set up a room with properties that are needed to create a viewer mode room. The room will be locked, roomMode set to "group" and fields like hostRoomUrl and viewerRoomUrl will be added to the response.
  - `recording` object — Options for how a meeting should be recorded.
    - `type` 'none' | 'local' | 'cloud', required — The type of recording that should take place. "none" - Recording should be disabled "local" - Recording should happen in the browser "cloud" - Recording should happen in the cloud
    - `destination` object, required — Information regarding where the recording should be stored. If this is not required, or should be inherited, it should be set to null.
      - `provider` 's3' | 'whereby', required — The provider being used to store the stream. - `s3` - Use your S3 bucket to store recordings. There are two valdidation methods for authentication. `accessKey` - The `bucket`, `region`, `accessKeyId` and `accessKeySecret` fields are required for this option. `roleBased` - The `bucket` and `oidcRoleArn` fields are required for this option. - `whereby` - Store recordings on Whereby hosted storage. The `bucket`, `accessKeyId` and `accessKeySecret` fields are not required for this option.
      - `authenticationType` 'accessKey' | 'roleBased' — Authentication type to use for S3 storage. See [here](https://docs.whereby.com/meeting-content-and-quality/authentication-for-s3-storage) for more details
      - `bucket` string — The name of the s3 bucket. Optionally subfolders can be also specified here, e.g. "my-bucket/recordings" will upload recordings to the "recordings" folder of the "my-bucket" bucket.
      - `accessKeyId` string — The s3 access key id
      - `accessKeySecret` string — The s3 access key secret
      - `fileFormat` 'mkv' | 'mp4' — The format of the recording. By default the value should be taken from the organization settings.
      - `oidcRoleArn` string — The role ARN for OIDC authentication. Only available when `authenticationType` is set to `roleBased`
    - `startTrigger` 'none' | 'prompt' | 'automatic' | 'automatic-2nd-participant', required — What type of trigger should happen in the meeting when all the information required to start a recording has been provided. This only has effect when recording.type is set to `"cloud"` - `null` - The value should be taken from the organization settings - `"none"` - A user should manually start the recording using the UI in the meeting - `"prompt"` - A prompt to start the recording will be shown to the first user with permission to start the recording. - `"automatic"` - The recording will be automatically started as soon as the first participant joins the meeting. - `"automatic-2nd-participant"` - The recording will be automatically started as soon as the second participant joins the meeting.
  - `liveTranscription` object — A configuration object for Session Transcription
    - `destination` object, required — Information regarding where the transcription should be stored. If this is not required, or should be inherited, it should be set to null.
      - `provider` 's3' | 'whereby', required — The provider being used to store the transcript. - `s3` - Use your S3 bucket to store transcriptions. There are two valdidation methods for authentication. `accessKey` - The `bucket`, `region`, `accessKeyId` and `accessKeySecret` fields are required for this option. `roleBased` - The `bucket` and `oidcRoleArn` fields are required for this option. - `whereby` - Store transcriptions on Whereby hosted storage. The `bucket`, `region`, `accessKeyId` and `accessKeySecret` fields are not required for this option.
      - `authenticationType` 'accessKey' | 'roleBased' — Authentication type to use for S3 storage. See here for more details: https://docs.whereby.com/meeting-content-and-quality/authentication-for-s3-storage
      - `bucket` string — The name of the s3 bucket. Optionally subfolders can be also specified here, e.g. "my-bucket/transcriptions" will upload transcriptions to the "transcriptions" folder of the "my-bucket" bucket.
      - `accessKeyId` string — The s3 access key id
      - `accessKeySecret` string — The s3 access key secret
      - `region` string — The s3 region
      - `oidcRoleArn` string — The role ARN for OIDC authentication. Only available when `authenticationType` is set to `roleBased`
    - `startTrigger` 'none' | 'manual' | 'automatic' | 'automatic-2nd-participant', required — What type of trigger should happen in the meeting when all the information required to start a Session Transcription has been provided. - `null` - The value should be taken from the organization settings - `"none"` - Session Transcription will not be available for the meeting - `"manual"` - Host can manually start/stop the Session Transcription via the UI in the meeting - `"automatic"` - The Session Transcription will be automatically started as soon as the first participant joins the meeting. - `"automatic-2nd-participant"` - The Session Transcription will be automatically started as soon as the second participant joins the meeting.
    - `language` 'ca,' | 'zh,' | 'zh-TW,' | 'cs,' | 'da,' | 'nl,' | 'en,' | 'en-US,' | 'en-GB,' | 'fi,' | 'fr,' | 'de,' | 'de-CH,' | 'el,' | 'hi,' | 'id,' | 'it,' | 'ja,' | 'ko,' | 'lv,' | 'ms,' | 'no,' | 'pl,' | 'pt,' | 'pt-BR,' | 'ro,' | 'ru,' | 'sk,' | 'es,' | 'sv,' | 'th,' | 'uk,' | 'vi,' — What language should be used for the Session Transcription. - `null` - The value should be taken from the organization settings
    - `liveCaptions` boolean — If true, live captions will be enabled for the meeting. This will be available for all participants.
  - `streaming` object — A configuration object for live RTMP streaming of the meeting
    - `destination` object, required — The destination of the stream
      - `url` string, required — The destination RTMP URI of the stream. This should be set to match the inject url of your streaming provider (Youtube, Facebook, Twitch, etc). Example `rtmp://a.rtmp.youtube.com/live2/<stream_key>`
    - `startTrigger` 'none' | 'prompt' | 'automatic', required — Specify the condition when live streaming should be started.- `null` - Should be passed when this is not required or should be inherited from the organization preferences - `none` - The meeting host is able to manually start and stop the stream. - `prompt` - The meeting host will be prompted to start the stream once joined. - `automatic` - The stream will be automatically started as soon as the first participant joins the meeting.
  - `fields` string[] — Additional fields that should be populated. - `hostRoomUrl` - Include hostRoomUrl field in the meeting response. - `viewerRoomUrl` - Include viewerRoomUrl field in the meeting response.

## Response `201`

The resource was created successfully.

- Meeting
  - `meetingId` string, required — The ID of the meeting.
  - `roomName` string — The name of the room.
  - `roomUrl` string, uri, required — The URL to room where the meeting will be hosted.
  - `startDate` string, date-time — When the meeting starts. Always in UTC, regardless of the input timezone.
  - `endDate` string, date-time, required — When the meeting ends. Always in UTC, regardless of the input timezone.
  - `hostRoomUrl` string, uri — The URL to the room where the meeting will be hosted which will also make the user the host of the meeting. A host will get additional privileges like locking the room, and removing and muting participants, so you should be careful with whom you share this URL. The user will only become a host if the meeting is on-going (some additional slack is added to allow a host joining the meeting ahead of time or if the meeting goes over time). This field is optional and will only be returned if requested through the fields parameter.
  - `viewerRoomUrl` string, uri — The URL to the room where the meeting will be hosted which will make the user a viewer of the meeting. A viewer will not be able to turn on the camera or microphone, but will be able to join the meeting. This field is optional and will only be returned if requested through the fields parameter.

## Other responses

- `401` — Access token is missing or invalid
- `403` — Not allowed to perform action
- `429` — You are rate limited

---

[API](https://skmtc.net/whereby/apis/whereby-rest-api.md) · [All operations](https://skmtc.net/whereby/apis/whereby-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/whereby/whereby-rest-api/revisions/3d9aec0774ff/schema)
