React SDK API Reference
Complete API reference for the BaxCloud React SDK
Table of Contents
BaxCloudClient
Constructor
Initialize the BaxCloud client
new BaxCloudClient(config: BaxCloudConfig)Parameters
config.projectId(string) - Your BaxCloud project IDconfig.apiKey(string) - Your BaxCloud API key
Example
1import { BaxCloudClient } from '@baxcloud/react-sdk';
2
3const client = new BaxCloudClient({
4 projectId: 'your-project-id',
5 apiKey: 'your-api-key',
6});Room Management
createRoom
Create a new room
createRoom(options: BaxcloudCreateRoomOptions): Promise<BaxcloudRoomInfo>Parameters
options.roomName(string) - Unique room nameoptions.liveType(BaxcloudLiveType) - Type of live sessionoptions.maxParticipants(number, optional) - Maximum participantsoptions.emptyTimeout(number, optional) - Timeout in seconds when room is emptyoptions.metadata(Record<string, unknown>, optional) - Room metadata
Example
1const room = await client.createRoom({
2 roomName: 'meeting-123',
3 liveType: 'video_conference',
4 maxParticipants: 50,
5});
6
7console.log('Room created:', room.roomName);deleteRoom
Delete a room
deleteRoom(roomName: string): Promise<void>Example
await client.deleteRoom('meeting-123');listRooms
List all rooms in the project
listRooms(): Promise<BaxcloudRoomInfo[]>Example
const rooms = await client.listRooms();
console.log('Total rooms:', rooms.length);getRoom
Get information about a specific room
getRoom(roomName: string): Promise<BaxcloudRoomInfo>Example
const room = await client.getRoom('meeting-123');
console.log('Room info:', room);getToken
Get an access token for joining a room
getToken(options: BaxcloudRoomOptions): Promise<BaxcloudTokenResponse>Parameters
options.roomName(string) - Room nameoptions.participant(BaxcloudUser) - Participant informationoptions.liveType(BaxcloudLiveType) - Type of live sessionoptions.roomMetadata(Record<string, unknown>, optional) - Room metadataoptions.canJoinWithNoHost(boolean, optional) - Allow joining without host (default: true)
Example
1const token = await client.getToken({
2 roomName: 'meeting-123',
3 participant: {
4 userId: 'user-1',
5 name: 'Alice',
6 avatarUrl: 'https://example.com/avatar.jpg',
7 isHost: true,
8 },
9 liveType: 'video_conference',
10});
11
12console.log('Access token:', token.token);Connection Methods
connect
Connect to a room
connect(options: BaxcloudRoomOptions): Promise<Room>Example
1const room = await client.connect({
2 roomName: 'meeting-123',
3 participant: {
4 userId: 'user-1',
5 name: 'Alice',
6 isHost: true,
7 },
8 liveType: 'video_conference',
9});
10
11console.log('Connected to room');disconnect
Disconnect from the current room
disconnect(): Promise<void>Example
await client.disconnect();
console.log('Disconnected from room');getConnectionState
Get the current connection state
getConnectionState(): BaxcloudConnectionStateReturns
One of: 'disconnected' | 'connecting' | 'connected' | 'reconnecting' | 'failed'
Example
const state = client.getConnectionState();
console.log('Connection state:', state);Media Controls
enableCamera
enableCamera(): Promise<void>disableCamera
disableCamera(): Promise<void>enableMicrophone
enableMicrophone(): Promise<void>disableMicrophone
disableMicrophone(): Promise<void>enableScreenShare
enableScreenShare(): Promise<void>disableScreenShare
disableScreenShare(): Promise<void>Messaging
sendRealtimeMessage
Send a real-time message to the room
sendRealtimeMessage(options: BaxcloudSendRealtimeMessageOptions): Promise<void>Parameters
options.roomName(string) - Room nameoptions.message(string) - Message contentoptions.sender(BaxcloudUser, optional) - Sender user information
Example
1await client.sendRealtimeMessage({
2 roomName: 'meeting-123',
3 message: 'Hello everyone!',
4 sender: {
5 userId: 'user-1',
6 name: 'Alice',
7 },
8});Recording APIs
startRecording
Start recording a room
startRecording(options: BaxcloudStartRecordingOptions): Promise<BaxcloudRecordingInfo>Parameters
options.roomName(string) - Room name to recordoptions.filepath(string, optional) - Custom file path for the recordingoptions.fileType('MP4' | 'OGG' | 'WEBM', optional) - Recording file type (default: 'MP4')
Example
1const recording = await client.startRecording({
2 roomName: 'my-room',
3 fileType: 'MP4',
4});
5
6console.log('Recording started:', recording.egressId);Note: Recording events (recording.started, recording.completed, recording.failed) are automatically sent to your configured webhooks in the dashboard if webhooks are enabled for your project.
stopRecording
Stop an active recording
stopRecording(egressId: string): Promise<{ success: true }>Example
await client.stopRecording(recording.egressId);
console.log('Recording stopped');listActiveRecordings
List all active recordings/egresses
listActiveRecordings(roomName?: string): Promise<BaxcloudRecordingInfo[]>Example
1// List all active recordings
2const activeRecordings = await client.listActiveRecordings();
3
4// List active recordings for a specific room
5const roomRecordings = await client.listActiveRecordings('my-room');listRecordings
List all recordings with pagination support
listRecordings(options?: BaxcloudListRecordingsOptions): Promise<BaxcloudRecordingListResponse>Parameters
options.status(string, optional) - Filter by status ('STARTED' | 'COMPLETED' | 'FAILED')options.page(number, optional) - Page number (default: 1)options.limit(number, optional) - Items per page (default: 10)
Example
1const recordings = await client.listRecordings({
2 status: 'COMPLETED',
3 page: 1,
4 limit: 20,
5});
6
7console.log('Recordings:', recordings.items);
8console.log('Total:', recordings.meta.total);getRecording
Get detailed information about a specific recording
getRecording(recordingId: string): Promise<BaxcloudRecordingInfo>Example
const recording = await client.getRecording('recording-123');
console.log('Recording status:', recording.status);
console.log('File URL:', recording.fileUrl);getRecordingDownloadUrl
Get a temporary download URL for a recording file
getRecordingDownloadUrl(recordingId: string, expiresIn?: number): Promise<{ downloadUrl: string; expiresIn: number }>Parameters
recordingId(string) - Recording IDexpiresIn(number, optional) - URL expiration time in seconds (default: 3600)
Example
1const { downloadUrl, expiresIn } = await client.getRecordingDownloadUrl('recording-123', 7200);
2console.log('Download URL (expires in 2 hours):', downloadUrl);Event Handlers
All event handlers return an unsubscribe function for cleanup.
onUserJoined
onUserJoined(
handler: BaxcloudUserJoinedHandler
): () => voidonUserLeft
onUserLeft(
handler: BaxcloudUserLeftHandler
): () => voidonMessageReceived
onMessageReceived(
handler: BaxcloudMessageReceivedHandler
): () => voidonMediaStarted
onMediaStarted(
handler: BaxcloudMediaStartedHandler
): () => voidonMediaStopped
onMediaStopped(
handler: BaxcloudMediaStoppedHandler
): () => voidonConnected
onConnected(
handler: () => void
): () => voidonDisconnected
onDisconnected(
handler: () => void
): () => voidonReconnecting
onReconnecting(
handler: () => void
): () => voidonReconnected
onReconnected(
handler: () => void
): () => voidEvent Handler Example
1import { useEffect } from 'react';
2import { useBaxCloud } from '@baxcloud/react-sdk';
3
4function MyComponent() {
5 const client = useBaxCloud();
6
7 useEffect(() => {
8 // Subscribe to events
9 const unsubscribeJoined = client.onUserJoined((user) => {
10 console.log('User joined:', user.name);
11 });
12
13 const unsubscribeLeft = client.onUserLeft((user) => {
14 console.log('User left:', user.name);
15 });
16
17 // Clean up on unmount
18 return () => {
19 unsubscribeJoined();
20 unsubscribeLeft();
21 };
22 }, [client]);
23
24 return <div>My Component</div>;
25}BaxCloudProvider
Props
React context provider for BaxCloud client
interface BaxCloudProviderProps {
projectId: string;
apiKey: string;
children: ReactNode;
}Usage
1import { BaxCloudProvider } from '@baxcloud/react-sdk';
2
3function App() {
4 return (
5 <BaxCloudProvider
6 projectId="your-project-id"
7 apiKey="your-api-key"
8 >
9 <YourApp />
10 </BaxCloudProvider>
11 );
12}Hooks
useBaxCloud
Get the BaxCloud client instance from context
useBaxCloud(): BaxCloudClientExample
1import { useBaxCloud } from '@baxcloud/react-sdk';
2
3function MyComponent() {
4 const client = useBaxCloud();
5
6 const createRoom = async () => {
7 await client.createRoom({
8 roomName: 'my-room',
9 liveType: 'video_call',
10 });
11 };
12
13 return <button onClick={createRoom}>Create Room</button>;
14}useBaxCloudRoom
Hook for managing room connection state
useBaxCloudRoom(options: BaxcloudRoomOptions | null): {
room: Room | null;
connectionState: BaxcloudConnectionState;
error: Error | null;
connect: () => Promise<void>;
disconnect: () => Promise<void>;
enableCamera: () => Promise<void>;
disableCamera: () => Promise<void>;
enableMicrophone: () => Promise<void>;
disableMicrophone: () => Promise<void>;
enableScreenShare: () => Promise<void>;
disableScreenShare: () => Promise<void>;
}Example
1import { useBaxCloudRoom } from '@baxcloud/react-sdk';
2import { useEffect } from 'react';
3
4function VideoRoom() {
5 const {
6 room,
7 connectionState,
8 connect,
9 disconnect,
10 enableCamera,
11 disableCamera,
12 } = useBaxCloudRoom({
13 roomName: 'my-room',
14 participant: {
15 userId: 'user-1',
16 name: 'John Doe',
17 isHost: true,
18 },
19 liveType: 'video_call',
20 });
21
22 useEffect(() => {
23 connect();
24 return () => disconnect();
25 }, []);
26
27 if (connectionState !== 'connected') {
28 return <div>Connecting...</div>;
29 }
30
31 return (
32 <div>
33 <h2>Video Call</h2>
34 <button onClick={enableCamera}>Enable Camera</button>
35 <button onClick={disableCamera}>Disable Camera</button>
36 <button onClick={disconnect}>Leave</button>
37 </div>
38 );
39}useBaxCloudParticipants
Hook that returns all participants in the room
useBaxCloudParticipants(room: Room | null): Participant[]Example
1import { useBaxCloudRoom, useBaxCloudParticipants } from '@baxcloud/react-sdk';
2
3function ParticipantsList() {
4 const { room } = useBaxCloudRoom({
5 roomName: 'my-room',
6 participant: { userId: 'user-1', name: 'John' },
7 liveType: 'video_conference',
8 });
9
10 const participants = useBaxCloudParticipants(room);
11
12 return (
13 <div>
14 <h3>Participants ({participants.length})</h3>
15 <ul>
16 {participants.map((p) => (
17 <li key={p.identity}>{p.name || p.identity}</li>
18 ))}
19 </ul>
20 </div>
21 );
22}useBaxCloudTracks
Hook that returns all tracks (audio/video) in the room
useBaxCloudTracks(room: Room | null): (RemoteTrack | LocalTrack)[]Example
1import { useBaxCloudRoom, useBaxCloudTracks } from '@baxcloud/react-sdk';
2
3function TracksList() {
4 const { room } = useBaxCloudRoom({
5 roomName: 'my-room',
6 participant: { userId: 'user-1', name: 'John' },
7 liveType: 'video_call',
8 });
9
10 const tracks = useBaxCloudTracks(room);
11
12 return (
13 <div>
14 <h3>Active Tracks: {tracks.length}</h3>
15 </div>
16 );
17}BaxCloudRoomController
Overview
Singleton controller for centralized room management
Access the controller via BaxCloudRoomController.instance
Initialization
1import { BaxCloudRoomController, useBaxCloud } from '@baxcloud/react-sdk';
2import { useEffect } from 'react';
3
4function App() {
5 const client = useBaxCloud();
6 const controller = BaxCloudRoomController.instance;
7
8 useEffect(() => {
9 controller.init(client);
10 }, [client]);
11
12 return <div>App</div>;
13}Host/Co-Host Management
isHost
isHost(): booleanisCoHost
isCoHost(userId?: string): booleantransferHost
transferHost(
targetUserId: string
): Promise<void>Host only
promoteToCoHost
promoteToCoHost(
userId: string
): Promise<void>Host only
demoteFromCoHost
demoteFromCoHost(
userId: string
): Promise<void>Host only
getCoHosts
getCoHosts(): string[]Participant Management
getParticipants
getParticipants(): Participant[]getParticipant
getParticipant(
userId: string
): Participant | nullkickParticipant
kickParticipant(
userId: string,
reason?: string
): Promise<void>Host/Co-host only
pinParticipant
pinParticipant(
userId: string
): Promise<void>unpinParticipant
unpinParticipant(
userId: string
): Promise<void>getPinnedParticipants
getPinnedParticipants(): string[]spotlightParticipant
spotlightParticipant(
userId: string
): Promise<void>Host/Co-host only
unspotlightParticipant
unspotlightParticipant(
userId: string
): Promise<void>Host/Co-host only
getSpotlightedParticipants
getSpotlightedParticipants(): string[]Audio/Video Controls
muteMicrophone
muteMicrophone(): Promise<void>unmuteMicrophone
unmuteMicrophone(): Promise<void>isMicrophoneMuted
isMicrophoneMuted(): booleanenableCamera
enableCamera(): Promise<void>disableCamera
disableCamera(): Promise<void>isCameraEnabled
isCameraEnabled(): booleanmuteAll
muteAll(): Promise<void>Host only
unmuteAll
unmuteAll(): Promise<void>Host only
muteParticipant
muteParticipant(
userId: string
): Promise<void>Host/Co-host only
unmuteParticipant
unmuteParticipant(
userId: string
): Promise<void>Host/Co-host only
Screen Sharing
enableScreenShare
enableScreenShare(): Promise<void>disableScreenShare
disableScreenShare(): Promise<void>isScreenShareEnabled
isScreenShareEnabled(): booleanChat System
sendChatMessage
sendChatMessage(
message: string
): Promise<void>getChatHistory
getChatHistory(): BaxcloudChatMessage[]clearChatHistory
clearChatHistory(): voidstartTyping
startTyping(): Promise<void>Auto-stops after 3 seconds
stopTyping
stopTyping(): Promise<void>getTypingIndicators
getTypingIndicators(): BaxcloudTypingIndicator[]Invitation System
sendCallInvitation
sendCallInvitation(
options: BaxcloudInvitationOptions
): Promise<{ success: boolean; invitationId: string }>Parameters
options.to(string[]) - Array of user IDs to inviteoptions.roomName(string) - Room nameoptions.callType(BaxcloudLiveType) - Type of calloptions.message(string, optional) - Optional messageoptions.roomUrl(string, optional) - Optional room URL
acceptCallInvitation
acceptCallInvitation(
invitationId: string
): Promise<void>declineCallInvitation
declineCallInvitation(
invitationId: string
): Promise<void>cancelCallInvitation
cancelCallInvitation(
invitationId: string
): Promise<void>Raise Hand
raiseHand
raiseHand(): Promise<void>lowerHand
lowerHand(userId?: string): Promise<void>getRaisedHands
getRaisedHands(): BaxcloudRaisedHand[]Network Quality
getNetworkQuality
getNetworkQuality(): BaxcloudNetworkQualityReturns
{
connectionQuality: 'excellent' | 'good' | 'poor' | 'unknown';
rtt?: number;
jitter?: number;
packetLoss?: number;
}getParticipantQuality
getParticipantQuality(
userId: string
): BaxcloudNetworkQualityCall Management
getCallHistory
getCallHistory(): BaxcloudCallRecord[]getCall
getCall(
callId: string
): BaxcloudCallRecord | undefinedendCall
endCall(): Promise<void>Polling/Q&A
createPoll
createPoll(
question: string,
options: string[]
): Promise<string>Host/Co-host only. Returns poll ID
respondToPoll
respondToPoll(
pollId: string,
selectedOption: string
): Promise<void>endPoll
endPoll(pollId: string): Promise<void>Host/Co-host only
getActivePolls
getActivePolls(): BaxcloudPoll[]getPoll
getPoll(
pollId: string
): BaxcloudPoll | undefinedBreakout Rooms
createBreakoutRoom
createBreakoutRoom(
roomName: string,
participantIds: string[]
): Promise<string>Host/Co-host only. Returns room ID
joinBreakoutRoom
joinBreakoutRoom(
roomId: string
): Promise<void>leaveBreakoutRoom
leaveBreakoutRoom(
roomId: string
): Promise<void>getBreakoutRooms
getBreakoutRooms(): BaxcloudBreakoutRoom[]getBreakoutRoom
getBreakoutRoom(
roomId: string
): BaxcloudBreakoutRoom | undefinedEmoji Reactions
sendEmojiReaction
sendEmojiReaction(
emoji: string
): Promise<void>getRecentEmojiReactions
getRecentEmojiReactions(): BaxcloudEmojiReaction[]Waiting Room
approveWaitingRoomParticipant
approveWaitingRoomParticipant(
userId: string
): Promise<void>Host/Co-host only
rejectWaitingRoomParticipant
rejectWaitingRoomParticipant(
userId: string
): Promise<void>Host/Co-host only
getWaitingRoomParticipants
getWaitingRoomParticipants(): BaxcloudWaitingRoomParticipant[]Host/Co-host only
Picture-in-Picture
enablePIP
enablePIP(): Promise<void>disablePIP
disablePIP(): Promise<void>isPIPEnabled
isPIPEnabled(): booleanBackground Effects
applyBackgroundEffect
applyBackgroundEffect(
effect: BaxcloudBackgroundEffect
): Promise<void>Effect Parameters
effect.effectId(string) - Effect identifiereffect.effectType('blur' | 'virtual' | 'image' | 'video') - Effect typeeffect.intensity(number, optional) - Effect intensityeffect.imageUrl(string, optional) - Image URL for image effecteffect.videoUrl(string, optional) - Video URL for video effect
removeBackgroundEffect
removeBackgroundEffect(): Promise<void>getCurrentBackgroundEffect
getCurrentBackgroundEffect(): BaxcloudBackgroundEffect | nullAccessibility
updateAccessibilitySettings
updateAccessibilitySettings(
settings: Partial<BaxcloudAccessibilitySettings>
): voidSettings Parameters
settings.enableSubtitles(boolean, optional)settings.enableClosedCaptions(boolean, optional)settings.fontSize('small' | 'medium' | 'large' | 'xlarge', optional)settings.highContrast(boolean, optional)settings.reduceMotion(boolean, optional)
getAccessibilitySettings
getAccessibilitySettings(): BaxcloudAccessibilitySettingsregisterKeyboardShortcut
registerKeyboardShortcut(
key: string,
action: () => void
): () => voidReturns unregister function
getKeyboardShortcuts
getKeyboardShortcuts(): Map<string, string>Type Definitions
BaxcloudLiveType
type BaxcloudLiveType =
| 'audio_call'
| 'video_call'
| 'audio_conference'
| 'video_conference'
| 'live_streaming'
| 'webinar'
| 'screen_share'
| 'recording';BaxcloudConnectionState
type BaxcloudConnectionState =
| 'disconnected'
| 'connecting'
| 'connected'
| 'reconnecting'
| 'failed';BaxcloudUser
interface BaxcloudUser {
userId: string;
name: string;
avatarUrl?: string;
isHost?: boolean;
metadata?: Record<string, unknown>;
}BaxcloudRoomOptions
interface BaxcloudRoomOptions {
roomName: string;
participant: BaxcloudUser;
liveType: BaxcloudLiveType;
roomMetadata?: Record<string, unknown>;
canJoinWithNoHost?: boolean; // Default: true
}