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

NoVersionUpdated AtNotes
1VCaaS API Documentation V1.0.02023-03-31VCaaS API Documentation V1.0.0 Release
2VCaaS API Documentation V1.0.12023-08-03Updated new VCaaS features as config parameters
3VCaaS API Documentation V1.0.32023-09-20Added meeting host region parameter and in class invitation link
4VCaaS API Documentation V2.0.02023-11-22Added new folders and document v2 endpoints
5VCaaS API Documentation V2.0.12023-12-20Added new recording and UI related classroom API toggles
6VCaaS API Documentation V2.0.22024-01-09Added Lesson Plan API *beta
7VCaaS API Documentation V2.0.32024-01-16Added Webhooks and Callbacks
8VCaaS API Documentation V2.1.02024-01-22Added VCaaS Meeting API v2 endpoints
9VCaaS API Documentation V2.1.12024-02-13Added Embedding VCaaS
10VCaaS API Documentation V2.2.02024-02-29Added Quiz API
11VCaaS API Documentation V2.2.12024-03-22Added Recording Start/End Events on Webhooks and Callbacks
12VCaaS API Documentation V2.2.22024-03-26Added postmessage functionality for pushing meeting audio and video data in iframe embedding method.
13VCaaS API Documentation V2.2.32024-04-09Added Query Meeting Chat Data endpoint
14VCaaS API Documentation V2.2.42024-04-18Added V2 interface for querying meeting recordings and after-class evaluation data
15VCaaS API Documentation V2.3.02024-05-171. 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"
16VCaaS API Documentation V2.3.12024-06-121. Added the enableBrowserUpdatePrompt parameter。
2. Added Webhooks and callback for the teacher clicking End class for all event.
17VCaaS API Documentation V2.3.22024-06-251. Added the enableStudentSendChatFile parameter。
18VCaaS API Documentation V2.3.32024-07-091. Added the enableTeacherOnboarding parameter
2. Added the defaultView parameter
3. Added users entering the waiting room status to User Join/Leave Webhooks

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));
        }

    }
}
Last Updated: