# Guideline 3.1.1 - In-App Purchase: Expiring Virtual Currency

**Guideline:** 3.1.1 · **Store:** Apple App Store · **Severity:** medium · **Fix difficulty:** medium · **Typical turnaround:** 2-8 hours

Canonical URL: https://appstorereject.com/rejections/apple/3/guideline-311-in-app-purchase-expiring-virtual-currency

## Description

Apple is rejecting your app because it sells virtual currency or credits through IAP that expire after a set period, effectively forcing users to repurchase content they already paid for. Apple considers this a consumer protection issue -- users who purchase virtual currency expect it to remain available until they use it. This rejection targets apps that implement expiration dates on purchased coins, gems, credits, tokens, or other virtual currencies. The pattern is common in messaging apps (purchased chat credits that expire monthly), service marketplaces (prepaid credits with a use-by date), and games (seasonal currency that resets). The guideline does not prevent time-limited bonuses or promotional currency that was granted for free. The issue is specifically with currency that the user paid real money for through IAP. If users bought it, it should not disappear.

## Common variations

- Purchased virtual currency expires after a set period
- In-app purchase credits have a use-by date
- Paid tokens reset at the end of each billing cycle without subscription model
- Virtual coins purchased via IAP are removed after inactivity period

## Example rejection email

```
Guideline 3.1.1 - Business - Payments - In-App Purchase

We found that your app offers virtual currency purchased through in-app purchase that expires after a set period. Specifically, purchased credits expire 30 days after purchase if unused.

In-app purchase products should not impose expiration dates that cause users to lose access to content they have already paid for.

Next Steps:
Please revise the app to remove expiration dates on virtual currency purchased through in-app purchase, or convert the offering to a subscription model if time-limited access is integral to the service.
```

## Resolution steps

## Quick Assessment
- **Risk level:** Medium
- **Resolution path:** Fix & Resubmit
- **Typical turnaround:** 2-8 hours

## The Fix

1. **Remove expiration from purchased currency** -- If users buy credits through IAP, those credits must persist until the user spends them. Remove any expiry logic for paid currency.

2. **Separate paid and bonus currency** -- If you want to offer time-limited promotional currency, track it separately from purchased currency. Bonus currency (granted for free via promotions, daily logins, etc.) can have expiration; purchased currency cannot.

3. **Consider a subscription model** -- If your business requires time-limited access (e.g., 100 messages per month), convert to an auto-renewable subscription instead of expiring currency. Subscriptions naturally renew and the time-limited nature is inherent to the model.

4. **Update your terms** -- Remove any language in your terms of service that references expiration of purchased virtual currency.

5. **Honor existing purchases** -- For users who previously purchased currency with expiration, retroactively remove the expiry on their remaining balance.

## Prevention
- Never add expiration dates to IAP-purchased virtual goods
- Use subscriptions for time-limited access models
- Keep promotional/free currency tracked separately from purchased currency

## Before / after examples

**Before:** User purchases 500 credits for $4.99; credits display 'Expires in 30 days' and are removed if unused
**After:** Purchased credits never expire and persist until spent; free bonus credits (from daily logins) show expiration separately
**Why it works:** IAP-purchased virtual currency must not expire. Separate tracking for paid vs. free promotional currency resolves the compliance issue.

## Common questions

**How long does this typically take to fix?**

Typical turnaround is 2-8 hours (difficulty: medium). After resubmission, most re-reviews complete within 24-48 hours.

---
*Machine-readable source: https://api.appstorereject.com/api/rejections/detail?slug=guideline-311-in-app-purchase-expiring-virtual-currency*