Tipos de eventos y campos de webhook

Adapty envía webhooks en respuesta a eventos de suscripción. Esta sección define los tipos de eventos y los datos que contiene cada webhook.

Tipos de eventos de webhook

Puedes enviar todos los tipos de eventos a tu webhook o elegir solo algunos. Consulta nuestros flujos de eventos para saber qué tipo de datos entrantes esperar y cómo construir tu lógica de negocio en torno a ellos. Puedes desactivar los tipos de eventos que no necesitas cuando configures tu integración de Webhook. También puedes sustituir los IDs de eventos predeterminados de Adapty por los tuyos propios si es necesario.

Nombre del eventoDescripción
subscription_startedSe activa cuando un usuario activa una suscripción de pago sin período de prueba, es decir, se le cobra de inmediato.
subscription_renewedOcurre cuando se renueva una suscripción y se cobra al usuario. Este evento comienza a partir de la segunda facturación, tanto en suscripciones con prueba como sin ella.
subscription_renewal_cancelledEl usuario ha desactivado la renovación automática de la suscripción. El usuario conserva el acceso a las funciones premium hasta el final del período de suscripción pagado.
subscription_renewal_reactivatedSe activa cuando un usuario reactiva la renovación automática de la suscripción.
subscription_expiredSe activa cuando una suscripción finaliza por completo tras ser cancelada. Por ejemplo, si un usuario cancela una suscripción el 12 de diciembre pero esta permanece activa hasta el 31 de diciembre, el evento se registra el 31 de diciembre cuando la suscripción expira.
subscription_pausedOcurre cuando un usuario activa la pausa de suscripción (solo Android).
subscription_deferredSe activa cuando una compra de suscripción se aplaza, lo que permite a los usuarios retrasar el pago manteniendo el acceso a las funciones premium. Esta función está disponible a través de la Google Play Developer API y puede usarse para pruebas gratuitas o para ayudar a usuarios con dificultades económicas.
non_subscription_purchaseCualquier compra que no sea una suscripción, como el acceso de por vida o productos consumibles como monedas del juego.
trial_startedSe activa cuando un usuario activa una suscripción de prueba.
trial_convertedOcurre cuando finaliza una prueba y se cobra al usuario (primera compra). Por ejemplo, si un usuario tiene una prueba hasta el 14 de enero pero se le cobra el 7 de enero, este evento se registra el 7 de enero.
trial_renewal_cancelledEl usuario desactivó la renovación automática de la suscripción durante el período de prueba. El usuario conserva el acceso a las funciones premium hasta que finalice la prueba, pero no se le cobrará ni comenzará una suscripción.
trial_renewal_reactivatedOcurre cuando un usuario reactiva la renovación automática de la suscripción durante el período de prueba.
trial_expiredSe activa cuando finaliza una prueba sin convertirse en suscripción.
entered_grace_periodOcurre cuando falla un intento de pago y el usuario entra en un período de gracia (si está habilitado). El usuario conserva el acceso premium durante este tiempo.
billing_issue_detectedSe activa cuando ocurre un problema de facturación durante un intento de cobro (p. ej., saldo insuficiente en la tarjeta).
subscription_refundedSe activa cuando se reembolsa una suscripción (p. ej., por parte del soporte de Apple).
non_subscription_purchase_refundedSe activa cuando se reembolsa una compra que no es una suscripción.
access_level_updatedOcurre cuando se actualiza el nivel de acceso de un usuario.

subscription_renewal_reactivated lleva el ID del producto anterior — el que estaba activo cuando el usuario canceló — incluso si el usuario reactivó más tarde comprando un producto diferente. Apple mantiene el mismo original_transaction_id a lo largo de la cadena cancelación → reactivación, por lo que este evento refleja el producto original. El nuevo producto aparece en el siguiente evento subscription_renewed cuando comienza la facturación del nuevo producto.

Estructura de los eventos de webhook

