> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-22654f5b-docs-v6-beta2-flutter-uikit.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Calling

> Add voice and video calling to your React Native app with CometChat. Choose between Ringing, Call Session, or Standalone implementations.

<Info>
  **Quick Reference** - Install the Calls SDK and initialize:

  ```javascript theme={null}
  npm install @cometchat/calls-sdk-react-native

  // Initialize CometChatCalls
  const callAppSettings = new CometChatCalls.CallAppSettingsBuilder()
    .setAppId("APP_ID")
    .setRegion("REGION")
    .build();
  await CometChatCalls.init(callAppSettings);
  ```
</Info>

<Note>
  Available via: [SDK](/sdk/react-native/calling-overview) | [REST API](/rest-api/calls) | [UI Kits](/ui-kit/react-native/call-features)
</Note>

## Overview

CometChat provides voice and video calling capabilities for your React Native application. This guide helps you choose the right implementation approach based on your use case.

## Prerequisites

1. CometChat SDK installed and configured. See the [Setup](/sdk/react-native/setup-sdk) guide.
2. CometChat Calls SDK added to your project:

```bash theme={null}
npm install @cometchat/calls-sdk-react-native
```

For detailed setup instructions, see the [Calls SDK Setup](/sdk/react-native/calling-setup) guide.

## Choose Your Implementation

CometChat offers three approaches to implement calling:

<CardGroup cols={3}>
  <Card title="Ringing" icon="phone-volume" href="/sdk/react-native/default-call">
    Complete calling flow with incoming/outgoing call UI, accept/reject functionality, and call notifications.
  </Card>

  <Card title="Call Session" icon="video" href="/sdk/react-native/direct-call">
    Direct call session management. Use with Ringing flow or for custom call initiation logic.
  </Card>

  <Card title="Standalone Calling" icon="phone-flip" href="/sdk/react-native/standalone-calling">
    Calls SDK only implementation without the Chat SDK dependency.
  </Card>
</CardGroup>

### Ringing

Use this when you need a complete calling experience with:

* Incoming and outgoing call UI
* Call accept/reject/cancel functionality
* Call notifications via push notifications
* Integration with CometChat messaging

**Flow:** Initiate call → Receiver gets notified → Accept/Reject → Start session

[Get started with Ringing →](/sdk/react-native/default-call)

### Call Session

Use this when you need to:

* Start a call session after the Ringing flow completes
* Implement custom call initiation logic with your own UI
* Join participants to a shared session using a session ID

**Flow:** Generate token → Start session → Manage call → End session

[Get started with Call Session →](/sdk/react-native/direct-call)

### Standalone Calling

Use this when you want:

* Calling functionality without the Chat SDK
* Your own user authentication system
* Minimal SDK footprint

**Flow:** Get auth token via REST API → Generate call token → Start session

[Get started with Standalone Calling →](/sdk/react-native/standalone-calling)

## Features

<CardGroup cols={2}>
  <Card title="Recording" icon="circle-dot" href="/sdk/react-native/recording">
    Record audio and video calls for playback, compliance, or archival purposes.
  </Card>

  <Card title="Video View Customization" icon="sliders" href="/sdk/react-native/video-view-customisation">
    Customize the video call UI layout, participant tiles, and visual appearance.
  </Card>

  <Card title="Presenter Mode" icon="presentation-screen" href="/sdk/react-native/presenter-mode">
    Enable screen sharing and presentation capabilities during calls.
  </Card>

  <Card title="Call Logs" icon="list" href="/sdk/react-native/call-logs">
    Retrieve and display call history including duration, participants, and status.
  </Card>

  <Card title="Session Timeout" icon="clock" href="/sdk/react-native/session-timeout">
    Configure automatic call termination when participants are inactive.
  </Card>
</CardGroup>

<AccordionGroup>
  <Accordion title="Best Practices">
    * Initialize `CometChatCalls` on app startup, right after `CometChat.init()`
    * Use the Ringing flow for user-to-user calls where you need push notification support
    * Use Call Session when building custom call UIs or conference-style experiences
    * Always request camera and microphone permissions before initiating a call
    * Handle call errors gracefully and provide user-friendly feedback
  </Accordion>

  <Accordion title="Troubleshooting">
    * **Calls not connecting:** Verify the Calls SDK is initialized after the Chat SDK and that both use the same App ID and Region
    * **No audio/video:** Check that camera and microphone permissions are granted on both Android and iOS
    * **Push notifications not arriving:** Ensure push notification setup is complete — see the [Push Notifications](/sdk/react-native/push-notification) guide
    * **iOS build fails:** Run `pod install` in the `ios` directory after adding the Calls SDK dependency
    * **Android minSdkVersion error:** Set `minSdkVersion` to 24 or higher in your `build.gradle`
  </Accordion>
</AccordionGroup>

## Next Steps

<CardGroup cols={2}>
  <Card title="Calls SDK Setup" icon="gear" href="/sdk/react-native/calling-setup">
    Install dependencies, configure permissions, and initialize the Calls SDK.
  </Card>

  <Card title="Ringing Flow" icon="phone-volume" href="/sdk/react-native/default-call">
    Implement the complete incoming/outgoing call experience.
  </Card>

  <Card title="Call Session" icon="video" href="/sdk/react-native/direct-call">
    Manage call sessions with custom initiation logic.
  </Card>

  <Card title="Call Logs" icon="list" href="/sdk/react-native/call-logs">
    Retrieve and display call history for your users.
  </Card>
</CardGroup>
