<!--
{
  "availability" : [
    "iOS: 14.5.0 -",
    "iPadOS: 14.5.0 -",
    "macCatalyst: 14.5.0 -",
    "visionOS: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "CallKit",
  "identifier" : "/documentation/CallKit/CXProvider/reportNewIncomingVoIPPushPayload(_:completion:)",
  "metadataVersion" : "0.1.0",
  "role" : "Type Method",
  "symbol" : {
    "kind" : "Type Method",
    "modules" : [
      "CallKit"
    ],
    "preciseIdentifier" : "c:objc(cs)CXProvider(cm)reportNewIncomingVoIPPushPayload:completion:"
  },
  "title" : "reportNewIncomingVoIPPushPayload(_:completion:)"
}
-->

# reportNewIncomingVoIPPushPayload(_:completion:)

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

```
class func reportNewIncomingVoIPPushPayload(_ dictionaryPayload: [AnyHashable : Any], completion: (@Sendable ((any Error)?) -> Void)? = nil)
```

## Parameters

`dictionaryPayload`

A dictionary containing additional data about the incoming call. All keys and values in the dictionary must implement the <doc://com.apple.documentation/documentation/Foundation/NSSecureCoding> protocol.

`completion`

A block that CallKit executes after allowing or disallowing the call. CallKit executes the block on a private serial queue. The completion handler takes the following parameter:

- `error`: When the system disallows a call, it sets this parameter to an error object that contains information about why it disallowed the call; otherwise it’s `nil`.

## Discussion

> Important:
> You can call this method from synchronous code using a completion handler, as shown on this page, or you can call it as an asynchronous method that has the following declaration:
> 
> ```swift
> class func reportNewIncomingVoIPPushPayload(_ dictionaryPayload: [AnyHashable : Any]) async throws
> ```
> 
> For information about concurrency and asynchronous code in Swift, see <doc://com.apple.documentation/documentation/Swift/calling-objective-c-apis-asynchronously>.

Call this method when your notification service extension receives an encrypted VoIP call request. The system then launches your app and calls your <doc://com.apple.documentation/documentation/PushKit/PKPushRegistryDelegate/pushRegistry(_:didReceiveIncomingPushWith:for:completion:)> method. From this point, the app handles the call just like any incoming VoIP call. For more information, see [Sending End-to-End Encrypted VoIP Calls](/documentation/CallKit/sending-end-to-end-encrypted-voip-calls).

To call this method, your notification service extension must have the <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.usernotifications.filtering> entitlement.

> Important:
> Only call this method when your server can’t determine whether an outgoing notification is a request for a VoIP call or some other data (such as a text message) due to metadata encryption. If your server knows that the outgoing content is a VoIP call, send a <doc://com.apple.documentation/documentation/PushKit/PKPushType/voIP> push notification instead. For more information, see <doc://com.apple.documentation/documentation/PushKit>.

---

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)