Adapty solo te enviará los eventos que hayas seleccionado en la sección Events names de la página Integrations -> Webhooks. Los eventos de webhook se serializan en JSON. El cuerpo de una solicitud POST a tu servidor contendrá el evento serializado envuelto en la siguiente estructura. Todos los eventos siguen la misma estructura, pero sus campos varían según el tipo de evento, el store y tu configuración específica. Los atributos de usuario son los atributos de usuario personalizados que hayas configurado, por lo que contienen lo que hayas definido. Los campos de datos de atribución son los mismos para todos los tipos de eventos, aunque la lista de atribuciones dependerá de las fuentes de atribución que uses en tu app. A continuación puedes ver un ejemplo de evento:

{
  "profile_id": "00000000-0000-0000-0000-000000000000",
  "customer_user_id": "UserIdInYourSystem",
  "idfv": "00000000-0000-0000-0000-000000000000",
  "idfa": "00000000-0000-0000-0000-000000000000",
  "advertising_id": "00000000-0000-0000-0000-000000000000",
  "profile_install_datetime": "2000-01-31T00:00:00.000000+0000",
  "user_agent": "ExampleUserAgent/1.0 (Device; OS Version) Browser/Engine",
  "email": "[email protected]",
  "event_type": "subscription_started",
  "event_datetime": "2000-01-31T00:00:00.000000+0000",
  "event_properties": {
    "store": "play_store",
    "currency": "USD",
    "price_usd": 4.99,
    "profile_id": "00000000-0000-0000-0000-000000000000",
    "cohort_name": "All Users",
    "environment": "Production",
    "price_local": 4.99,
    "base_plan_id": "b1",
    "developer_id": "onboarding_placement",
    "ab_test_name": "onboarding_ab_test",
    "ab_test_revision": 1,
    "paywall_name": "UsedPaywall",
    "proceeds_usd": 4.2315,
    "variation_id": "00000000-0000-0000-0000-000000000000",
    "purchase_date": "2024-11-15T10:45:36.181000+0000",
    "store_country": "AR",
    "event_datetime": "2000-01-31T00:00:00.000000+0000",
    "proceeds_local": 4.2415,
    "tax_amount_usd": 0,
    "transaction_id": "0000000000000000",
    "net_revenue_usd": 4.2415,
    "profile_country": "AR",
    "paywall_revision": "1",
    "profile_event_id": "00000000-0000-0000-0000-000000000000",
    "tax_amount_local": 0,
    "net_revenue_local": 4.2415,
    "vendor_product_id": "onemonth_no_trial",
    "profile_ip_address": "10.10.1.1",
    "consecutive_payments": 1,
    "rate_after_first_year": false,
    "original_purchase_date": "2000-01-31T00:00:00.000000+0000",
    "original_transaction_id": "0000000000000000",
    "subscription_expires_at": "2000-01-31T00:00:00.000000+0000",
    "profile_has_access_level": true,
    "profile_total_revenue_usd": 4.99,
    "promotional_offer_id": null,
    "store_offer_category": null,
    "store_offer_discount_type": null
  },
  "event_api_version": 1,
  "profiles_sharing_access_level": [{"profile_id": "00000000-0000-0000-0000-000000000000", "customer_user_id": "UserIdInYourSystem"}],
   "attributions": {
    "appsflyer": {
      "ad_set": "Keywords 1.12",
      "status": "non_organic",
      "channel": "Google Ads",
      "ad_group": null,
      "campaign": "Social media influencers - Rest of the world",
      "creative": null,
      "created_at": "2000-01-31T00:00:00.000000+0000"
    }
  },
  "user_attributes": {"Favourite_color": "Violet", "Pet_name": "Fluffy"},
  "integration_ids": {"firebase_app_instance_id": "val1", "branch_id": "val2", "one_signal_player_id": "val3"},
  "play_store_purchase_token": {
    "product_id": "product_123",
    "purchase_token": "token_abc_123",
    "is_subscription": true
  }
}

