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

Магазин и игровые услуги

Операции вызываются через persisted documentId. Идентификаторы предложений, расчётов, заказов и платежей непрозрачны: клиент сохраняет полученное значение и не разбирает его. Авторизованные операции используют выбранный в сессии игровой сервер, а гостевые операции принимают gameServerId.

Покупка всегда состоит из расчёта и подтверждения. Браузер передаёт предложение, количество, разрешённый выбор и получателя, но не отправляет цену, скидку или состав выдачи. Каждый requestId, orderRequestId и paymentRequestId создаётся клиентом в формате UUIDv7 и отвечает за идемпотентность своей операции.

Операции​

Список и карточка ранее оформленных покупок описаны в Истории покупок.

Магазин​

documentIdАвторизацияВходРезультат
shopOffersBearer sessionfirst, after, categoryId, accountLoginShopOfferConnection!
shopOfferBearer sessionofferId, accountLoginShopOffer!
shopCategoriesBearer sessionfirst, afterShopCategoryConnection!
guestShopOffersПубличнаяgameServerId, first, after, categoryIdShopOfferConnection!
guestShopOfferПубличнаяgameServerId, offerIdShopOffer!
guestShopCategoriesПубличнаяgameServerId, first, afterShopCategoryConnection!
prepareShopPurchaseBearer sessioninput: PrepareShopPurchaseInput!ShopQuote!
purchaseShopBearer sessioninput: PurchaseShopInput!ShopPurchase!
prepareGuestShopPurchaseПубличнаяinput: PrepareGuestShopPurchaseInput!ShopQuote!
confirmFreeGuestShopPurchaseПубличнаяinput: ConfirmFreeGuestPurchaseInput!ShopPurchase!
prepareGuestShopCheckoutПубличнаяinput: PrepareGuestShopCheckoutInput!StorefrontExternalPaymentPreparation!
startGuestShopCheckoutПубличнаяinput: ExecuteGuestShopCheckoutInput!StorefrontExternalPaymentExecution!
retryGuestShopCheckoutПубличнаяinput: ExecuteGuestShopCheckoutInput!StorefrontExternalPaymentExecution!

Игровые услуги​

documentIdАвторизацияВходРезультат
gameServiceOffersBearer sessionfirst, after, categoryCodeGameServiceOfferConnection!
gameServiceOfferBearer sessionofferIdGameServiceOffer!
gameServiceCategoriesBearer sessionfirst, afterGameServiceCategoryConnection!
prepareGameServicePurchaseBearer sessioninput: PrepareGameServicePurchaseInput!GameServiceQuote!
purchaseGameServiceBearer sessioninput: PurchaseGameServiceInput!GameServicePurchase!

При нулевой итоговой сумме purchaseShop и purchaseGameService подтверждают заказ без списания. В результате paymentId равен null, а paymentStatus равен NOT_REQUIRED. paymentRequestId в этих операциях служит ключом подтверждения.

Каталог магазина​

QuerydocumentId: shopOffersauth: Bearer session

shopOffers​

Описание​

Возвращает доступные игроку предложения текущего сервера. Цена уже учитывает применимые акции, реферальную скидку и VIP. Поле availability содержит состояние и прогресс лимитов. Пагинация выполняется курсором из pageInfo.endCursor.

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

ПолеТипОбязательноеОписание
firstInt!даРазмер страницы.
afterIDнетКурсор предыдущей страницы.
categoryIdIDнетНепрозрачный ID категории.
accountLoginStringнетСвой игровой аккаунт для расчёта лимита аккаунта.

Пример обмена​

