---
title: "Баланс виртуальной валюты"
description: "Смотрите балансы виртуальной валюты пользователя в его профиле и просматривайте историю каждого изменения баланса."
---

:::link
Основная статья: [Виртуальные валюты](virtual-currencies)
:::

В каждом профиле пользователя в [Profiles/CRM](profiles-crm) отображается баланс виртуальной валюты и история всех изменений.

## Просмотр балансов в профиле пользователя \{#view-balances-in-a-user-profile\}

Откройте [профиль](https://app.adapty.io/profiles/users) пользователя. Карточка **Virtual currency** отображает все валюты, которыми владеет пользователь.

Каждая строка содержит:

- **Код** валюты, например `COINS`.
- Текущий **баланс** в виде целого числа.

Балансы обновляются по мере того, как пользователь зарабатывает, тратит или получает кредиты. Баланс не может опуститься ниже 0: транзакция, пытающаяся потратить больше, чем есть у пользователя, завершается ошибкой `insufficient_balance` и ничего не меняет. У профиля без балансов отображается пустая карточка.

Чтобы считать баланс из собственного кода, вызовите [List virtual currency balances](api-adapty/operations/listVirtualCurrencyBalances) в серверном API.

## Просмотр изменений баланса в истории событий \{#review-balance-changes-in-the-event-history\}

Каждое изменение баланса отображается в истории событий профиля, начиная с самого последнего. Каждая запись содержит название изменения и перечень затронутых валют.

В истории отображается три типа событий виртуальной валюты:

- **Virtual currency credited**: покупка, продление или начало пробного периода начислили кредиты.
- **Virtual currency transaction**: серверный вызов API пополнил или списал баланс.
- **Virtual currency expired**: срочные кредиты обнулились в конце расчётного периода или после окончания подписки.

Для каждой изменённой валюты в записи указывается:

- **Virtual currency**: Название и код валюты, например `Gold Coins (COINS)`.
- **Amount**: Изменение со знаком — положительное для пополнения, отрицательное для списания.
- **Balance after**: Баланс валюты после применения изменения.

Одно событие может изменить несколько валют одновременно — например, одна [транзакция](api-adapty/operations/createVirtualCurrencyTransaction) списывает одну валюту и пополняет другую для конвертации между ними.

## Балансы, профили и устройства \{#balances-profiles-and-devices\}

Баланс всегда принадлежит ровно одному [профилю](profiles-crm) и никогда не переходит к другому. Adapty не делится балансами между профилями и не переносит их — в отличие от возможности [делиться уровнями доступа между аккаунтами](profiles-crm#sharing-paid-access-between-user-accounts).

На практике это означает:

- **Идентифицированные пользователи**: идентификатор пользователя всегда указывает на один и тот же профиль, поэтому пользователь видит одинаковый баланс на каждом устройстве, где выполнен вход.
- **Анонимные пользователи**: анонимный профиль может накапливать и тратить кредиты, но существует только на одном устройстве. Когда тот же пользователь открывает приложение на другом устройстве без входа в систему, Adapty создаёт новый анонимный профиль с нулевым балансом.

Чтобы запустить систему виртуальной валюты на разных устройствах, идентифицируйте пользователей. Это можно сделать в коде приложения через SDK (см. [Идентификация пользователей](ios-quickstart-identify) в быстром старте) или на стороне бэкенда через [серверный API](getting-started-with-server-side-api).

Позднее определение пользователя имеет свою особенность: если пользователь получает кредиты анонимно, а затем входит с customer user ID, который уже принадлежит другому профилю, устройство переключится на тот профиль с его балансом. Кредиты, накопленные анонимно, останутся на старом профиле и станут недоступны. Если customer user ID новый, он привязывается к текущему профилю, и пользователь сохраняет баланс. Для надёжности идентифицируйте пользователей до того, как они смогут зарабатывать или покупать кредиты.

В вызовах [server-side API](getting-started-with-server-side-api) идентифицируйте профиль с помощью заголовка `adapty-profile-id` или `adapty-customer-user-id` — оба указывают на один профиль. Для анонимных профилей используйте `adapty-profile-id`.