Campos del evento

Los parámetros de los eventos son los mismos para todos los tipos de evento.

CampoTipoDescripción
advertising_idUUIDID de publicidad (solo Android).
attributionsJSONDatos de atribución. Se incluye si Send Attribution está habilitado en los ajustes del Webhook.
customer_user_idStringID de usuario de tu app (UUID, email u otro ID) si lo estableces en el código de tu app al identificar usuarios. Si no identificas usuarios en el código de la app o este usuario concreto es anónimo (no ha iniciado sesión), este campo es null.
emailStringEmail del usuario si lo estableces con el método updateProfile del SDK de Adapty o al crear/actualizar perfiles a través de la API del servidor. Si no pasas el valor email al método del SDK o de la API, este campo es null.
event_api_versionIntegerVersión de la API de Adapty (actual: 1).
event_datetimeISO 8601Marca de tiempo del evento en formato ISO 8601 (p. ej., 2020-07-10T15:00:00.000000+0000).
event_propertiesJSONPropiedades del evento.
event_typeStringNombre del evento en formato Adapty. Consulta Tipos de eventos de Webhook para ver la lista completa.
idfaUUIDID de publicidad (solo Apple). IDFA en el perfil en el Adapty Dashboard. Puede ser null si no está disponible por restricciones de seguimiento, modo infantil o configuración de privacidad.
idfvUUIDIdentificador para proveedores (IDFV), único por desarrollador. IDFV en el perfil en el Adapty Dashboard.
integration_idsJSONIDs de integración del usuario si los estableces con el método setIntegrationIdentifier del SDK de Adapty o al crear/actualizar perfiles a través de la API del servidor. null si no están disponibles o las integraciones están deshabilitadas.
play_store_purchase_tokenJSONToken de compra de Play Store, incluido si Send Play Store purchase token está habilitado en los ajustes del Webhook.
profile_idUUIDID de perfil generado automáticamente por Adapty para cada perfil. Un mismo ID de Apple/Google puede estar asociado a distintos IDs de perfil si no identificas usuarios o permites compras antes de iniciar sesión. Más información sobre cómo trabaja Adapty con perfiles padre/heredero.
profile_install_datetimeISO 8601Marca de tiempo de instalación en formato ISO 8601 (p. ej., 2020-07-10T15:00:00.000000+0000).
profiles_sharing_access_levelJSONLista de usuarios que comparten el nivel de acceso excluyendo el perfil del usuario actual. Si el uso compartido de niveles de acceso está habilitado para tu app, esta lista incluye otros perfiles que se han usado con el mismo ID de Apple/Google.
Formato:
  • profile_id: (UUID) ID de Adapty
  • customer_user_id: (String) Customer User ID si se ha proporcionado
user_agentStringUser-agent del navegador del dispositivo.
user_attributesJSONDatos personalizados que puedes establecer para enriquecer los perfiles de usuario con información específica de la app. Se usan habitualmente para registrar preferencias del usuario (p. ej., tema, idioma) o indicadores de comportamiento (onboarding completado, uso de funciones).
Con formato de pares clave-valor donde las claves son cadenas de texto y los valores pueden ser cadenas o números (p. ej., {"Favourite_color": "Violet", "Pet_name": "Fluffy"}).
Puedes establecer atributos personalizados manualmente en el Adapty Dashboard para perfiles individuales, de forma programática con el método updateProfile del SDK de Adapty, o a través de la API del servidor al crear/actualizar perfiles.
Se incluye si Send User Attributes está habilitado en los ajustes del Webhook.

Aunque los valores de atributos personalizados en el código de la app móvil pueden establecerse como floats o cadenas, los atributos recibidos a través de la API del servidor o mediante importación histórica pueden llegar en formatos distintos. En ese caso, los valores booleanos y enteros se convertirán a floats.

Atribuciones

