Appearance
Configuring Steam Purchases
This page explains additional in-app purchase configuration and limitations for the Steam platform.
Appearance
This page explains additional in-app purchase configuration and limitations for the Steam platform.
Unlike Google Play and the App Store, where you configure the products in the store platform, for Steam the products are defined fully in your game config's InAppProducts sheet. This page explains the additional data you need to define in the InAppProducts sheet when using Steam IAPs.
Additionally, this page describes a few limitations in the current Steam IAP support: Subscription Limitations and the fact the Steam Item Store is not supported. There are more details about this further in the page.
The 2. Create the InAppProducts Config Sheet section of the basic purchasing documentation shows how to configure products in the game configs. For Steam, there are a few additional columns:
| ProductId #key | Name | Type | Price | NumGems | DevelopmentId | SteamId | SteamPricePoint | SteamPaymentInterval | StoreDescriptionTranslationId |
|---|---|---|---|---|---|---|---|---|---|
| SmallGemPack | Small Gem Pack | Consumable | 0.99 | 50 | dev.smallgempack | 1 | 100 | IAP.SmallGemPack | |
| LargeGemPack | Large Gem Pack | Consumable | 2.99 | 200 | dev.largegempack | 2 | 300 | IAP.LargeGemPack | |
| VipSubscription | VIP Subscription | Subscription | 4.99 | dev.vipsubscription | 3 | 500 | 2 Week | IAP.VipSubscription |
SteamId is similar to the other platform-specific IDs like GoogleId. It is required in order for the product to be purchasable on Steam. However, in contrast with the other platforms, SteamId is an integer instead of a string. Its value currently has no particular meaning, but as it is stored in each Steam purchase, we recommend setting a unique SteamId value for each product for possible future use.
SteamPricePoint defines the product's price in Steam in a currency-agnostic way. It is an integer and is approximately cents of US dollar; for example, a price point of 300 means 2.99 US dollars. See Steam Price Sheet for the list of price points.
SteamPaymentInterval is needed for Subscription products. It defines the auto-recurring billing interval in Steam. It consists of a positive integer and a unit string. The unit can be Day, Week, Month, or Year, and is not pluralized. For example, 2 Week means Steam will automatically create a new payment every 2 weeks after the initial purchase. See Auto-Renewing Subscriptions for general information about subscription IAPs in the Metaplay SDK.
Steam Subscription Limitations
Subscriptions on the Steam platform have certain limitations that you should be aware of. See Subscription Limitations for information.
StoreDescriptionTranslationId defines the translation ID for the localized description of the product that will be shown to the player in Steam's purchasing prompt. It refers to the translation sheets documented in Localization. Alternatively, if you don't wish to provide localized store descriptions, you can use column StoreDescription which is a plain string. Note that for dynamic offer products, the store description column should instead be in the Offers sheet; see Additional Columns in the Offers Config Sheet. Name column is only for the LiveOps Dashboard and is not shown in Steam.Offers Config Sheet If you're using in-game offers (as documented in Getting Started with In-Game Offers), the player-facing description string is taken from the Offers sheet instead of the InAppProducts sheet.
| OfferId #key | ... | StoreDescriptionTranslationId |
|---|---|---|
| GemOffer1 | ... | Offer.GemOffer1 |
| GemOffer2 | ... | Offer.GemOffer2 |
As in the InAppProducts sheet, you can use either StoreDescriptionTranslationId, or StoreDescription for a plain untranslated string.
While Steam supports auto-renewing subscriptions, they have some caveats:
The Metaplay SDK does not support the Steam Item Store!
In addition to general microtransactions, Steam also has an Item Store, which is a web store where you can predefine items for players to purchase into their inventories.
Currently, the Metaplay SDK does not support the Item Store. In particular, if a player makes a purchase in the Item Store, the Metaplay SDK will not be able to recognize it. If you still choose to use the Item Store for your game, you should ensure the items' ID numbers are different from the SteamId numbers in your InAppProducts. Otherwise, purchasing an IAP in the game will make Steam associate that purchase with the corresponding Item Store item, and afterwards Steam will consider the player to own that item. Unless you have specifically intended this to happen, it is probably undesirable.
The InAppProducts config defines the products' prices as price points instead of direct prices. Using a price sheet provided by Steam, the Metaplay SDK converts the price point to an actual price in the player's preferred currency. Each of the SteamPricePoints in your InAppProducts config should be one of those in the price sheet. If a SteamPricePoint is not one of those, the SDK produces a warning when building the game config. At runtime, the closest available price point will be used.
For reference, below is the price sheet as it was on 2025-03-06. For brevity, this shows only US dollars and Euros, although Steam supports many other currencies as well. Due to changes in currency exchange rates, the actual currency amounts may differ from these; the Metaplay SDK queries the price sheet from Steam periodically.
| Price Point | US Dollars | Euros |
|---|---|---|
| 25 | $0.25 | €0.25 |
| 50 | $0.49 | €0.45 |
| 75 | $0.75 | €0.70 |
| 100 | $0.99 | €0.95 |
| 150 | $1.49 | €1.40 |
| 200 | $1.99 | €1.89 |
| 250 | $2.49 | €2.35 |
| 300 | $2.99 | €2.85 |
| 350 | $3.49 | €3.29 |
| 400 | $3.99 | €3.79 |
| 450 | $4.49 | €4.25 |
| 500 | $4.99 | €4.75 |
| 550 | $5.49 | €5.19 |
| 600 | $5.99 | €5.69 |
| 650 | $6.49 | €6.19 |
| 700 | $6.99 | €6.69 |
| 750 | $7.49 | €7.15 |
| 800 | $7.99 | €7.59 |
| 850 | $8.49 | €7.99 |
| 900 | $8.99 | €8.49 |
| 950 | $9.49 | €8.99 |
| 1000 | $9.99 | €9.49 |
| 1100 | $10.99 | €10.49 |
| 1200 | $11.99 | €11.39 |
| 1300 | $12.99 | €12.39 |
| 1400 | $13.99 | €13.29 |
| 1500 | $14.99 | €14.29 |
| 1600 | $15.99 | €15.19 |
| 1700 | $16.99 | €16.19 |
| 1800 | $17.99 | €16.99 |
| 1900 | $18.99 | €17.99 |
| 2000 | $19.99 | €18.99 |
| 2500 | $24.99 | €23.79 |
| 3000 | $29.99 | €28.49 |
| 3500 | $34.99 | €32.99 |
| 4000 | $39.99 | €37.99 |
| 4500 | $44.99 | €42.99 |
| 5000 | $49.99 | €47.49 |
| 5500 | $54.99 | €52.49 |
| 6000 | $59.99 | €56.99 |
| 7000 | $69.99 | €66.99 |
| 8000 | $79.99 | €75.99 |
| 9000 | $89.99 | €85.99 |
| 10000 | $99.99 | €94.99 |