React SDK API Reference

Complete API reference for the BaxCloud React SDK

BaxCloudClient

Constructor

Initialize the BaxCloud client

new BaxCloudClient(config: BaxCloudConfig)

Parameters

  • config.projectId (string) - Your BaxCloud project ID
  • config.apiKey (string) - Your BaxCloud API key

Example

client.ts
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 name
  • options.liveType (BaxcloudLiveType) - Type of live session
  • options.maxParticipants (number, optional) - Maximum participants
  • options.emptyTimeout (number, optional) - Timeout in seconds when room is empty
  • options.metadata (Record<string, unknown>, optional) - Room metadata

Example

create-room.ts
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 name
  • options.participant (BaxcloudUser) - Participant information
  • options.liveType (BaxcloudLiveType) - Type of live session
  • options.roomMetadata (Record<string, unknown>, optional) - Room metadata
  • options.canJoinWithNoHost (boolean, optional) - Allow joining without host (default: true)

Example

get-token.ts
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

connect.ts
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(): BaxcloudConnectionState

Returns

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 name
  • options.message (string) - Message content
  • options.sender (BaxcloudUser, optional) - Sender user information

Example

send-message.ts
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 record
  • options.filepath (string, optional) - Custom file path for the recording
  • options.fileType ('MP4' | 'OGG' | 'WEBM', optional) - Recording file type (default: 'MP4')

Example

start-recording.ts
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

list-active-recordings.ts
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

list-recordings.ts
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 ID
  • expiresIn (number, optional) - URL expiration time in seconds (default: 3600)

Example

download-recording.ts
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
): () => void

onUserLeft

onUserLeft(
  handler: BaxcloudUserLeftHandler
): () => void

onMessageReceived

onMessageReceived(
  handler: BaxcloudMessageReceivedHandler
): () => void

onMediaStarted

onMediaStarted(
  handler: BaxcloudMediaStartedHandler
): () => void

onMediaStopped

onMediaStopped(
  handler: BaxcloudMediaStoppedHandler
): () => void

onConnected

onConnected(
  handler: () => void
): () => void

onDisconnected

onDisconnected(
  handler: () => void
): () => void

onReconnecting

onReconnecting(
  handler: () => void
): () => void

onReconnected

onReconnected(
  handler: () => void
): () => void

Event Handler Example

event-handlers.ts
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

app.tsx
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(): BaxCloudClient

Example

use-client.tsx
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

video-room.tsx
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

participants-list.tsx
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

tracks-list.tsx
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

init-controller.ts
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(): boolean

isCoHost

isCoHost(userId?: string): boolean

transferHost

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 | null

kickParticipant

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(): boolean

enableCamera

enableCamera(): Promise<void>

disableCamera

disableCamera(): Promise<void>

isCameraEnabled

isCameraEnabled(): boolean

muteAll

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(): boolean

Chat System

sendChatMessage

sendChatMessage(
  message: string
): Promise<void>

getChatHistory

getChatHistory(): BaxcloudChatMessage[]

clearChatHistory

clearChatHistory(): void

startTyping

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 invite
  • options.roomName (string) - Room name
  • options.callType (BaxcloudLiveType) - Type of call
  • options.message (string, optional) - Optional message
  • options.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(): BaxcloudNetworkQuality

Returns

{
  connectionQuality: 'excellent' | 'good' | 'poor' | 'unknown';
  rtt?: number;
  jitter?: number;
  packetLoss?: number;
}

getParticipantQuality

getParticipantQuality(
  userId: string
): BaxcloudNetworkQuality

Call Management

getCallHistory

getCallHistory(): BaxcloudCallRecord[]

getCall

getCall(
  callId: string
): BaxcloudCallRecord | undefined

endCall

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 | undefined

Breakout 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 | undefined

Emoji 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(): boolean

Background Effects

applyBackgroundEffect

applyBackgroundEffect(
  effect: BaxcloudBackgroundEffect
): Promise<void>

Effect Parameters

  • effect.effectId (string) - Effect identifier
  • effect.effectType ('blur' | 'virtual' | 'image' | 'video') - Effect type
  • effect.intensity (number, optional) - Effect intensity
  • effect.imageUrl (string, optional) - Image URL for image effect
  • effect.videoUrl (string, optional) - Video URL for video effect

removeBackgroundEffect

removeBackgroundEffect(): Promise<void>

getCurrentBackgroundEffect

getCurrentBackgroundEffect(): BaxcloudBackgroundEffect | null

Accessibility

updateAccessibilitySettings

updateAccessibilitySettings(
  settings: Partial<BaxcloudAccessibilitySettings>
): void

Settings 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(): BaxcloudAccessibilitySettings

registerKeyboardShortcut

registerKeyboardShortcut(
  key: string,
  action: () => void
): () => void

Returns 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
}