Para enviar los datos de atribución, activa la opción Send Attribution en la página Integrations -> Webhooks. Si has habilitado el envío de datos de atribución y tienes configuradas integraciones de atribución, los datos que se muestran a continuación se enviarán con el evento para cada fuente. Los mismos datos de atribución se envían a todos los tipos de eventos.

{
  "attributions": {
    "appsflyer": {
      "ad_set": "sample_ad_set_123",
      "status": "non_organic",
      "channel": "sample_channel",
      "ad_group": "sample_ad_group_456",
      "campaign": "sample_ios_campaign",
      "creative": "sample_creative_789",
      "created_at": "2000-01-31T00:00:00.000000+0000",
      "network_user_id": "0000000000000-0000000"
    }
  }
}
Nombre del campoTipo de campoDescripción
ad_setStringConjunto de anuncios de atribución.
statusStringPuede ser organic, non_organic, o unknown.
channelStringNombre del canal de marketing.
ad_groupStringGrupo de anuncios de atribución.
campaignStringNombre de la campaña de marketing.
creativeStringPalabra clave creativa de atribución.
created_atISO 8601 dateFecha y hora de creación del registro de atribución.
network_user_idStringID asignado al usuario por la fuente de atribución.

IDs de integración

Los siguientes IDs de integración se utilizan actualmente en los eventos:

  • adjust_device_id
  • airbridge_device_id
  • amplitude_device_id
  • amplitude_user_id
  • appmetrica_device_id
  • appmetrica_profile_id
  • appsflyer_id
  • branch_id
  • facebook_anonymous_id
  • firebase_app_instance_id
  • mixpanel_user_id
  • pushwoosh_hwid
  • one_signal_player_id
  • one_signal_subscription_id
  • tenjin_analytics_installation_id
  • posthog_distinct_user_id

Token de compra de Play Store

Este campo incluye todos los datos necesarios para revalidar una compra si fuera necesario. Solo se envía si la opción Send Play Store purchase token está habilitada en los ajustes de integración del Webhook.

CampoTipoDescripción
product_idStringEl identificador único del producto (SKU) adquirido en Play Store.
purchase_tokenStringToken generado por Google Play para identificar de forma única esta transacción de compra.
is_subscriptionBooleanIndica si el producto adquirido es una suscripción (true) o una compra única (false).

Propiedades de eventos

Las propiedades de los eventos pueden variar según el tipo de evento e incluso entre eventos del mismo tipo. Por ejemplo, un evento originado en el App Store no incluirá propiedades específicas de Android como base_plan_id. El evento Nivel de acceso actualizado tiene propiedades específicas, por lo que le hemos dedicado una sección aparte. Del mismo modo, hemos separado las Propiedades adicionales de eventos de impuestos e ingresos, ya que son exclusivas de ciertos tipos de eventos.

Para la mayoría de los tipos de eventos

Las propiedades de los eventos son consistentes para la mayoría de los tipos de eventos (excepto el evento Access Level Updated, que se describe en su propia sección). A continuación encontrarás una tabla completa con las propiedades e indicaciones sobre a qué eventos pertenecen.

CampoTipoDescripción
ab_test_nameStringNombre de la prueba A/B de Adapty en la que se originó la transacción.
ab_test_revisionIntegerRevisión de la prueba A/B en la que se originó la transacción.
base_plan_idStringID del plan base en Google Play Store o ID de precio en Stripe.
cancellation_reasonString

Posibles motivos de cancelación: voluntarily_cancelled, billing_error, price_increase, product_was_not_available, refund, cancelled_by_developer, new_subscription_replace, upgraded, unknown, adapty_revoked.

Presente en los siguientes tipos de evento:

