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

Guardar evento de transacción

Registra un evento de transacción del store para un perfil. Adapty Mail utiliza los eventos de transacción para colocar perfiles en flows basados en compras — el event_type se asocia a flows como cancelación de renovación, problema de facturación, expirado y reembolsado — y para la atribución de ingresos.

Envía estos eventos cuando gestiones compras, renovaciones y cancelaciones. Solo el flow never purchased funciona sin ellos.

Request body

event_typestringrequired

El tipo de evento de transacción. Los flujos basados en compras se activan mediante estos valores.

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

Identificador único de este evento, gestionado por tu sistema. Úsalo para mantener los eventos idempotentes.

event_datetimestringrequired

Fecha y hora en que se registró el evento, en formato ISO 8601.

external_profile_idstringrequired

El mismo external_profile_id estable que envías al guardar el perfil. Vincula la transacción al perfil correcto. Puedes enviar una transacción antes de que exista el perfil. Adapty Mail almacena el evento sin asociar y lo vincula al perfil en el siguiente guardado que contenga el mismo identificador.

customer_user_idstring

El identificador del usuario en tu propio sistema. Adapty Mail lo usa para encontrar el perfil cuando external_profile_id no coincide con ninguno. No se almacena en el evento.

emailstring

La dirección de correo electrónico del comprador. Adapty Mail la usa para encontrar el perfil cuando ninguno de los identificadores coincide con alguno. No se almacena en el evento.

storestringrequired

El store del que proviene la transacción, por ejemplo, app_store, play_store o stripe.

store_product_idstringrequired

Identificador del producto comprado en el store.

store_transaction_idstringrequired

Identificador de esta transacción en el store.

store_original_transaction_idstringrequired

Identificador de la primera transacción en la cadena de suscripción. Para la primera compra, es igual a store_transaction_id.

purchased_atstringrequired

Fecha y hora en que ocurrió esta transacción, en formato ISO 8601.

originally_purchased_atstringrequired

Fecha y hora en que se realizó la primera compra de la suscripción, en formato ISO 8601.

price_usdstring

El importe de la transacción en USD, como cadena decimal (por ejemplo, "9.99").

expires_atstring

Fecha y hora en que la suscripción vence o venció, en formato ISO 8601. Omitir para compras que no sean suscripciones.

offerobject

Detalles de una oferta promocional o introductoria aplicada a la transacción.

categorystringrequired

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

offer_typestringrequired

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

offer_idstring

Identificador de la oferta en el store, si existe.

Responses

Evento de transacción guardado correctamente. El cuerpo de la respuesta es un objeto vacío.

Schema
object
Example
{}

Validación fallida — falta un campo obligatorio o no es válido. field_name indica qué campo.

Schema

Respuesta de error estándar. Cada fallo devuelve un estado 4XX con esta estructura.

errorsarray of object
messagestring

Descripción del error en formato legible para humanos.

error_codestring

Identificador de error legible por máquina.

status_codeinteger

Código de estado HTTP para este error.

field_namestring

El campo de la solicitud que causó el error, o null si el error no está relacionado con un campo específico.

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

Clave API secreta ausente o inválida.

Schema

Respuesta de error estándar. Cada fallo devuelve un estado 4XX con esta estructura.

errorsarray of object
messagestring

Descripción del error en formato legible para humanos.

error_codestring

Identificador de error legible por máquina.

status_codeinteger

Código de estado HTTP para este error.

field_namestring

El campo de la solicitud que causó el error, o null si el error no está relacionado con un campo específico.

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