` is the user token. The token identifies the user and provides access to personalized data. You can try this call using the following test token:
```
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI
```
Alternatively, you can use a [token for opening the payment UI](/api/pay-station/token/create-token).
2. **Simplified mode without Authorization header.** This mode is used only for unauthorized users and can be applied only for [game key sales](/doc/buy-button/how-to/set-up-authentication/#guides_buy_button_selling_items_not_authenticated_users). Instead of a token, the request must include the following headers:
- `x-unauthorized-id` with a request ID
- `x-user` with the user's email address encoded in Base64
## Useful links
- [API calls by interaction model](https://developers.xsolla.com/api/catalog/)
- [Endpoint types](https://developers.xsolla.com/api/catalog/)
- [Errors handling](https://developers.xsolla.com/api/catalog/)
- [API keys](https://developers.xsolla.com/api/catalog/)
# Core entity structure
Items of all types (virtual items, bundles, virtual currency, and keys) use a similar data structure. Understanding the basic structure simplifies working with the API and helps you navigate the documentation more easily.
Note
Some calls may include additional fields but they don't change the basic structure.
**Identification**
- `merchant_id` — company ID in [Publisher Account](https://publisher.xsolla.com/)
- `project_id` — project ID in Publisher Account
- `sku` — item SKU, unique within the project
**Store display**
- `name` — item name
- `description` — item description
- `image_url` — image URL
- `is_enabled` — item availability
- `is_show_in_store` — whether the item is displayed in the catalog
For more information about managing item availability in the catalog, see the [documentation](/items-catalog/catalog-features/items-availability/).
**Organization**
- `type` — item type, for example, a virtual item (`virtual_item`) or bundle (`bundle`)
- `groups` — groups the item belongs to
- `order` — display order in the catalog
**Sale conditions**
- `prices` — prices in real or virtual currency
- `limits` — purchase limits
- `periods` — availability periods
- `regions` — regional restrictions
**Example of core entity structure:**
```json
{
"attributes": [],
"bundle_type": "virtual_currency_package",
"content": [
{
"description": {
"en": "Main in-game currency"
},
"image_url": "https://.../image.png",
"name": {
"en": "Crystals",
"de": "Kristalle"
},
"quantity": 500,
"sku": "com.xsolla.crystal_2",
"type": "virtual_currency"
}
],
"description": {
"en": "Crystals x500"
},
"groups": [],
"image_url": "https://.../image.png",
"is_enabled": true,
"is_free": false,
"is_show_in_store": true,
"limits": {
"per_item": null,
"per_user": null,
"recurrent_schedule": null
},
"long_description": null,
"media_list": [],
"name": {
"en": "Medium crystal pack"
},
"order": 1,
"periods": [
{
"date_from": null,
"date_until": "2020-08-11T20:00:00+03:00"
}
],
"prices": [
{
"amount": 20,
"country_iso": "US",
"currency": "USD",
"is_default": true,
"is_enabled": true
}
],
"regions": [],
"sku": "com.xsolla.crystal_pack_2",
"type": "bundle",
"vc_prices": []
}
```
# Basic purchase flow
The Xsolla API allows you to implement in-game store logic, including retrieving the item catalog, managing the cart, creating orders, and tracking their status. Depending on the integration scenario, API calls are divided into **Admin** and **Catalog** subsections, which use different [authentication schemes](/api/catalog/section/authentication).
The following example shows a basic flow for setting up and operating a store, from item creation to purchase.
## Create items and groups (Admin)
Create an item catalog for your store, such as virtual items, bundles, or virtual currency.
Example API calls:
- [Create virtual item](/api/catalog/virtual-items-currency-admin/admin-create-virtual-item)
- [Create bundle](/api/catalog/bundles-admin/admin-create-bundle)
- [Create virtual currency](/api/catalog/virtual-items-currency-admin/admin-create-virtual-currency)
## Set up promotions, chains, and limits (Admin)
Configure user acquisition and monetization tools, such as discounts, bonuses, daily rewards, or offer chains.
Example API calls:
- [Create bonus promotion](/api/liveops/promotions-bonuses/create-bonus-promotion)
- [Create daily reward](/api/liveops/daily-chain-admin/admin-create-daily-chain)
- [Create unique catalog offer promotion](/api/liveops/promotions-unique-catalog-offers/admin-create-unique-catalog-offer)
## Get item information (Client)
Configure item display in your application.
Notice
Do not use API calls from the Admin subsection to build a user catalog. These API calls have
rate limits and aren't intended for user traffic.
Example API calls:
- [Get virtual items list](/api/catalog/virtual-items-currency-catalog/get-virtual-items)
- [Get item group list](/api/catalog/virtual-items-currency-catalog/get-item-groups)
- [Get list of bundles](/api/catalog/bundles-catalog/get-bundle-list)
- [Get sellable items list](/api/catalog/common-catalog/get-sellable-items)
Note
By default, catalog API calls return items that are currently available in the store at the time of the request. To retrieve items that are not yet available or are no longer available, include the parameter "show_inactive_time_limited_items": 1 in the catalog request.
## Sell items
You can sell items using the following methods:
- Fast purchase — sell one SKU multiple times.
- Cart purchase — the user adds items to the cart, removes items, and updates quantities within a single order.
If an item is purchased using virtual currency instead of real money, use the [Create order with specified item purchased by virtual currency](/api/catalog/virtual-payment/create-order-with-item-for-virtual-currency) API call. The payment UI is not required, as the charge is processed when the API call is executed.
For free item purchase, use the [Create order with specified free item](/api/catalog/free-item/create-free-order-with-item) API call or the [Create order with free cart](/api/catalog/free-item/create-free-order) API call. The payment UI is not required — the order is immediately set to the done status.
### Fast purchase
Use the client-side API call to [create an order with a specified item](/api/catalog/payment-client-side/create-order-with-item). The call returns a token used to open the payment UI.
Note
Discount information is available to the user only in the payment UI. Promo codes are not supported.
### Cart purchase
Cart setup and purchase can be performed on the client or on the server side.
**Set up and purchase a cart on the client**
Implement the logic of adding and removing items by yourself. Before calling the API for setting up a cart, you will not have information about which promotions will be applied to the purchase. This means that the total cost and details of the added bonus items will not be known.
Implement the following cart logic:
1. After the player has filled a cart, use the [Fill cart with items](/api/shop-builder/operation/cart-fill/) API call. The call returns the current information about the selected items (prices before and after discounts, bonus items).
2. Update the cart contents based on user actions:
- To add an item or change item quantity, use the [Update cart item by cart ID](/api/shop-builder/operation/put-item-by-cart-id/) API call.
- To remove an item, use the [Delete cart item by cart ID](/api/shop-builder/operation/delete-item-by-cart-id/) API call.
Note
To get the current status of the cart, use the Get current user's cart API call.
3. Use the [Create order with all items from current cart](/api/shop-builder/operation/create-order/) API call. The call returns the order ID and payment token. The newly created order is set to new status by default.
**Set up and purchase a cart on the server**
This setup option may take longer for setting the cart up, since each change to the cart must be accompanied by API calls.
Implement the following cart logic:
1. After the player has filled a cart, use the [Fill cart with items](/api/catalog/cart-server-side) API call. The call returns current information about the selected items (prices before and after discounts, bonus items).
2. Use the [Create order with all items from current cart](/api/shop-builder/operation/create-order/) API call. The call returns the order ID and payment token. The newly created order is set to new status by default.
## Open payment UI
Use the returned token to open the payment UI in a new window. Other ways to open the payment UI are described in the [documentation](/payment-ui-and-flow/payment-ui/how-to-open-payment-ui/#open_payment_ui).
| Action | Endpoint |
|:--------------------------------|:--------------------------------------------------------------------------|
| Open in production environment. | https://secure.xsolla.com/paystation4/?token={token} |
| Open in sandbox mode. | https://sandbox-secure.xsolla.com/paystation4/?token={token} |
Note
Use sandbox mode during development and testing. Test purchases don't charge real accounts. You can use
test bank cards.
After the first real payment is made, a strict sandbox payment policy takes effect. A payment in sandbox mode is available only to users specified in [Publisher Account > Company settings > Users](https://publisher.xsolla.com/0/settings/users).
Buying virtual currency and items for real currency is possible only after signing a license agreement with Xsolla. To do this, in [Publisher Account](https://publisher.xsolla.com/), go to **Agreements & Taxes > Agreements**, complete the agreement form, and wait for confirmation. It may take up to 3 business days to review the agreement.
To enable or disable sandbox mode, change the value of the `sandbox` parameter in the request for fast purchase and cart purchase. Sandbox mode is off by default.
Possible order statuses:
- `new` — order created
- `paid` — payment received
- `done` — item delivered
- `canceled` — order canceled
- `expired` — payment expired
Track order status using one of the following methods:
- [webhooks configured on your server](/virtual-goods/own-ui/server-side-token-generation/set-up-order-tracking/#payments_integration_order_tracking)
- [short-polling](/virtual-goods/own-ui/client-side-token-generation/set-up-order-tracking/#guides_shop_builder_integrate_store_get_order_status_via_short_polling)
- [WebSocket API](/virtual-goods/own-ui/client-side-token-generation/set-up-order-tracking/#guides_shop_builder_integrate_store_get_order_status_via_websocket_api)
## Useful links
- Authentication
- [API calls by interaction model](/api/catalog/section/authentication)
- [Payment testing](/dev-resources/testing/general-info/#general_overview)
- [Set up order status tracking](/virtual-goods/own-ui/client-side-token-generation/set-up-order-tracking/?link=200-api#payments_integration_order_tracking)
- [Webhooks](/webhooks/overview)
- [Rate limits](/api/login/rate-limits)
- [Errors handling](/api/getting-started/#api_errors_handling)
- [API keys](/api/getting-started/#api_keys_overview)
# Pagination
API calls that return large sets of records (for example, when building a catalog) return data in pages. Pagination is a mechanism that limits the number of items returned in a single API response and allows you to retrieve subsequent pages sequentially.
Use the following parameters to control the number of returned items:
- `limit` — number of items per page
- `offset` — index of the first item on the page (numbering starts from 0)
- `has_more` — indicates whether another page is available
- `total_items_count` — total number of items
Example request:
```
GET /items?limit=20&offset=40
```
Response example:
```json
{
"items": [...],
"has_more": true,
"total_items_count": 135
}
```
It is recommended to send subsequent requests until the response returns `has_more = false`.
# Date and time format
Dates and time values are passed in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
The following are supported:
- UTC offset
- `null` value when there is no time restriction for displaying an item
- [Unix timestamp](https://www.unixtimestamp.com/) (in seconds) used in some fields
Format: `YYYY-MM-DDTHH:MM:SS±HH:MM`
Example: `2026-03-16T10:00:00+03:00`
# Localization
Xsolla supports localization of user-facing fields such as item name and description. Localized values are passed as an object where the language code is used as the key. The full list of supported languages is available in the [documentation](/doc/shop-builder/references/supported-languages/).
**Supported fields**
Localization can be specified for the following parameters:
- `name`
- `description`
- `long_description`
**Locale format**
The locale key can be specified in one of the following formats:
- Two-letter language code: `en`, `ru`
- Five-letter language code: `en-US`, `ru-RU`, `de-DE`
**Examples**
Example with a two-letter language code:
```json
{
"name": {
"en": "Starter Pack",
"ru": "Стартовый набор"
}
}
```
Example with a five-letter language code:
```json
{
"description": {
"en-US": "Premium bundle",
"de-DE": "Premium-Paket"
}
}
```
# Error response format
If an error occurs, the API returns an HTTP status and a JSON response body. The full list of store-related errors is available in the [documentation](/dev-resources/references/errors/store-errors/).
**Response example:**
```json
{
"errorCode": 1102,
"errorMessage": "Validation error",
"statusCode": 422,
"transactionId": "c9e1a..."
}
```
- `errorCode` — error code.
- `errorMessage` — short error description.
- `statusCode` — HTTP response status.
- `transactionId` — request ID. Returned only in some cases.
- `errorMessageExtended` — additional error details, such as request parameters. Returned only in some cases.
**Extended response example:**
```json
{
"errorCode": 7001,
"errorMessage": "Chain not found",
"errorMessageExtended": {
"chain_id": "test_chain_id",
"project_id": "test_project_id",
"step_number": 2
},
"statusCode": 404
}
```
**Common HTTP status codes**
- `400` — invalid request
- `401` — authentication error
- `403` — insufficient permissions
- `404` — resource not found
- `422` — validation error
- `429` — rate limit exceeded
**Recommendations**
- Handle the HTTP status and the response body together.
- Use `errorCode` to process errors related to application logic.
- Use `transactionId` to identify requests more quickly when analyzing errors.
Version: 2.0.0
## Servers
```
https://store.xsolla.com/api
```
## Security
### basicAuth
Server-side calls use the `basicAuth` authentication scheme. All requests to API must
contain the `Authorization: Basic `
header, where `your_authorization_basic_key` is the `project_id:api_key`
pair encoded according to the Base64 standard.
You can use `merchant_id` instead of `project_id` if you need. It doesn't affect functionality.
Go to [Publisher Account](https://publisher.xsolla.com/) to find values of the parameters:
* `merchant_id` is shown:
* In the **Company settings > Company** section
* In the URL in the browser address bar on any Publisher Account page. The URL has the following format: `https://publisher.xsolla.com/`.
* `api_key` is shown in Publisher Account only once when it is created and must be stored on your side. You can create a new key in the following section:
* [Company settings > API keys](https://publisher.xsolla.com/0/settings/api_key)
* [Project settings > API keys](https://publisher.xsolla.com/0/projects/0/edit/api_key)
{% html name="div" attrs={"class": "notice"} %}
**Notice**
If a required API call doesn't include the `project_id` path parameter, use an API key that is valid across all company projects for authorization.
{% /html %}
* `project_id` is shown:
* In Publisher Account next to the name of the project.
* In the URL in the browser address bar when working on project in Publisher Account. The URL has the following format: `https://publisher.xsolla.com//projects/`.
For more information about working with API keys, see the [API reference](https://developers.xsolla.com/api/getting-started/#api_keys_overview).
Type: http
Scheme: basic
### XsollaLoginUserJWT
Client-side calls use the `XsollaLoginUserJWT` authentication scheme. The request must include the user's JWT in the `Authorization` header in the following format: Bearer ``. The token identifies the user and provides access to personalized data. For details on how to create a token, refer to the [Xsolla Login API documentation](/api/login/authentication-schemes#getting-user-token).
You can try this call using the following test token: `Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI`.
Alternatively, you can use a [token for opening the payment UI](/api/pay-station/token/create-token).
Type: http
Scheme: bearer
Bearer Format: JWT
### AuthForCart
The `AuthForCart` authentication scheme is used for cart purchases and supports two modes:
1. Authentication with a user's JWT. The token is passed in the Authorization header in the following format: `Authorization: Bearer `, where `` is the user token. The token identifies the user and provides access to personalized data. You can try this call using the following test token:`Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI`.
Alternatively, you can use a [token for opening the payment UI](/api/pay-station/token/create-token).
2. Simplified mode without `Authorization` header. This mode is used only for unauthorized users and can be applied only for [selling game keys](/doc/buy-button/how-to/set-up-authentication/#guides_buy_button_selling_items_not_authenticated_users). Instead of a token, the request must include the following headers:
* `x-unauthorized-id` with a request ID
* `x-user` with the user’s email address encoded in Base64.
Type: http
Scheme: bearer
### basicMerchantAuth
Server-side calls use the `basicMerchantAuth` authentication scheme. All requests to API must
contain the `Authorization: Basic `
header, where `your_authorization_basic_key` is the `merchant_id:api_key`
pair encoded according to the Base64 standard.
Go to [Publisher Account](https://publisher.xsolla.com/) to find values of the parameters:
* `merchant_id` is shown:
* In the **Company settings > Company** section
* In the URL in the browser address bar on any Publisher Account page. The URL has the following format: `https://publisher.xsolla.com/`
* `api_key` is shown in Publisher Account only once when it is created and must be stored on your side. You can create a new key in the [Company settings > API keys](https://publisher.xsolla.com/0/settings/api_key) section.
For more information about working with API keys, see the [API reference](https://developers.xsolla.com/api/getting-started/#api_keys_overview).
Type: http
Scheme: basic
## Download OpenAPI description
[LiveOps API](https://developers.xsolla.com/_bundle/api/liveops/index.yaml)
## Common API calls
You can call API methods from this subsection to manage different types of promotions.
### Get all promotion list
- [GET /v3/project/{project_id}/admin/promotion](https://developers.xsolla.com/api/liveops/promotions-common/get-promotion-list.md): Gets the list of promotions of a project.
### Activate promotion
- [PUT /v2/project/{project_id}/admin/promotion/{promotion_id}/activate](https://developers.xsolla.com/api/liveops/promotions-common/activate-promotion.md): Activates a promotion.
### Deactivate promotion
- [PUT /v2/project/{project_id}/admin/promotion/{promotion_id}/deactivate](https://developers.xsolla.com/api/liveops/promotions-common/deactivate-promotion.md): Deactivates a promotion.
### Get redeemable promotion by code
- [GET /v3/project/{project_id}/admin/promotion/redeemable/code/{code}](https://developers.xsolla.com/api/liveops/promotions-common/get-redeemable-promotion-by-code.md): Gets the promotion by a promo code or coupon code.
### Verify promotion code
- [GET /v2/project/{project_id}/promotion/code/{code}/verify](https://developers.xsolla.com/api/liveops/promotions-common/verify-promotion-code.md): Determines if the code is a promo code or coupon code and if the user can apply it.
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
## Coupons
Call API methods from this subsection to configure and manage coupon promotions.
Note
Refer to our documentation for detailed information about coupons.
### Redeem coupon code
- [POST /v2/project/{project_id}/coupon/redeem](https://developers.xsolla.com/api/liveops/promotions-coupons/redeem-coupon.md): Redeems a coupon code. The user gets a bonus after a coupon is redeemed.
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
### Get coupon rewards
- [GET /v2/project/{project_id}/coupon/code/{coupon_code}/rewards](https://developers.xsolla.com/api/liveops/promotions-coupons/get-coupon-rewards-by-code.md): Gets coupons rewards by its code.
Can be used to allow users to choose one of many items as a bonus.
The usual case is choosing a DRM if the coupon contains a game as a bonus (type=unit).
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
### Create coupon promotion
- [POST /v3/project/{project_id}/admin/coupon](https://developers.xsolla.com/api/liveops/promotions-coupons/admin-create-coupon.md): Creates a coupon promotion.
### Get list of coupon promotions
- [GET /v3/project/{project_id}/admin/coupon](https://developers.xsolla.com/api/liveops/promotions-coupons/get-coupons.md): Gets the list of coupon promotions of a project.
### Update coupon promotion
- [PUT /v3/project/{project_id}/admin/coupon/{external_id}](https://developers.xsolla.com/api/liveops/promotions-coupons/update-coupon-promotion.md): Updates a coupon promotion.
### Get coupon promotion
- [GET /v3/project/{project_id}/admin/coupon/{external_id}](https://developers.xsolla.com/api/liveops/promotions-coupons/get-coupon.md): Gets a specified coupon promotion.
### Delete coupon promotion
- [DELETE /v3/project/{project_id}/admin/coupon/{external_id}](https://developers.xsolla.com/api/liveops/promotions-coupons/delete-coupon-promotion.md): Deletes coupon promotion. The deleted promotion:
* Disappears from the list of promotions set up in your project.
* Is no longer applied to the item catalog. User can’t get bonus items with this promotion.
After deletion, the promotion can’t be restored.
Coupon codes from the deleted promotion can be added to existing promotions.
### Activate coupon promotion
- [PUT /v2/project/{project_id}/admin/coupon/{external_id}/activate](https://developers.xsolla.com/api/liveops/promotions-coupons/activate-coupon.md): Activates a coupon promotion.
Created coupon promotion is disabled by default.
It will not be ready for redemption until you activate it.
Use this endpoint to enable and activate a coupon promotion.
### Deactivate coupon promotion
- [PUT /v2/project/{project_id}/admin/coupon/{external_id}/deactivate](https://developers.xsolla.com/api/liveops/promotions-coupons/deactivate-coupon.md): Deactivates a coupon promotion.
Created coupon promotion is disabled by default.
It will not be ready for redemption until you activate it.
Use this endpoint to disable and deactivate a coupon promotion.
### Create coupon code
- [POST /v2/project/{project_id}/admin/coupon/{external_id}/code](https://developers.xsolla.com/api/liveops/promotions-coupons/create-coupon-code.md): Creates coupon code.
### Get coupon codes
- [GET /v2/project/{project_id}/admin/coupon/{external_id}/code](https://developers.xsolla.com/api/liveops/promotions-coupons/get-coupon-codes.md): Gets coupon codes.
### Generate coupon codes
- [PUT /v2/project/{project_id}/admin/coupon/{external_id}/code/generate](https://developers.xsolla.com/api/liveops/promotions-coupons/generate-coupon-codes.md): Generates coupon codes.
### Get coupon limit for specified user
- [GET /v2/project/{project_id}/admin/user/limit/coupon/external_id/{external_id}](https://developers.xsolla.com/api/liveops/promotions-coupons/get-coupon-user-limit.md): Gets the remaining number of times the specified user can use the coupon.
User limit API allows you to limit the number of times users can use a coupon. For configuring the user limit itself, go to the Admin section:
* Coupons
### Get unique coupon code limits
- [GET /v2/project/{project_id}/admin/code/limit/coupon/external_id/{external_id}](https://developers.xsolla.com/api/liveops/promotions-coupons/get-coupon-code-limit.md): Gets the remaining number of times codes can be used. For filtering the codes, use the codes query parameter.
For configuring the code limit itself, go to the Admin section:
* Coupons
## Promo codes
Call API methods from this subsection to configure and manage promo code promotions.
Note
Refer to our documentation for detailed information about promo codes.
### Redeem promo code
- [POST /v2/project/{project_id}/promocode/redeem](https://developers.xsolla.com/api/liveops/promotions-promo-codes/redeem-promo-code.md): Redeems a code of promo code promotion.
After redeeming a promo code, the user will get free items and/or the price of the cart and/or particular items will be decreased.
### Remove promo code from cart
- [PUT /v2/project/{project_id}/promocode/remove](https://developers.xsolla.com/api/liveops/promotions-promo-codes/remove-cart-promo-code.md): Removes a promo code from a cart.
After the promo code is removed, the total price of all items in the cart will be recalculated without bonuses and discounts provided by a promo code.
### Get promo code rewards
- [GET /v2/project/{project_id}/promocode/code/{promocode_code}/rewards](https://developers.xsolla.com/api/liveops/promotions-promo-codes/get-promo-code-rewards-by-code.md): Gets promo code rewards by its code.
Can be used to allow users to choose one of many items as a bonus.
The usual case is choosing a DRM if the promo code contains a game as a bonus (type=unit).
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
### Create promo code promotion
- [POST /v3/project/{project_id}/admin/promocode](https://developers.xsolla.com/api/liveops/promotions-promo-codes/create-promo-code.md): Creates a promo code promotion.
### Get list of promo code promotions
- [GET /v3/project/{project_id}/admin/promocode](https://developers.xsolla.com/api/liveops/promotions-promo-codes/get-promo-codes.md): Gets the list of promo codes of a project.
### Update promo code promotion
- [PUT /v3/project/{project_id}/admin/promocode/{external_id}](https://developers.xsolla.com/api/liveops/promotions-promo-codes/update-promo-code.md): Updates a promo code promotion.
### Get promo code promotion
- [GET /v3/project/{project_id}/admin/promocode/{external_id}](https://developers.xsolla.com/api/liveops/promotions-promo-codes/get-promo-code.md): Gets a specified promo code promotion.
### Delete promo code promotion
- [DELETE /v3/project/{project_id}/admin/promocode/{external_id}](https://developers.xsolla.com/api/liveops/promotions-promo-codes/delete-promo-code.md): Deletes promo code promotion. The deleted promotion:
* Disappears from the list of promotions set up in your project.
* Is no longer applied to the item catalog and the cart. User can’t get bonus items or purchase items using this promotion.
After deletion, the promotion can’t be restored.
Promo codes from the deleted promotion can be added to existing promotions.
### Activate promo code promotion
- [PUT /v2/project/{project_id}/admin/promocode/{external_id}/activate](https://developers.xsolla.com/api/liveops/promotions-promo-codes/activate-promo-code.md): Activates a promo code promotion.
Created promo code promotion is disabled by default.
It will not be ready for redemption until you activate it.
Use this endpoint to enable and activate a promo code promotion.
### Deactivate promo code promotion
- [PUT /v2/project/{project_id}/admin/promocode/{external_id}/deactivate](https://developers.xsolla.com/api/liveops/promotions-promo-codes/deactivate-promo-code.md): Deactivates a promo code promotion.
Created promo code promotion is disabled by default.
It will not be ready for redemption until you activate it.
Use this endpoint to disable and deactivate a promo code promotion.
### Create code for promo code promotion
- [POST /v2/project/{project_id}/admin/promocode/{external_id}/code](https://developers.xsolla.com/api/liveops/promotions-promo-codes/create-promo-code-code.md): Creates code for a promo code promotion.
### Get codes of promo code promotion
- [GET /v2/project/{project_id}/admin/promocode/{external_id}/code](https://developers.xsolla.com/api/liveops/promotions-promo-codes/get-promocode-codes.md): Gets codes of a promo code promotion.
### Generate codes for promo code promotion
- [PUT /v2/project/{project_id}/admin/promocode/{external_id}/code/generate](https://developers.xsolla.com/api/liveops/promotions-promo-codes/generate-promo-code-codes.md): Generates codes for a promo code promotion.
### Get promo code limit for specified user
- [GET /v2/project/{project_id}/admin/user/limit/promocode/external_id/{external_id}](https://developers.xsolla.com/api/liveops/promotions-promo-codes/get-promo-code-user-limit.md): Gets the remaining number of times the specified user can use the promo code.
User limit API allows you to limit the number of times users can use a promo code. For configuring the user limit itself, go to the Admin section:
* Promo Codes
### Get promo code limit for codes
- [GET /v2/project/{project_id}/admin/code/limit/promocode/external_id/{external_id}](https://developers.xsolla.com/api/liveops/promotions-promo-codes/get-promo-code-code-limit.md): Gets the remaining number of times codes can be used. For filtering the codes, use the codes query parameter.
For configuring the code limit itself, go to the Admin section:
* Promo Codes
## Unique catalog offers
Call API methods from this subsection to configure and manage unique catalog offers.
Note
Refer to our documentation for detailed information about unique offers.
### Create unique catalog offer promotion
- [POST /v3/project/{project_id}/admin/unique_catalog_offer](https://developers.xsolla.com/api/liveops/promotions-unique-catalog-offers/admin-create-unique-catalog-offer.md): Creates a unique catalog offer promotion.
### Get list of unique catalog offer promotions
- [GET /v3/project/{project_id}/admin/unique_catalog_offer](https://developers.xsolla.com/api/liveops/promotions-unique-catalog-offers/get-unique-catalog-offers.md): Gets the list of unique catalog offer promotions of a project.
### Update unique catalog offer promotion
- [PUT /v3/project/{project_id}/admin/unique_catalog_offer/{external_id}](https://developers.xsolla.com/api/liveops/promotions-unique-catalog-offers/update-unique-catalog-offer-promotion.md): Updates the unique catalog offer promotion.
### Get unique catalog offer promotion
- [GET /v3/project/{project_id}/admin/unique_catalog_offer/{external_id}](https://developers.xsolla.com/api/liveops/promotions-unique-catalog-offers/get-unique-catalog-offer.md): Gets the specified unique catalog offer promotion.
### Delete unique catalog offer promotion
- [DELETE /v3/project/{project_id}/admin/unique_catalog_offer/{external_id}](https://developers.xsolla.com/api/liveops/promotions-unique-catalog-offers/delete-unique-catalog-offer-promotion.md): Deletes unique catalog offer promotion. The deleted promotion:
* Disappears from the list of promotions set up in your project.
* Is no longer applied to the item catalog and the cart. User can’t buy items with this promotion.
After deletion, the promotion can’t be restored.
### Activate unique catalog offer promotion
- [PUT /v2/project/{project_id}/admin/unique_catalog_offer/{external_id}/activate](https://developers.xsolla.com/api/liveops/promotions-unique-catalog-offers/activate-unique-catalog-offer.md): Activates a unique catalog offer promotion.
The created unique catalog offer promotion is disabled by default.
It cannot be redeemed until you activate it.
Use this endpoint to enable and activate a coupon promotion.
### Deactivate unique catalog offer promotion
- [PUT /v2/project/{project_id}/admin/unique_catalog_offer/{external_id}/deactivate](https://developers.xsolla.com/api/liveops/promotions-unique-catalog-offers/deactivate-unique-catalog-offer.md): Deactivates a unique catalog offer promotion.
The created unique catalog offer promotion is disabled by default.
It cannot be redeemed until you activate it.
Use this endpoint to disable and deactivate a coupon promotion.
### Create unique catalog offer code
- [POST /v2/project/{project_id}/admin/unique_catalog_offer/{external_id}/code](https://developers.xsolla.com/api/liveops/promotions-unique-catalog-offers/create-unique-catalog-offer-code.md): Creates unique catalog offer code.
### Get unique catalog offer codes
- [GET /v2/project/{project_id}/admin/unique_catalog_offer/{external_id}/code](https://developers.xsolla.com/api/liveops/promotions-unique-catalog-offers/get-unique-catalog-offer-codes.md): Gets unique catalog offer codes.
### Generate unique catalog offer codes
- [PUT /v2/project/{project_id}/admin/unique_catalog_offer/{external_id}/code/generate](https://developers.xsolla.com/api/liveops/promotions-unique-catalog-offers/generate-unique-catalog-offer-codes.md): Generates unique catalog offer codes.
## Discounts
Call API methods from this subsection to configure and manage discount promotions.
Note
Refer to our documentation for detailed information about discounts.
### Create discount promotion for item
- [POST /v3/project/{project_id}/admin/promotion/item](https://developers.xsolla.com/api/liveops/promotions-discounts/create-item-promotion.md): Creates a discount promotion for an item.
Promotions provide a discount (%) on items.
The discount will be applied to all prices of the specified items.
### Get list of item promotions
- [GET /v3/project/{project_id}/admin/promotion/item](https://developers.xsolla.com/api/liveops/promotions-discounts/get-item-promotion-list.md): Get the list of item promotions of a project.
Promotions provide a discount (%) on items.
The discount will be applied to all prices of the specified items.
### Update item promotion
- [PUT /v3/project/{project_id}/admin/promotion/{promotion_id}/item](https://developers.xsolla.com/api/liveops/promotions-discounts/update-item-promotion.md): Updates the promotion.
NoteNew data will replace old data. If you want to update only a part of a promotion, you should transfer all required data in request as well.
Promotions provide a discount (%) on items.
The discount will be applied to all prices of the specified items.
### Get item promotion
- [GET /v3/project/{project_id}/admin/promotion/{promotion_id}/item](https://developers.xsolla.com/api/liveops/promotions-discounts/get-item-promotion.md): Gets the promotion applied to particular items.
Promotions provide a discount (%) on items.
The discount will be applied to all prices of the specified items.
### Delete item promotion
- [DELETE /v3/project/{project_id}/admin/promotion/{promotion_id}/item](https://developers.xsolla.com/api/liveops/promotions-discounts/delete-item-promotion.md): Deletes discount promotion. The deleted promotion:
* Disappears from the list of promotions set up in your project.
* Is no longer applied to the item catalog and the cart. User can’t buy items with this promotion.
After deletion, the promotion can’t be restored.
## Bonuses
Call API methods from this subsection to configure and manage bonus promotions.
Note
Refer to our documentation for detailed information about bonuses.
### Create bonus promotion
- [POST /v3/project/{project_id}/admin/promotion/bonus](https://developers.xsolla.com/api/liveops/promotions-bonuses/create-bonus-promotion.md): Creates the bonus promotion.
Promotion adds free bonus items to the purchase made by a user.
The promotion can be applied to every purchase within a project or to a purchase that includes particular items.
### Get list of bonus promotions
- [GET /v3/project/{project_id}/admin/promotion/bonus](https://developers.xsolla.com/api/liveops/promotions-bonuses/get-bonus-promotion-list.md): Gets the list of bonus promotions of a project.
Promotion adds free bonus items to the purchase made by a user.
The promotion can be applied to every purchase within a project or to a purchase that includes particular items.
### Update bonus promotion
- [PUT /v3/project/{project_id}/admin/promotion/{promotion_id}/bonus](https://developers.xsolla.com/api/liveops/promotions-bonuses/update-bonus-promotion.md): Updates the promotion.
NoteNew data will replace old data. If you want to update only a part of a promotion, you should transfer all required data in request as well.
Promotion adds free bonus items to the purchase made by a user.
The promotion can be applied to every purchase within a project or to a purchase that includes particular items.
### Get bonus promotion
- [GET /v3/project/{project_id}/admin/promotion/{promotion_id}/bonus](https://developers.xsolla.com/api/liveops/promotions-bonuses/get-bonus-promotion.md): Gets the bonus promotion.
Promotion adds free bonus items to the purchase made by a user.
The promotion can be applied to every purchase within a project or to a purchase that includes particular items.
### Delete bonus promotion
- [DELETE /v3/project/{project_id}/admin/promotion/{promotion_id}/bonus](https://developers.xsolla.com/api/liveops/promotions-bonuses/delete-bonus-promotion.md): Deletes bonus promotion. The deleted promotion:
* Disappears from the list of promotions set up in your project.
* Is no longer applied to the item catalog and the cart. User can’t get bonus items with this promotion.
After deletion, the promotion can’t be restored.
## Personalized catalog
Personalization allows you to specify the conditions for displaying the item catalog and applying promotions only for specific authorized users. Conditions are defined based on user attributes and allow you to offer items and promotions that are most relevant to particular users.
The following personalization types are available:
* [Xsolla-side personalization](/liveops/promotion-tools/personalization/#guides_personalization_on_xsolla_side). Personalization rules and logic are configured and stored on the Xsolla side. You pass user attributes, and Xsolla uses them to generate a personalized catalog.
* [Partner-side personalization](/liveops/promotion-tools/personalization/#guides_personalization_on_partner_side). You configure personalization rules and logic on your side and send a final catalog payload for a specific user to Xsolla.
Note
You can use only one personalization type. To change it, follow the
instructions.
To configure personalization on the Xsolla side using the Xsolla API:
1. Create items using the API calls from the **Admin** subsection of the [Virtual items and currency](/api/catalog/virtual-items-currency-admin/admin-get-virtual-items-list/), [Bundles](/api/catalog/bundles-admin/admin-create-bundle) or [Game keys](/api/catalog/game-keys-admin) groups.
2. [Set up user attributes using the Xsolla Login API](/liveops/promotion-tools/personalization/#web_shop_guide_personalization_setting_attributes) and keep them synchronized by updating data in Xsolla whenever changes occur in your game.
3. Configure personalization for items or promotions:
* To personalize the item catalog, define catalog display rules using the [Create catalog filter rule](/api/liveops/personalized-catalog/create-filter-rule) API call:
* In the [attribute_conditions](/api/liveops/personalized-catalog/create-filter-rule#personalized-catalog/create-filter-rule/t=request&path=attribute_conditions) array, specify the conditions that determine item availability based on user attributes.
* In the [items](/api/liveops/personalized-catalog/create-filter-rule#personalized-catalog/create-filter-rule/t=request&path=items) array, provide the list of items that should be visible to the user if their attributes match the specified conditions.
* To configure personalized promotions, use the [create and update API calls for the required promotion type](/api/liveops/promotions-discounts/create-item-promotion). In the [attribute_conditions](/api/liveops/promotions-discounts/create-item-promotion) array, specify the conditions that determine promotion availability based on user attributes.
4. Pass the [user JWT](/api/login/getting-user-token?#getting-user-token) with user attributes to the [catalog retrieval API calls](https://developers.xsolla.com/api/catalog/virtual-items-currency-catalog/get-virtual-items) to receive a personalized catalog.
**Sequence for configuring and applying Xsolla-side personalization for item catalog:**

**Sequence for configuring and applying Xsolla-side personalization for promotions:**

Note
Detailed information is provided:
### Get list of catalog filter rules
- [GET /v2/project/{project_id}/admin/user/attribute/rule](https://developers.xsolla.com/api/liveops/personalized-catalog/get-filter-rules.md): Gets all rules applying to user attributes.
### Create catalog filter rule
- [POST /v2/project/{project_id}/admin/user/attribute/rule](https://developers.xsolla.com/api/liveops/personalized-catalog/create-filter-rule.md): Create rule for user attributes.
### Get all catalog rules for searching on client-side
- [GET /v2/project/{project_id}/admin/user/attribute/rule/all](https://developers.xsolla.com/api/liveops/personalized-catalog/get-all-filter-rules.md): Gets a list of all catalog rules for searching on the client-side.
AttentionReturns only rule id, name and is_enabled
### Get catalog filter rule
- [GET /v2/project/{project_id}/admin/user/attribute/rule/{rule_id}](https://developers.xsolla.com/api/liveops/personalized-catalog/get-filter-rule-by-id.md): Get specific rule applying to user attributes.
### Update catalog filter rule
- [PUT /v2/project/{project_id}/admin/user/attribute/rule/{rule_id}](https://developers.xsolla.com/api/liveops/personalized-catalog/update-filter-rule-by-id.md): Updates a specific rule applying to user attributes. The default value will be used for a not specified property (if property is not required).
### Patch catalog filter rule
- [PATCH /v2/project/{project_id}/admin/user/attribute/rule/{rule_id}](https://developers.xsolla.com/api/liveops/personalized-catalog/patch-filter-rule-by-id.md): Updates a specific rule applying to user attributes. The current value will be used for a not specified property.
### Delete catalog filter rule
- [DELETE /v2/project/{project_id}/admin/user/attribute/rule/{rule_id}](https://developers.xsolla.com/api/liveops/personalized-catalog/delete-filter-rule-by-id.md): Deletes a specific rule.
## Management
### Refresh all promotion limits for specified user
- [DELETE /v2/project/{project_id}/admin/user/limit/promotion/all](https://developers.xsolla.com/api/liveops/user-limits-admin/reset-all-user-promotions-limit.md): Refreshes all limits across all promotions for the specified user so they can use these promotions again.
User limit API allows you to limit the number of times users can use a promotion. For configuring the user limit itself, go to the Admin section of the desired promotion type:
* Discount Promotions
* Bonus Promotions
### Refresh promotion limit for users
- [DELETE /v2/project/{project_id}/admin/user/limit/promotion/id/{promotion_id}/all](https://developers.xsolla.com/api/liveops/user-limits-admin/reset-user-promotion-limit.md): Refreshes the promotion limit so a user can use this promotion again. If the user parameter is null, this call refreshes this limit for all users.
User limit API allows you to limit the number of times users can use a promotion. For configuring the user limit itself, go to the Admin section of the desired promotion type:
* Discount Promotions
* Bonus Promotions
### Get promotion limit for specified user
- [GET /v2/project/{project_id}/admin/user/limit/promotion/id/{promotion_id}](https://developers.xsolla.com/api/liveops/user-limits-admin/get-user-promotion-limit.md): Gets the remaining number of times the specified user can use the promotion within the limit applied.
User limit API allows you to limit the number of times users can use a promotion. For configuring the user limit itself, go to the Admin section of the desired promotion type:
* Discount Promotions
* Bonus Promotions
### Increase promotion limit for specified user
- [POST /v2/project/{project_id}/admin/user/limit/promotion/id/{promotion_id}](https://developers.xsolla.com/api/liveops/user-limits-admin/add-user-promotion-limit.md): Increases the remaining number of times the specified user can use the promotion within the limit applied.
User limit API allows you to limit the number of times users can use a promotion. For configuring the user limit itself, go to the Admin section of the desired promotion type:
* Discount Promotions
* Bonus Promotions
### Set promotion limit for specified user
- [PUT /v2/project/{project_id}/admin/user/limit/promotion/id/{promotion_id}](https://developers.xsolla.com/api/liveops/user-limits-admin/set-user-promotion-limit.md): Sets the number of times the specified user can use a promotion within the limit applied after it was increased or decreased.
User limit API allows you to limit the number of times users can use a promotion. For configuring the user limit itself, go to the Admin section of the desired promotion type:
* Discount Promotions
* Bonus Promotions
### Decrease promotion limit for specified user
- [DELETE /v2/project/{project_id}/admin/user/limit/promotion/id/{promotion_id}](https://developers.xsolla.com/api/liveops/user-limits-admin/remove-user-promotion-limit.md): Decreases the remaining number of times the specified user can use a promotion within the limit applied.
User limit API allows you to limit the number of times users can use a promotion. For configuring the user limit itself, go to the Admin section of the desired promotion type:
* Discount Promotions
* Bonus Promotions
## Admin
### Get list of value points
- [GET /v2/project/{project_id}/admin/items/value_points](https://developers.xsolla.com/api/liveops/reward-chain-value-points-admin/admin-get-value-points-list.md): Gets the list of value points within a project for administration.
### Create value point
- [POST /v2/project/{project_id}/admin/items/value_points](https://developers.xsolla.com/api/liveops/reward-chain-value-points-admin/admin-create-value-points.md): Creates a value point.
### Get value point
- [GET /v2/project/{project_id}/admin/items/value_points/sku/{item_sku}](https://developers.xsolla.com/api/liveops/reward-chain-value-points-admin/admin-get-value-point.md): Gets a value point by the SKU within a project for administration.
### Update value point
- [PUT /v2/project/{project_id}/admin/items/value_points/sku/{item_sku}](https://developers.xsolla.com/api/liveops/reward-chain-value-points-admin/admin-update-value-point.md): Updates a value point identified by an SKU.
### Delete value points
- [DELETE /v2/project/{project_id}/admin/items/value_points/sku/{item_sku}](https://developers.xsolla.com/api/liveops/reward-chain-value-points-admin/admin-delete-value-point.md): Deletes a value point identified by an SKU.
### Get list of items with value points
- [GET /v2/project/{project_id}/admin/items/{value_point_sku}/value_points/rewards](https://developers.xsolla.com/api/liveops/reward-chain-value-points-admin/admin-get-items-value-point-reward.md): Gets list of all items with value points within a project for administration.
### Set value points for items
- [PUT /v2/project/{project_id}/admin/items/{value_point_sku}/value_points/rewards](https://developers.xsolla.com/api/liveops/reward-chain-value-points-admin/admin-set-items-value-point-reward.md): Assigns value points to one or several items by an SKU. Users receive value points after they purchase these items.
Note that this PUT request overwrites all previously set value points for items in the project.
To avoid unintentional deletion of value points, include all items and their respective value points in each PUT request.
If you only want to update the value points for a specific item while preserving the value points of other items, you should retrieve the current set of value points using a GET request, modify the desired item's value points, and then send the modified set of value points back with the updated value points for the specific item.
### Partially update value points for items
- [PATCH /v2/project/{project_id}/admin/items/{value_point_sku}/value_points/rewards](https://developers.xsolla.com/api/liveops/reward-chain-value-points-admin/admin-patch-items-value-point-reward.md): Partially updates the number of value points for one or more items by the item’s SKU. Users receive these value points after purchasing the specified items.
Principles of updating value points:
* If an item does not yet have value points, sending a non-zero value in the amount field creates them.
* If an item already has value points, sending a non-zero value in the amount field updates them.
* If amount is set to 0, the existing value points for that item are deleted.
Unlike the PUT method (Set value points for items), this PATCH method does not overwrite all existing value points for items in the project, it only updates the specified items.
A single request can update up to 100 items. Duplicate item SKUs cannot be included in the same request.
### Delete value points from items
- [DELETE /v2/project/{project_id}/admin/items/{value_point_sku}/value_points/rewards](https://developers.xsolla.com/api/liveops/reward-chain-value-points-admin/admin-delete-items-value-point-reward.md): Removes value point rewards from ALL items.
### Get list of reward chains
- [GET /v3/project/{project_id}/admin/reward_chain](https://developers.xsolla.com/api/liveops/reward-chain-value-points-admin/admin-get-reward-chains.md): Gets list of reward chains.
AttentionAll projects have the limitation to the number of items that you can get in the response. The default and maximum value is 10 items per response. To get more data page by page, use limit and offset fields.
### Create reward chain
- [POST /v3/project/{project_id}/admin/reward_chain](https://developers.xsolla.com/api/liveops/reward-chain-value-points-admin/admin-create-reward-chain.md): Creates reward chain.
### Get reward chain
- [GET /v3/project/{project_id}/admin/reward_chain/id/{reward_chain_id}](https://developers.xsolla.com/api/liveops/reward-chain-value-points-admin/admin-get-reward-chain.md): Gets particular reward chain.
### Update reward chain
- [PUT /v3/project/{project_id}/admin/reward_chain/id/{reward_chain_id}](https://developers.xsolla.com/api/liveops/reward-chain-value-points-admin/admin-update-reward-chain.md): Updates particular reward chain.
### Delete reward chain
- [DELETE /v3/project/{project_id}/admin/reward_chain/id/{reward_chain_id}](https://developers.xsolla.com/api/liveops/reward-chain-value-points-admin/admin-delete-reward-chain.md): Deletes particular reward chain.
### Toggle reward chain
- [PUT /v3/project/{project_id}/admin/reward_chain/id/{reward_chain_id}/toggle](https://developers.xsolla.com/api/liveops/reward-chain-value-points-admin/admin-toggle-reward-chain.md): Enable/disable reward chain.
### Reset reward chain
- [POST /v3/project/{project_id}/admin/reward_chain/id/{reward_chain_id}/reset](https://developers.xsolla.com/api/liveops/reward-chain-value-points-admin/admin-reset-reward-chain.md): Resets the value points balance and progress of all users in the reward chain. The balance is tied to the value points type, not to a specific reward chain. If these value points are used in other chains, the balance will be reset in all chains that use these value points. After the reset, you can update the reward chain’s validity period, and users will be able to progress through it again. The clan balance is calculated as the sum of its members’ balances. Therefore, after the reset, the clan balance is also reset. This request is irreversible and applies to all users of the project.
Notice
You should not reset the reward chain during its validity period. In this case, users may lose earned value points before they claim their reward.
## Client
### Get current user's reward chains
- [GET /v2/project/{project_id}/user/reward_chain](https://developers.xsolla.com/api/liveops/reward-chain-client/get-reward-chains-list.md): Client endpoint. Gets the current user’s reward chains.
Attention
All projects have the limitation to the number of items that you can
get in the response. The default and maximum value is 50 items
per response. To get more data page by page, use limit
and offset fields.
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
### Get current user's value point balance
- [GET /v2/project/{project_id}/user/reward_chain/{reward_chain_id}/balance](https://developers.xsolla.com/api/liveops/reward-chain-client/get-user-reward-chain-balance.md): Client endpoint. Gets the current user’s value point balance.
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
### Claim step reward
- [POST /v2/project/{project_id}/user/reward_chain/{reward_chain_id}/step/{step_id}/claim](https://developers.xsolla.com/api/liveops/reward-chain-client/claim-user-reward-chain-step-reward.md): Client endpoint. Claims the current user’s step reward from a reward chain.
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
## Clans client
### Get top 10 contributors to reward chain under clan
- [GET /v2/project/{project_id}/user/clan/contributors/{reward_chain_id}/top](https://developers.xsolla.com/api/liveops/clan-reward-chain-client/get-user-clan-top-contributors.md): Retrieves the list of top 10 contributors to the specific reward chain under the current user's clan. If a user doesn't belong to a clan, the call returns an empty array.
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
### Update current user's clan
- [PUT /v2/project/{project_id}/user/clan/update](https://developers.xsolla.com/api/liveops/clan-reward-chain-client/user-clan-update.md): Updates a current user's clan via user attributes. Claims all rewards from reward chains that were not claimed for a previous clan and returns them in the response. If the user was in a clan and now is not — their inclusion in the clan will be revoked. If the user changed the clan — the clan will be changed.
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
## Admin
### Get list of daily rewards
- [GET /v2/project/{project_id}/admin/daily_chain](https://developers.xsolla.com/api/liveops/daily-chain-admin/admin-get-daily-chains.md): Gets a list of daily rewards for administration.
NoticeA method returns a paginated list of items. The maximum and default value is 50 items per response. To get more items from the list, use the limit and offset parameters and fetch more pages. For example, when calling a method with limit = 25 and offset = 100, the response returns 25 items starting from the 101st item in the overall list.
### Create daily reward
- [POST /v2/project/{project_id}/admin/daily_chain](https://developers.xsolla.com/api/liveops/daily-chain-admin/admin-create-daily-chain.md): Creates a daily reward.
### Get daily reward
- [GET /v2/project/{project_id}/admin/daily_chain/id/{daily_chain_id}](https://developers.xsolla.com/api/liveops/daily-chain-admin/admin-get-daily-chain.md): Gets a particular daily reward for administration.
### Update daily reward
- [PUT /v2/project/{project_id}/admin/daily_chain/id/{daily_chain_id}](https://developers.xsolla.com/api/liveops/daily-chain-admin/admin-update-daily-chain.md): Updates a particular daily reward.
### Delete daily reward
- [DELETE /v2/project/{project_id}/admin/daily_chain/id/{daily_chain_id}](https://developers.xsolla.com/api/liveops/daily-chain-admin/admin-delete-daily-chain.md): Deletes a particular daily reward.
### Toggle daily reward
- [PUT /v2/project/{project_id}/admin/daily_chain/id/{daily_chain_id}/toggle](https://developers.xsolla.com/api/liveops/daily-chain-admin/admin-toggle-daily-chain.md): Enables or disables a daily reward.
### Reset daily reward
- [POST /v2/project/{project_id}/admin/daily_chain/id/{daily_chain_id}/reset](https://developers.xsolla.com/api/liveops/daily-chain-admin/admin-reset-daily-chain.md): Resets progress for all users in the daily reward. Applies only to daily rewards of the rolling type.
## Client
### Get current user's daily rewards
- [GET /v2/project/{project_id}/user/daily_chain](https://developers.xsolla.com/api/liveops/daily-chain-client/get-daily-chains-list.md): Client endpoint. Gets the current user's daily rewards.
NoticeA method returns a paginated list of items. The maximum and default value is 50 items per response. To get more items from the list, use the limit and offset parameters and fetch more pages. For example, when calling a method with limit = 25 and offset = 100, the response returns 25 items starting from the 101st item in the overall list.
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
### Get current user's daily reward by its ID
- [GET /v2/project/{project_id}/user/daily_chain/{daily_chain_id}](https://developers.xsolla.com/api/liveops/daily-chain-client/get-user-daily-chain-by-id.md): Client endpoint. Gets the current user’s daily reward by its ID.
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
### Claim daily reward step
- [POST /v2/project/{project_id}/user/daily_chain/{daily_chain_id}/step/number/{step_number}/claim](https://developers.xsolla.com/api/liveops/daily-chain-client/claim-user-daily-chain-step-reward.md): Client endpoint. Claims the current user's step reward from a daily reward. All steps can only be claimed in sequential order. The reward for a missed step cannot be obtained for virtual or real currency, or by watching an ad
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
## Admin
### Get list of offer chains
- [GET /v2/project/{project_id}/admin/offer_chain](https://developers.xsolla.com/api/liveops/offer-chain-admin/admin-get-offer-chains.md): Gets list of offer chains for administration.
NoticeAll projects have a limit on to the number of items that can be returned in a single response. The default and maximum value is 10 items per response. To get more data, use the limit and offset query parameters for pagination.
### Create offer chain
- [POST /v2/project/{project_id}/admin/offer_chain](https://developers.xsolla.com/api/liveops/offer-chain-admin/admin-create-offer-chain.md): Creates an offer chain.
### Get offer chain
- [GET /v2/project/{project_id}/admin/offer_chain/id/{offer_chain_id}](https://developers.xsolla.com/api/liveops/offer-chain-admin/admin-get-offer-chain.md): Gets a particular offer chain for administration.
### Update offer chain
- [PUT /v2/project/{project_id}/admin/offer_chain/id/{offer_chain_id}](https://developers.xsolla.com/api/liveops/offer-chain-admin/admin-update-offer-chain.md): Updates a particular offer chain.
### Delete offer chain
- [DELETE /v2/project/{project_id}/admin/offer_chain/id/{offer_chain_id}](https://developers.xsolla.com/api/liveops/offer-chain-admin/admin-delete-offer-chain.md): Deletes a particular offer chain.
After deletion:All rewards already received by users are retained.Uncompleted steps become unavailable, and their rewards can no longer be obtained.
Unlike disabling the offer chain via the Toggle offer chain call, deletion is irreversible and user progress is not preserved.
### Toggle offer chain
- [PUT /v2/project/{project_id}/admin/offer_chain/id/{offer_chain_id}/toggle](https://developers.xsolla.com/api/liveops/offer-chain-admin/admin-toggle-offer-chain.md): Enables or disables an offer chain.
When the offer chain is disabled, users temporarily lose access to it, but their progress is preserved.
After the offer chain is re-enabled, users can continue from the step where they left off.
## Client
### Get current user's offer chains
- [GET /v2/project/{project_id}/user/offer_chain](https://developers.xsolla.com/api/liveops/offer-chain-client/get-offer-chains-list.md): Gets the current user’s offer chains.
NoticeAll projects have a limit on the number of items that can be returned in a single response. The default and maximum value is 30 items per response. To get more data, use the limit and offset query parameters for pagination.
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
### Get current user's offer chain by ID
- [GET /v2/project/{project_id}/user/offer_chain/{offer_chain_id}](https://developers.xsolla.com/api/liveops/offer-chain-client/get-user-offer-chain-by-id.md): Gets the current user’s offer chain by the offer chain's ID.
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
### Claim free offer chain step
- [POST /v2/project/{project_id}/user/offer_chain/{offer_chain_id}/step/number/{step_number}/claim](https://developers.xsolla.com/api/liveops/offer-chain-client/claim-user-offer-chain-step-reward.md): Completes the current user’s progression through the offer chain step and grants the associated reward.
Notice
Use this call only for free steps in the offer chain.
For steps that require payment in real currency, use the Create order for paid offer chain step call instead.
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
### Create order for paid offer chain step
- [POST /v2/project/{project_id}/user/offer_chain/{offer_chain_id}/step/number/{step_number}/order](https://developers.xsolla.com/api/liveops/offer-chain-client/order-user-offer-chain-step-reward.md): Creates an order for the item associated with the specified paid offer chain step. The created order gets the new order status.
To open the payment UI in a new window, use the following link: https://secure.xsolla.com/paystation4/?token={token}, where {token} is the received token.
For testing purposes, use this URL: https://sandbox-secure.xsolla.com/paystation4/?token={token}.
Notice
This method must be used on the client side. The user's IP address is used to determine the country, which affects the currency and available payment methods. Using this method from the server side may result in incorrect currency detection and affect payment methods in Pay Station.
Notice
Use this call only for paid offer chain steps.
For free steps, use the Claim free offer chain step call instead.
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
## payment-client-side
### Create order for paid offer chain step
- [POST /v2/project/{project_id}/user/offer_chain/{offer_chain_id}/step/number/{step_number}/order](https://developers.xsolla.com/api/liveops/offer-chain-client/order-user-offer-chain-step-reward.md): Creates an order for the item associated with the specified paid offer chain step. The created order gets the new order status.
To open the payment UI in a new window, use the following link: https://secure.xsolla.com/paystation4/?token={token}, where {token} is the received token.
For testing purposes, use this URL: https://sandbox-secure.xsolla.com/paystation4/?token={token}.
Notice
This method must be used on the client side. The user's IP address is used to determine the country, which affects the currency and available payment methods. Using this method from the server side may result in incorrect currency detection and affect payment methods in Pay Station.
Notice
Use this call only for paid offer chain steps.
For free steps, use the Claim free offer chain step call instead.
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
## Admin
### Get information about upsell in project
- [GET /v2/project/{project_id}/admin/items/upsell](https://developers.xsolla.com/api/liveops/upsell-admin/get-upsell-configurations-for-project-admin.md): Retrieves the information about upsell in project: whether it's enabled, type of upsell, and the SKU list of items that are a part of this upsell.
### Create upsell
- [POST /v2/project/{project_id}/admin/items/upsell](https://developers.xsolla.com/api/liveops/upsell-admin/post-upsell.md): Creates an upsell for a project.
Notice
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
### Update upsell
- [PUT /v2/project/{project_id}/admin/items/upsell](https://developers.xsolla.com/api/liveops/upsell-admin/put-upsell.md): Update an upsell for a project.
Notice
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
### Activate/Deactivate project's upsell
- [PUT /v2/project/{project_id}/admin/items/upsell/{toggle}](https://developers.xsolla.com/api/liveops/upsell-admin/put-upsell-toggle-active-inactive.md): Changes an upsell’s status in a project to be either active or inactive.
Notice
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.
## Client
### Get list of upsell items in project
- [GET /v2/project/{project_id}/items/upsell](https://developers.xsolla.com/api/liveops/upsell-client/get-upsell-for-project-client.md): Gets a list of upsell items in a project if they have already been set up.
Note
This API call uses a user JWT for authorization.
Include the token in the Authorization header in the following format: Bearer <user_JWT>. For more information about user JWT, see the Security block for this call.