subscription_cancelled, subscription_refunded y trial_cancelled.
cohort_nameStringEl nombre de la audiencia que determinó qué paywall se mostró al usuario.
consecutive_paymentsIntegerEl número de períodos que un usuario lleva suscrito sin interrupciones. Incluye el período actual.
currencyStringMoneda local.
developer_idStringEl ID del placement en el que se originó la transacción.
environmentStringLos valores posibles son Sandbox o Production.
event_datetimeISO 8601 dateLa fecha y hora del evento. Es igual al valor del nivel raíz del evento.
original_purchase_dateISO 8601 dateEn suscripciones recurrentes, la compra original es la primera transacción de la cadena; su ID, denominado ID de transacción original, enlaza la cadena de renovaciones. Las transacciones posteriores son extensiones de ella. La fecha de compra original es la fecha y hora de esta primera transacción.
original_transaction_idString

En suscripciones recurrentes, es el ID de transacción original que enlaza la cadena de renovaciones. La transacción original es la primera de la cadena; las posteriores son extensiones de ella.

Si no hay extensiones, original_transaction_id coincide con store_transaction_id.

paywall_nameStringNombre del paywall en el que se originó la transacción.
paywall_revisionStringRevisión del paywall en el que se originó la transacción. El valor predeterminado es 1.
price_localFloatPrecio del producto antes de la comisión de Apple/Google en moneda local.
price_usdFloatPrecio del producto antes de la comisión de Apple/Google en USD.
profile_countryStringDeterminado por Adapty a partir de la IP del perfil.
profile_event_idUUIDID de evento único que puede usarse para deduplicación.
profile_has_access_levelBooleanBooleano que indica si el perfil tiene un nivel de acceso activo.
profile_idUUIDID de perfil generado por Adapty. Es igual al valor del nivel raíz del evento.
profile_ip_addressStringIP del perfil (puede ser IPv4 o IPv6; se prefiere IPv4 cuando está disponible). null si Collect users’ IP addresses está desactivado en los ajustes de la app.
profile_total_revenue_usdFloatIngresos totales del perfil con los reembolsos descontados.
promotional_offer_idStringEl ID de Adapty de la oferta promocional utilizada. Este ID se define al crear la oferta en el dashboard.
purchase_dateISO 8601 dateLa fecha y hora de la compra del producto.
rate_after_first_yearBooleanBooleano que indica que la suscripción cumple los requisitos para una tasa de comisión reducida (normalmente el 15%) tras un año de renovación continua. Las tasas de comisión varían según la elegibilidad del programa y el país. Consulta Comisión del store e impuestos para más detalles.
storeStringStore donde se compró el producto. Valores estándar: app_store, play_store, stripe, paddle.
Si configuras transacciones de store personalizadas mediante la API server-side, se usa el valor del parámetro store.
store_countryStringEl país que nos envía la tienda de aplicaciones.
store_offer_categoryStringCategoría de oferta aplicada. Los valores posibles son introductory, promotional, winback.
store_offer_discount_typeStringTipo de oferta aplicada. Los valores posibles son free_trial, pay_as_you_go y pay_up_front.
subscription_expires_atISO 8601 dateFecha de expiración de la suscripción. Normalmente en el futuro.
transaction_idStringIdentificador único de una transacción.
trial_durationStringDuración del período de prueba en días. Se envía con el formato ” days”, por ejemplo, “7 days”. Solo está presente en los tipos de evento relacionados con pruebas: trial_started, trial_converted, trial_cancelled.
variation_idUUIDID único del paywall en el que se realizó la compra.
vendor_product_idString

ID del producto en la Apple App Store, Google Play Store o Stripe.

Si el acceso se concedió sin una transacción real en la store, vendor_product_id será uno de los siguientes:

Propiedades adicionales de impuestos e ingresos en eventos

Las propiedades de eventos relacionadas con impuestos e ingresos que se muestran a continuación son campos adicionales que solo aplican a ciertos tipos de eventos. Esto significa que los tipos de eventos listados incluyen las Propiedades de eventos para la mayoría de los tipos de eventos, junto con los campos adicionales indicados a continuación.

