ÿÿ Guardar evento de transacción (API)
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 ubicar perfiles en flows basados en compras — el event_type se corresponde con flows como renewal cancelled, billing issue, expired y refunded — y para la atribución de ingresos.

Envía estos eventos a medida que gestionas compras, renovaciones y cancelaciones. Solo el flow never purchased funciona sin ellos.

Request body

event_typestringrequired

El tipo de evento de transacción. Los flows basados en compras se activan con 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

Cuándo 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.

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 de la cadena de suscripción. Para la primera compra, coincide con store_transaction_id.

purchased_atstringrequired

Cuándo ocurrió esta transacción, en formato ISO 8601.

originally_purchased_atstringrequired

Cuándo 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

Cuándo expira o expiró la suscripción, en formato ISO 8601. Omitir para compras que no son 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 es invá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 legible del error.

error_codestring

Identificador del error legible por máquina.

status_codeinteger

Código de estado HTTP para este error.

field_namestring

El campo de la solicitud que provocó el error, o null si el error no está asociado a 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 legible del error.

error_codestring

Identificador del error legible por máquina.

status_codeinteger

Código de estado HTTP para este error.

field_namestring

El campo de la solicitud que provocó el error, o null si el error no está asociado a 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
    }
  ]
}
ÿÿÿÿ