Сохранить событие транзакции (API)
POST /api/v1/profile/transaction-event/save/

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

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

Отправляйте эти события по мере обработки покупок, продлений и отмен. Без них работает только флоу 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, который вы передаёте при сохранении профиля. Связывает транзакцию с нужным профилем.

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
    }
  ]
}