These are the reference docs for the Whereby REST API.
If you haven't already read the embedded developer resources, you will want to read that first for a high level overview over the Whereby APIs.
We rate limit our APIs, returning a 429
status code response when your request has been throttled.
You will have to wait and retry the request later.
We use a point system to limit the number of requests that you can make.
A read request consumes 1 point, a delete consumes 2 points and a write request consumes 3 points.
Here are some examples of how a 1000 point budget could be spent within 1 minute:
Grow plans have 1000 points in total per minute, and Build plans have 100. The limits are global and are shared across all your API keys. Talk to us if you need higher limits.
You may read the Retry-After
(seconds) or X-RateLimit-Reset
(date) response headers in order to know when you can restart your requests.
In addition, the X-RateLimit-Limit
header includes the total number of points for your organization, and the
X-RateLimit-Remaining
header displays the remaining available points.
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.
Meeting to add.
templateType | string Value: "viewerMode" [BETA]: This is a beta feature, and might change in the future. 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. |
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. |
roomNamePrefix | string <= 39 characters [a-z0-9]{0,39} This will be used as the prefix for the room name. The string should be lowercase, and spaces will be automatically removed. |
roomNamePattern | string Default: "uuid" Enum: "uuid" "human-short" The format of the randomly generated room name.
|
roomMode | string Default: "normal" Enum: "group" "normal" The mode of the created transient room.
|
startDate | string <date-time> Deprecated When the meeting starts. By default in UTC but a timezone can be specified, e.g. 2021-05-07T17:42:49-05:00. This date must be in the future. (DEPRECATED - value is ignored) |
endDate required | string <date-time> When the meeting ends. By default in UTC but a timezone can be specified, e.g. 2021-05-07T17:42:49-05:00. This has to be the same or after the current date. |
object Options for how a meeting should be recorded. | |
object A configuration object for live RTMP streaming of the meeting | |
fields | Array of strings (Fields) Items Enum: "hostRoomUrl" "viewerRoomUrl" Additional fields that should be populated.
|
meetingId required | string The ID of the meeting. |
roomName | string The name of the room. |
roomUrl required | string <uri> 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 required | string <date-time> 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. |
{- "templateType": "viewerMode",
- "isLocked": true,
- "roomNamePrefix": "example-prefix",
- "roomNamePattern": "uuid",
- "roomMode": "normal",
- "startDate": "2019-08-24T14:15:22Z",
- "endDate": "2019-08-24T14:15:22Z",
- "recording": {
- "type": "none",
- "destination": {
- "provider": "s3",
- "bucket": "string",
- "accessKeyId": "string",
- "accessKeySecret": "string",
- "fileFormat": "mkv"
}, - "startTrigger": "none"
}, - "streaming": {
- "destination": {
- "url": "string"
}, - "startTrigger": "none"
}, - "fields": [
- "hostRoomUrl"
]
}
{- "meetingId": "1",
- "startDate": "2020-05-12T16:42:49Z",
- "endDate": "2020-05-12T17:42:49Z",
}
Returns the meetings.
cursor | string Example: cursor=8f4031bfc7640c5f267b11b6fe0c2507 The cursor for paginating through the results. To fetch the next page,
set the |
limit | integer [ 1 .. 100 ] Default: 50 The limit for the pagination - the maximum number of results that will be returned within a single API response. |
fields | Array of strings (Fields) Items Enum: "hostRoomUrl" "viewerRoomUrl" Additional fields that should be populated.
|
required | Array of objects (Meeting) [ items ] |
cursor required | string The cursor for paginating through the results. To fetch the next page,
set the |
{- "results": [
- {
- "meetingId": "1",
- "startDate": "2020-05-12T16:42:49Z",
- "endDate": "2020-05-12T17:42:49Z",
}
], - "cursor": "string"
}
Deletes the specified meeting. The endpoint is idempotent, meaning it will return the same response even if the meeting has already been deleted.
meetingId required | any Example: 1 meeting ID. |
{- "error": "Rate limit active for throttle key: organization:1",
- "data": {
- "msLeft": 38689
}
}
Returns the specified meeting.
meetingId required | any Example: 1 meeting ID. |
fields | Array of strings (Fields) Items Enum: "hostRoomUrl" "viewerRoomUrl" Additional fields that should be populated.
|
meetingId required | string The ID of the meeting. |
roomName | string The name of the room. |
roomUrl required | string <uri> 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 required | string <date-time> 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. |
{- "meetingId": "1",
- "startDate": "2020-05-12T16:42:49Z",
- "endDate": "2020-05-12T17:42:49Z",
}
Set primary, secondary and focus room colors.
roomName required | any Example: 913c4449-c904-4313-b560-ae5bf0b04a39 Room name. |
object Room colors defined in an object. | |
tokensPreset | string Enum: "custom" "default" Use the given primary or secondary colors when |
{- "tokens": {
- "colors": {
- "primary": "string",
- "secondary": "string",
- "focus": "string"
}
}, - "tokensPreset": "custom"
}
{- "error": "Rate limit active for throttle key: organization:1",
- "data": {
- "msLeft": 38689
}
}
Upload room logo.
roomName required | any Example: 913c4449-c904-4313-b560-ae5bf0b04a39 Room name. |
image | string <binary> The logo image. We recommend PNG images at least 400px wide. |
{- "error": "Rate limit active for throttle key: organization:1",
- "data": {
- "msLeft": 38689
}
}
Set room background.
roomName required | any Example: 913c4449-c904-4313-b560-ae5bf0b04a39 Room name. |
image | string <binary> The background image. We recommend PNG images at least 1400px wide (max 600 kb). |
{- "error": "Rate limit active for throttle key: organization:1",
- "data": {
- "msLeft": 38689
}
}
Set room knock page background.
roomName required | any Example: 913c4449-c904-4313-b560-ae5bf0b04a39 Room name. |
image | string <binary> The knock page background image. We recommend PNG images at least 1400px wide (max 600 kb). |
{- "error": "Rate limit active for throttle key: organization:1",
- "data": {
- "msLeft": 38689
}
}
Gets a summary of insights collected for rooms.
object Filter results by room name. | |
object Filter rooms by the date they were created. | |
sortBy | any Example: sortBy=totalSessions:asc Sort results by a field. |
cursor | any Example: cursor=8f4031bfc7640c5f267b11b6fe0c2507 The cursor for paginating through the results. To fetch the next page,
set the |
limit | integer [ 1 .. 100 ] Default: 10 Example: limit=30 Limit the number of results. |
cursor | string The cursor for paginating through the results. To fetch the next page,
set the |
Array of objects[ items ] |
{- "cursor": "string",
- "results": [
- {
- "roomName": "/4b3bd908-cb88-11ec-9d64-0242ac120002",
- "createdAt": "2020-01-01T00:00:00.000Z",
- "endAt": "2020-01-01T01:00:00.000Z",
- "totalParticipantMinutes": 124,
- "totalRecorderMinutes": 120,
- "totalStreamerMinutes": 120,
- "totalUniqueParticipants": 4,
- "totalSessions": 2
}
]
}
Gets a summary of usage for each session of a given room.
roomName required | any Example: roomName=/4b3bd908-cb88-11ec-9d64-0242ac120002 Room name . |
sortBy | any Example: sortBy=totalUniqueParticipants:asc Sort results by a field. |
cursor | any Example: cursor=8f4031bfc7640c5f267b11b6fe0c2507 The cursor for paginating through the results. To fetch the next page,
set the |
limit | integer [ 1 .. 100 ] Default: 10 Example: limit=30 Limit the number of results. |
cursor | string The cursor for paginating through the results. To fetch the next page,
set the |
Array of objects[ items ] |
{- "cursor": "string",
- "results": [
- {
- "roomSessionId": "32ba120a-a691-4e8e-aec3-a610239271de",
- "roomName": "/4b3bd908-cb88-11ec-9d64-0242ac120002",
- "startedAt": "2020-01-01T00:00:00.000Z",
- "endedAt": "2020-01-01T01:00:00.000Z",
- "totalParticipantMinutes": 124,
- "totalRecorderMinutes": 120,
- "totalStreamerMinutes": 120,
- "totalUniqueParticipants": 4
}
]
}
Gets a list of participants, by either a given session id or external id.
roomSessionId | any Example: roomSessionId=4b3bd908-cb88-11ec-9d64-0242ac120002 session ID. |
externalId | any an externalId that was used in queryParams by the participant when joining. |
sortBy | any Example: sortBy=joinedAt:asc Sort results by a field. Accepted values are |
cursor | any Example: cursor=8f4031bfc7640c5f267b11b6fe0c2507 The cursor for paginating through the results. To fetch the next page,
set the |
limit | integer [ 1 .. 100 ] Default: 10 Example: limit=30 Limit the number of results. |
cursor | string The cursor for paginating through the results. To fetch the next page,
set the |
Array of objects[ items ] |
{- "cursor": "string",
- "results": [
- {
- "roomSessionId": "32ba120a-a691-4e8e-aec3-a610239271de",
- "participantId": "/4b3bd908-cb88-11ec-9d64-0242ac120002",
- "deviceId": "string",
- "userId": "32ba120a-a691-4e8e-aec3-a610239271de",
- "roleName": "granted_visited",
- "displayName": "John Doe",
- "joinedAt": "2020-01-01T00:00:00.000Z",
- "leftAt": "2020-01-01T01:00:00.000Z",
- "externalId": "string"
}
]
}
Returns session data such as user agent, bandwidth and packet loss for the participant.
roomSessionId required | any Example: roomSessionId=4b3bd908-cb88-11ec-9d64-0242ac120002 session ID. |
participantId required | any Example: participantId=32ba120a-a691-4e8e-aec3-a610239271de participant ID. |
displayName required | string Display name of the participant. |
userRole required | string The role of the participant. |
userAgent required | string User agent string of the participant. |
timeStamp required | string Timestamp the participant joined the session. |
sampleRateMs required | number The interval (in milliseconds) the samples are collected in. |
samples required | object Data object arrays with network data. |
[- {
- "displayName": "string",
- "userRole": "host",
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
- "timeStamp": "string",
- "sampleRateMs": 2000,
- "samples": { }
}
]
Returns the recordings.
cursor | string Example: cursor=8f4031bfc7640c5f267b11b6fe0c2507 The cursor for paginating through the results. To fetch the next page,
set the |
limit | integer [ 1 .. 100 ] Default: 50 The limit for the pagination - the maximum number of results that will be returned within a single API response. |
results required | Array of objects (Recording) [ items ] |
cursor required | string The cursor for paginating through the results. To fetch the next page,
set the |
{- "results": [
- {
- "recordingId": "1",
- "roomSessionId": "1",
- "filename": "recording.mp4",
- "startDate": "2020-01-01T00:00:00.000Z",
- "endDate": "2020-01-01T00:00:00.000Z",
- "sizeInMegaBytes": 100
}
], - "cursor": "string"
}
Returns the specified recording.
recordingId required | any Example: 1 The recording ID. |
{- "recordingId": "1",
- "roomSessionId": "1",
- "filename": "recording.mp4",
- "startDate": "2020-01-01T00:00:00.000Z",
- "endDate": "2020-01-01T00:00:00.000Z",
- "sizeInMegaBytes": 100
}
Deletes the specified recording. The endpoint is idempotent, meaning it will return the same response even if the meeting has already been deleted.
recordingId required | any Example: 1 The recording ID. |
{- "error": "Rate limit active for throttle key: organization:1",
- "data": {
- "msLeft": 38689
}
}
Returns the access link for the specified recording.
recordingId required | any Example: 1 The recording ID. |
validForSeconds | integer [ 1 .. 43200 ] Default: 3600 The number of seconds the access link is valid for. |
accessLink required | string The access link. |
expires required | integer The timestamp when the access link expires. |
{- "expires": 1588262400000
}