Pexip Client REST API V32.a
Pexip Client REST API V32.a
Software Version 32
Document Version 32.a
June 2023
Pexip Infinity Client REST API v2 Introduction
Contents
Introduction 2
Using the API 2
Summary of API requests and events 3
Client control requests 6
Conference control functions 10
Participant functions 18
Call functions 24
Server-sent events 26
Other miscellaneous requests 33
Changelog 34
More information 35
Introduction
This guide describes the Pexip client REST API. It is designed for use by non-web-based, third-party voice/video applications that want
to initiate or connect to conferences hosted on the Pexip Infinity platform.
We strongly recommend that web-based applications use the PexRTC JavaScript client API instead.
This API specification is regularly evolving between versions of the Pexip Infinity platform. While we will attempt to maintain
backward compatibility, there may be significant changes between versions.
Using the API
The prefix for all conference-related API calls is:
https://<node_address>/api/client/v2/conferences/<conference_alias>/
where <node_address> is the address of a Conferencing Node and <conference_alias> is an alias of the conference you are connecting
to. Under this API path comes a sequence of response API calls, for example:
https://10.0.0.1/api/client/v2/conferences/meet_alice/request_token
All commands in the client API are authenticated with a token, which is presented by the Pexip Conferencing Node. The token has a
validity lifetime, before the end of which it must be refreshed. The token is presented in a HTTP header entitled "token" on every HTTP
request, except for the initial request_token request.
Unless otherwise specified, all payloads of requests and responses are JSON objects, Content-Type: application/json.
The responses have two fields, status and result:
l status is "success" if the command has been processed by Pexip, or "failure" if the command could not be processed. Note that
this does not mean that the end result is success, only that the request has been received and processed.
l the result field indicates if the request was successful.
Summary of API requests and events
This section summarizes the requests and server-sent events that may be used, which are then described in more detail.
Client control requests
These REST URIs take the format:
https://<node_address>/api/client/v2/conferences/<conference_alias>/<request>
Conference control functions
These REST URIs take the format:
https://<node_address>/api/client/v2/conferences/<conference_alias>/<request>
Participant functions
These participant REST URIs take the format:
https://<node_address>/api/client/v2/conferences/<conference_alias>/participants/<participant_uuid>/<request>
Call functions
These call REST URIs take the format:
https://<node_address>/api/client/v2/conferences/<conference_alias>/participants/<participant_uuid>/calls/<call_
uuid>/<request>
Server-sent events
To subscribe, open an HTTP connection to:
https://<node_address>/api/client/v2/conferences/<conference_alias>/events?token=<token_id>
Event Description
presentation_start Marks the start of a presentation, and includes the information on which participant is presenting.
presentation_stop The presentation has finished.
presentation_frame A new presentation frame is available.
participant_create A new participant has joined the conference.
participant_update A participant's properties have changed.
participant_delete A participant has left the conference.
participant_sync_begin / These two messages start and end the sending of the complete participant list.
participant_sync_end
conference_update Conference properties have been updated.
layout The stage layout has changed.
message_received A chat message has been broadcast to the conference.
stage An update to the "stage layout" is available. This declares the order of active speakers, and their voice activity.
call_disconnected Sent when a child call has been disconnected.
disconnect Sent when the participant is being disconnected from the Pexip side.
splash_screen The client should display a splash screen,
new_offer Received a SDP offer from the far-end participant (direct media only).
update_sdp Received a SDP update from the far-end participant (direct media only).
new_candidate Received a new ICE candidate from the far-end participant (direct media only).
peer_disconnect Indicates that the far-end participant has disconnected (direct media only).
Other requests
Request Description
/api/client/v2/status Check whether a Conferencing Node is in maintenance mode.
Client control requests
This section describes in detail the requests that may be used to initiate and manage a connection to a Conferencing Node.
These REST URIs take the format:
https://<node_address>/api/client/v2/conferences/<conference_alias>/<request>
request_token
This POST requests a new token from the Pexip Conferencing Node.
Request example:
{"display_name": "Alice", "call_tag": "def456"}
Request fields:
Response example:
{'status': 'success',
'result': {'token': 'Ohv3IrcV0CJFa ... etc ... de2PvYam0zqT1G8fEA==',
'expires': '120',
'display_name': 'pmxep',
'participant_uuid': '4cb84ae2-3359-4aa6-9e16-b6fa43f8af3a',
'current_service_type': 'conference',
'role': 'HOST',
'call_tag': '',
'version': {'version_id': '29', 'pseudo_version': '68488.0.0'},
'conference_name': 'Alice's VMR',
'chat_enabled': True,
'fecc_enabled': True,
'rtmp_enabled': True,
'analytics_enabled': True,
'service_type': 'conference',
'call_type': 'video',
'guests_can_present': True,
'vp9_enabled': False,
'allow_1080p': True,
'direct_media': False,
'use_relay_candidates_only': False,
'turn': [{'urls': ['turn:176.125.235.148:3478?transport=udp'],
'username': '1660056163:abcdefgh-3359-4aa6-9e16-b6fa43f8af3a',
'credential': '0BKT1abcdefghvpYMroo8OO8+g='}]
}}
This result contains the token (abridged in the above example) to use to authenticate all future requests, and an expiry time (in
seconds) after which this token becomes invalid. The full list of fields in the result is as follows:
true = direct media call; false = transcoded call.
false = direct media call not enforcing media relay.
PIN protected conferences
If the conference is PIN-protected, the PIN must be specified in a "pin" HTTP header. If the PIN is required but is incorrect or missing, a
"403 Forbidden" error is returned. The "pin" field in the response specifies whether a PIN is required for Hosts, and a "guest_pin" field
in the response specifies whether a PIN is required for Guests. If a PIN is required for a Host, but not for a Guest, and if you want to join
as a Guest, you must still provide a "pin" header, with a value of "none".
SSO protected conferences
If the conference has SSO (Single Sign-On) participant authentication enabled, the response contains a list of Identity Providers (IDP)
that are available for this service, for example:
"idp": [
{
"name": "Azure AD”,
"img": "",
"uuid": "4fe19459-67b4-4e84-abb4-a3765a0a7e09”
}, {
"name": "ADFS”,
"img": "",
"uuid": "7e43610f-1c82-4726-899a-af801748846c”
}
]
When using IDP authentication, the next request_token request should contain the chosen_idp, for example:
"chosen_idp":"4fe19459-67b4-4e84-abb4-a3765a0a7e09”,
And the response will contain a URL to redirect to:
"redirect_url": "<IdP's SSO URL>?SAMLRequest=<Base64 encoded SAML AuthNRequest message>”,
"redirect_idp": {
"name": "Azure AD”,
"uuid": "4fe19459-67b4-4e84-abb4-a3765a0a7e09”
}
After you have received an SSO token from the redirect_url, this must be inserted into a third request_token request as sso_token, along
with the chosen_idp parameter.
Virtual Receptions
If the conference is a Virtual Reception, a "403 Forbidden" error is returned, with a "conference_extension" field. This field is either:
l "standard": for a regular, Microsoft Teams or Google Meet Virtual Reception.
l "mssip": for a Lync / Skype for Business Virtual Reception.
To join the target room, a second request_token request must be made, but with a conference_extension field in the request JSON,
which contains the alias of the target conference.
refresh_token
This POST request refreshes a token to get a new one.
Request: empty.
Example response:
{"status": "success", "result":
{"token": "SE9TVAltZ...etc...jQ4YTVmMzM3MDMwNDFlNjI%3D",
"expires": "120"}}
Fields are:
release_token
This POST request releases the token (effectively a disconnect for the participant).
Request: empty.
Response: should be ignored.
Conference control functions
This section describes in detail the requests that may be used to manage an existing conference.
These REST URIs take the format:
https://<node_address>/api/client/v2/conferences/<conference_alias>/<request>
dial
This POST request dials out from the conference to a target endpoint. This function is only available to conference Hosts.
Request example:
{"role": "GUEST", "destination": "bob@example.com", "protocol": "sip", "source_display_name": "Alice"}
Request fields:
Response example:
{"status": "success", "result": ["977fcd1c-8e3c-4dcf-af45-e536b77af088"]}
The response is an array of UUIDs of new participants, if dial-out was successfully initiated. In most cases the dial-out will only generate
a single call and thus a single UUID in this array, however if Pexip Infinity forks the call there may end up being multiple UUIDs. Only
one of these will be answered, however, and the rest will be disconnected.
The call UUIDs will appear as new participants immediately, with a "service_type" of "connecting". If the call is answered, the
participant will be updated with a new "service_type", typically being "conference". The participant may also be deleted if the receiver
rejects the call, or the call attempt times out in 30 seconds if not answered.
conference_status
This GET request provides the status of the conference.
Currently, a limited set of conference properties are available, as listed below:
{"status": "success", "result": {"locked": false, "guests_muted": false, "all_muted": false, "presentation_
allowed": true, "started": true, "livecaptions_available": true, "direct_media": false}}
lock / unlock
These POST requests are used to lock or unlock the conference. When a conference is locked, participants waiting to join are held at a
"Waiting for Host" screen. These settings are only available to conference Hosts.
Request: empty.
Response: the result is true if successful, false otherwise.
start_conference
If the only user with Host rights is connected to the conference without media (as a presentation and control-only participant), Guests
will remain in the “Waiting for Host” screen. This POST request starts the conference and any Guests in the "waiting room" will join the
meeting. This is only available to conference Hosts.
Request: empty.
Response: the result is true if successful, false otherwise.
muteguests / unmuteguests
These POST requests are used to mute or unmute all Guests on a conference. When muted, no Guest participants can speak unless
they are explicitly unmuted. When unmuted, all Guests on a conference can speak. These settings are only available to conference
Hosts.
Request: empty.
Response: the result is true if successful, false otherwise.
disconnect
This POST request disconnects all conference participants, including the participant calling the function. This setting is only available to
conference Hosts.
Request: empty.
Response: the result is true if successful, false otherwise.
message
This POST request sends a message to all participants in the conference.
Request example:
{"type": "text/plain", "payload": "Hello World"}
Request fields:
Response: the result is true if successful, false otherwise.
participants
This GET request returns the full participant list of the conference. See the description of the participant_create EventSource for more
information.
transform_layout
This POST request changes the conference layout, controls streaming content, and enables/disables indicators and overlay text.
Request fields:
transforms This is an object containing any of the following optional parameters:
host_layout In Virtual Auditoriums the Host layout is controlled by the host_layout parameter and the
Guest layout is controlled by the guest_layout parameter.
guest_layout
The layout options are:
l "1:0": main speaker only
l "1:7": main speaker and up to 7 previous speakers
l "1:21": main speaker and up to 21 previous speakers
l "2:21": 2 main speakers and up to 21 previous speakers
l "1:33": 1 small main speaker and up to 33 other speakers
l "4:0": 2x2 layout, up to a maximum of 4 speakers
l "9:0": 3x3 layout, up to a maximum of 9 speakers
l "16:0": 4x4 layout, up to a maximum of 16 speakers
l "25:0": 5x5 layout, up to a maximum of 25 speakers
l "ac": Adaptive Composition layout
l "teams": Teams-like layout (this is a technology preview feature and is only
recommended for use with Microsoft Teams gateway calls)
Note that the layout parameter is an alias for host_layout, and that an attempt to set
guest_layout in a service that is not a Virtual Auditorium will return a "400 Bad Request"
error.
In the standard AC layout, a maximum of 12 video participants are shown across up to three
rows (2 participants on the first row / 3 on the second row / 7 on the bottom row).
In the extended layout up to 23 video participants may be shown, initially across three rows
(2/3/7 extending to 2/5/7 and then 3/5/7) and then across four rows (3/5/7/8) when
required.
Note that this setting only has an effect in a conference that is already using AC, so the
conference either needs to be already configured to use AC, or you also need to pass
"layout": "ac" or "host_layout": "ac" to enable AC simultaneously, for example:
* Technology preview only
It is an object containing any of the following optional parameters:
You cannot use this layout parameter if the main
Pexip Infinity Client REST API v2 Conference control functions
Response: the result is true if successful, false otherwise.
Here are some example requests:
l To change a Virtual Meeting Room layout: {"transforms": {"layout": "2:21"}}
l To set adaptive composition layout with active speaker indication and to also display all other participant names: {"transforms":
{"layout": "ac","enable_overlay_text": true,"enable_active_speaker_indication": true}}
clearallbuzz
This POST request lowers all raised hands.
Request: empty.
Response: the result is true if successful, false otherwise.
silent_video_detection
This POST request configures the parameters for silent video detection in an Adaptive Composition layout.
Request fields:
config This is an object containing any of the following optional parameters:
Request example:
{"config": {"enable": true,"silent_after": 15,"require_no_faces": true,"reactivate_after": 2}}
Response: the result is true if successful, false otherwise.
set_classification_level
This POST request sets the classification level to use from the theme assigned to the conference.
Request example:
{"level": 4}
Request fields:
Response: the result is true if successful, false otherwise.
get_classification_level
This GET request obtains the set of available classification levels and the currently active level. For example:
{
"status": "success",
"result": {
"levels": {
"0": "Unclassified",
"1": "Official",
"2": "Official Sensitive",
"3": "RESTRICTED",
"4": "Confidential",
"5": "Secret",
"6": "Top Secret"
},
"current": 1
}
}
theme
Provides the theme resources of the conference (direct media only). Used in conjunction with the splash_screen server event, the
relevant theme resources can be used to locally render a particular splash screen on the client.
The theme metadata for a given conference is requested with a GET request to /theme
Example response:
{
"status": "success",
"result": {
"direct_media_welcome": {
"layout_type": "direct_media",
"background": {
"path": "background.jpg"
},
"elements": [
{
"type": "text",
"color": 4294967295,
"text": "Welcome"
}
]
},
…
}
}
To fetch a particular resource such as an image. A GET request is made to /theme/<resource path>
Example request:
GET /api/client/v2/conferences/<conference_alias>/theme/background.jpg
Participant functions
Within a conference, operations can be performed on participants, if the client has Host privileges.
These participant REST URIs take the format:
https://<node_address>/api/client/v2/conferences/<conference_alias>/participants/<participant_uuid>/<request>
where <node_address> is the Conferencing Node, <conference_alias> is an alias of the conference, and <participant_uuid> is the uuid
of the participant you are controlling. Under this path comes the request, for example:
https://10.0.0.1/api/client/v2/conferences/meet_alice/participants/7f8bdd7f-2d39-4c3f-9236-3e95b21f21a8/disconnect
disconnect
This POST request disconnects a participant.
Request: empty
Response: the result is true if successful, false otherwise.
mute / unmute
These POST requests are used to mute or unmute a participant's audio.
Request: empty.
Response: the result is true if successful, false otherwise.
video_muted / video_unmuted
These POST requests are used to mute or unmute a participant's video.
Request: empty.
Response: the result is true if successful, false otherwise.
allowrxpresentation / denyrxpresentation
These POST requests are used to enable or disable a participant from receiving the presentation stream. (Participants are enabled by
default.)
Request: empty.
Response: the result is true if successful, false otherwise.
spotlighton / spotlightoff
These POST requests are used to enable or disable the "spotlight" on a participant.
The spotlight feature locks any spotlighted participants in the primary positions in the stage layout, ahead of any current speakers.
When any participants have been spotlighted, the first one to be spotlighted has the main speaker position, the second one has the
second position (leftmost small video, for example), and so on. All remaining participants are arranged by most recent voice activity, as
usual.
Request: empty.
Response: the result is true if successful, false otherwise.
unlock
This POST request lets a specified participant into the conference from the waiting room of a locked conference.
Request: empty.
Response: the result is true if successful, false otherwise.
dtmf
This POST request sends DTMF digits to the participant.
Request example:
{"digits": "1234"}
Request fields:
Response: the result is true if successful, false otherwise.
message
This POST request sends a message to the participant.
Request example:
{"type": "text/plain", "payload": "Hello World"}
Request fields:
Response: the result is true if successful, false otherwise.
calls
This POST request upgrades this connection to have an audio/video/presentation call element.
Pexip expects the call to contain three media sections for three streams: audio, video, and presentation. The presentation section
should contain an additional attribute "a=content:slides", to indicate this is the presentation stream.
Request example:
{"call_type": "WEBRTC", "sdp": "..."}
Request fields:
In direct media call scenarios, the first joining participant can expect an empty SDP in the response
indicating that the far-end is not ready to negotiate media (/ack does not need to be called yet). At a
later time, the client shall receive a new_offer server event containing the SDP.
Default: false
Response example:
{"status": "success", "result": {
"call_uuid": "50ed679d-c622-4c0e-b251-e217f2aa030b",
"sdp": "..."}}
The response contains the SDP of the Pexip node, and a call_uuid. This call_uuid is used to control the call. The ack function must be
called on this call_uuid in order to start media after the SDP has been exchanged and ICE has been completed.
The response may also contain a "turn" array of additional TURN servers to use, if the Enable media relay on TCP port 443 feature is
enabled. A client wanting to use this would need to trigger an ICE restart and send an update message to update the SDP.
overlaytext
Changes the participant name overlay text. The text is only applied if overlay text is enabled on a VMR. It can also change the text of an
audio-only participant.
Request example:
{"text": "The Dude"}
Request fields:
Response: the result is true if successful, false otherwise.
pres_in_mix
Controls whether or not the participant sees presentation in the layout mix (Adaptive Composition layout only).
Request example:
{"state": true}
Request fields:
Response: the result is true if successful, false otherwise.
role
Changes the role of the participant.
Request example:
{"role": "chair"}
Request fields:
Response: the result is true if successful, false otherwise.
fecc
Send Far End Camera Control messaging to the participant.
Note that this does not send FECC to all participants; it can either be used in a gateway call or be sent to a specific participant identified
by the target UUID (as seen in the participant list).
Request fields:
Which means that you could, for example, send a command to pan, tilt and zoom at the same time.
Request example:
{"action": "start", "movement": [{"axis": "pan", "direction": "left"}, {"axis": "zoom", "direction": "in"}],
"timeout": 1000};
Response: the result is true if successful, false otherwise.
buzz
This POST request raises a participant's hand.
Request: empty
Response: the result is true if successful, false otherwise.
clearbuzz
This POST request lowers a participant's hand.
Request: empty
Response: the result is true if successful, false otherwise.
transfer
Transfers a participant to another conference.
The target conference is identified by the alias in "conference_alias", and they will have the specified "role". If the target is PIN-
protected, the PIN for the target role must be specified in the "pin" field.
Request example:
{"role": "guest", "conference_alias": "meet@example.com", "pin": “1234"}
Request fields:
Response: the result is true if successful, false otherwise.
take_floor
This POST request signals that the participant is starting sending full-motion presentation.
Request: empty.
Response: a return code other than 200 indicates that the request for presentation has been denied.
release_floor
This POST request signals that the participant has finished sending full-motion presentation.
Request: empty.
Response: the result is true if successful, false otherwise.
avatar.jpg
This GET request obtains the image to display to represent a conference participant or directory contact.
statistics
Report participant media statistics to Pexip Infinity (direct media only). The client should notify at the period specified by the client_
stats_update_interval in the request_token response.
Example request:
{
"audio": {
"rx_bitrate": 64.4,
"rx_codec": "opus",
"rx_jitter": 2,
"rx_packets_lost": 0,
"rx_packets_received": 914,
"tx_bitrate": 63.728,
"tx_codec": "opus",
"tx_packets_sent": 914,
"tx_rb_jitter": 2,
"tx_rb_packetslost": 0
},
"video": {
"rx_bitrate": 2215.744,
"rx_codec": "VP8",
"rx_fps": 21,
"rx_packets_lost": 0,
"rx_packets_received": 4206,
"rx_resolution": "1280x720",
"tx_bitrate": 2089.296,
"tx_codec": "VP8",
"tx_packets_sent": 3633,
"tx_rb_packetslost": 0,
"tx_resolution": "1280x720"
},
"presentation": {
"rx_packets_lost": 0,
"rx_packets_received": 0,
"tx_bitrate": 989.304,
"tx_codec": "VP8",
"tx_packets_sent": 1714,
"tx_rb_packetslost": 0,
"tx_resolution": "1792x1120"
}
}
Call functions
Using the call_uuid, further operations can be undertaken on the calls as part of the nominated participant.
These call REST URIs take the format:
https://<node_address>/api/client/v2/conferences/<conference_alias>/participants/<participant_uuid>/calls/<call_
uuid>/<request>
where <node_address> is the Conferencing Node, <conference_alias> is an alias of the conference, <participant_uuid> is the uuid of
the participant, and <call_uuid> is the uuid of the call you are controlling. Under this path comes the request, for example:
https://10.0.0.1/api/client/v2/conferences/meet_alice/participants/7f8bdd7f-2d39-4c3f-9236-3e95b21f21a8/calls/c34f35f-1060-
438c-9e87-6c2dffbc9980/disconnect
ack
This POST request starts media for the specified call (WebRTC calls only).
Request: empty.
For direct media calls only: on receiving a new_offer server event, containing the remote SDP, ack should be called with the local SDP,
to complete the offer/answer exchange. Example request:
{"sdp": "..."}
Response: the result is true if successful, false otherwise.
disconnect
This POST request disconnects the specified call.
Request: empty.
Response: the result is true if successful, false otherwise.
dtmf
For a gateway call only, this POST request sends DTMF digits to the remote participant.
Request example:
{"digits": "1234"}
Response: the result is true if successful, false otherwise.
new_candidate
This POST request sends a new ICE candidate if doing trickle ICE.
Request example:
{"candidate": "candidate:1732786348 1 udp 2124262783 2a02:c7f:615…eration 0 ufrag YAeD network-id 2 network-cost
10", "mid": "0", "ufrag": "YAeD", "pwd": "IfZniTlYHipJXEg4quoI00ek"}
Request fields:
Response: the result is true if successful, false otherwise.
update
This POST request sends a new SDP.
Request example:
{"sdp": "..."}
Request fields:
Default: false
Response example:
{"status": "success", "result": "..."}
Server-sent events
Clients can subscribe to an HTTP EventSource which feeds events from the conference as they occur.
To subscribe, open an HTTP connection to:
https://<node_address>/api/client/v2/conferences/<conference_alias>/events?token=<token_id>
where <node_address> is the Conferencing Node, <conference_alias> is an alias of the conference, and <token_id> is the session
token, for example:
https://10.0.0.1/api/client/v2/conferences/meet_alice/events?token=123456
This allows the token to be specified on the URI, since custom headers cannot be added to Event Sources in browsers today. However,
if headers can be added this will be accepted too, and the query parameter will not be required.
Each event contains an event name, and some events may contain a payload of data, which is a JSON object.
presentation_start
This marks the start of a presentation, and includes the information on which participant is presenting, and the presentation source
("video" or "static").
Example data:
{"presenter_name": "Bob", "presenter_uri": "bob@example.com", "source": "video"}
presentation_stop
The presentation has finished.
Data: none
presentation_frame
A new presentation frame is available at:
https://<node_address>/api/client/v2/conferences/<conference_alias>/presentation.jpeg
An alternative image at a higher resolution is also available at:
https://<node_address>/api/client/v2/conferences/<conference_alias>/presentation_high.jpeg
Note that these URLs require the token and the event ID of the presentation_frame event to be present as a header or a query
parameter in order to download the presentation frame, for example:
https://10.0.0.1/api/client/v2/conferences/meet_
alice/presentation.jpeg?id=MTAuNDQuOTkuMl8xOA==&token=b3duZXI9T...etc...2FmGzA%3D
Data: none
participant_create
A new participant has joined the conference.
The JSON object fields include:
Values: "api", "webrtc", "sip", "rtmp", "h323" or "mssip".
(Note that the protocol is always reported as "api" when a Connect app dials in to Pexip Infinity.)
* Empty for Guest participants.
Example data:
{
"buzz_time": 0,
"call_direction": "in",
"call_tag": "def456",
"disconnect_supported": "YES",
"display_name": "Alice",
"encryption": "On",
"external_node_uuid": "",
"fecc_supported": "NO",
"has_media": false,
"is_audio_only_call": "NO",
"is_external": false,
"is_idp_authenticated": false,
"is_muted": "NO",
"is_presenting": "NO",
"is_streaming_conference": false,
"is_video_call": "YES",
"is_video_muted": false,
"local_alias": "meet.alice",
"mute_supported": "YES",
"overlay_text": "Alice",
"presentation_supported": "NO",
"protocol": "api",
"role": "chair",
"rx_presentation_policy": "ALLOW",
"service_type": "conference",
"spotlight": 0,
"start_time": 1441720992,
"transfer_supported": "YES",
"uri": "Infinity_Connect_10.44.21.35",
"uuid": "50b956c8-9a63-4711-8630-3810f8666b04",
"vendor": "Pexip Infinity Connect/2.0.0-25227.0.0 (Windows NT 6.1; WOW64) nwjs/0.12.2 Chrome/41.0.2272.76"
}
participant_update
A participant's properties have changed.
Data: a full JSON object is supplied, as for participant_create.
participant_delete
A participant has left the conference.
Data: the JSON object contains the UUID of the deleted participant, for example:
{"uuid": "65b4af2f-657a-4081-98a8-b17667628ce3"}
participant_sync_begin / participant_sync_end
At the start of the EventSource connection, these two messages start and end the sending of the complete participant list in the form
of participant_create events. This allows a participant that has been temporarily disconnected to re-sync the participant list.
conference_update
Conference properties have been updated. For example:
{"locked": false, "guests_muted": false, "all_muted": false, "presentation_allowed": true, "started": true,
"livecaptions_available": true, "direct_media": false}
layout
The stage layout has changed.
Data: an object containing the following fields:
Example data:
{"view": "1:7",
"participants": ["a0196175-b462-48a1-b95c-f322c3af57c1", "65b4af2f-657a-4081-98a8-b17667628ce3”], "requested_
layout": {"primary_screen": {"chair": "2:21", "guest": "4:0"}}, "overlay_text_enabled": false}
message_received
A chat message has been received.
Data: an object containing the following fields:
Example data:
{"origin": "Alice",
"uuid": "eca55900-274d-498c-beba-2169aad9ce1f",
"type": "text/plain",
"direct": false,
"payload": "Hello World"}
stage
An update to the "stage layout" is available. This declares the order of active speakers, and their voice activity.
Data: an array of objects per active participant. Each participant has the following fields:
Example data:
[
{"stage_index": 0,
"participant_uuid": "a0196175-b462-48a1-b95c-f322c3af57c1",
"vad": 0},
{"stage_index": 1,
"participant_uuid": "65b4af2f-657a-4081-98a8-b17667628ce3",
"vad": 0}
]
call_disconnected
This is sent when a child call has been disconnected (e.g. when a screensharing child call has been closed if presentation has been
stolen by another participant).
Data: contains both the UUID of the child call being disconnected, and the reason for the disconnection if available, e.g.:
{"call_uuid": "50ed679d-c622-4c0e-b251-e217f2aa030b",
"reason": "API initiated participant disconnect"}
disconnect
This is sent when the participant is being disconnected from the Pexip side.
Data: the reason parameter contains a reason for this disconnection, if available, e.g.:
{"reason": "API initiated participant disconnect"}
splash_screen
The client should display a splash screen. For VMRs with direct media enabled, it is the clients’ responsibility to render local screens.
The screen_key uniquely identifies the type of screen the client should display. On receiving the event with no data, the splash screen
should be cleared.
Optionally the client can implement these local splash screens by fetching the theme resources from Pexip Infinity. See theme for more
information.
Example data:
{"screen_key": "direct_media_welcome"} | None
The screen keys may be direct_media_welcome, direct_media_waiting_for_host, direct_media_other_participants_audio_only,
direct_media_escalate, or direct_media_deescalate.
new_offer
Received a SDP offer from the far-end participant (direct media only). The far-end has sent an updated SDP via /calls for the client to
consider. The /ack function must be called in order to start media after the SDP has been exchanged and ICE has been completed.
Example data:
{"sdp": "..."}
update_sdp
Received a SDP update from the far-end participant (direct media only). The far-end has sent an updated SDP via /update for the client
to consider. Typically received for purposes of an ICE restart.
Example data:
{"sdp": "..."}
new_candidate
Received a new ICE candidate from the far-end participant (direct media only). The far-end has sent a new ICE candidate if doing trickle
ICE via /new_candidate for the client to consider.
Example data:
{"candidate": "candidate:1732786348 1 udp 2124262783 2a02:c7f:615…eration 0 ufrag YAeD network-id 2 network-cost
10", "mid": "0", "ufrag": "YAeD", "pwd": "IfZniTlYHipJXEg4quoI00ek"}
peer_disconnect
Indicates that the far-end participant has disconnected (direct media only).
Example data: None
Other miscellaneous requests
Conferencing Node status (maintenance mode)
Load balancers can use the https://<node_address>/api/client/v2/status REST API command to check whether a Conferencing Node
is in maintenance mode, for example:
https://10.0.0.1/api/client/v2/status
If the node is not in maintenance mode, it returns a 200 OK with the following JSON:
{
"status": "success",
"result": "OK"
}
If the node is in maintenance mode, it returns a 503 with the following JSON:
{
"status": "failed",
"result": "Maintenance mode"
}
Changelog
Changes in version 32:
l New overlay_text_enabled field in the layout event.
l New is_idp_authenticated parameter in the participant list / roster object.
Changes in version 31:
l New set_classification_level and get_classification_level conference functions.
l New theme conference control function.
l New message participant function.
l New statistics participant function.
l New server sent events: splash_screen, new_offer, update_sdp, new_candidate, peer_disconnect.
l The request_token request has a new direct_media request field and new responses: direct_media, use_relay_candidates_only,
pex_datachannel_id, client_stats_update_interval.
l New direct_media parameter in conference_status conference function.
l New direct_media parameter in conference_update event.
l New media_type field in calls participant function.
l New ac_presentation_in_mix field on transform_layout function.
l New direct parameter in message_received event.
Changes in version 30:
l New source field in the presentation_start event.
l New plus_n_pip_enabled field on transform_layout function.
l New requested_layout field in the layout event.
Changes in version 29:
l The calls participant function has changed: the present field and the RTMP call_type have been removed.
l Two new participant functions: take_floor and release_floor.
l The request_token response contains information about the Identity Providers that are available for the service.
Changes in version 28:
There are no changes in v28.
Changes in version 27:
l New participant function: pres_in_mix.
l New fecc_supported field on calls and update functions.
More information
For more information about using this API, contact your Pexip authorized support representative.