POST /api/v1/profile/transaction-event/save/

Сохранить событие транзакции

Записывает событие транзакции стора для профиля. Adapty Mail использует события транзакций для помещения профилей в флоу на основе покупок — event_type соответствует таким флоу, как отмена продления, проблема с оплатой, истечение срока действия и возврат средств — а также для атрибуции дохода.

Отправляйте эти события по мере обработки покупок, продлений и отмен. Только флоу never purchased работает без них.

Request body

event_typestringrequired

Тип события транзакции. Флоу на основе покупок запускаются этими значениями.

One of: "subscription_started", "subscription_renewed", "subscription_renewal_cancelled", "subscription_renewal_reactivated", "billing_issue_detected", "entered_grace_period", "subscription_refunded", "subscription_expired", "non_subscription_purchase", "non_subscription_purchase_refunded"

event_idstringrequired

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

event_datetimestringrequired

Время записи события в формате ISO 8601.

external_profile_idstringrequired

Тот же стабильный external_profile_id, который вы передаёте при сохранении профиля. Связывает транзакцию с нужным профилем. Вы можете отправить транзакцию до того, как профиль создан. Adapty Mail сохранит событие без привязки и свяжет его с профилем при следующем сохранении с тем же идентификатором.

customer_user_idstring

Идентификатор пользователя в вашей системе. Adapty Mail использует его для поиска профиля, если external_profile_id не совпадает ни с одним из существующих. Не сохраняется в событии.

emailstring

Адрес электронной почты покупателя. Adapty Mail использует его для поиска профиля, если ни один из идентификаторов не совпадает ни с одним из существующих. Не сохраняется в событии.

storestringrequired

Стор, из которого поступила транзакция, например app_store, play_store или stripe.

store_product_idstringrequired

Идентификатор приобретённого продукта в сторе.

store_transaction_idstringrequired

Идентификатор данной транзакции в сторе.

store_original_transaction_idstringrequired

Идентификатор первой транзакции в цепочке подписки. Для первой покупки совпадает с store_transaction_id.

purchased_atstringrequired

Время совершения данной транзакции в формате ISO 8601.

originally_purchased_atstringrequired

Время первой покупки подписки в формате ISO 8601.

price_usdstring

Сумма транзакции в USD в виде десятичной строки (например, "9.99").

expires_atstring

Время истечения или истёкшего срока действия подписки в формате ISO 8601. Не указывается для разовых покупок.

offerobject

Сведения о promotional offer или introductory offer, применённом к транзакции.

categorystringrequired

One of: "introductory", "promotional", "offer_code", "win_back"

offer_typestringrequired

One of: "free_trial", "pay_as_you_go", "pay_up_front"

offer_idstring

Идентификатор предложения в сторе, если применимо.

Responses

Событие транзакции успешно сохранено. Тело ответа представляет собой пустой объект.

Schema
object
Example
{}

Ошибка валидации — обязательное поле отсутствует или содержит недопустимое значение. field_name указывает, какое именно поле.

Schema

Стандартный ответ об ошибке. Каждый сбой возвращает статус 4XX с такой структурой.

errorsarray of object
messagestring

Описание ошибки в человекочитаемом формате.

error_codestring

Машиночитаемый идентификатор ошибки.

status_codeinteger

HTTP-код статуса для данной ошибки.

field_namestring

Поле запроса, вызвавшее ошибку, или null, если ошибка не связана с конкретным полем.

Example
{
  "errors": [
    {
      "message": "Field required",
      "error_code": "base_error",
      "status_code": 400,
      "field_name": "event_type"
    }
  ]
}

Секретный API-ключ отсутствует или недействителен.

Schema

Стандартный ответ об ошибке. Каждый сбой возвращает статус 4XX с такой структурой.

errorsarray of object
messagestring

Описание ошибки в человекочитаемом формате.

error_codestring

Машиночитаемый идентификатор ошибки.

status_codeinteger

HTTP-код статуса для данной ошибки.

field_namestring

Поле запроса, вызвавшее ошибку, или null, если ошибка не связана с конкретным полем.

Example
{
  "errors": [
    {
      "message": "Secret key doesn't exist",
      "error_code": "secret_key_does_not_exist_error",
      "status_code": 403,
      "field_name": null
    }
  ]
}