Product Tiers
This guide explains how to create and manage product tiers in OpenDev for in-app purchases and subscriptions.
Overview
Product Tiers define your application's purchasable items:
- In-app purchases (consumable and non-consumable)
- Subscriptions (monthly, yearly, etc.)
- Virtual goods and premium features
Prerequisites
- OpenDev account with appropriate permissions
- Understanding of your pricing strategy
- Payment platform product IDs (Stripe, Google Play, Apple, etc.)
Accessing Product Tiers
- Log in to OpenDev Platform
- Click Product Tiers in the sidebar
- You'll see the list of all product tiers
Creating a Product Tier
- Click Add Product Tier button
- Fill in the product details:
Basic Information
| Field | Required | Description |
|---|---|---|
| Product ID | Yes | Unique identifier (e.g., pro_monthly) |
| Name | Yes | Display name (e.g., "Pro Monthly") |
| Description | No | What's included in this tier |
| Product Type | Yes | Subscription or One-time |
Product Type Options
| Type | Description | Use Case |
|---|---|---|
| Subscription | Recurring billing | Monthly/yearly plans |
| One-time (Consumable) | Can buy multiple times | Virtual currency, lives |
| One-time (Non-consumable) | Buy once | Premium unlock, themes |
Subscription Configuration
For subscription products:
| Field | Description |
|---|---|
| Billing Period | Monthly, Yearly, Weekly |
| Trial Days | Free trial period (optional) |
Platform Product IDs
Link your product tier to payment platform products:
Stripe
{
"stripe": "price_1234567890abcdef"
}
Get this from Stripe Dashboard > Products > Price ID
Google Play
{
"google_play": "pro_monthly_subscription"
}
Must match your Google Play Console product ID
Apple Store
{
"apple": "com.yourapp.pro.monthly"
}
Must match your App Store Connect product ID
WeChat Pay
{
"wechat_pay": "pro_monthly_cny"
}
Used for identifying products in CNY transactions
Complete Configuration Example
{
"productId": "pro_monthly",
"name": "Pro Monthly",
"type": "subscription",
"subscriptionPeriod": "monthly",
"trialDays": 7,
"platformProductIds": {
"stripe": "price_1234567890",
"google_play": "pro_monthly_sub",
"apple": "com.myapp.pro.monthly",
"wechat_pay": "pro_monthly_cny"
}
}
Managing Product Tiers
Edit Product Tier
- Click on a product tier in the list
- Click Edit button
- Modify the fields as needed
- Click Save Changes
Delete Product Tier
- Click on a product tier
- Click Delete button
- Confirm deletion
Warning: Cannot delete if bound to channel configurations.
Enable/Disable Payment
Toggle payment processing for individual tiers:
- Find the product tier in the list
- Click the payment toggle
- Disabled tiers won't appear in payment options
Product Tier Organization
Recommended Structure
Account Tiers:
├── free_tier (Base, no payment)
├── pro_monthly (Subscription)
├── pro_yearly (Subscription, discounted)
└── enterprise (Custom pricing)
Consumables:
├── coins_100 (One-time)
├── coins_500 (One-time)
└── coins_1000 (One-time)
Premium Features:
├── remove_ads (One-time, permanent)
├── dark_theme (One-time, permanent)
└── premium_features (One-time, permanent)
Naming Conventions
Good Product IDs:
- pro_monthly
- coins_100
- premium_yearly
- remove_ads
Avoid:
- product1 (not descriptive)
- Monthly Pro (spaces)
- pro-monthly (use underscores)
Pricing Strategy
Subscription Tiers
| Tier | Monthly | Yearly | Savings |
|---|---|---|---|
| Pro | $9.99 | $99.99 | 17% |
| Enterprise | $29.99 | $299.99 | 17% |
Trial Periods
Recommended trial lengths:
- 7 days: Standard trial, good conversion
- 14 days: For complex products
- 30 days: Enterprise or B2B
Regional Pricing
Configure different prices per region using platform-specific settings:
{
"price": {
"USD": 999,
"EUR": 899,
"CNY": 6800,
"JPY": 1100
}
}
Payment Platform Integration
Verify Platform IDs
Ensure your platform product IDs are correctly configured:
- Stripe: Check Stripe Dashboard > Products
- Google Play: Google Play Console > In-app products
- Apple: App Store Connect > In-App Purchases
- WeChat: WeChat Pay Merchant Platform
Test Products
Create test products in sandbox environments:
| Platform | Sandbox |
|---|---|
| Stripe | Test mode products |
| Google Play | License testers |
| Apple | Sandbox testers |
| Sandbox environment |
Metadata Configuration
Add custom metadata for advanced features:
{
"metadata": {
"max_apps": 10,
"max_collaborators": 5,
"support_level": "priority",
"api_calls_per_day": 10000,
"has_rbac": true,
"has_full_audit": true
}
}
Common Metadata Fields
| Field | Type | Description |
|---|---|---|
| max_apps | number | Application limit |
| max_collaborators | number | Team member limit |
| support_level | string | Support tier (basic, priority, dedicated) |
| apicallsper_day | number | API rate limit |
| has_rbac | boolean | Role-based access control |
| hasfullaudit | boolean | Full audit logging |
| sla_guarantee | number | SLA percentage (e.g., 99.9) |
Best Practices
Product Design
- Clear naming - Users should understand what they're buying
- Value proposition - Make benefits obvious
- Upgrade path - Easy to move between tiers
- Consistent pricing - Logical price differences between tiers
Technical Implementation
- Unique IDs - Never reuse product IDs
- Version carefully - Create new IDs for price changes
- Test thoroughly - Verify on all platforms before launch
- Monitor metrics - Track conversion and churn rates
Compliance
- Clear descriptions - Required by app stores
- Subscription terms - Explain renewal terms
- Refund policy - Follow platform guidelines
- Price display - Show local currency
Troubleshooting
Product Not Appearing
Possible causes:
- Payment not enabled for product
- Platform product ID incorrect
- Product not activated in platform console
Price Mismatch
Solutions:
- Verify platform product prices match
- Check currency conversion settings
- Ensure price IDs are current
Cannot Delete Product
Cause: Product is bound to channel configurations
Solution: Remove from channel product configs first
Next Steps
- Channel Product Configs - Bind products to channels
- Payment Setup - Configure payment processing
- App Configuration - Include in config packages