Запрос
documentId: shopOffers
{
"documentId": "shopOffers",
"variables": {
"first": 24,
"after": null,
"categoryId": null,
"accountLogin": "eternal_main"
}
}
Ответ
200 OK
{
"data": {
"shopOffers": {
"items": [
{
"id": "019bf3dd-b08b-7000-8000-000000000205",
"sku": "STARTER_CHOICE",
"name": "Набор на выбор",
"description": "Выберите одну награду.",
"imageReference": "/styles/default/cabinet/images/items/soulshot-ticket.png",
"categoryId": "019bf3dd-b08b-7000-8000-000000000206",
"pricingMode": "SELECTION",
"deliveryModes": [
"ACCOUNT_CHARACTER",
"WAREHOUSE"
],
"selectionLimitCount": 1,
"items": [
{
"assetReference": "57",
"quantity": 250000,
"enchantLevel": 0,
"selectionKey": "adena",
"quantitySelectable": true,
"maximumQuantityMultiplier": 4
}
],
"price": {
"base": {
"units": "400",
"decimal": "4.00",
"currencyCode": "USD",
"currencyScale": 2
},
"effective": {
"units": "288",
"decimal": "2.88",
"currencyCode": "USD",
"currencyScale": 2
},
"adjustments": [
{
"code": "launch-sale",
"source": "SALE",
"percentage": 20,
"amount": {
"units": "80",
"decimal": "0.80",
"currencyCode": "USD",
"currencyScale": 2
}
}
],
"fromPrice": true,
"hasSavings": true
},
"selectionPrices": [],
"availability": {
"status": "AVAILABLE",
"available": true,
"startsAt": "2026-09-01T00:00:00Z",
"endsAt": "2026-10-01T00:00:00Z",
"globalLimit": {
"windowSeconds": 86400,
"maximumPurchases": 100,
"currentPurchases": 2,
"remainingPurchases": 98,
"evaluated": true,
"nextAvailableAt": null
},
"customerLimit": null,
"gameAccountLimit": null,
"gameAccountSelectionRequired": false
},
"sortOrder": 10
}
],
"pageInfo": {
"endCursor": null,
"hasNextPage": false
}
}
}
}

Для одной карточки используйте shopOffer с offerId. shopCategories возвращает id, локализованное name, sortOrder и курсор. Публичные варианты guestShopOffers, guestShopOffer и guestShopCategories возвращают те же представления, но дополнительно требуют gameServerId и не принимают accountLogin.

Связанные типы​

Покупка с баланса​

MutationdocumentId: prepareShopPurchaseauth: Bearer session

prepareShopPurchase​

Описание​

Проверяет предложение, получателя, выбранные позиции и лимиты, затем создаёт короткоживущий расчёт. Для ACCOUNT_CHARACTER передаются свой аккаунт и персонаж, для DIRECT_CHARACTER - персонаж, для WAREHOUSE получатель не требуется.

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

ПолеТипОбязательноеОписание
input.requestIdID!даНовый UUIDv7 расчёта.
input.offerIdID!даНепрозрачный ID предложения.
input.quantityInt!даКоличество единиц предложения.
input.deliveryModePlayerShopDeliveryMode!даACCOUNT_CHARACTER, DIRECT_CHARACTER или WAREHOUSE.
input.accountLoginStringусловноСвой аккаунт для ACCOUNT_CHARACTER.
input.characterNameStringусловноПерсонаж для игровой доставки.
input.selectedItems[ShopPurchaseSelectionInput!]!даРазрешённый выбор; пустой список для набора.

Пример обмена​

