Skip to main content

Linked accounts

A link connects two accounts in one project for quick switching. Once confirmed, it works in both directions. Balances, warehouse items, game accounts, and operation history remain separate.

QuerydocumentId: accountLinksauth: Bearer session

Returns confirmed, pending, and revoked relationships for the current user together with the available quota.

The response also includes accountLinkQuota:

FieldTypeDescription
isUnlimitedBoolean!Whether the overall limit is disabled
baseLimitIntProject base limit, or null in unlimited mode
effectiveLimitIntEffective limit including VIP, or null in unlimited mode
usedInt!Number of PENDING and CONFIRMED links
remainingIntNumber of links still available, or null in unlimited mode
pendingUsedInt!Number of requests awaiting confirmation
pendingLimitInt!Separate cap for pending requests
canCreateBoolean!Whether both the overall quota and pending cap allow another request

Unlimited mode removes only the overall quota. pendingLimit remains active for both sides of a relationship.

Request
documentId: accountLinks
{
"documentId": "accountLinks",
"variables": {}
}
Response
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

Sends a four-digit code to the target account's email. The code expires after 30 minutes.

For a REVOKED relationship, the same operation starts linking again: the relationship returns to PENDING, and a new code is sent. The previous code is no longer valid.

FieldTypeRequiredDescription
loginString!YesTarget email address or phone number
passwordString!YesTarget account password
pinStringNoCurrent account PIN when protection is enabled
Request
documentId: requestAccountLink
{
"documentId": "requestAccountLink",
"variables": {
"login": "[email protected]",
"password": "password123",
"pin": "1234"
}
}
Response
200 OK
{
"data": {
"requestAccountLink": {
"message": "Confirmation code sent"
}
}
}

Possible domain errors include 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, and TOO_MANY_ATTEMPTS.

MutationdocumentId: confirmAccountLinkauth: Bearer session
FieldTypeRequiredDescription
targetAccountIdID!YesTarget account ID
codeString!YesFour-digit confirmation code
Request
documentId: confirmAccountLink
{
"documentId": "confirmAccountLink",
"variables": {
"targetAccountId": "2002",
"code": "4827"
}
}
Response
200 OK
{
"data": {
"confirmAccountLink": {
"message": "Account linked"
}
}
}

An invalid or expired code returns INVALID_CODE.

MutationdocumentId: revokeAccountLinkauth: Bearer session

Disconnects a pending or confirmed relationship for both participants without deleting either account.

Request
documentId: revokeAccountLink
{
"documentId": "revokeAccountLink",
"variables": {
"targetAccountId": "2002",
"pin": "1234"
}
}
Response
200 OK
{
"data": {
"revokeAccountLink": {
"message": "Account disconnected"
}
}
}

Switch accounts​

MutationdocumentId: switchAccountLinkauth: Bearer session

Creates a session for the confirmed linked account. The client must replace its current session token with the returned sessionId.

Request
documentId: switchAccountLink
{
"documentId": "switchAccountLink",
"variables": {
"targetAccountId": "2002"
}
}
Response
200 OK
{
"data": {
"switchAccountLink": {
"sessionId": "new-session-token",
"sessionEnd": "2026-08-22T10:30:00+00:00",
"message": "Switched to linked account",
"user": {
"id": "2002",
"email": "[email protected]"
}
}
}
}