Cannot repurchase subscription SKU — StoreKit keeps returning old expired transaction

Some users cannot repurchase a subscription SKU after it has expired. Flow:

User previously subscribed.

User canceled and the subscription fully expired.

After weeks, user reinstalls the app and taps the same SKU.

StoreKit does not create a new purchase transaction.

Instead, StoreKit always returns the old expired transaction in updatedTransactions.

Therefore, the user is permanently unable to purchase the SKU again.

We have already tried:

Adding payment observer at app launch

Calling finishTransaction for all transactions

Clearing queue at startup

SKReceiptRefreshRequest

Server-side verifyReceipt

Ensuring subscription is truly expired (not in grace/retry)

Not calling restoreCompletedTransactions

None of these resolved the issue. StoreKit still only sends the old transaction and never generates a new one.

Expected behavior: A new purchase transaction should be created when user taps the expired subscription SKU.

Actual behavior: StoreKit repeatedly pushes the old expired transaction, blocking new purchases.

We can provide: Some users cannot repurchase a subscription SKU after it has expired. Flow:

User previously subscribed.

User canceled and the subscription fully expired.

After weeks, user reinstalls the app and taps the same SKU.

StoreKit does not create a new purchase transaction.

Instead, StoreKit always returns the old expired transaction in updatedTransactions.

Therefore, the user is permanently unable to purchase the SKU again.

We have already tried:

Adding payment observer at app launch

Calling finishTransaction for all transactions

Clearing queue at startup

SKReceiptRefreshRequest

Server-side verifyReceipt

Ensuring subscription is truly expired (not in grace/retry)

Not calling restoreCompletedTransactions

None of these resolved the issue. StoreKit still only sends the old transaction and never generates a new one.

Expected behavior: A new purchase transaction should be created when user taps the expired subscription SKU.

Actual behavior: StoreKit repeatedly pushes the old expired transaction, blocking new purchases.

We can provide:

Affected user’s base64 receipt

verifyReceipt full response

Transaction logs (transactionIdentifier, original_transaction_id, productIdentifier, state)

Please help investigate why StoreKit is not allowing a new subscription purchase. Affected user’s base64 receipt

verifyReceipt full response

Transaction logs (transactionIdentifier, original_transaction_id, productIdentifier, state)

Please help investigate why StoreKit is not allowing a new subscription purchase.

Cannot repurchase subscription SKU — StoreKit keeps returning old expired transaction
 
 
Q