Связанные аккаунты
Связь объединяет две учетные записи одного проекта для быстрого переключения. После подтверждения она работает в обе стороны. Баланс, склад, игровые аккаунты и история операций не объединяются.
Получить связи
accountLinks
Возвращает подтвержденные, ожидающие и отозванные связи текущего пользователя вместе с доступной квотой.
Результат
| Поле | Тип | Описание |
|---|---|---|
id | ID! | ID связи |
targetId | ID! | ID второй учетной записи |
email | String | Email второй учетной записи |
status | AccountLinkStatus! | PENDING, CONFIRMED или REVOKED |
createdAt | DateTime | Дата создания |
confirmationExpiresAt | DateTime | Срок действия кода для ожидающей связи |
Вместе со списком возвращается accountLinkQuota:
| Поле | Тип | Описание |
|---|---|---|
isUnlimited | Boolean! | Отключен ли общий лимит |
baseLimit | Int | Базовый лимит проекта или null в безлимитном режиме |
effectiveLimit | Int | Итоговый лимит с учетом VIP или null в безлимитном режиме |
used | Int! | Число PENDING и CONFIRMED связей |
remaining | Int | Оставшееся число связей или null в безлимитном режиме |
pendingUsed | Int! | Число заявок, ожидающих подтверждения |
pendingLimit | Int! | Отдельный предел ожидающих заявок |
canCreate | Boolean! | Не исчерпана ли общая квота и предел ожидающих заявок |
Безлимитный режим снимает только общую квоту. pendingLimit продолжает действовать для обеих сторон связи.
{
"documentId": "accountLinks",
"variables": {}
}
{
"data": {
"accountLinks": [
{
"id": "17",
"targetId": "2002",
"status": "CONFIRMED",
"createdAt": "2026-07-23T10:30:00+00:00",
"confirmationExpiresAt": null
}
],
"accountLinkQuota": {
"isUnlimited": false,
"baseLimit": 5,
"effectiveLimit": 9,
"used": 3,
"remaining": 6,
"pendingUsed": 1,
"pendingLimit": 10,
"canCreate": true
}
}
}
Запросить связь
requestAccountLink
Отправляет четырехзначный код на email добавляемой учетной записи. Код действует 30 минут.
Для связи со статусом REVOKED эта же операция начинает привязку заново: переводит связь в PENDING и отправляет новый код. Старый код больше не действует.
Входные данные
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
login | String! | ✓ | Email или телефон второй учетной записи |
password | String! | ✓ | Пароль второй учетной записи |
pin | String | - | PIN текущей учетной записи, если защита включена |
Ошибки
INVALID_CREDENTIALS- логин или пароль неверны.CANNOT_LINK_SELF- указана текущая учетная запись.ACCOUNT_LINK_ALREADY_EXISTS- активная связь уже существует.ACCOUNT_LINK_LIMIT_REACHED- у одного из участников исчерпан доступный лимит.ACCOUNT_LINK_PENDING_LIMIT_REACHED- у одного из участников исчерпан предел ожидающих подтверждения заявок.ACCOUNT_BANNED- вторая учетная запись заблокирована.NOTIFICATION_FAILED- код не удалось доставить.ACCOUNT_LINKS_DISABLED- функция выключена для проекта.TOO_MANY_ATTEMPTS- превышен лимит попыток.
{
"documentId": "requestAccountLink",
"variables": {
"password": "password123",
"pin": "1234"
}
}
{
"data": {
"requestAccountLink": {
"message": "Код подтверждения отправлен"
}
}
}
Подтвердить связь
confirmAccountLink
Подтверждает ожидающую связь кодом, отправленным второй учетной записи.
Входные данные
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
targetAccountId | ID! | ✓ | ID второй учетной записи |
code | String! | ✓ | Четырехзначный код |
Неверный или просроченный код возвращает INVALID_CODE. Частые ошибки ограничиваются отдельно для IP и текущего пользователя.
{
"documentId": "confirmAccountLink",
"variables": {
"targetAccountId": "2002",
"code": "4827"
}
}
{
"data": {
"confirmAccountLink": {
"message": "Учетная запись подключена"
}
}
}
Отключить связь
revokeAccountLink
Отключает ожидающую или подтвержденную связь для обоих участников. Учетные записи и их данные не удаляются.
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
targetAccountId | ID! | ✓ | ID второй учетной записи |
pin | String | - | PIN текущей учетной записи, если защита включена |
{
"documentId": "revokeAccountLink",
"variables": {
"targetAccountId": "2002",
"pin": "1234"
}
}
{
"data": {
"revokeAccountLink": {
"message": "Учетная запись отключена"
}
}
}
Переключить учетную запись
switchAccountLink
Создает новую сессию подтвержденной связанной учетной записи и завершает прежние сессии обоих участников. Клиент должен заменить текущий session token значением sessionId.
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
targetAccountId | ID! | ✓ | ID второй учетной записи |
{
"documentId": "switchAccountLink",
"variables": {
"targetAccountId": "2002"
}
}
{
"data": {
"switchAccountLink": {
"sessionId": "new-session-token",
"sessionEnd": "2026-08-22T10:30:00+00:00",
"message": "Вы переключились на связанную учетную запись",
"user": {
"id": "2002",
}
}
}
}