Purchase history
Both operations require an authenticated player session. They cover shop, game currency and game service orders, including free purchases and balance payments. Payment history is requested separately.
playerPurchases
playerPurchases
Description
Returns purchases from newest to oldest. To continue, pass pageInfo.endCursor as after with the same filters. Start with after: null after changing a filter. hasNextPage: false marks the end of the list.
Input
| Field | Type | Description |
|---|---|---|
first | Int | 1 to 100; defaults to 20. |
after | ID | Previous page cursor or null. |
kind | PlayerPurchaseKind | SHOP, GAME_CURRENCY, GAME_SERVICE; null = all types. |
gameServerId | Int | Game server ID; null includes all servers in the history. |
Example
{
"documentId": "playerPurchases",
"variables": {
"first": 20,
"after": null,
"kind": "SHOP",
"gameServerId": 1
}
}
{
"data": {
"playerPurchases": {
"items": [
{
"id": "d9b29e6b-ce50-4c3b-9de6-a2b2ea2d839d",
"gameServerId": 1,
"kind": "SHOP",
"total": {
"units": "10000",
"decimal": "100.00",
"currencyCode": "ELX",
"currencyScale": 2
},
"createdAt": "2026-09-11 10:15:00",
"status": "PAID",
"recovery": {
"status": "REQUIRES_REVIEW",
"paid": {
"units": "10000",
"decimal": "100.00",
"currencyCode": "USD",
"currencyScale": 2
},
"recovered": {
"units": "2500",
"decimal": "25.00",
"currencyCode": "USD",
"currencyScale": 2
}
}
}
],
"pageInfo": {
"endCursor": null,
"hasNextPage": false
}
}
}
}
playerPurchase
playerPurchase
Description
Returns a purchase receipt with its summary, priced lines and each reward's status. Use the order ID from checkout or playerPurchases.items[].id.
Input
| Field | Type | Description |
|---|---|---|
id | ID! | Required purchase ID, not a payment ID. |
Example
{
"documentId": "playerPurchase",
"variables": {
"id": "d9b29e6b-ce50-4c3b-9de6-a2b2ea2d839d"
}
}
{
"data": {
"playerPurchase": {
"purchase": {
"id": "d9b29e6b-ce50-4c3b-9de6-a2b2ea2d839d",
"gameServerId": 1,
"kind": "SHOP",
"total": {
"units": "10000",
"decimal": "100.00",
"currencyCode": "ELX",
"currencyScale": 2
},
"createdAt": "2026-09-11 10:15:00",
"status": "PAID",
"recovery": {
"status": "REQUIRES_REVIEW",
"paid": {
"units": "10000",
"decimal": "100.00",
"currencyCode": "USD",
"currencyScale": 2
},
"recovered": {
"units": "2500",
"decimal": "25.00",
"currencyCode": "USD",
"currencyScale": 2
}
}
},
"lines": [
{
"id": "01941f29-7c00-7000-8000-000000000003",
"quantity": "1",
"unitPrice": {
"units": "10000",
"decimal": "100.00",
"currencyCode": "ELX",
"currencyScale": 2
},
"total": {
"units": "10000",
"decimal": "100.00",
"currencyCode": "ELX",
"currencyScale": 2
}
}
],
"rewards": [
{
"id": "01941f29-7c00-7000-8000-000000000004",
"deliveryStatus": "PENDING",
"recovery": "RESTRICTED",
"target": {
"kind": "WAREHOUSE",
"account": null,
"character": null
},
"content": {
"__typename": "PlayerPurchaseItems",
"items": [
{
"itemId": "57",
"quantity": "120",
"enchantLevel": 0
},
{
"itemId": "4037",
"quantity": "2",
"enchantLevel": 0
}
]
}
}
]
}
}
}
Response fields
| Field | Meaning |
|---|---|
purchase.id | Purchase reference. |
purchase.gameServerId | Purchase server. |
purchase.kind | SHOP, GAME_CURRENCY, GAME_SERVICE. |
purchase.total | Purchase total. |
purchase.createdAt | Purchase creation timestamp in UTC. |
purchase.status | PENDING_PAYMENT, CONFIRMED, PAID, FULFILLING, FULFILLED, CANCELLED. |
purchase.recovery | Return processing details, or null if none exist. |
lines[] | Line ID, quantity, unit price and line total. |
rewards[] | Reward ID, recipient, contents and separate delivery and return statuses. |
Money retains exact precision: units and decimal are strings, currencyCode identifies the currency and currencyScale specifies the decimal places. Quantities are also strings. Do not convert them to floating-point numbers. The original payment and order total can have different currencies.
Purchase return
recovery.status | Meaning |
|---|---|
PENDING | Return processing is pending. |
REQUIRES_REVIEW | The purchase is under review. |
RECOVERED | The return is processed; rewards show the outcome. |
RELEASING | Restrictions are being lifted. |
KEPT | The purchase was kept. |
MANUALLY_RESOLVED | The review was completed manually. |
paid holds the original payment amount. recovered holds the current refund or lost-dispute amount in that currency. These fields do not replace purchase.total.
Delivery and reward status
deliveryStatus is one of PENDING, DELIVERING, DELIVERED, RETRY_SCHEDULED, REQUIRES_REVIEW, CANCELLED.
rewards[].recovery | Meaning |
|---|---|
NONE | No return status applies. |
PROCESSING | The outcome is being processed. |
RESTRICTED | The reward is temporarily restricted. |
DELIVERY_STOPPED | Further delivery has been stopped. |
RECALLED | The delivered reward was recalled. |
RELEASED | The restriction was lifted. |
NEEDS_REVIEW | Review is required. |
target.kind is WAREHOUSE, GAME_ACCOUNT or CHARACTER. account and character are null when not applicable to the recipient.
Content types
In the persisted response, content.__typename determines the available fields:
__typename | Fields |
|---|---|
PlayerPurchaseItems | items[]: itemId: ID!, quantity: String!, enchantLevel: Int!. |
PlayerPurchaseCurrency | quantity: String!, itemId: ID, deliveryType: CHARACTER_ITEM | ACCOUNT_POINTS. |
PlayerPurchaseGameService | featureCode: String!. |
For ACCOUNT_POINTS, itemId is null. featureCode identifies the purchased game service.
Errors
extensions.code | Recovery |
|---|---|
PLAYER_PURCHASE_NOT_FOUND | Refresh the list and check the purchase reference. |
PLAYER_PURCHASE_INVALID_REQUEST | Check the input and clear the cursor after changing filters. |
PLAYER_PURCHASE_UNAVAILABLE | Try reading again later. |
Field errors use the standard validation response. These operations only read history; they do not request a refund.