curl --request PUT \
--url https://{host}/api/v1/conference-rooms/{id}/members \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"items": [
{
"extension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"role": "participant"
}
]
}
'const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
items: [{extension_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', role: 'participant'}]
})
};
fetch('https://{host}/api/v1/conference-rooms/{id}/members', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{host}/api/v1/conference-rooms/{id}/members"
payload = { "items": [
{
"extension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"role": "participant"
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text){
"created_at": "2023-11-07T05:31:56Z",
"enabled": true,
"end_when_moderator_leaves": true,
"exemptions": [
{
"extension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"number": "<string>",
"role": "participant"
}
],
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"live_members": 123,
"max_members": 123,
"members": [
{
"extension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"number": "<string>",
"role": "participant",
"virtual": true
}
],
"minutes_email": "<string>",
"moderator_pin": "<string>",
"name": "<string>",
"number": "<string>",
"numbers": [
"<string>"
],
"organisation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"participant_pin": "<string>",
"record": true,
"wait_for_moderator": true
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}Set a room's default members
Replaces the whole set: the organisation’s extensions rung when the room opens, each in its role (participant by default, or moderator). A busy, unregistered or unanswered member is tried again a minute later, five times, then given up on; one who joined and dropped off while the room is up is rung again. A member that never made it shows in the session’s history with the reason. A virtual agent’s extension may be a member; what it does in the room is the AI module’s. Every extension must be the room’s organisation’s. Answers the room.
curl --request PUT \
--url https://{host}/api/v1/conference-rooms/{id}/members \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"items": [
{
"extension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"role": "participant"
}
]
}
'const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
items: [{extension_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', role: 'participant'}]
})
};
fetch('https://{host}/api/v1/conference-rooms/{id}/members', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{host}/api/v1/conference-rooms/{id}/members"
payload = { "items": [
{
"extension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"role": "participant"
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text){
"created_at": "2023-11-07T05:31:56Z",
"enabled": true,
"end_when_moderator_leaves": true,
"exemptions": [
{
"extension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"number": "<string>",
"role": "participant"
}
],
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"live_members": 123,
"max_members": 123,
"members": [
{
"extension_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"number": "<string>",
"role": "participant",
"virtual": true
}
],
"minutes_email": "<string>",
"moderator_pin": "<string>",
"name": "<string>",
"number": "<string>",
"numbers": [
"<string>"
],
"organisation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"participant_pin": "<string>",
"record": true,
"wait_for_moderator": true
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}Authorizations
Every request sends Authorization: Bearer <token>. The token is either a panel session (a JWT from /auth/login, 12 hours) or an API key ft_<id>_<secret>. An API key is accepted only from an address on its IP allowlist (403 ip_not_allowed otherwise; 403 ip_allowlist_required for an old key that has none), is limited to its rate per minute (429 rate_limited with Retry-After; X-RateLimit-Limit/Remaining/Reset on every response), and at most 60 call placements a minute.
Path Parameters
Body
Show child attributes
Show child attributes
Response
The room, with its default members.
A dial-in bridge the organisation owns. Migration 0115 says why the PINs are stored and returned in clear.
The organisation's extensions that dial the room number and are seated without a PIN, each in its role. Set as a whole with PUT /conference-rooms/{id}/exemptions.
Show child attributes
Show child attributes
People in the room right now.
0 = no limit beyond the node's capacity.
Default members: the organisation's extensions rung when the room opens, or as soon as they are free while it is up. virtual marks a virtual agent's extension, whose conduct in the room is the AI module's. Set as a whole with PUT /conference-rooms/{id}/members.
Show child attributes
Show child attributes
Comma-separated addresses a session's minutes go to, when the AI module writes them.
4-10 digits, or empty for a room with no moderator role.
2-8 digits: what an extension dials, and what a caller keys at a shared 'conference' number.
Phone numbers pointed at this room alone.
4-10 digits, or empty: no PIN, dial the number and you are in.
Record every session of this room.
Participants hear hold music until a moderator has joined.