Bundles
How it works
Bundle is a set of several items that are sold as a single unit.
Main features:
- Add items of different types to a bundle:
- virtual currency (including the platform-dependent currency)
- package of virtual currency
- game keys for preselected platforms
- virtual items including time-limited items
- bundles
- Configure the bundle pricing in real and virtual currencies.
- Free bundle.
- Limiting the number of bundles available for purchase.
- Limiting the display time for bundles in the store.
A bundle automatically unpacks after successful purchase. If a bundle includes another bundle, the included bundle automatically separates into standalone items.
Items delivery method from an unpacked bundle depends on the item type:
- virtual currency packages, virtual items, time-limited items, and bundles are delivered to:
- inventory (default method)
PlayFab , if you configured the integration
- game keys are delivered to:
- email (default method)
PlayFab , if you configured the integration
When the buyer returns the bundle by canceling a transaction (for example), all granted items from the bundle are automatically withdrawn from the user. If they spent some of the items, the remaining items are still withdrawn.
Restrictions:
- You can’t add the following items to the bundle:
- the same bundle
- physical goods
- You can’t create an empty bundle.
- The bundle sales are paused after you run out of keys to sell and these keys are included in the bundle.
- The bundle price should be a fixed value of real and/or virtual currency.
- You can configure regional restrictions for a bundle only via API.
Limiting number of bundles available for purchase
You can limit the purchase of bundles. For example, you can limit:
- the number of bundles per user
- welcome bundles that are only available for purchase once
If the user has reached the specified limit, the bundle will not be displayed in the catalog. If the bundle contains a virtual currency package or item with a purchase limit and the user has already purchased the allowed amount, the bundle will not be displayed in the catalog.
You can display the maximum available number of bundles and the remaining number of bundles that is available to the user.
To set a purchase limit when creating a bundles in Publisher Account, switch the Limit number of times one user can buy this bundle toggle to On and specify the number of times the bundle can be bought.
You can use the methods of the Catalog subsection from the Bundles method group to get information about bundles.
In the response, you will receive the following information in addition to information about the bundle:
- the maximum number of bundles a user can buy
- the remaining number of bundles available for the user to purchase
You can read more about how to set up or update restrictions in the Limits for user instructions.
For unauthorized users, the maximum number of bundles they can buy is always displayed. To display the remaining number of bundles to the user (subject to the current limit), pass user authorization data when you request the bundles catalog using the methods of the Catalog subsection from the Bundles method group.
To correctly display the number of bundles that are available to the user, you need to configure authentication.
- json
{
"items": [
{
"sku": "kg_1",
"name": "kg_10.00_bundle",
"type": "bundle",
"description": "pricePoint_44056_1",
"image_url": null,
"long_description": null,
"attributes": {
"external_id": "genre",
"name": "Genre",
"values": [
{
"external_id": "genre_e3364991f92e751689a68b96598a5a5a84010b85",
"value": "Casual"
},
{
"external_id": "genre_eba07bfd0f982940773cba3744d97264dd58acd7",
"value": "Strategy"
},
{
"external_id": "genre_b8d0c6d8f0524c2b2d79ebb93aa3cd0e8b5199a8",
"value": "Mobile"
}
]
},
"is_free": false,
"order": 999,
"groups": [],
"price": {
"amount": 9.99,
"currency": "USD",
"amount_without_discount": 9.99
},
"total_content_price": {
"amount": 10.99,
"currency": "USD",
"amount_without_discount": 10.99
},
"media_list": [],
"virtual_prices": [],
"can_be_bought": true,
"bundle_type": "standard",
"limits": {
"$ref": "./Catalog_item_limits.yaml"
},
"content": [
{
"sku": "big_rocket",
"name": "Big Rocket",
"description": "Big Rocket - short description.",
"image_url": "https://popmedia.blob.core.windows.net/popyourself/male/outfit/male_armor_white_a-01.png",
"type": "virtual_currency",
"quantity": 100,
"virtual_item_type": "non_consumable",
"attributes": {
"external_id": "size",
"name": "Size",
"values": [
{
"external_id": "size_e3364991f92e751689a68b96598a5a5a84010b85",
"value": "Large"
}
]
},
"is_free": false,
"groups": [],
"price": {
"amount": 10.99,
"currency": "USD",
"amount_without_discount": 10.99
},
"virtual_prices": [],
"limits": {
"per_user": {
"total": 5,
"available": 5
},
"per_item": null
},
}
}
]
}
]
}
Xsolla ensures the limits are not exceeded and prevents users from purchasing more bundles than the set limit.
When opening the payment interface and paying for a bundle, all unpaid orders with this bundle become invalid.
Example: the user can open the payment form for a bundle with a purchase restriction in several browser tabs until the bundle has been purchased. This automatically results in the creation of multiple orders for the same bundle. After purchasing a bundle in one tab, Xsolla will void all unpaid orders with the same bundle.
Limiting the display time for bundles in the store
You can set the display period for an item in the store to:- maintain the relevance of the catalog at a given time, for example, during holiday sales
- create a bundle in advance without displaying it in the catalog
- motivate users to buy bundles by displaying a timer next to the item
To set a time limit for displaying a bundle in the store via Publisher Account, select Time period and specify the time zone, the beginning, and end of the period. To not indicate the end of the bundle display period, check the No end date box.
To set a time limit for displaying a bundle in the store via API, pass the following parameters in the
periods[0].date_from
with the date and time of the beginning of item display period inYYYY-MM-DDThh:mm:ss±TMZ
format, whereTMZ
is the time zone indicator inhh:mm
GMT formatperiods[0].date_until
with the date and time of the end of the item display period inYYYY-MM-DDThh:mm:ss±TMZ
format, whereTMZ
is the time zone indicator inhh:mm
GMT format. To not indicate the end of an item’s display period, passnull
You can set up multiple periods for displaying a bundle in the store. To do this, in the
Example:
"periods": [
{
"date_from": "2022-06-10T14:00:00+03:00",
"date_until": "2022-06-30T14:00:00+03:00"
},
{
"date_from": "2022-07-10T14:00:00+03:00",
"date_until": "2022-07-30T14:00:00+03:00"
},
{
"date_from": "2022-08-10T14:00:00+03:00",
"date_until": "2022-08-30T14:00:00+03:00"
}
]
Who can use it
For partners who want to sell sets of items for a price lower than the initial total of all items in the bundle, which increases sales and helps to get new players.
How to get it
Integration flow
Set up bundle
Set up bundles in one of the following ways:Set up via Publisher Account
- Go to Publisher Account > Store > Bundles and click Create bundle.
- Specify the following parameters for a bundle:
- Image
- Name
- Description
- Contents
- Price
- Display in Store
- Check the settings and click Save.
Set up via API methods
To set up bundles, you can use the methods from theAdd game key to bundle
To add a game key for a selected platform to a bundle, pass an array with SKUs of needed platforms to
- http
"content": [{
“sku”: “brilliant_game_sku_steam”,
“quantity”: 1
}
]
Set up regional restrictions
To set up regional restrictions for a bundle, pass an array with IDs of supported regions to
- http
"regions": [{
“id”: “123”
}, {
“id”: “456”
}
]
Set up regional prices
To set up regional prices for a bundle, pass an array of objects with price settings for regions to
- http
"regional_prices": [{
“region_id”: “123”,
“country_iso”: “CHN”,
“amount”: 40,
“currency_iso”: “CNY”,
“is_default”: true,
“is_enabled”: true
}
]
Get bundles in a catalog
To get a catalog of bundles, you can use the methods from theFound a typo or other text error? Select the text and press Ctrl+Enter.