Tipos de eventos que tienen las propiedades de impuestos e ingresos en eventos:

  • subscription_renewed
  • subscription_initial_purchase (también conocido como subscription_started — es el mismo evento)
  • subscription_refunded
  • non_subscription_purchase | Campo | Tipo | Descripción | | :-------------------- | :---- | :----------------------------------------------------------- | | net_revenue_local | Float | Ingresos netos (ingresos después del recorte de Apple/Google e impuestos) en moneda local. | | net_revenue_usd | Float | Ingresos netos (ingresos después del recorte de Apple/Google e impuestos) en USD. | | proceeds_local | Float | Precio del producto tras el recorte de Apple/Google en moneda local. | | proceeds_usd | Float | Precio del producto tras el recorte de Apple/Google. | | tax_amount_local | Float | Importe de impuestos deducido en moneda local. | | tax_amount_usd | Float | Importe de impuestos deducido en USD. |

Ejemplo de payload non_subscription_purchase

non_subscription_purchase sigue la misma estructura que los eventos de suscripción, pero refleja una compra única o consumible. Los campos exclusivos de suscripciones no aplican: cancellation_reason, will_renew, is_in_grace_period, is_refund, is_lifetime y trial_duration están ausentes. subscription_expires_at está presente pero con valor null. Los campos de impuestos e ingresos (net_revenue_*, proceeds_*, tax_amount_*) sí se incluyen.

Ejemplo de payload (haz clic para expandir)
{
  "profile_id": "00000000-0000-0000-0000-000000000000",
  "customer_user_id": "UserIdInYourSystem",
  "event_type": "non_subscription_purchase",
  "event_datetime": "2000-01-31T00:00:00.000000+0000",
  "event_properties": {
    "store": "app_store",
    "currency": "USD",
    "price_usd": 4.99,
    "price_local": 4.99,
    "proceeds_usd": 4.2415,
    "proceeds_local": 4.2415,
    "net_revenue_usd": 4.2415,
    "net_revenue_local": 4.2415,
    "tax_amount_usd": 0,
    "tax_amount_local": 0,
    "profile_id": "00000000-0000-0000-0000-000000000000",
    "environment": "Production",
    "vendor_product_id": "100coins",
    "transaction_id": "0000000000000000",
    "original_transaction_id": "0000000000000000",
    "purchase_date": "2024-11-15T10:45:36.181000+0000",
    "original_purchase_date": "2024-11-15T10:45:36.181000+0000",
    "subscription_expires_at": null,
    "store_country": "US",
    "profile_country": "US",
    "profile_ip_address": "10.10.1.1",
    "profile_has_access_level": false,
    "profile_total_revenue_usd": 4.99,
    "consecutive_payments": 1,
    "rate_after_first_year": false,
    "profile_event_id": "00000000-0000-0000-0000-000000000000"
  },
  "event_api_version": 1
}

Para el evento Access Level Updated

El evento Access Level Updated es un evento de webhook específico que se genera únicamente cuando la integración de Webhook está activa y este tipo de evento está habilitado. Si está habilitado, se envía al Webhook configurado y aparece en el Event Feed. Si no está habilitado, el evento no se creará.

Si has habilitado el uso compartido de niveles de acceso, el evento access level updated se enviará a todos los perfiles que compartan el nivel de acceso.

Usa este evento para actualizar el nivel de acceso del usuario en tu base de datos, conceder o revocar funciones premium en tu backend, y mantener el acceso sincronizado entre dispositivos o plataformas.

