API
API
SQMeeting Server provides public REST API for 3rdparty integration.
Table of Contents
- API
- Table of Contents
- Introduction
- Common Section
- Meeting Schedule
- Meeting Control
- Mute All
- Unmute All
- Mute One or More
- Unmute One or More
- Stop Meeting
- Get Meeting List
- Get Meeting Detail
- Start Text Overlay
- Stop Text Overlay
- Set Lecturer
- Unset Lecturer
- Disconnect One or More Participants
- Disconnect All Participants
- Cascading
- Update Active Meeting
- Update Participant Info in Meeting
- Start Recording
- Stop Recording
- Start Live Streaming
- Stop Live Streaming
- Pin for Participant
- Unpin for Participant
- Pin for Meeting
- Unpin for Meeting
- Layout Change for Participant
- Request Unmute
- Allow Unmute
- Lock Meeting
- Unlock Meeting
- User
- Meeting Room
- System
Introduction
Frtc Server provides a lot of public APIs for 3rd party (app, sdk or IT managment system) to integrate, customize and enhance Frtc Solution.
Common Section
HTTP Common Headers
Header | Value | Desc |
---|---|---|
Content-Type | application/json | The media type of the resource |
User-Agent | FrtcMeeting/3.4.2 platform platform_version | e.g. FrtcMeeting/3.4.2 windows 10.0.19045 |
HTTP URL Common Parameters
Signed In Query client_id=$client_id&token=$user_token
Unsigned In Query client_id=$client_id
Example1: /api/v1/meeting_schedule?client_id=$client_id&token=$user_token
Example2: /api/v1/user/sign_in?client_id=$client_id
Meeting Schedule
Create Non-recurrence Meeting
POST /api/v1/meeting_schedule
Request:
//for instant meeting
{
"meeting_type":"instant",
"meeting_name":"XX's meeting"
}
//for reservation meeting
{
"meeting_type": "instant/reservation",
"meeting_name": "Someone's meeting",
"meeting_description": "XXXXXX",
"meeting_number": "{meeting_number}",
"call_rate_type": "2048K",
"schedule_start_time": 1641525383726,
"schedule_end_time": 1641532583788,
"meeting_password": "111111",
"invited_users_detail": [
{
"user_id": "xxxxxxx_user_uuid",
"username": "test1",
"real_name": "Test1"
}
],
"owner_name": "{owner_name}",
"reservation_id": "{reservation_id}",
"recurrence_gid": "{recurrence_gid}",
"recurrence_type": "NONE",
"generate_live_url": true,
"live_passcode": "888888",
"live_meeting_url": "https://xxxx/live/84ef2357-b460-4957-a41a
2c48aa8d68c6",
"time_to_join": 30,
"meeting_url": "https://xxxxx/j/oP5idgfEmt0p"
}
Response:
//http 200
{
"meeting_type": "instant/reservation",
"meeting_name": "Someone's meeting",
"meeting_description": "XXXXXX",
"meeting_number": "{meeting_number}",
"call_rate_type": "2048K",
"schedule_start_time": 1641525383726,
"schedule_end_time": 1641532583788,
"meeting_password": "111111",
"invited_users_detail": [
{
"user_id": "{user_id}",
"username": "test1",
"real_name": "Test1"
}
],
"owner_name": "$owner_name",
"reservation_id": "{reservation_id}",
"recurrence_gid": "{recurrence_gid}",
"recurrence_type": "NONE",
"generate_live_url": true,
"live_passcode": "888888",
"live_meeting_url": "https://xxxxx/live/84ef2357-b460-4957-a41a
2c48aa8d68c6",
"time_to_join": 30,
"meeting_url": "https://xxxxx/j/oP5idgfEmt0p"
}
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Field | Type | Desc |
---|---|---|
meeting_type | int | the type of meeting |
meeting_name | string | name of the meeting |
Response:
Field | Type | Desc |
---|---|---|
meeting_number | int | the number of the meeting |
Update Non-recurrence Meeting
POST /api/v1/meeting_schedule/{reservation_id}
Request:
//for instant meeting can not be updated
//only for reservation meeting
{
"meeting_type": "reservation",
"meeting_name": "$meeting_name",
"meeting_description": "XXXXXX",
"call_rate_type": "2048K",
"schedule_start_time": "{schedule_start_time}",
"schedule_end_time": "{schedule_end_time}",
"meeting_room_id": null,
"meeting_password": "123456",
"invited_users":["{user_id}"],
"mute_upon_entry": "DISABLE/ENABLE",
"guest_dial_in": true/false,
"watermark": false/true,
"watermark_type": "single "
}
Response:
//http 200 or 204
empty
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Delete Scheduled Meeting
DELETE /api/v1/meeting_schedule/{reservation_id}
Request:
Response:
//http 200 or 204
empty
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Get Scheduled Meeting Detail
GET /api/v1/meeting_schedule/{reservation_id}
Request:
Response:
//http 200
{
"reservation_id": "{reservation_id}",
"meeting_type": "reservation",
"meeting_name": "{meeting_name}",
"call_rate_type": "4096K",
"recurrence_gid": "{recurrence_gid}",
"schedule_start_time": "{schedule_start_time}",
"schedule_end_time": "{schedule_end_time}",
"recurrence_type": "NONE/DAILY/WEEKLY/MONTHLY",
"meeting_room_id": "xxxxxxxxxxxx",
"meeting_password": "{meeting_password}",
"invited_users_detail":
[
{
"user_id": "{user_id}",
"username": "test1",
"real_name": "Test1"
}
],
"mute_upon_entry": "DISABLE/ENABLE",
"guest_dial_in": true,
"watermark": false,
"watermark_type": "single",
"owner_id": "{user_id}",
"owner_name": "xxxxx",
"meeting_url": ""
}
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Response:
Get Scheduled Meetings
GET /api/v1/meeting_schedule
Query page_num={number}&page_size={page_size}&filter={search_key}
Request:
Response:
//http 200
{
"scheduled_meetings":
[
{
"meeting_number": "12345678",
"meeting_name": "scheduled meeting name",
"meeting_type": "reservation",
"meeting_password": "{password}",
"reservation_id": "",
"recurrence_gid": "",
"schedule_start_time": "{schedule_start_time}",
"schedule_end_time": "{schedule_end_time}",
"recurrence_type": "NONE",
"owner_id": "{owner_id}",
"owner_name": "{owner_name}",
"meeting_url": "https://xxxx/j/oP5idgfEmt0p"
}
]
}
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Response:
Create a Recurrence Meeting
GET /api/v1/meeting_schedule/recurrence
Request:
{
"recurrence_type": "DAILY",
"meeting_name": "Someone's meeting",
"meeting_description": "XXXXXX",
"schedule_start_time": 1641525383726,
"schedule_end_time": 1641532583788,
"meeting_room_id": null,
"call_rate_type": "2048K",
"meeting_password": "111111",
"invited_users":
[
"{user_id}"
],
"mute_upon_entry": "DISABLE",
"guest_dial_in": true,
"watermark": false,
"watermark_type": "single",
"meeting_type": "recurrence",
"recurrenceInterval": 2,
"recurrenceStartTime": 1698215400000,
"recurrenceEndTime": 1698219000000,
"recurrenceStartDay": 1698215400000,
"recurrenceEndDay": 1700927999000
}
Response:
//http 200
{
"meeting_type": "recurrence",
"meeting_name": "Someone's meeting",
"meeting_description": "XXXXXX",
"meeting_number": "{meeting_number}",
"call_rate_type": "2048K",
"schedule_start_time": 1641525383726,
"schedule_end_time": 1641532583788,
"meeting_password": "111111",
"invited_users_detail":
[
{
"user_id": "{user_id}",
"username": "test1",
"real_name": "Test1"
}
],
"owner_name": "{owner_name}",
"reservation_id": "{reservation_id}",
"recurrence_gid": "{recurrence_gid}",
"recurrence_type": "NONE",
"meeting_url": "https://xxxxx/j/oP5idgfEmt0p"
}
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Response:
Update a Recurrence Meeting
GET /api/v1/meeting_schedule/recurrence/{id}
Request:
{
"recurrence_type": "DAILY",
"meeting_description": "XXXXXX",
"schedule_start_time": 1641525383726,
"schedule_end_time": 1641532583788,
"meeting_room_id": null,
"call_rate_type": "2048K",
"meeting_password": "111111",
"invited_users":
[
"{user_id}"
],
"mute_upon_entry": "DISABLE",
"guest_dial_in": true,
"watermark": false,
"watermark_type": "single",
"meeting_type": "recurrence",
"recurrenceInterval": 2,
"recurrenceStartTime": 1698215400000,
"recurrenceEndTime": 1698219000000,
"recurrenceStartDay": 1698215400000,
"recurrenceEndDay": 1700927999000
}
Response:
//http 200 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Response:
Get Recurrence Meetings
GET /api/v1/meeting_schedule/recurrence/{group_id}
Query page_num={number}&page_size={page_size}&filter={search_key}
Request:
Response:
//http 200
{
"scheduled_meetings":
[
{
"meeting_number": "12345678",
"meeting_name": "scheduled meeting name",
"meeting_type": "recurrence",
"meeting_password": "{password}",
"reservation_id": "{reservation_id}",
"recurrence_gid": "{recurrence_gid}",
"schedule_start_time": "{schedule_start_time}",
"schedule_end_time": "{schedule_end_time}",
"recurrence_type": "NONE",
"owner_id": "{owner_id}",
"owner_name": "{owner_name}",
"meeting_url": "https://xxxxx/j/oP5idgfEmt0p"
}
]
}
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Response:
Meeting Control
Mute All
POST /api/v1/meeting/{meeting_number}/mute_all
Request:
{
"allow_self_unmute": true,
"exclusions":
[
"$client_id"
]
}
Response:
//http 200 or 204
empty
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Field | Type | Desc |
---|---|---|
allow_self_unmute | string | Updated name of the resource |
exclusions | long | excluded the ids of client |
Response:
Unmute All
POST /api/v1/meeting/$meeting_number/unmute_all
Request:
Response:
//http 200 or 204
empty
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Mute One or More
POST /api/v1/meeting/{meeting_number}/mute
Request:
{
"allow_self_unmute": true,
"participants":
[
"{client_id}"
]
}
Response:
//http 200 or 204
empty
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Unmute One or More
POST /api/v1/meeting/{meeting_number}/unmute
Request:
{
"participants":
[
"{client_id}"
]
}
Response:
//http 200 or 204
empty
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Stop Meeting
POST /api/v1/meeting/{meeting_number}/stop
Request:
{
"rejoin": true
}
Response:
//http 200 or 204
empty
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Get Meeting List
POST /api/v1/meeting
Request:
Response:
//http 200
{
"meetings":
[
{
"meeting_number": "{meeting_number}",
"meeting_name": "{meeting_name}",
"start_time": 1698215400000,
"status": "STARTED",
"owner_id": "{user_id}",
"owner_name": "{owner_name}",
"locked": false
}
]
}
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Get Meeting Detail
POST /api/v1/meeting/{meeting_number}
Request:
Response:
//http 200
{
"meeting_number": "{meeting_number}",
"meeting_name": "{meeting_name",
"start_time": 1698219000000,
"meeting_password": "{meeting_password}",
"status": "STARTED",
"owner_id": "{owner_id}",
"owner_name": "{owner_name}",
"guest_dial_in": true,
"watermark": false,
"locked": false,
"participants":
[
{
"client_uuid": "{client_id}",
"name": "xxxx",
"type": "GUEST",
"mute_video": false,
"mute_audio": false,
"lecture": false
}
]
}
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Start Text Overlay
POST /api/v1/meeting/{meeting_number}/overlay
Request:
{
"content": "Test Overlay Text!",
"repeat": 5,
"position": 100,
"enable_scroll": true
}
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Stop Text Overlay
DELETE /api/v1/meeting/{meeting_number}/overlay
Request:
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Set Lecturer
POST /api/v1/meeting/{meeting_number}/lecturer
Request:
{
"lecturer": "{client_id}"
}
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Unset Lecturer
DELETE /api/v1/meeting/{meeting_number}/lecturer
Request:
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Disconnect One or More Participants
DELETE /api/v1/meeting/{meeting_number}/disconnect
Request:
{
"participants":
[
"{client_id}"
]
}
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Disconnect All Participants
DELETE /api/v1/meeting/{meeting_number}/disconnect_all
Request:
{
"participants":
[
"{client_id}"
]
}
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Cascading
POST /api/v1/meeting/{meeting_number}/cascading
Request:
{
"avc_call_params":
[
{
"protocol": "H.323",
"name": "RMXMeeting",
"uri": "$IP##123",
"call_rate": "4096"
}
],
"frtc_call_params":
{
"meeting_number": "123456",
"password": "111111"
}
}
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Update Active Meeting
POST /api/v1/meeting/{meeting_number}
Request:
{
"end_time": 1641532583788
}
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Update Participant Info in Meeting
POST /api/v1/meeting/{meeting_number}/participant
Request:
{
"client_id": "{client_id}",
"display_name": "Tom Cruise"
}
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Start Recording
POST /api/v1/meeting/{meeting_number}/recording
Request:
{
"meeting_number": "123456"
}
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Stop Recording
DELETE /api/v1/meeting/{meeting_number}/recording
Request:
{
"meeting_number": "123456"
}
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Start Live Streaming
DELETE /api/v1/meeting/{meeting_number}/live
Request:
{
"meeting_number": "123456",
"live_password": "111111"
}
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Stop Live Streaming
DELETE /api/v1/meeting/{meeting_number}/live
Request:
{
"meeting_number": "123456"
}
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Pin for Participant
POST /api/v1/meeting/{meeting_number}/participant/{target_client_id}/pin
Request:
{
"participants":
[
"client_id"
]
}
// *only for gateway client
// *participants either can be set to one other participants or empty
// *please use layout change api for layout control.
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Unpin for Participant
DELETE /api/v1/meeting/{meeting_number}/participant/{pinned_client_id}/pin
Request:
{
"participants":
[
"client_id"
]
}
// *only for gateway client
// *participants either can be set to one other participants or empty
// *please use layout change api for layout control.
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Pin for Meeting
POST /api/v1/meeting/{meeting_number}/pin
Request:
{
"participants":
[
"client_id"
]
}
// *only for ongoing meeting
// *participants either can be set to other participants.
// *currently, only one participant can be pinned for one meeting.
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Unpin for Meeting
DELETE /api/v1/meeting/{meeting_number}/pin
Request:
{
"participants":
[
"client_id"
]
}
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Layout Change for Participant
POST /api/v1/meeting/{meeting_number}/participant/{viewer_client_id}/layout_change
Request:
{
"max_views": 9,
"layout": "auto"
}
// *max_views: 1、9
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Request Unmute
POST /api/v1/meeting/$meeting_number/request_unmute
Request:
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Allow Unmute
POST /api/v1/meeting/$meeting_number/allow_unmute
Request:
{
"participants":
[
"$claimer_client_uuid"
]
}
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Lock Meeting
POST /api/v1/meeting/$meeting_number/lock?
Request:
{
"participants":
[
"$claimer_client_uuid"
]
}
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
Unlock Meeting
DELETE /api/v1/meeting/$meeting_number/lock?
Request:
{
"participants":
[
"$claimer_client_uuid"
]
}
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Response:
User
Sign In
POST /api/v1/user/sign_in
SignedIn False
Request:
{
"username": "xxxx",
"secret": "xxxxx"
}
Response:
//http 200 or 204
{
"user_token": "xxxx",
"user_id": "{user_id}",
"username": "{username}",
"email": "{email}",
"real_name": "{realName}",
"department": "{depart}",
"mobile": "{mobile}",
"password_expired_time": 60,
"security_level": "HIGH",
"role":
[
"Normal"
]
}
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Response:
Field | Type | Desc |
---|---|---|
user_token | int | the token of user |
Sign Out
POST /api/v1/user/sign_out
Request:
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Response:
User Info
POST /api/v1/user/info
Request:
Response:
//http 200 or 204
{
"user_token": "xxxx",
"user_id": "{user_id}",
"username": "{username}",
"email": "{email}",
"real_name": "{realname}",
"department": "{depart}",
"mobile": "{mobile}",
"password_expired_time": 60,
"security_level": "HIGH",
"role":
[
"Normal"
]
}
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Response:
Update Password
POST /api/v1/user/password
Request:
{
"secret_old": "xxxxx",
"secret_new": "xxxxx"
}
// *secret_old:sha1(old_password+salt)
// *secret_new:sha1(new_password+salt)
Response:
//http 200 or 204
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Response:
Find Users by Page
POST /api/v1/user/public/users
Query page_num={number}&page_size={page_size}&filter={search_key}
SignedIn False
Request:
Response:
//http 200 or 204
{
"users":
[
{
"user_id": "{user_id}",
"username": "{username}",
"real_name": "{real_name}"
}
],
"total_page_num": 1,
"total_size": 10
}
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Response:
Create User
POST /api/v1/user/users?
Request:
{
"username": "{username}",
"real_name": "{real_name}",
"email": "{email}",
"department": "{depart}",
"mobile": "{mobile}",
"role": "Normal",
"secret": "secret_token"
}
// *available for SystemAdmin
// *username is global unique
// *role:Normal、MeetingOperator、SystemAdmin
Response:
//http 200 or 204
{
"user_id": "{user_id}"
}
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Response:
Update User
POST /api/v1/user/users/$user_id?
Request:
{
"real_name": "{real_name}",
"email": "{email}",
"department": "{depart}",
"mobile": "{mobile}",
"role": "Normal",
"secret": "secret_token"
}
// *available for SystemAdmin
// *username is global unique
// *role:Normal、MeetingOperator、SystemAdmin
// *secret is optional.
Response:
//http 200 or 204
{
"user_id": "{user_id}"
}
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Response:
Meeting Room
Query Meeting List
POST /api/v1/meeting_room
Request:
Response:
//http 200 or 204
{
"meeting_rooms":
[
{
"meeting_room_id": "{meeting_room_id}",
"meeting_number": "{meeting_number}",
"meetingroom_name": "{meetingroom_name}",
"meeting_password": "{password}",
"owner_id": "{owner_id}",
"owner_name": "{owner_name}",
"creator_id": "{creator_id}",
"creator_name": "{creator_name}",
"created_time": 1635425714772
}
]
}
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Response:
System
Get System Capacity
POST /api/v1/system/capacity
Request:
Response:
//http 200 or 204
{
"gateway":
{
"max_calls": 20,
"current_calls": 0
},
"system":
{
"max_calls": 1000,
"max_users": 50,
"current_calls": 1,
"current_users": 48,
"status": "authorized"
}
}
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Response:
Get System Version
POST /api/v1/system/version
Request:
Response:
//http 200 or 204
{
"version": "3.4.0-16888"
}
//other
{
"error": "{error_meesage}",
"errorCode": "{error_code}"
}
Description:
Request:
Response: