---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://yandex.com/dev/games/doc/en/console/purchases.md
  - https://yandex.com/dev/games/doc/hi/console/purchases.md
  - https://yandex.com/dev/games/doc/ko/console/purchases.md
  - https://yandex.com/dev/games/doc/ru/console/purchases.md
  - https://yandex.com/dev/games/doc/tr/console/purchases.md
  - https://yandex.com/dev/games/doc/vi/console/purchases.md
  - https://yandex.com/dev/games/doc/zh/console/purchases.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com/dev/games/doc/en/llms.txt

# In-app purchases

<!-- source: en/_includes/script-common.md -->
<!-- source: en/_includes/script/index-js.md -->

<!-- endsource: en/_includes/script/index-js.md -->

<!-- source: en/_includes/script/requirements-js.md -->

<!-- endsource: en/_includes/script/requirements-js.md -->

<!-- source: en/_includes/script/image-modal-js.md -->

<!-- endsource: en/_includes/script/image-modal-js.md -->
<!-- endsource: en/_includes/script-common.md -->


Enable in-app purchases and earn money from paid services (additional time to complete a level, accessories for the game character, etc.).

Advantages:

- **Platform support**:

  - Marketing campaigns focus on attracting paying users among both Russian and international audiences.
  - The recommendation system shows games with in-app purchases more often.
  - Games with purchases and good metrics can appear in more blocks and selections on the main page.
- **Financial stability**: games with in-app purchases are less affected by seasonality and fluctuations in advertising revenue.
- **Player return rate**: users who have made at least one purchase are more likely to return to the game after spending money on its content.
- **Smooth gameplay**: purchases fit organically into the gameplay, complementing and enhancing it.

{% note alert %}