Запрос
documentId: prepareShopPurchase
{
"documentId": "prepareShopPurchase",
"variables": {
"input": {
"requestId": "019bf3dd-b08b-7000-8000-000000000201",
"offerId": "019bf3dd-b08b-7000-8000-000000000205",
"quantity": 2,
"deliveryMode": "ACCOUNT_CHARACTER",
"accountLogin": "eternal_main",
"characterName": "Hero",
"selectedItems": [
{
"selectionKey": "adena",
"quantityMultiplier": 2
}
]
}
}
}
Ответ
200 OK
{
"data": {
"prepareShopPurchase": {
"id": "019bf3dd-b08b-7000-8000-000000000207",
"offer": {
"id": "019bf3dd-b08b-7000-8000-000000000205",
"name": "Набор на выбор",
"pricingMode": "SELECTION"
},
"quantity": 2,
"selectedItems": [
{
"selectionKey": "adena",
"quantityMultiplier": 2
}
],
"deliveryItems": [
{
"assetReference": "57",
"quantity": 1000000,
"enchantLevel": 0
}
],
"unitAmount": {
"units": "1200",
"decimal": "12.00",
"currencyCode": "USD",
"currencyScale": 2
},
"subtotal": {
"units": "2400",
"decimal": "24.00",
"currencyCode": "USD",
"currencyScale": 2
},
"adjustments": [
{
"code": "vip-rank",
"kind": "DISCOUNT",
"source": "VIP",
"amount": {
"units": "480",
"decimal": "4.80",
"currencyCode": "USD",
"currencyScale": 2
}
}
],
"total": {
"units": "1920",
"decimal": "19.20",
"currencyCode": "USD",
"currencyScale": 2
},
"hasSavings": true,
"delivery": {
"mode": "ACCOUNT_CHARACTER",
"accountLogin": "eternal_main",
"characterName": "Hero"
},
"expiresAt": "2026-09-03T12:15:00Z"
}
}
}

Пример показывает ключевые поля вложенного offer; persisted документ возвращает его полное представление из каталога.

MutationdocumentId: purchaseShopauth: Bearer session

purchaseShop​

Описание​

Создаёт заказ по действующему расчёту и оплачивает его с баланса. Повтор с теми же идентификаторами возвращает тот же результат; изменение данных под тем же идентификатором завершается конфликтом.

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

ПолеТипОбязательноеОписание
input.orderRequestIdID!даUUIDv7 создания заказа.
input.paymentRequestIdID!даОтдельный UUIDv7 списания.
input.quoteIdID!даДействующий расчёт.

Пример обмена​

Запрос
documentId: purchaseShop
{
"documentId": "purchaseShop",
"variables": {
"input": {
"orderRequestId": "019bf3dd-b08b-7000-8000-000000000202",
"paymentRequestId": "019bf3dd-b08b-7000-8000-000000000203",
"quoteId": "019bf3dd-b08b-7000-8000-000000000207"
}
}
}
Ответ
200 OK
{
"data": {
"purchaseShop": {
"orderId": "019bf3dd-b08b-7000-8000-000000000208",
"quoteId": "019bf3dd-b08b-7000-8000-000000000207",
"orderStatus": "FULFILLED",
"paymentId": "019bf3dd-b08b-7000-8000-000000000209",
"paymentStatus": "PAID",
"total": {
"units": "1920",
"decimal": "19.20",
"currencyCode": "USD",
"currencyScale": 2
},
"createdAt": "2026-09-03T12:01:00Z"
}
}
}

Гостевая покупка​

Гостевой сценарий использует три последовательных шага: расчёт и проверку персонажа, создание заказа с доступными способами оплаты, запуск выбранного способа. Клиент не передаёт произвольный URL возврата или цену.

MutationdocumentId: prepareGuestShopPurchaseauth: public

prepareGuestShopPurchase​

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

ПолеТипОбязательноеОписание
input.gameServerIdInt!даВыбранный игровой сервер.
input.requestIdID!даUUIDv7 расчёта.
input.offerIdID!даПредложение с гостевой доставкой.
input.quantityInt!даКоличество.
input.characterNameString!даПроверяемый персонаж-получатель.
input.payerEmailString!даЭлектронная почта плательщика.
input.selectedItems[ShopPurchaseSelectionInput!]!даВыбор позиций или пустой список.

Пример обмена​

