<!--
{
  "availability" : [
    "iOS: 10.0.0 -",
    "iPadOS: 10.0.0 -",
    "macCatalyst: 10.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 9.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "CallKit",
  "identifier" : "/documentation/CallKit/CXProvider",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "CallKit"
    ],
    "preciseIdentifier" : "c:objc(cs)CXProvider"
  },
  "title" : "CXProvider"
}
-->

# CXProvider

An object that represents a telephony provider.

```
class CXProvider
```

## Overview

A [`CXProvider`](/documentation/CallKit/CXProvider) object is responsible for reporting out-of-band notifications that occur to the system. A VoIP app should create only one instance of [`CXProvider`](/documentation/CallKit/CXProvider) and store it for use globally. A [`CXProvider`](/documentation/CallKit/CXProvider) object is initialized with a [`CXProviderConfiguration`](/documentation/CallKit/CXProviderConfiguration) object to specify the behavior and capabilities of calls. Each provider can specify an object conforming to the [`CXProviderDelegate`](/documentation/CallKit/CXProviderDelegate) protocol to respond to events, such as the call starting, the call being put on hold, or the provider’s audio session being activated.

### Subclassing Notes

[`CXProvider`](/documentation/CallKit/CXProvider) is not intended for subclassing.

## Topics

### Creating New Providers

[`-  initWithConfiguration:`](/documentation/CallKit/CXProvider/init(configuration:))

Initializes a new provider with the specified configuration.

### Setting the Delegate

[`-  setDelegate:queue:`](/documentation/CallKit/CXProvider/setDelegate(_:queue:))

Sets a provider delegate, specifying an optional queue on which to execute delegate methods.

### Accessing Provider Attributes

[`configuration`](/documentation/CallKit/CXProvider/configuration)

The configuration of the provider.

### Accessing Pending Transaction and Call Actions

[`pendingTransactions`](/documentation/CallKit/CXProvider/pendingTransactions)

Incomplete transactions.

[`-  pendingCallActionsOfClass:withCallUUID:`](/documentation/CallKit/CXProvider/pendingCallActions(of:withCall:))

Returns all call actions in any pending transactions of the specified class for the specified call identifier that are incomplete.

### Reporting Calls

[`-  reportNewIncomingCallWithUUID:update:completion:`](/documentation/CallKit/CXProvider/reportNewIncomingCall(with:update:completion:))

Reports a new incoming call with the specified unique identifier to the provider.

[`+  reportNewIncomingVoIPPushPayload:completion:`](/documentation/CallKit/CXProvider/reportNewIncomingVoIPPushPayload(_:completion:))

Reports a new incoming call after your notification service extension decrypts a VoIP call request.

  <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.usernotifications.filtering>

[`-  reportOutgoingCallWithUUID:startedConnectingAtDate:`](/documentation/CallKit/CXProvider/reportOutgoingCall(with:startedConnectingAt:))

Reports to the provider that an outgoing call with the specified unique identifier started connecting at a particular time.

[`-  reportOutgoingCallWithUUID:connectedAtDate:`](/documentation/CallKit/CXProvider/reportOutgoingCall(with:connectedAt:))

Reports to the provider that an outgoing call with the specified unique identifier finished connecting at a particular time.

[`-  reportCallWithUUID:updated:`](/documentation/CallKit/CXProvider/reportCall(with:updated:))

Reports to the provider that an active call updated its information.

[`-  reportCallWithUUID:endedAtDate:reason:`](/documentation/CallKit/CXProvider/reportCall(with:endedAt:reason:))

Reports to the provider that a call with the specified identifier ended at a given date for a particular reason.

### Invalidating a Provider

[`-  invalidate`](/documentation/CallKit/CXProvider/invalidate())

Invalidates the provider and completes all active calls with an error.

### Handling Errors

[`CXCallEndedReason`](/documentation/CallKit/CXCallEndedReason)

The reason that a call ended.

[`CXError`](/documentation/CallKit/CXError)

Error codes for the CallKit errors.

[`Code`](/documentation/CallKit/CXError/Code)

Error codes for the CallKit errors.

[`CXErrorCodeIncomingCallError`](/documentation/CallKit/CXErrorCodeIncomingCallError-swift.struct)

Codes for errors that occur during incoming calls.

[`Code`](/documentation/CallKit/CXErrorCodeIncomingCallError-swift.struct/Code)

Codes for errors that occur during incoming calls.

[`CXErrorCodeNotificationServiceExtensionError`](/documentation/CallKit/CXErrorCodeNotificationServiceExtensionError-swift.struct)

Errors that can occur when reporting new, incoming VoIP calls.

[`CXErrorDomain`](/documentation/CallKit/CXErrorDomain)

The domain for CallKit errors.

[`CXErrorDomainIncomingCall`](/documentation/CallKit/CXErrorDomainIncomingCall)

The domain for errors that occur during incoming calls.

## Relationships

### Conforms To

[`Hashable`](/documentation/Swift/Hashable)

[`CVarArg`](/documentation/Swift/CVarArg)

[`NSObjectProtocol`](/documentation/ObjectiveC/NSObjectProtocol)

[`Equatable`](/documentation/Swift/Equatable)

[`CustomStringConvertible`](/documentation/Swift/CustomStringConvertible)

[`CustomDebugStringConvertible`](/documentation/Swift/CustomDebugStringConvertible)

### Inherits From

[`NSObject-swift.class`](/documentation/ObjectiveC/NSObject-swift.class)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)