<!--
{
  "availability" : [
    "iOS: 26.0.0 -",
    "iPadOS: 26.0.0 -",
    "macCatalyst: 26.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "CoreTelephony",
  "identifier" : "/documentation/CoreTelephony/CTCellularPlanStatus",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "Core Telephony"
    ],
    "preciseIdentifier" : "c:objc(cs)CTCellularPlanStatus"
  },
  "title" : "CTCellularPlanStatus"
}
-->

# CTCellularPlanStatus

An object that validates tokens for UPI device verification or checks the availability of cellular plans for a phone number.

```
class CTCellularPlanStatus
```

## Overview

This class provides UPI device validation or cellular plan availability checking.

## Perform UPI device validation

To check if the Integrated Circuit Card Identifier (ICCID) on a device is associated with a given token, use the <doc://com.apple.documentation/documentation/MessageUI/MFMessageComposeViewController/setUPIVerificationCodeSendCompletion(_:)> method to configure an instance of a view for Unified Payments Interface (UPI) device validation. When the person sends an SMS, the framework creates a token and maps it to the  <doc://com.apple.documentation/documentation/MessageUI/MFMessageComposeViewController> instance’s associated ICCID. Use this token to determine if changes exist to the underlying ICCID.

Call [`getTokenWithCompletion(_:)`](/documentation/CoreTelephony/CTCellularPlanStatus/getTokenWithCompletion(_:)) to retrieve the token. Your app has 30 seconds from sending the SMS before the framework drops the token. If the SMS fails, the framework revokes the token.

Use [`checkValidity(ofToken:completionHandler:)`](/documentation/CoreTelephony/CTCellularPlanStatus/checkValidity(ofToken:completionHandler:)) to check the status of the token. The method returns `true` if the ICCID is present and turned on.

For more information on configuring an instance for UPI device validation, see <doc://com.apple.documentation/documentation/MessageUI/MFMessageComposeViewController/setUPIVerificationCodeSendCompletion(_:)>.

> Important:
> To use UPI device validation, your app needs the <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.upi-device-validation> entitlement.

### Check cellular plan continuity

To check the status of a cellular plan, use [`requestAuthorization(forPhoneNumber:completion:)`](/documentation/CoreTelephony/CTCellularPlanStatus/requestAuthorization(forPhoneNumber:completion:)) to ask the person for permission to access status information for a phone number. Provide phone numbers in [ITU-T E.164 international format](https://www.itu.int/rec/T-REC-E.164) (for example, `+15550001234`).

After the person grants authorization, the [`getHintForPhoneNumber(_:completion:)`](/documentation/CoreTelephony/CTCellularPlanStatus/getHintForPhoneNumber(_:completion:)) method suggests whether an active cellular plan exists for the phone number by providing:

- [`CTCellularPlanStatusAvailability`](/documentation/CoreTelephony/CTCellularPlanStatusAvailability): An indicator that a cellular plan for the phone number exists on the device
- [`CTCellularPlanStatusAvailabilityConfidence`](/documentation/CoreTelephony/CTCellularPlanStatusAvailabilityConfidence): A confidence level that the plan is active based on recent cellular activity

After the person answers the permission prompt once, your app can query [`getAuthorizationStatus(forPhoneNumber:completion:)`](/documentation/CoreTelephony/CTCellularPlanStatus/getAuthorizationStatus(forPhoneNumber:completion:)) to check for existing authorization without presenting any UI.

## Topics

### Getting and storing a token

[`class func getTokenWithCompletion((String?, (any Error)?) -> Void)`](/documentation/CoreTelephony/CTCellularPlanStatus/getTokenWithCompletion(_:))

Retrieves and stores the token associated with your app.

### Checking the validity of the ICCID

[`class func checkValidity(ofToken: String, completionHandler: (Bool, (any Error)?) -> Void)`](/documentation/CoreTelephony/CTCellularPlanStatus/checkValidity(ofToken:completionHandler:))

Checks the validity of the ICCID associated with the token.

### Requesting phone number authorization

[`class func requestAuthorization(forPhoneNumber: String, completion: (CTCellularPlanStatusAuthorization, (any Error)?) -> Void)`](/documentation/CoreTelephony/CTCellularPlanStatus/requestAuthorization(forPhoneNumber:completion:))

Presents a prompt that asks the person to allow cellular plan checks for their phone number.

[`enum CTCellularPlanStatusAuthorization`](/documentation/CoreTelephony/CTCellularPlanStatusAuthorization)

Constants that indicate the authorization status for accessing cellular plan information for a phone number.

### Checking authorization status

[`class func getAuthorizationStatus(forPhoneNumber: String, completion: (CTCellularPlanStatusAuthorization, (any Error)?) -> Void)`](/documentation/CoreTelephony/CTCellularPlanStatus/getAuthorizationStatus(forPhoneNumber:completion:))

Returns the current authorization status for a phone number without presenting any UI.

### Getting a cellular plan status hint

[`class func getHintForPhoneNumber(String, completion: (CTCellularPlanStatusAvailability, CTCellularPlanStatusAvailabilityConfidence, (any Error)?) -> Void)`](/documentation/CoreTelephony/CTCellularPlanStatus/getHintForPhoneNumber(_:completion:))

Provides an estimate of the system’s confidence of the existence of an active cellular plan for the device’s phone number.

[`enum CTCellularPlanStatusAvailability`](/documentation/CoreTelephony/CTCellularPlanStatusAvailability)

Constants that indicate whether the device has a cellular plan for the given phone number.

[`enum CTCellularPlanStatusAvailabilityConfidence`](/documentation/CoreTelephony/CTCellularPlanStatusAvailabilityConfidence)

Constants that indicate the system’s confidence that the device has a cellular plan for a given phone number.

## Relationships

### Conforms To

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

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

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

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

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

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

### 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)