Запрос
documentId: prepareGuestShopPurchase
{
"documentId": "prepareGuestShopPurchase",
"variables": {
"input": {
"gameServerId": 7,
"requestId": "019bf3dd-b08b-7000-8000-000000000201",
"offerId": "019bf3dd-b08b-7000-8000-000000000205",
"quantity": 1,
"characterName": "Hero",
"payerEmail": "[email protected]",
"selectedItems": []
}
}
}
Ответ
200 OK
{
"data": {
"prepareGuestShopPurchase": {
"id": "019bf3dd-b08b-7000-8000-000000000207",
"quantity": 1,
"selectedItems": [],
"deliveryItems": [
{
"assetReference": "57",
"quantity": 250000,
"enchantLevel": 0
}
],
"subtotal": {
"units": "1200",
"decimal": "12.00",
"currencyCode": "USD",
"currencyScale": 2
},
"adjustments": [],
"total": {
"units": "1200",
"decimal": "12.00",
"currencyCode": "USD",
"currencyScale": 2
},
"hasSavings": false,
"delivery": {
"mode": "GUEST_CHARACTER",
"accountLogin": null,
"characterName": "Hero"
},
"expiresAt": "2026-09-03T12:15:00Z"
}
}
}

Ответ также содержит полные offer и unitAmount, как у авторизованного расчёта.

MutationdocumentId: prepareGuestShopCheckoutauth: public

prepareGuestShopCheckout​

Описание​

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

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

ПолеТипОбязательноеОписание
input.gameServerIdInt!даТот же игровой сервер.
input.orderRequestIdID!даUUIDv7 заказа.
input.paymentRequestIdID!даUUIDv7 платёжного намерения.
input.quoteIdID!даДействующий Shop-расчёт.
input.characterNameString!даТот же персонаж.
input.payerEmailString!даТа же почта плательщика.
input.payerCountryStringнетДвухбуквенный код страны, если известен.

Пример обмена​

Запрос
documentId: prepareGuestShopCheckout
{
"documentId": "prepareGuestShopCheckout",
"variables": {
"input": {
"gameServerId": 7,
"orderRequestId": "019bf3dd-b08b-7000-8000-000000000202",
"paymentRequestId": "019bf3dd-b08b-7000-8000-000000000203",
"quoteId": "019bf3dd-b08b-7000-8000-000000000207",
"characterName": "Hero",
"payerEmail": "[email protected]",
"payerCountry": "DE"
}
}
}
Ответ
200 OK
{
"data": {
"prepareGuestShopCheckout": {
"orderId": "019bf3dd-b08b-7000-8000-000000000208",
"quoteId": "019bf3dd-b08b-7000-8000-000000000207",
"orderStatus": "PENDING_PAYMENT",
"intent": {
"id": "019bf3dd-b08b-7000-8000-000000000210",
"status": "OPEN",
"expiresAt": "2026-09-03T12:10:00Z"
},
"methods": [
{
"id": "019bf3dd-b08b-7000-8000-000000000211",
"code": "bank_card",
"name": "Банковская карта",
"iconAssetId": null,
"paymentQuote": {
"id": "019bf3dd-b08b-7000-8000-000000000212",
"paymentAmount": {
"units": "1700",
"decimal": "17.00",
"currencyCode": "EUR",
"currencyScale": 2
},
"destinationAmount": {
"units": "1920",
"decimal": "19.20",
"currencyCode": "USD",
"currencyScale": 2
},
"payerFee": {
"units": "50",
"decimal": "0.50",
"currencyCode": "EUR",
"currencyScale": 2
},
"expiresAt": "2026-09-03T12:05:00Z"
}
}
]
}
}
}
MutationdocumentId: startGuestShopCheckoutauth: public

startGuestShopCheckout​

Описание​

Запускает выбранный способ оплаты. action.kind определяет единственное действие клиента: REDIRECT, FORM_POST, QR_CODE, DEEP_LINK или WAIT. Неподходящие поля действия равны null.

retryGuestShopCheckout принимает тот же тип входа и возвращает тот же тип результата. Для повторной попытки используется новый requestId, а orderId, quoteId, получатель и выбранный платёжный расчёт остаются связанными с подготовленным заказом.

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

ПолеТипОбязательноеОписание
input.gameServerIdInt!даИгровой сервер заказа.
input.requestIdID!даUUIDv7 запуска или повторной попытки.
input.orderIdID!даПодготовленный заказ.
input.quoteIdID!даСвязанный Shop-расчёт.
input.characterNameString!даПроверенный персонаж.
input.payerEmailString!даПочта плательщика.
input.methodProfileIdID!даmethods[].id.
input.paymentQuoteIdID!даmethods[].paymentQuote.id.

