Overview
What is VCaaS API?
VCaaS Open API is created by HiLink, and available for third-party organization to integrate. Using VCaaS Open API, the organization can create HiLink virtual classrooms. In a HiLink Classroom, users can enjoy various features including real-time audio and video communication, chat, screen sharing, document presentation, whiteboard, and rewards.
VCaaS Meeting API
VCaaS Meeting API is a set of interfaces used to operate meeting-related functionalities. Users can use the VCaaS Meeting API to create, end, delete meetings, associate meetings with files, fetch meeting recordings, and fetch meeting data.
VCaaS File API
VCaaS File API is a set of interfaces for operating file-related functions. Users can use VCaaS File API to obtain file upload addresses, query documents, and delete documents.
Release Notes
No | Version | Updated At | Notes |
---|---|---|---|
1 | VCaaS API Documentation V1.0.0 | 2023-03-31 | VCaaS API Documentation V1.0.0 Release |
2 | VCaaS API Documentation V1.0.1 | 2023-08-03 | Updated new VCaaS features as config parameters |
3 | VCaaS API Documentation V1.0.3 | 2023-09-20 | Added meeting host region parameter and in class invitation link |
4 | VCaaS API Documentation V2.0.0 | 2023-11-22 | Added new folders and document v2 endpoints |
5 | VCaaS API Documentation V2.0.1 | 2023-12-20 | Added new recording and UI related classroom API toggles |
6 | VCaaS API Documentation V2.0.2 | 2024-01-09 | Added Lesson Plan API *beta |
7 | VCaaS API Documentation V2.0.3 | 2024-01-16 | Added Webhooks and Callbacks |
8 | VCaaS API Documentation V2.1.0 | 2024-01-22 | Added VCaaS Meeting API v2 endpoints |
9 | VCaaS API Documentation V2.1.1 | 2024-02-13 | Added Embedding VCaaS |
10 | VCaaS API Documentation V2.2.0 | 2024-02-29 | Added Quiz API |
11 | VCaaS API Documentation V2.2.1 | 2024-03-22 | Added Recording Start/End Events on Webhooks and Callbacks |
12 | VCaaS API Documentation V2.2.2 | 2024-03-26 | Added postmessage functionality for pushing meeting audio and video data in iframe embedding method. |
13 | VCaaS API Documentation V2.2.3 | 2024-04-09 | Added Query Meeting Chat Data endpoint |
14 | VCaaS API Documentation V2.2.4 | 2024-04-18 | Added V2 interface for querying meeting recordings and after-class evaluation data |
15 | VCaaS API Documentation V2.3.0 | 2024-05-17 | 1. Added AI Lesson Plan API. 2. Added Delete Recording Endpoint. 3. Added VCaaS Lesson Plan API. 4. Renamed "lessonPlanUuids" in the Create Meeting API to "lessonPlanIds" |
16 | VCaaS API Documentation V2.3.1 | 2024-06-12 | 1. Added the enableBrowserUpdatePrompt parameter。 2. Added Webhooks and callback for the teacher clicking End class for all event. |
17 | VCaaS API Documentation V2.3.2 | 2024-06-25 | 1. Added the enableStudentSendChatFile parameter。 |
18 | VCaaS API Documentation V2.3.3 | 2024-07-09 | 1. Added the enableTeacherOnboarding parameter 2. Added the defaultView parameter 3. Added users entering the waiting room status to User Join/Leave Webhooks |
19 | VCaaS API Documentation V2.3.4 | 2024-08-14 | 1. Added Update Meeting API to v2 endpoints |
20 | VCaaS API Documentation V2.3.5 | 2024-08-23 | 1. Update AI Service domain |
21 | VCaaS API Documentation V2.3.6 | 2024-09-30 | 1. Added the knowledgeBaseUrl parameter to Create/Update Meeting API (v2 endpoints) |
Authentication
Summary
When using the VCaaS Open API, you need to pass the Authorization information in the header of each request, in order to authenticate the identity of the API caller. Authorization is encrypted and generated by the AccessKey
and SecretKey
provided by VCaaS.
If you want to experience the powerful features of VCaaS Open API, please contact the HiLink administrator, and we will help you create a dedicated test account. Contact us: hello@hilink.co
Access Key and Secret Key example
AccessKey:4mBmzWmNt9Dy5een
SecretKey:ef8d8fec05064779b3e0243cdae744e8
How to Generate Authorization with Java Example
package llc.hilink.platform.api;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.time.Instant;
import java.util.Base64;
/**
* use AccessKey and SecretKey to generate Authorization example
*/
public class BasicAuthorizationExample {
private static final String DOT = ".";
private static final String SEPARATOR = ":";
private static final String CHARSET = "UTF-8";
private static final String SHA_256 = "SHA-256";
private static final String HMAC_256 = "HmacSHA256";
private static final Base64.Encoder BASE64_ENCODER = Base64.getUrlEncoder();
public static void main(String[] args) throws Exception {
String accessKey = "4mBmzWmNt9Dy5een";
String secretKey = "ef8d8fec05064779b3e0243cdae744e8";
// Expiration Date
long expireAt = Instant.now().plusSeconds(3000).toEpochMilli();
String authorization = new BasicAuthorization(accessKey, secretKey, expireAt).build();
authorization = String.format("%s %s", "Basic", authorization);
System.out.println(authorization);
}
private static String hmac256(String content, String secretKey) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(new HexBinaryAdapter().unmarshal(secretKey), HMAC_256);
Mac mac = Mac.getInstance(secretKeySpec.getAlgorithm());
mac.init(secretKeySpec);
byte[] bytes = mac.doFinal(content.getBytes(CHARSET));
return new HexBinaryAdapter().marshal(bytes).toLowerCase();
}
private static String sha256(String input) throws Exception {
byte[] bytes = MessageDigest.getInstance(SHA_256).digest(input.getBytes(CHARSET));
return new HexBinaryAdapter().marshal(bytes).toLowerCase();
}
static class BasicAuthorization {
private final String accessKey;
private final String secretKey;
private long expireAt = 300L;
public BasicAuthorization(String accessKey, String secretKey) {
this.accessKey = accessKey;
this.secretKey = secretKey;
}
public BasicAuthorization(String accessKey, String secretKey, long expireAt) {
this.accessKey = accessKey;
this.secretKey = secretKey;
this.expireAt = expireAt;
}
public String build() throws Exception {
String access = accessKey + DOT + expireAt;
String secret = hmac256(access, sha256(secretKey));
return BASE64_ENCODER.encodeToString((access + SEPARATOR + secret).getBytes(StandardCharsets.UTF_8));
}
}
}