SDK error · code 23

configurationError (error code 23): Configuration error

What it means

configurationError (code 23) means your setup does not line up: none of the offering's products could be fetched from the store, an offering has no products, or the backend answered 7000 (invalid platform). Most often the product IDs in your offering do not match App Store Connect or Play Console. Compare the IDs, the API key's platform and the offering, then reload.

Code

23

iOS (Swift)

ErrorCode.configurationError

Android (Kotlin)

PurchasesErrorCode.ConfigurationError

Causes

Why the SDK returns configurationError

  • iOS: none of the products in your offerings could be fetched from App Store Connect, or from the StoreKit configuration file if one is in use. The SDK's own message says so (OfferingsManager.swift).
  • An offering exists but has no products for this app's store, or the API key belongs to a store that has no products registered.
  • iOS simulator: a known issue with iOS 18.4 simulators makes product requests fail. The SDK suggests another iOS version.
  • The backend answered 7000 (invalid platform), 7255 (could not create alias) or 8077 (cannot alias to an authenticated user). Android also maps 7230 (Play invalid package name) here (BackendErrorCode.swift, errors.kt).
  • Android: workflows or other optional features were requested but are not enabled.
Backend codeMeaning
7000Invalid platform: the request does not apply to this store or app.
7255Could not create alias.
8077Cannot alias to an authenticated user (iOS mapping).
7230Play Store invalid package name (Android mapping).

Fix

How to fix configurationError

  1. 01

    Compare product IDs

    The product ID in the offering must equal the store's product ID exactly. A Google subscription matches its subscription ID or <subscription id>:<base plan id>. Check that each product is approved and ready to sell.

  2. 02

    Check the key matches the platform

    Use the iOS app's public key in the iOS build, and the Android app's key in the Android build.

  3. 03

    Check the offering

    Mark an offering as current, and add this app's products to its packages. See Why are my offerings empty?

  4. 04

    Try a different simulator or a device

    If only the iOS 18.4 simulator fails, test on a real device or another iOS version.

  5. 05

    Read the SDK's message

    The error text says which of the cases above applies. Turn on debug logs to see it in full.

In your app

How to handle it in code

  • Do not retry. The setup stays wrong until you fix it.
  • Show a neutral "purchases are not available right now" message and alert yourself. This is not the customer's fault.
  • Do not grant access. Customers who already paid keep the access the SDK has cached.
Match the errorSwift · Kotlin
// Swift
do {
  let result = try await Purchases.shared.purchase(package: package)
} catch let error as ErrorCode where error == .configurationError {
  // handle configuration error
}

// Kotlin
if (error.code == PurchasesErrorCode.ConfigurationError) { /* ... */ }

On RevenueDot: RevenueDot answers HTTP 400 with code 7000 when a secret-key receipt post has no X-Platform header, when a store action does not exist for the app's store, when a hosted checkout is asked for a package that has no web product, and when purchases-js asks for its own Web Billing checkout with an rcb_ key, which RevenueDot does not have. Offerings point at products by their store identifier, so a mismatch there leaves the SDK with no products. See common problems.

FAQ

configurationError: questions people ask

Why are my RevenueCat offerings empty?

None of the products in your offerings could be fetched from the store, or the offering has no products for this app. Compare the product IDs with the store, check the API key's platform, and mark an offering as current.

What is RevenueCat error 7000?

Backend code 7000 means invalid platform or bad request: the request does not apply to the app's store. Both SDKs report it as configurationError (code 23).

How do I check for configurationError in React Native and Flutter?

In React Native, compare error.code with PURCHASES_ERROR_CODE.CONFIGURATION_ERROR. In Flutter, convert the PlatformException with PurchasesErrorHelper.getErrorCode(e) and compare the result with PurchasesErrorCode.configurationError.

Get started

Keep the RevenueCat SDK. Change the backend.

RevenueDot answers the same SDK calls with the same error codes. Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue.

Already have an account? Sign in · Prefer your own servers? Self-host free