/api/v2/server-side-api/purchase/paddle/token/validate/ Валидация покупки Paddle
Валидирует покупку с использованием предоставленного токена Paddle и учётных данных Paddle в настройках приложения в дашборде Adapty. Если покупка действительна, история транзакций импортируется из Paddle в профиль Adapty с указанным customer_user_id. Если профиль с таким customer_user_id ранее не существовал — он будет создан.
Request body
Идентификатор пользователя в вашей системе
Токен объекта Paddle, представляющего уникальную покупку. Может быть либо идентификатором транзакции (txn_...), либо идентификатором подписки (sub_...)
Responses
Покупка успешно валидирована
Schema
Внутренний ID вашего приложения
ID профиля Adapty
ID вашего пользователя в вашей системе
Числовое значение с плавающей точкой, представляющее общий доход в USD, полученный по профилю
Внутренний параметр
Время ответа в миллисекундах, необходимо для разрешения состояния гонки
Для профиля допускается задавать не более 30 пользовательских атрибутов
Ключ должен быть строкой не более 30 символов. Допускаются только буквы, цифры, дефисы, точки и символы подчёркивания
Значение атрибута должно содержать не более 50 символов. В качестве значений допускаются только строки и числа с плавающей точкой
Массив объектов уровня доступа. Пустой массив, если у пользователя нет уровней доступа
Идентификатор уровня доступа
Стор, в котором был приобретён уровень доступа
Идентификатор продукта в сторе. Для годового тарифного плана App Store с обязательством идентификатор заканчивается на :monthly.
Идентификатор базового тарифного плана в сторе
Идентификатор транзакции в сторе
Идентификатор оригинальной транзакции в сторе
Данные об офере, если был применён promotional offer или introductory offer
Категория предложения
One of: "introductory", "promotional", "offer_code", "win_back"
Тип предложения
One of: "free_trial", "pay_as_you_go", "pay_up_front"
Идентификатор предложения
Когда начинается уровень доступа
Когда был приобретён уровень доступа
Когда уровень доступа был приобретён впервые
Когда истекает уровень доступа
Когда было отменено продление
Когда была обнаружена проблема с оплатой
Находится ли уровень доступа в льготном периоде
Причина отмены
Массив объектов подписки. Пустой массив, если у пользователя нет подписок
Стор, в котором была оформлена подписка
ID продукта в сторе. Для 12-месячного тарифного плана с обязательством в App Store ID заканчивается на :monthly.
ID базового тарифного плана в сторе
ID транзакции в сторе
Исходный ID транзакции в сторе
Детали офера, если был применён promotional offer или introductory offer
Категория предложения
One of: "introductory", "promotional", "offer_code", "win_back"
Тип предложения
One of: "free_trial", "pay_as_you_go", "pay_up_front"
Идентификатор предложения
Среда (Sandbox, Production)
Когда была оформлена подписка
Когда подписка была оформлена впервые
Когда истекает подписка
Когда было отменено продление. Для 12-месячного тарифного плана с обязательством остаётся null после отмены подписчиком, поскольку ежемесячные платежи продолжаются. Используйте commitment.will_renew вместо этого.
Когда была обнаружена проблема с оплатой
Находится ли подписка в льготном периоде
Причина отмены
12-месячное обязательство тарифного плана с обязательством App Store. Не задаётся для других подписок.
Начнётся ли новый 12-месячный период обязательств после окончания текущего. Принимает значение false после отмены подписки подписчиком, пока ежемесячные платежи продолжаются до expires_at.
Номер текущего ежемесячного платежа в рамках периода обязательств, начиная с 1
Количество ежемесячных платежей в рамках периода обязательств
Дата окончания периода обязательств. Собственное поле expires_at подписки соответствует концу текущего оплаченного месяца.
Массив объектов разовых покупок. Пустой массив, если у пользователя нет покупок
Уникальный идентификатор покупки
Стор, в котором была совершена покупка
ID продукта в сторе
ID базового плана в сторе
ID транзакции в сторе
Оригинальный ID транзакции в сторе
Дата и время совершения покупки
Среда (Sandbox, Production)
Является ли покупка возвратом средств
Является ли покупка расходуемой
Example
{
"data": {
"app_id": "14c3d623-2f3a-455a-aa86-ef83dff6913b",
"profile_id": "3286abd3-48b0-4e9c-a5f6-ac0a006804a6",
"customer_user_id": "Jane.doe@example.com",
"total_revenue_usd": 0,
"segment_hash": "8f45947bad31ab0c",
"timestamp": 1736436751469,
"custom_attributes": [
{
"key": "favourite_sport",
"value": "yoga"
}
],
"access_levels": [],
"subscriptions": [
{
"purchase_id": "5a7ab471-2299-45f7-ad69-1d395c1256e3",
"store": "app_store",
"store_product_id": "1year.premium",
"store_base_plan_id": null,
"store_transaction_id": "30002109551456",
"store_original_transaction_id": "30002109551456",
"purchased_at": "2022-10-12T09:42:50+00:00",
"environment": "Production",
"is_refund": false,
"is_consumable": false
}
],
"non_subscriptions": []
}
} Некорректный запрос
Schema
Источник ошибки
Массив сообщений об ошибках
Краткое название ошибки
HTTP-код статуса
Example
{
"errors": [
"No products found"
],
"error_code": "no_products_found",
"status_code": 400
} Не авторизован
Schema
Источник ошибки
Массив сообщений об ошибках
Краткое название ошибки
HTTP-код статуса
Example
{
"errors": [
"Invalid API key"
],
"error_code": "unauthorized",
"status_code": 401
} Внутренняя ошибка сервера
Schema
Источник ошибки
Массив сообщений об ошибках
Краткое название ошибки
HTTP-код статуса