---
title: "What does Play Billing FEATURE_NOT_SUPPORTED (-2) mean?"
description: "FEATURE_NOT_SUPPORTED (-2) means the Play Store on the device does not support the Billing feature you called. It cannot be retried; check isFeatureSupported() first."
url: https://revenuedot.app/docs/errors/play-billing-feature-not-supported
---

# What does Play Billing FEATURE_NOT_SUPPORTED (-2) mean?

Play Billing FEATURE_NOT_SUPPORTED (-2) means the Google Play Billing feature you called is not supported on this device.

## Quick facts

| | |
|---|---|
| Error | `BillingClient.BillingResponseCode.FEATURE_NOT_SUPPORTED` (-2) |
| Where | Google Play Billing Library (`BillingResult.responseCode`) |
| What the vendor says | The requested feature is not supported by the Play Store on the current device. |

## Cause

- Google says the cause is likely an old Play Store version on the user's device. Its example is a device that does not support in-app messaging.
- Google lists it among the non-retriable responses: trying again on the same device gives the same answer.
- It is a property of the device and Play Store version, not of your app's configuration.

## Fix

1. Call `billingClient.isFeatureSupported(FeatureType)` before you use an optional feature, and only use the feature when the response is `OK`.
2. Do not retry the call. Hide the feature or use a fallback for that device.
3. Do not show a purchase error to the person: the product itself may still be sellable without the optional feature.
4. Keep the Billing Library current, because newer versions know more feature types.

## Example

```kotlin
import com.android.billingclient.api.BillingClient

// Ask before you use an optional feature. FEATURE_NOT_SUPPORTED cannot be fixed by retrying.
fun supportsInAppMessaging(billingClient: BillingClient): Boolean {
    if (!billingClient.isReady) return false
    val result = billingClient.isFeatureSupported(BillingClient.FeatureType.IN_APP_MESSAGING)
    return result.responseCode == BillingClient.BillingResponseCode.OK
}
```

*Not compiled: this Kotlin snippet was not built here because the docs repo has no Kotlin or Android toolchain. Check it against your Play Billing Library or SDK version before you ship it.*

## How the RevenueDot SDK reports it

The RevenueDot `purchases-android` fork maps `FEATURE_NOT_SUPPORTED` to `PurchasesErrorCode.PurchaseNotAllowedError` (code 3), the same code it uses for `BILLING_UNAVAILABLE` and `ITEM_NOT_OWNED`. See [what purchaseNotAllowedError means](https://revenuedot.app/docs/errors/sdk-purchase-not-allowed-error.md).

## Related

- [What does Play Billing BILLING_UNAVAILABLE (3) mean?](https://revenuedot.app/docs/errors/play-billing-billing-unavailable.md)
- [What does Play Billing DEVELOPER_ERROR (5) mean?](https://revenuedot.app/docs/errors/play-billing-developer-error.md)
- [What does purchaseNotAllowedError (code 3) mean in the purchases SDK?](https://revenuedot.app/docs/errors/sdk-purchase-not-allowed-error.md)

## Source

- [Google: BillingResponseCode.FEATURE_NOT_SUPPORTED](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode)
- [Google: Handle BillingResult response codes](https://developer.android.com/google/play/billing/errors)
- [RevenueDot purchases-android: google/errors.kt (how the SDK maps response codes)](https://github.com/revenuedot/purchases-android/blob/revenuedot/main-patches/purchases/src/main/kotlin/com/revenuecat/purchases/google/errors.kt)

Checked: 2026-10-03