PropiedadTipoDescripción
ab_test_nameStringNombre de la prueba A/B donde se originó la transacción.
access_level_idStringEl ID del nivel de acceso.
activated_atISO 8601 dateFecha y hora en que se activó el acceso por última vez.
active_introductory_offer_typeStringTipo de oferta introductoria aplicada. Los valores posibles son free_trial, pay_as_you_go y pay_up_front.
active_promotional_offer_idStringID de la oferta promocional indicada en la sección de productos del Adapty Dashboard.
active_promotional_offer_typeStringTipo de oferta promocional aplicada. Los valores posibles son free_trial, pay_as_you_go y pay_up_front.
base_plan_idStringID del plan base en Google Play Store o ID de precio en Stripe.
billing_issue_detected_atISO 8601 dateFecha y hora del problema de facturación.
cancellation_reasonStringPosibles motivos de cancelación: voluntarily_cancelled, billing_error, price_increase, product_was_not_available, refund, cancelled_by_developer, new_subscription_replace, upgraded, unknown, adapty_revoked.
cohort_nameStringNombre de la audiencia a la que pertenece el perfil.
currencyStringMoneda local (por defecto USD).
developer_idStringEl ID del placement donde se originó la transacción.
environmentStringLos valores posibles son Sandbox o Production.
event_datetimeISO 8601 dateLa fecha y hora del evento.
expires_atISO 8601 dateFecha y hora en que expirará el acceso.
is_activeBooleanBooleano que indica si el nivel de acceso está activo.
is_in_grace_periodBooleanBooleano que indica si el perfil está en el período de gracia.
is_lifetimeBooleanBooleano que indica si el nivel de acceso es de por vida.
is_refundBooleanBooleano que indica si la transacción es un reembolso.
original_purchase_dateISO 8601 dateEn las suscripciones recurrentes, la compra original es la primera transacción de la cadena; su ID, llamado ID de transacción original, vincula la cadena de renovaciones. Las transacciones posteriores son extensiones de esta. La fecha de compra original es la fecha y hora de esa primera transacción.
original_transaction_idString

En las suscripciones recurrentes, este es el ID de transacción original que vincula la cadena de renovaciones. La transacción original es la primera de la cadena; las posteriores son extensiones de ella.

Si no hay extensiones, original_transaction_id coincide con store_transaction_id.

El identificador de transacción de la compra original.
paywall_nameStringNombre del paywall donde se originó la transacción.
paywall_revisionStringRevisión del paywall donde se originó la transacción. El valor por defecto es 1.
profile_countryStringDeterminado por Adapty según la IP del perfil.
profile_event_idUUIDID único del evento que puede usarse para deduplicación.
profile_has_access_levelBooleanBooleano que indica si el perfil tiene un nivel de acceso activo.
profile_idUUIDID interno de perfil de usuario de Adapty.
profile_ip_addressStringIP del perfil (puede ser IPv4 o IPv6, con preferencia por IPv4 cuando esté disponible). null si Collect users’ IP addresses está desactivado en los ajustes de la app.
profile_total_revenue_usdFloatIngresos totales del perfil, reembolsos incluidos.
purchase_dateISO 8601 dateLa fecha y hora de compra del producto.
renewed_atISO 8601 dateFecha y hora en que se renovará el acceso.
starts_atISO 8601 dateFecha y hora en que comienza el nivel de acceso.
storeStringStore donde se compró el producto. Valores estándar: app_store, play_store, stripe, paddle.
Si configuras transacciones de store personalizadas mediante la API server-side, se usa el valor del parámetro store.
store_countryStringPaís enviado a Adapty por el store.
subscription_expires_atISO 8601 dateFecha de expiración de la suscripción.
transaction_idStringIdentificador único de una transacción.
trial_durationStringDuración del período de prueba en días (p. ej., “7 days”).
variation_idUUIDIdentificador de una variante, usado para atribuir compras a este paywall.
vendor_product_idString

ID del producto en el store (Apple/Google/Stripe).

Si el acceso se concedió sin una transacción real en el store, vendor_product_id será uno de los siguientes:

will_renewBooleanIndica si el nivel de acceso de pago se renovará.

Ten en cuenta que esta estructura puede crecer con el tiempo, ya que nosotros o los terceros con quienes trabajamos podemos añadir nuevos datos. Asegúrate de que el código que la procesa sea lo suficientemente robusto y se base en campos específicos en lugar de en la estructura completa.