/api/v1/profile/transaction-event/save/ Enregistrer un événement de transaction
Enregistre un événement de transaction de store pour un profil. Adapty Mail utilise les événements de transaction pour placer
les profils dans des flows basés sur les achats — l'event_type correspond à des flows tels que renouvellement annulé,
problème de facturation, expiré et remboursé — ainsi que pour l'attribution des revenus.
Envoyez ces événements lorsque vous gérez des achats, des renouvellements et des annulations. Seul le flow jamais acheté fonctionne sans eux.
Request body
Le type d'événement de transaction. Les flux basés sur les achats sont déclenchés par ces valeurs.
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"
Identifiant unique de cet événement, géré par votre système. Utilisez-le pour garantir l'idempotence des événements.
Date et heure d'enregistrement de l'événement, au format ISO 8601.
Le même external_profile_id stable que vous envoyez lors de l'enregistrement du profil. Associe la
transaction au bon profil.
Vous pouvez envoyer une transaction avant que le profil n'existe. Adapty Mail conserve l'événement
sans association et le lie au profil lors du prochain enregistrement portant le même identifiant.
L'identifiant de l'utilisateur dans votre propre système. Adapty Mail l'utilise pour retrouver le profil lorsque
external_profile_id ne correspond à aucun profil. Il n'est pas stocké sur l'événement.
L'adresse e-mail de l'acheteur. Adapty Mail l'utilise pour retrouver le profil lorsqu'aucun identifiant ne correspond. Elle n'est pas stockée sur l'événement.
Le store dont provient la transaction, par exemple app_store, play_store ou stripe.
Identifiant du produit acheté dans le store.
Identifiant de cette transaction dans le store.
Identifiant de la première transaction dans la chaîne d'abonnement. Pour le premier achat, il est égal à store_transaction_id.
Date et heure de cette transaction, au format ISO 8601.
Date et heure du premier achat de l'abonnement, au format ISO 8601.
Le montant de la transaction en USD, sous forme de chaîne décimale (par exemple, "9.99").
Date et heure d'expiration de l'abonnement, au format ISO 8601. À omettre pour les achats uniques.
Détails d'une offre promotionnelle ou d'une offre de lancement appliquée à la transaction.
One of: "introductory", "promotional", "offer_code", "win_back"
One of: "free_trial", "pay_as_you_go", "pay_up_front"
Identifiant de l'offre dans le store, le cas échéant.
Responses
Événement de transaction enregistré avec succès. Le corps de la réponse est un objet vide.
Schema
Example
{} Échec de la validation — un champ obligatoire est manquant ou invalide. field_name indique le champ concerné.
Schema
Réponse d'erreur standard. Chaque échec renvoie un statut 4XX avec cette structure.
Description de l'erreur lisible par un humain.
Identifiant d'erreur lisible par une machine.
Code de statut HTTP pour cette erreur.
Le champ de la requête à l'origine de l'erreur, ou null si l'erreur n'est pas liée à un champ spécifique.
Example
{
"errors": [
{
"message": "Field required",
"error_code": "base_error",
"status_code": 400,
"field_name": "event_type"
}
]
} Clé API secrète manquante ou invalide.
Schema
Réponse d'erreur standard. Chaque échec renvoie un statut 4XX avec cette structure.
Description de l'erreur lisible par un humain.
Identifiant d'erreur lisible par une machine.
Code de statut HTTP pour cette erreur.
Le champ de la requête à l'origine de l'erreur, ou null si l'erreur n'est pas liée à un champ spécifique.
Example
{
"errors": [
{
"message": "Secret key doesn't exist",
"error_code": "secret_key_does_not_exist_error",
"status_code": 403,
"field_name": null
}
]
}