Пример обмена​

Запрос
documentId: startGuestShopCheckout
{
"documentId": "startGuestShopCheckout",
"variables": {
"input": {
"gameServerId": 7,
"requestId": "019bf3dd-b08b-7000-8000-000000000204",
"orderId": "019bf3dd-b08b-7000-8000-000000000208",
"quoteId": "019bf3dd-b08b-7000-8000-000000000207",
"characterName": "Hero",
"payerEmail": "[email protected]",
"methodProfileId": "019bf3dd-b08b-7000-8000-000000000211",
"paymentQuoteId": "019bf3dd-b08b-7000-8000-000000000212"
}
}
}
Ответ
200 OK
{
"data": {
"startGuestShopCheckout": {
"orderId": "019bf3dd-b08b-7000-8000-000000000208",
"quoteId": "019bf3dd-b08b-7000-8000-000000000207",
"orderStatus": "PENDING_PAYMENT",
"intent": {
"id": "019bf3dd-b08b-7000-8000-000000000210",
"status": "PROCESSING",
"expiresAt": "2026-09-03T12:10:00Z"
},
"attempt": {
"id": "019bf3dd-b08b-7000-8000-000000000213",
"status": "REQUIRES_CUSTOMER_ACTION",
"expiresAt": "2026-09-03T12:05:00Z"
},
"action": {
"kind": "FORM_POST",
"expiresAt": "2026-09-03T12:05:00Z",
"redirect": null,
"formPost": {
"url": "https://pay.example/checkout",
"fields": [
{
"name": "invoice",
"value": "checkout-123"
},
{
"name": "signature",
"value": "signed-value"
}
]
},
"qrCode": null,
"deepLink": null,
"wait": null
}
}
}
}

Игровые услуги​

QuerydocumentId: gameServiceOffersauth: Bearer session

gameServiceOffers​

Описание​

Возвращает локализованные игровые услуги текущего сервера. Поля услуги типизированы как TEXT, OPTION или COLOR; допустимые варианты, ограничения текста и цена каждого варианта приходят в ответе.

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

ПолеТипОбязательноеОписание
firstInt!даРазмер страницы.
afterIDнетКурсор следующей страницы.
categoryCodeStringнетКод категории.

Пример обмена​

Запрос
documentId: gameServiceOffers
{
"documentId": "gameServiceOffers",
"variables": {
"first": 24,
"after": null,
"categoryCode": "character"
}
}
Ответ
200 OK
{
"data": {
"gameServiceOffers": {
"items": [
{
"id": "019bf3dd-b08b-7000-8000-000000000104",
"name": "Смена имени персонажа",
"description": "Изменяет имя выбранного персонажа.",
"imageReference": "/styles/default/cabinet/images/items/lucky-coin.png",
"category": {
"code": "character",
"name": "Услуги для персонажа",
"description": "Операции для выбранного персонажа."
},
"targetKind": "CHARACTER",
"fields": [
{
"code": "newCharacterName",
"kind": "TEXT",
"required": true,
"name": "Новое имя",
"description": "Введите новое имя персонажа.",
"textConstraint": {
"policy": "ALPHANUMERIC_NAME",
"minimumLength": 3,
"maximumLength": 16
},
"options": [],
"sortOrder": 10,
"determinesPrice": false
}
],
"price": {
"base": {
"units": "1000",
"decimal": "10.00",
"currencyCode": "USD",
"currencyScale": 2
},
"effective": {
"units": "800",
"decimal": "8.00",
"currencyCode": "USD",
"currencyScale": 2
},
"adjustments": [
{
"code": "vip-rank",
"source": "VIP",
"percentage": 20,
"amount": {
"units": "200",
"decimal": "2.00",
"currencyCode": "USD",
"currencyScale": 2
}
}
],
"fromPrice": false,
"hasSavings": true
},
"availability": {
"status": "AVAILABLE",
"available": true,
"startsAt": "2026-09-01T00:00:00Z",
"endsAt": "2026-10-01T00:00:00Z"
},
"sortOrder": 10
}
],
"pageInfo": {
"endCursor": null,
"hasNextPage": false
}
}
}
}

