---
title: "What does Product.PurchaseError.paymentMethodBindingConfigurationRequired mean?"
description: "paymentMethodBindingConfigurationRequired means the customer must add a payment method to their Apple Account before buying. Use PaymentMethodBinding to prompt them, then retry the purchase."
url: https://revenuedot.app/docs/errors/storekit-purchase-error-payment-method-binding-configuration-required
---

# What does Product.PurchaseError.paymentMethodBindingConfigurationRequired mean?

Product.PurchaseError.paymentMethodBindingConfigurationRequired means the customer has no payment method on their Apple Account, so they must add one before the purchase can go through.

## Quick facts

| | |
|---|---|
| Error | `Product.PurchaseError.paymentMethodBindingConfigurationRequired` |
| Where | StoreKit 2, Swift (`Product.purchase(options:)`) |
| Available since | iOS 26.5, iPadOS 26.5, macOS 26.5, tvOS 26.5, watchOS 26.5, visionOS 26.5 |
| What the vendor says | The customer needs to add a payment method to their Apple Account before making a purchase; use PaymentMethodBinding to prompt the customer and bind the payment method. |

## Cause

- Apple says the customer has no usable payment method on their Apple Account at the time of the purchase.
- `PaymentMethodBinding` is available only to eligible apps with server entitlements. Its initializer throws if the app lacks the entitlement or the person is not eligible ([PaymentMethodBinding](https://developer.apple.com/documentation/storekit/paymentmethodbinding)).
- The error exists from iOS 26.5, so older systems never throw it.

## Fix

1. Catch the error and start the binding flow: your server asks Apple for an in-app binding identifier, the app creates `PaymentMethodBinding(id:)` with it and calls `bind()`.
2. `bind()` shows the system prompt where the customer confirms the new payment method as their primary one. Retry the purchase when it returns.
3. If the initializer throws, the app or the customer is not eligible. Show a message that points to Settings and the Apple Account payment methods instead.
4. Guard the code with an availability check for iOS 26.5 and keep a generic error path for earlier versions.

## Example

```swift
import StoreKit

// When the customer has no payment method, bind one with the identifier your server got from Apple, then buy again.
@available(iOS 26.5, *)
func buy(_ product: Product, bindingID: () async -> String?) async {
    do {
        _ = try await product.purchase()
    } catch Product.PurchaseError.paymentMethodBindingConfigurationRequired {
        guard let id = await bindingID() else { return }
        do {
            let binding = try await PaymentMethodBinding(id: id)
            try await binding.bind()
            print("Payment method bound; buy again")
        } catch {
            print("Binding failed: \(error)")
        }
    } catch {
        print("Purchase failed: \(error)")
    }
}
```

*Compile-checked: `npm run check:snippets` type-checks this snippet with `swiftc` against the Apple SDK (macOS target, checked 2026-10-03).*

## How the RevenueDot SDK reports it

The RevenueDot `purchases-ios` fork maps `Product.PurchaseError.paymentMethodBindingConfigurationRequired` to `ErrorCode.storeProblemError` (code 2). The branch is compiled only with Xcode 26.5 or newer. The SDK does not start the binding flow for you.

## Related

- [What does Product.PurchaseError.purchaseNotAllowed mean?](https://revenuedot.app/docs/errors/storekit-purchase-error-purchase-not-allowed.md)
- [What does storeProblemError (code 2) mean in the purchases SDK?](https://revenuedot.app/docs/errors/sdk-store-problem-error.md)
- [What does StoreKitError.systemError mean?](https://revenuedot.app/docs/errors/storekit-error-system-error.md)

## Source

- [Apple: Product.PurchaseError.paymentMethodBindingConfigurationRequired](https://developer.apple.com/documentation/storekit/product/purchaseerror/paymentmethodbindingconfigurationrequired)
- [Apple: PaymentMethodBinding](https://developer.apple.com/documentation/storekit/paymentmethodbinding)
- [RevenueDot purchases-ios: StoreKitError+Extensions.swift (how the SDK maps StoreKit 2 errors)](https://github.com/revenuedot/purchases-ios/blob/revenuedot/main-patches/Sources/Error%20Handling/StoreKitError%2BExtensions.swift)

Checked: 2026-10-03