Before adding purchases, set up [unprocessed payment verification](https://yandex.com/dev/games/doc/en/sdk/sdk-purchases.md#check-purchases).

This check is [mandatory](../concepts/requirements#1-13-1) for passing moderation, so it's important to set it up even for test purchases. If you add purchases to the game and test them before setting up consumption, then after testing, unprocessed payments may remain, which will make passing moderation impossible.

{% endnote %}

## Portal currency {#currency}

The portal currency of the [Yandex Games](https://yandex.com/games/){.external} platform is used to pay for in-game purchases. It is stored in a single balance for all games, which can be replenished using bank cards. The exchange rate of the portal currency to the ruble is dynamic.

{% note info %}

For international payments, the exchange rate of the portal currency to the national currency will depend on the player's country.

{% endnote %}

You can replenish your balance:
- in the header of the catalog;
- in the player's profile;
- during a purchase in the game.

Users can also receive portal currency as a bonus for participating in promotions or purchasing fixed packs.

Both authorized and unauthorized users on Yandex can make in-game purchases. A user can log in directly during the game, including at the time of making a purchase.

The order and conditions for paying royalties will not change with the introduction of portal currency.

{% note alert %}

To display the name and icon of the portal currency in the game, use the [SDK](https://yandex.com/dev/games/doc/en/sdk/sdk-purchases.md#getcatalog) capabilities ([item 1.13.2](https://yandex.com/dev/games/doc/en/concepts/requirements.md#1-13-2)).

{% endnote %}

## Enable purchases {#connect}

### Step 1. Check the cooperation scheme {#check-unified-licensing-model}

1. Open the [Developer Console](https://games.yandex.com/console){.external}.
1. Go to the **Account** section.
1. Check the value of the **Unified licensing model** field:
    - **Connected** — purchases are enabled automatically in all your games. Proceed to [step 3](#update-files).
    - **Not connected** — you need to enable purchases separately. Proceed to [step 2](#connection-request).

### Step 2. Send a request to connect {#connection-request}

1. [Enable monetization](https://yandex.com/dev/games/doc/en/console/adv-monetization.md#enable-int-monetization), including registering with YAN.

    Make sure that in the [partner interface of the Yandex Advertising Network](https://partner.yandex.com/){.external} you have specified the details for payments for advertising and purchases. If not, click the **Add bank details** button, fill in the fields, and send the data.

    After checking the data, the contract status in the interface of the Yandex Advertising Network in the section **Extras → Documents** will change to **Offer accepted**.

    {% note alert %}

    In-game purchases can only be enabled after accepting the offer.

    {% endnote %}

1. Enable purchases. To do this, send an email with request to enable purchases to [games-partners@yandex-team.com](mailto:games-partners@yandex-team.com){.external}. Specify:

   - the name of the game;
   - the identifier (ID) of the game.

   You will receive a reply from [games-partners@yandex-team.com](mailto:games-partners@yandex-team.com){.external} confirming that purchases are allowed.

### Step 3. Add purchases {#add-purchases}

{% note alert %}

The maximum number of purchases is 500.

{% endnote %}

{% list tabs %}

* Single upload

    1. Go to the **In-app purchases** → **Inaps** tab.
    1. Click **Add in-app**.
    1. Fill in the fields:

        #|
        || **Field** | **Description** | **Required** ||
        || **ID** | The identifier of the purchase, which will be passed in the `payments.purchase()` method. | <svg width="30" height="30" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 12C9.53757 12 12 9.53757 12 6.5C12 3.46243 9.53757 1 6.5 1C3.46243 1 1 3.46243 1 6.5C1 9.53757 3.46243 12 6.5 12Z" fill="none" stroke="#67B0F8" stroke-miterlimit="10"/><path d="M4.2312 6.15625L6.08745 8.0125L9.52495 4.50625" stroke="#67B0F8" stroke-miterlimit="10"/></svg> ||
        || **Price in yans** | [Cost of the purchase](#portal-currency-rate) for the user in the portal currency. Integer. | ||
        || **USD (US)** | Approximate cost in US dollars. | ||
        || **EUR** | Approximate cost in euros. | ||
        || **Item Icon** | Size — 256 × 256 pixels. Format — PNG. Will be displayed in the dialog box when paying for the purchase. | ||
        || **Item Name** | The name of the purchase in Russian and English. Will be displayed in the dialog box when paying for the purchase. | <svg width="30" height="30" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 12C9.53757 12 12 9.53757 12 6.5C12 3.46243 9.53757 1 6.5 1C3.46243 1 1 3.46243 1 6.5C1 9.53757 3.46243 12 6.5 12Z" fill="none" stroke="#67B0F8" stroke-miterlimit="10"/><path d="M4.2312 6.15625L6.08745 8.0125L9.52495 4.50625" stroke="#67B0F8" stroke-miterlimit="10"/></svg> ||
        || **Item Description** | Description of the purchase in Russian and English. Will be displayed in the dialog box when paying for the purchase. Limit — 200 characters. | ||
        |#

        {% note tip %}

        Specify the purchase price in any currency — the rest will be calculated automatically according to the regional coefficient table.

        {% endnote %}

    1. Click **Add**. The table with purchases will be updated.


    {% note info %}

    You can upload a [default icon](#default-icon). It will be displayed for in-app purchases that do not have a separate image assigned.

    {% endnote %}

* Bulk upload

    1. Go to the tab **In-app purchases** → **Inaps**.
    1. Familiarize yourself with the example by the link **Download an example** and prepare a file for upload in [CSV format](*csv).

        Check that the mandatory fields are filled in:

        #|
        || **Field** | **Description** | **Mandatory** ||
        || `id` | The purchase identifier that will be passed in the `payments.purchase()` method. | <svg width="30" height="30" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 12C9.53757 12 12 9.53757 12 6.5C12 3.46243 9.53757 1 6.5 1C3.46243 1 1 3.46243 1 6.5C1 9.53757 3.46243 12 6.5 12Z" fill="none" stroke="#67B0F8" stroke-miterlimit="10"/><path d="M4.2312 6.15625L6.08745 8.0125L9.52495 4.50625" stroke="#67B0F8" stroke-miterlimit="10"/></svg> ||
        || `price` | The cost of the purchase for the user in portal currency. Integer. | <svg width="30" height="30" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 12C9.53757 12 12 9.53757 12 6.5C12 3.46243 9.53757 1 6.5 1C3.46243 1 1 3.46243 1 6.5C1 9.53757 3.46243 12 6.5 12Z" fill="none" stroke="#67B0F8" stroke-miterlimit="10"/><path d="M4.2312 6.15625L6.08745 8.0125L9.52495 4.50625" stroke="#67B0F8" stroke-miterlimit="10"/></svg> ||
        || `title_en` | The name of the purchase in English. | <svg width="30" height="30" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 12C9.53757 12 12 9.53757 12 6.5C12 3.46243 9.53757 1 6.5 1C3.46243 1 1 3.46243 1 6.5C1 9.53757 3.46243 12 6.5 12Z" fill="none" stroke="#67B0F8" stroke-miterlimit="10"/><path d="M4.2312 6.15625L6.08745 8.0125L9.52495 4.50625" stroke="#67B0F8" stroke-miterlimit="10"/></svg> ||
        || `description_en` | Description of the purchase in English. Limit — 200 characters. | ||
        || `title_ru` | The name of the purchase in Russian. | <svg width="30" height="30" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 12C9.53757 12 12 9.53757 12 6.5C12 3.46243 9.53757 1 6.5 1C3.46243 1 1 3.46243 1 6.5C1 9.53757 3.46243 12 6.5 12Z" fill="none" stroke="#67B0F8" stroke-miterlimit="10"/><path d="M4.2312 6.15625L6.08745 8.0125L9.52495 4.50625" stroke="#67B0F8" stroke-miterlimit="10"/></svg> ||
        || `description_ru` | Description of the purchase in Russian. Limit — 200 characters. | ||
        |#

    1. Click the **Upload a CSV file** button.

    1. Select purchases for upload on the tabs:

        - **Ready for import** — purchases with new `id`. If they are uploaded, new purchases will be created in the system.
        - **Matches** — purchases whose `id` are already in the system. If they are uploaded, current purchases will be updated.

        On the **Errors** tab, you can see which purchases have a problem. To upload them, go back to step 2 and correct the fields in the [CSV](*csv)file.

        {% note alert %}

        You can upload no more than 100 purchases at a time. If the number of in-apps in the file exceeds the maximum allowed value, the first 100 items will be uploaded.

        {% endnote %}

    1. Click **Import \<N\> in-apps**. The table with purchases will be updated.

    {% note info %}

    To use your own image for an in-app purchase:

    - [Edit](#edit) it and upload a custom icon.

    - Upload a [default icon](#default-icon). It will be displayed for in-app purchases that don't have a separate image set.

    {% endnote %}

{% endlist %}

### Step 4. Update the game source files {#update-files}

1. [Add SDK code](https://yandex.com/dev/games/doc/en/sdk/sdk-purchases.md#install) to the game source files.
1. <!-- source: en/_includes/console/open-console.md -->
   Access the [Games Console](https://games.yandex.com/console){.external} with your developer account.
   <!-- endsource: en/_includes/console/open-console.md -->

1. In the upper left corner of the console, click [Games](https://games.yandex.com/console/applications){.external}.
1. Find the previously uploaded game in the list and click on it.
1. Go to the **Draft** tab.
1. Edit the fields and upload a new archive. For a detailed description of the fields, see the [Filling out the draft](https://yandex.com/dev/games/doc/en/console/add-new-game/draft.md) section.

### Step 5. Publish a new version of the game {#publish-new-version}

{% note tip %}

- Before passing moderation, you can [test the game](https://yandex.com/dev/games/doc/en/console/test-game.md#test-game) on your own.
- If you don't want to submit the game for moderation right away, save it as a draft (the status will change to **Created**), so you can come back to editing the fields later.

{% endnote %}

1. Go to the **Draft** tab.
1. If you want to choose the moment of publishing the game yourself, select the **Postpone publication** option. Otherwise, the game will be published immediately after moderation.
1. Click **Submit for moderation**.

    <!-- source: en/_includes/console/moderation.md -->
    {% note info %}

    If the game was submitted for review more than 100 days ago, you will see a warning that the requirements may have changed. Cancel the moderation submission, review the requirements, and check if the game complies with them. After that, resubmit the game for moderation.

    {% endnote %}
    <!-- endsource: en/_includes/console/moderation.md -->

    The game will be uploaded to the Yandex server and its status will change to **Waiting for moderation**.

    <!-- source: en/_includes/console/moderation.md -->
    The game will be reviewed for compliance with the [requirements](https://yandex.com/dev/games/doc/en/concepts/requirements.md). [Moderation](https://yandex.com/dev/games/doc/en/concepts/moderation.md) usually takes 3–5 working days.
    <!-- endsource: en/_includes/console/moderation.md -->

  Results of the check you will see in the console:

  {% list tabs %}

  - With the Postpone publication option

    - If the game is approved, the draft status will change to **Verified**, the **Publish** button will appear on the **Draft** tab, and the **Purchases are enabled** status will appear on the **In-app purchases** → **Inaps** tab.

      <!-- source: en/_includes/console/updated-game.md -->
      On the **Draft** tab, click **Publish**. After a couple of minutes, the status will change to **Published**, and users will be able to find your game in the [Yandex Games catalog](https://yandex.com/games/){.external}.
      <!-- endsource: en/_includes/console/updated-game.md -->

  - Without the option

    - If the game is approved, the draft status will change to **Published**, and the status on the **In-app purchases** → **Inaps** tab will change to **Purchases are enabled**. Your game will become available in the [Yandex Games catalog](https://yandex.com/games/){.external}.

  {% endlist %}

  - If the game does not pass moderation, the draft will go to the **Rejected** status, and we will write to the email why the game was not accepted. Make the necessary changes and go back to step 1.

After enabling purchases, you can [change](#edit) their parameters.

## Test purchases {#test}

{% note info %}

You can test purchases before submitting for moderation and before publication. To do this, open the game in [draft mode](https://yandex.com/dev/games/doc/en/console/draft-mode.md) or in the [prod environment](https://yandex.com/dev/games/doc/en/concepts/local-launch.md#prod-env).

{% endnote %}

To test purchases, add the login to the list for test purchases:

1. <!-- source: en/_includes/console/open-console.md -->
   Access the [Games Console](https://games.yandex.com/console){.external} with your developer account.
   <!-- endsource: en/_includes/console/open-console.md -->
1. In the upper left corner of the console, click [Games](https://games.yandex.com/console/applications){.external}.
1. Find the game you need in the list and click on it.
1. Go to the **In-app purchases** tab.
1. Select **Settings**.
1. In the **List of logins for test purchases** block:

    1. Enter the login [Yandex ID](https://id.yandex.com/){.external} that you plan to use for testing purchases.
    1. Click the **Add** button. The account will appear in the list.

You will be able to test purchases under this account in a few minutes. No fee will be charged for them.

## Editing Purchases {#edit}

After enabling purchases and publishing the game, you can change their parameters. Make sure they match the current game code and [update](../console/update-game#update-game) it if necessary. This will require re-moderation. Until then, the previous version of the game remains in the catalogue.

To edit or purchases:

1. <!-- source: en/_includes/console/open-console.md -->
   Access the [Games Console](https://games.yandex.com/console){.external} with your developer account.
   <!-- endsource: en/_includes/console/open-console.md -->

1. In the top left corner of the console, click [Games](https://games.yandex.com/console/applications){.external}.
1. Find the previously uploaded game in the list and click on it.
1. Go to the tab **In-app purchases** → **Inaps**.
1. Find the purchase in the list and click on it:
1. Make changes to the necessary [fields](#add-purchases).
1. Click **Edit**.
1. If you changed the game code, [upload a new archive](https://yandex.com/dev/games/doc/en/console/update-game.md).

## Deleting purchases {#delete}

{% note alert %}

Don't forget to delete not only the purchase itself, but also the related code. Otherwise, the user will see the purchase in the game but won't be able to use it.

{% endnote %}

To delete purchases:

1. <!-- source: en/_includes/console/open-console.md -->
   Access the [Games Console](https://games.yandex.com/console){.external} with your developer account.
   <!-- endsource: en/_includes/console/open-console.md -->

1. In the top left corner of the console, click [Games](https://games.yandex.com/console/applications){.external}.
1. Find the previously uploaded game in the list and click on it.
1. Go to the tab **In-app purchases** → **Inaps**.
1. In the table:

    {% list tabs %}

    - Single deletion

        1. Click on the purchase to open the edit window.
        1. Click **Remove**.

    - Bulk deletion

        1. Check the boxes to the left of the purchases you want to select. If you want to select all items, check the box at the top of the purchases table.

            {% note info %}

            You can deselect items in one of the following ways:

            - Uncheck the box at the top of the table.
            - On the right side of the panel with the **Remove** button, click <svg width="13" height="13" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10"><polygon fill="currentColor" points="10,0.714 9.287,0 5,4.286 0.714,0 0,0.714 4.286,5 0,9.285 0.714,10 5,5.714 9.287,10 10,9.285 5.714,5"/></svg>.

            {% endnote %}

        1. Click **Remove**.

    {% endlist %}

1. If you have changed the game code, [upload the new archive](https://yandex.com/dev/games/doc/en/console/update-game.md).

## Default Icon {#default-icon}

{% note tip %}

For each in-app purchase, we recommend using unique, clear, and attractive images that match your game's style.

{% endnote %}

If you don't yet have a unique image for each purchase, or can't create one, you can upload a common icon:

1. Go to the **In-app purchases** tab → **Settings**.
1. In the **Default icon** field, click **Select file**.
1. Add a file with the following parameters:
    - Size — 256 × 256 pixels.
    - Format — PNG.

The default icon will be displayed for all in-app purchases that don't have a separate image set.


## Portal Currency Rate {#portal-currency-rate}

You can find out the cost of a certain amount of portal currency in real money for different countries:

1. <!-- source: en/_includes/console/open-console.md -->
   Access the [Games Console](https://games.yandex.com/console){.external} with your developer account.
   <!-- endsource: en/_includes/console/open-console.md -->

1. In the top left corner of the console, click [Games](https://games.yandex.com/console/applications){.external}.

1. Find the previously uploaded game in the list and click on it.

1. Go to the **In-app purchases** tab.

1. Select **Prices in countries and regions**.

1. In the **The cost of 1 in-app \<X\> yan** field, enter the required amount of portal currency. The result will be displayed below in the table columns:

    - **Your share** — your reward for the purchase made.

    - **The price for the player** — the cost of the purchase for the player in the currency of their country.

## Statistics and Payments for In-Game Purchases {#statistics-payments}

### Payments {#payments}


For granting a license to use the game, Yandex pays a license fee minus taxes (if applicable under the legislation of the Russian Federation).

The reward accumulates until it reaches the payment threshold. As soon as the threshold is reached, Yandex will send you a report with the total amount of the reward by email. The reward itself will be paid the next month.

{% note info %}

Income is calculated for all your games that have in-game purchases enabled.

{% endnote %}

For more details, see section [8. Fees and Payment](https://yandex.com/legal/licensegames/en/#fees-and-payment){.external} of the License Agreement.

### Statistics {#statistics}

You can view a detailed report on in-game purchases in the [Yandex Games console](https://games.yandex.com/console){.external} on the [Purchase metrics](https://yandex.com/dev/games/doc/en/console/purchase-metrics.md) tab.

{% note tip %}

To view data for a specific in-app purchase:

1. In the [Yandex Games Console](https://games.yandex.com/console){.external}, go to the **In-app purchases** tab.
1. Select the purchase you need and click the <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="18" height="18" class="g-icon" fill="currentColor" stroke="none" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M4.5 3h7A1.5 1.5 0 0 1 13 4.5v7a1.5 1.5 0 0 1-1.5 1.5h-7A1.5 1.5 0 0 1 3 11.5v-7A1.5 1.5 0 0 1 4.5 3m-3 1.5a3 3 0 0 1 3-3h7a3 3 0 0 1 3 3v7a3 3 0 0 1-3 3h-7a3 3 0 0 1-3-3zm8.499 6.251a.75.75 0 0 0 1.5 0V8.749a.75.75 0 0 0-1.5 0zm-1.998.75a.75.75 0 0 1-.75-.75V5.249a.75.75 0 1 1 1.5 0v5.502a.75.75 0 0 1-.75.75m-3.498-.75a.75.75 0 0 0 1.5 0V7.249a.75.75 0 1 0-1.5 0z" clip-rule="evenodd"/></svg></svg> **Open product metrics** button.

{% endnote %}

[*csv]: Comma-separated values.