gameServiceOffer возвращает одно полное предложение по offerId. gameServiceCategories возвращает code, локализованные name и description, sortOrder и курсор.

Связанные типы​

MutationdocumentId: prepareGameServicePurchaseauth: Bearer session

prepareGameServicePurchase​

Описание​

Создаёт расчёт услуги для выбранного получателя и значений формы. Используйте его до указанного срока действия.

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

ПолеТипОбязательноеОписание
input.requestIdID!даUUIDv7 расчёта.
input.offerIdID!даНепрозрачный ID услуги.
input.target.accountLoginString!даСвой игровой аккаунт.
input.target.characterNameStringусловноОбязателен для цели CHARACTER.
input.fields[GameServiceFieldValueInput!]!даЗначения по опубликованной схеме полей.

Пример обмена​

Запрос
documentId: prepareGameServicePurchase
{
"documentId": "prepareGameServicePurchase",
"variables": {
"input": {
"requestId": "019bf3dd-b08b-7000-8000-000000000101",
"offerId": "019bf3dd-b08b-7000-8000-000000000104",
"target": {
"accountLogin": "eternal_main",
"characterName": "Hero"
},
"fields": [
{
"fieldCode": "newCharacterName",
"value": "NewHero"
},
{
"fieldCode": "titleColor",
"value": "blue"
}
]
}
}
}
Ответ
200 OK
{
"data": {
"prepareGameServicePurchase": {
"id": "019bf3dd-b08b-7000-8000-000000000105",
"offer": {
"id": "019bf3dd-b08b-7000-8000-000000000104",
"name": "Смена имени персонажа",
"targetKind": "CHARACTER"
},
"fieldValues": [
{
"fieldCode": "newCharacterName",
"value": "NewHero"
},
{
"fieldCode": "titleColor",
"value": "blue"
}
],
"target": {
"kind": "CHARACTER",
"accountLogin": "eternal_main",
"characterName": "Hero"
},
"unitAmount": {
"units": "1200",
"decimal": "12.00",
"currencyCode": "USD",
"currencyScale": 2
},
"subtotal": {
"units": "1200",
"decimal": "12.00",
"currencyCode": "USD",
"currencyScale": 2
},
"adjustments": [
{
"code": "vip-rank",
"kind": "DISCOUNT",
"source": "VIP",
"amount": {
"units": "240",
"decimal": "2.40",
"currencyCode": "USD",
"currencyScale": 2
}
}
],
"total": {
"units": "960",
"decimal": "9.60",
"currencyCode": "USD",
"currencyScale": 2
},
"hasSavings": true,
"expiresAt": "2026-09-03T12:15:00Z"
}
}
}

Пример показывает ключевые поля вложенного offer; фактический ответ содержит полную опубликованную схему услуги.

MutationdocumentId: purchaseGameServiceauth: Bearer session

purchaseGameService​

Описание​

Создаёт заказ по действующему расчёту, списывает баланс и выполняет игровую операцию. Клиент не повторяет динамические поля в этой мутации: они уже зафиксированы расчётом.

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

ПолеТипОбязательноеОписание
input.orderRequestIdID!даUUIDv7 заказа.
input.paymentRequestIdID!даОтдельный UUIDv7 списания.
input.quoteIdID!даДействующий расчёт услуги.

Пример обмена​

