Get a purchase list by the internal user identifier
This method returns purchase information for a specific internal user identifier in the publisher’s app (appUserId) that was passed when initiating a purchase (purchaseProduct). This is a direct equivalent of the SDK method getPurchases for a specific user in your app.
Interaction parameters
For production purchases:
GET
https://public-api.rustore.ru/public/applications/{appId}/purchases
For test purchases:
GET
https://public-api.rustore.ru/public/sandbox/applications/{appId}/purchases
| Attribute | Type | Description | Required | Location | Example |
|---|---|---|---|---|---|
Public-Token | string | JWE authorization token for the RuStore Public API. How to get an authorization token. | Yes | header | N/A |
appId | string | App identifier. | Yes | path | 1234 |
appUserId | string | Internal user identifier in the app. | Yes | query | 0383134 |
purchaseStatus | string | Purchase status. | No | query | N/A |
continuation | string | Continuation token for paginated results. | No | query | N/A |
limit | string | Page size. | No | query | 10 |
Response parameters
| Attribute | Type | Description | Required | Location | Example |
|---|---|---|---|---|---|
code | string | Response code. | Yes | body | • OK;• ERROR;• BAD_REQUEST;• NOT_FOUND. |
message | string | Details for the response code. | No | body | null |
body{} | object | Response body. | No | body | {} |
timestamp | string | Response time. | Yes | body | 2025-08-20T08:05:00.000Z |
body{}
| Attribute | Type | Description | Required | Example |
|---|---|---|---|---|
purchaseId | string | Purchase identifier in UUID format. You can get it from the SDK purchase result, a server callback notification, or by requesting purchase details. | Yes | 3aa0c7bd-964e-4562-b218-fe365adb4ae3 |
productId | string | Product identifier. | Yes | free_start_2008 |
invoiceId | number | Invoice number (identifier). | Yes | 12345 |
orderId | string | Identifier of the latest invoice associated with a subscription purchase. If the subscription has more than one invoice, the invoice count is appended using the .. separator (starting from 0). | Yes | 41456..3 |
purchaseType | number | Possible values: • 0 — production subscription; • 1 — test subscription. | Yes | 0 |
productType | string | Product type. | Yes | SUBSCRIPTION |
description | string | Order description. | Yes | In-app purchase in “Masha and the Bear”: 100 crystals |
purchaseTime | string | Purchase time in ISO 8601 format. | Yes | 2025-08-20T08:04:37.999 |
price | number | Price in the smallest currency units (kopecks). | Yes | 19900 |
amountLabel | string | Formatted item price, including the currency symbol. | Yes | 199 ₽ |
currency | string | Currency code. | Yes | RUB |
quantity | number | Quantity. | Yes | 1 |
purchaseStatus | string | Purchase status. | Yes | ACTIVE |
developerPayload | string | Additional order information string that you can set when confirming a purchase in the SDK. | No | External id = 1 |
subscription.expirationDate | string | Subscription expiration date in ISO 8601 format. | Yes (for productType=SUBSCRIPTION) | 2025-08-20T15:05:34.974Z |
subscription.period | string | Subscription period. | Yes (for productType=SUBSCRIPTION) | MAIN |
Successful response example
{
"code": "OK",
"message": null,
"body": {
"elements": [
{
"purchaseId": "ffcf10bf-c990-4999-8a19-fb861d8b70eb",
"productId": "free_start_2008",
"invoiceId": 10000010031,
"orderId": "string",
"purchaseType": "ONE_STEP",
"productType": "SUBSCRIPTION",
"description": "free_start_2008",
"purchaseTime": "2025-08-20T08:04:37.999",
"price": 19900,
"amountLabel": "199 ₽",
"currency": "RUB",
"quantity": 1,
"purchaseStatus": "ACTIVE",
"developerPayload": "string",
"subscription": {
"expirationDate": "2025-08-20T15:05:34.974Z",
"period": "MONTH"
}
}
]
},
"timestamp": "2025-08-20T08:05:00.000Z"
}
Error response example
{
"code": "ERROR",
"message": "<error message>",
"body": null,
"timestamp": "2025-08-20T08:05:00.000Z"
}
Error list
| Message | Details |
|---|---|
| This user does not have rights to perform this action. | Insufficient permissions or an invalid/expired Public-Token. Check the token validity and that it matches the app. |
limit must be greater than 0 | The limit parameter must be greater than 0. Specify a value starting from 1. |
limit must not exceed 500. | The response cannot contain more than 500 results. |
| Forbidden | Forbidden. Check the authorization token and request parameters. |
| Something went wrong | Internal error. Try again later or contact support. |