Перейти к основному содержимому

Связанные аккаунты

Связь объединяет две учетные записи одного проекта для быстрого переключения. После подтверждения она работает в обе стороны. Баланс, склад, игровые аккаунты и история операций не объединяются.

Получить связи​

QuerydocumentId: accountLinksauth: Bearer session

Возвращает подтвержденные, ожидающие и отозванные связи текущего пользователя вместе с доступной квотой.

Результат​

ПолеТипОписание
idID!ID связи
targetIdID!ID второй учетной записи
emailStringEmail второй учетной записи
statusAccountLinkStatus!PENDING, CONFIRMED или REVOKED
createdAtDateTimeДата создания
confirmationExpiresAtDateTimeСрок действия кода для ожидающей связи

Вместе со списком возвращается accountLinkQuota:

ПолеТипОписание
isUnlimitedBoolean!Отключен ли общий лимит
baseLimitIntБазовый лимит проекта или null в безлимитном режиме
effectiveLimitIntИтоговый лимит с учетом VIP или null в безлимитном режиме
usedInt!Число PENDING и CONFIRMED связей
remainingIntОставшееся число связей или null в безлимитном режиме
pendingUsedInt!Число заявок, ожидающих подтверждения
pendingLimitInt!Отдельный предел ожидающих заявок
canCreateBoolean!Не исчерпана ли общая квота и предел ожидающих заявок

Безлимитный режим снимает только общую квоту. pendingLimit продолжает действовать для обеих сторон связи.

Запрос
documentId: accountLinks
{
"documentId": "accountLinks",
"variables": {}
}
Ответ
200 OK
{
"data": {
"accountLinks": [
{
"id": "17",
"targetId": "2002",
"email": "[email protected]",
"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
}
}
}

Запросить связь​

MutationdocumentId: requestAccountLinkauth: Bearer session

Отправляет четырехзначный код на email добавляемой учетной записи. Код действует 30 минут.

Для связи со статусом REVOKED эта же операция начинает привязку заново: переводит связь в PENDING и отправляет новый код. Старый код больше не действует.

Входные данные​

ПолеТипОбязательныйОписание
loginString!✓Email или телефон второй учетной записи
passwordString!✓Пароль второй учетной записи
pinString-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
{
"documentId": "requestAccountLink",
"variables": {
"login": "[email protected]",
"password": "password123",
"pin": "1234"
}
}
Ответ
200 OK
{
"data": {
"requestAccountLink": {
"message": "Код подтверждения отправлен"
}
}
}

Подтвердить связь​

MutationdocumentId: confirmAccountLinkauth: Bearer session

Подтверждает ожидающую связь кодом, отправленным второй учетной записи.

Входные данные​

ПолеТипОбязательныйОписание
targetAccountIdID!✓ID второй учетной записи
codeString!✓Четырехзначный код

Неверный или просроченный код возвращает INVALID_CODE. Частые ошибки ограничиваются отдельно для IP и текущего пользователя.

Запрос
documentId: confirmAccountLink
{
"documentId": "confirmAccountLink",
"variables": {
"targetAccountId": "2002",
"code": "4827"
}
}
Ответ
200 OK
{
"data": {
"confirmAccountLink": {
"message": "Учетная запись подключена"
}
}
}

Отключить связь​

MutationdocumentId: revokeAccountLinkauth: Bearer session

Отключает ожидающую или подтвержденную связь для обоих участников. Учетные записи и их данные не удаляются.

ПолеТипОбязательныйОписание
targetAccountIdID!✓ID второй учетной записи
pinString-PIN текущей учетной записи, если защита включена
Запрос
documentId: revokeAccountLink
{
"documentId": "revokeAccountLink",
"variables": {
"targetAccountId": "2002",
"pin": "1234"
}
}
Ответ
200 OK
{
"data": {
"revokeAccountLink": {
"message": "Учетная запись отключена"
}
}
}

Переключить учетную запись​

MutationdocumentId: switchAccountLinkauth: Bearer session

Создает новую сессию подтвержденной связанной учетной записи и завершает прежние сессии обоих участников. Клиент должен заменить текущий session token значением sessionId.

ПолеТипОбязательныйОписание
targetAccountIdID!✓ID второй учетной записи
Запрос
documentId: switchAccountLink
{
"documentId": "switchAccountLink",
"variables": {
"targetAccountId": "2002"
}
}
Ответ
200 OK
{
"data": {
"switchAccountLink": {
"sessionId": "new-session-token",
"sessionEnd": "2026-08-22T10:30:00+00:00",
"message": "Вы переключились на связанную учетную запись",
"user": {
"id": "2002",
"email": "[email protected]"
}
}
}
}