Запрос
documentId: purchaseGameService
{
"documentId": "purchaseGameService",
"variables": {
"input": {
"orderRequestId": "019bf3dd-b08b-7000-8000-000000000102",
"paymentRequestId": "019bf3dd-b08b-7000-8000-000000000103",
"quoteId": "019bf3dd-b08b-7000-8000-000000000105"
}
}
}
Ответ
200 OK
{
"data": {
"purchaseGameService": {
"orderId": "019bf3dd-b08b-7000-8000-000000000106",
"quoteId": "019bf3dd-b08b-7000-8000-000000000105",
"orderStatus": "FULFILLED",
"paymentId": "019bf3dd-b08b-7000-8000-000000000107",
"paymentStatus": "PAID",
"total": {
"units": "960",
"decimal": "9.60",
"currencyCode": "USD",
"currencyScale": 2
},
"createdAt": "2026-09-03T12:01:00Z"
}
}
}

Бесплатная гостевая покупка​

MutationdocumentId: confirmFreeGuestShopPurchaseauth: public

confirmFreeGuestShopPurchase​

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

Поле inputТипЗначение
gameServerIdInt!Выбранный игровой сервер.
orderRequestIdID!UUIDv7 создания заказа.
confirmationRequestIdID!Другой UUIDv7 подтверждения.
quoteIdID!ID действующего расчёта с нулевым итогом.
characterNameString!Получатель из расчёта, до 64 символов.
payerEmailString!Email из расчёта, до 254 символов.
Запрос
documentId: confirmFreeGuestShopPurchase
{
"documentId": "confirmFreeGuestShopPurchase",
"variables": {
"input": {
"gameServerId": 1,
"orderRequestId": "019bf3dd-b08b-7000-8000-000000000310",
"confirmationRequestId": "019bf3dd-b08b-7000-8000-000000000311",
"quoteId": "019bf3dd-b08b-7000-8000-000000000312",
"characterName": "Asterion",
"payerEmail": "[email protected]"
}
}
}
Ответ
200 OK
{
"data": {
"confirmFreeGuestShopPurchase": {
"orderId": "019bf3dd-b08b-7000-8000-000000000313",
"quoteId": "019bf3dd-b08b-7000-8000-000000000312",
"orderStatus": "CONFIRMED",
"paymentId": null,
"paymentStatus": "NOT_REQUIRED",
"total": {
"units": "0",
"decimal": "0.000",
"currencyCode": "ELX",
"currencyScale": 3
},
"createdAt": "2026-09-13T10:00:00Z"
}
}
}

При повторе сохраните оба идентификатора и остальные поля без изменений. Если расчёт истёк, подготовьте новый. Результат имеет тип ShopPurchase; paymentId равен null, а paymentStatus равен NOT_REQUIRED. CONFIRMED означает принятое подтверждение, но ещё не завершённую выдачу.

Ошибки​

КодЗначение
UNAUTHENTICATEDДля авторизованной операции нет действующей сессии.
STOREFRONT_INVALID_REQUESTПоля запроса не соответствуют текущему контракту.
STOREFRONT_SCOPE_UNAVAILABLEТекущий проект или игровой сервер недоступен.
STOREFRONT_ACCOUNT_UNAVAILABLEАккаунт не принадлежит игроку или недоступен.
STOREFRONT_CHARACTER_UNAVAILABLEПерсонаж не найден или не принадлежит выбранному аккаунту.
STOREFRONT_FEATURE_UNAVAILABLEИгровая услуга сейчас недоступна.
STOREFRONT_OFFER_UNAVAILABLEПредложение недоступно по состоянию, периоду или лимиту.
STOREFRONT_REFRESH_REQUIREDРасчёт, заказ или платёжный расчёт устарел; начните шаг заново.
STOREFRONT_INSUFFICIENT_BALANCEНа выбранном балансе недостаточно средств.
STOREFRONT_PAYMENT_DEBTПогасите задолженность выбранного баланса, затем начните новую покупку.
STOREFRONT_CONFLICTИдентификатор операции повторно использован с другими данными.
STOREFRONT_METHODS_UNAVAILABLEДля гостевого заказа нет доступного способа оплаты.
STOREFRONT_RATE_LIMITEDПревышено ограничение частоты публичных запросов.
STOREFRONT_UNAVAILABLEОперация временно недоступна.

Полные структуры ответов приведены в типах данных модулей.