AttryResourcesStandard events

Standard events in Attry

Attry accepts custom events, but predefined event names stay intentionally small: lifecycle events, deep link opens, purchase revenue, and purchase intent.

Event model
Reserved names keep analytics clean

Use standard events only for the shared Attry primitives. Use custom events for app-specific behavior that only your team understands.

Auto events
install, open, sessions

Tracked by the React Native and Capacitor SDKs when lifecycle hooks are available.

Revenue events
purchase + currency

Revenue events require stable amount and currency fields so revenue reporting is reliable.

View event setup
Lifecycle
install / open

The SDK records install and open signals so campaign performance can start from the first app session.

Monetization
purchase

Purchase carries normalized revenue fields used by campaign revenue reporting.

Custom
any_event_name

You can still send app-specific events with properties when no standard event fits.

How to choose an event name

Use Attry standard events only for lifecycle, deep link, purchase intent, and purchase revenue. Everything else should be a stable custom event name.

01

Let the SDK handle lifecycle

Install, open, session, foreground, background, and deep link opened events are auto-collected by the SDK where supported.

02

Use reserved names for revenue

Use purchase only when you include value or amountMinor plus currency.

03

Keep names stable

Use snake_case event names and do not rename events once dashboards and reports depend on them.

04

Put details in properties

Keep the event name simple, then send plan, screen, product ID, or experiment details as properties.

Standard event reference

install
Auto
First SDK initialization on a device. Used for install and deferred attribution reporting.
open
Auto
App open or active session signal. Replaces the older app_open naming.
purchase
Revenue required
Requires value or amountMinor plus currency. Used for purchase revenue.
initiate_purchase
Purchase intent
Use when checkout, subscription, or purchase flow starts. Revenue is not required.
custom events
Allowed
Use snake_case names and properties for product-specific actions.

Auto-collected lifecycle events

React Native and Capacitor SDKs collect core lifecycle signals automatically after initialization. These events power the first layer of user analytics and deferred attribution without requiring every app team to wire basic app state by hand.

`install`: first SDK initialization on that device and app
`open`: app open or resume into an active session
`session_started`: the beginning of a measured app session
`session_ended`: the end of a measured app session when the SDK can observe it
`app_foreground` and `app_background`: app state transitions
`deep_link_opened`: the app opened from a deep link, Universal Link, or App Link

Purchase revenue

Purchase is strict because it feeds campaign revenue. Attry does not guess revenue from random custom properties, so purchase events must include stable revenue data.

`purchase`: one-time purchase, subscription conversion, or paid conversion
`value`: decimal amount such as 31.42, or `amountMinor`: integer minor-unit amount
`currency`: 3-letter ISO currency code such as USD
`productId`, `transactionId`, and `orderId`: recommended for validation and de-duplication

Purchase intent

Use initiate_purchase when a user starts a checkout or paywall purchase flow. Other product actions should be custom events with structured properties.

`initiate_purchase`: checkout or purchase flow started
Put plan, screen, product, experiment, and placement details in `properties`
Use custom events for paywall views, trials, cancellations, refunds, onboarding, search, content, and sharing

Troubleshooting

Purchase does not show revenue

Use attry.purchase or send revenue.amountMinor and revenue.currency. A purchase event without revenue is rejected by the API.

The same action appears as multiple events

Choose one stable name and keep details in properties. For example, use purchase with productId instead of purchase_monthly and purchase_yearly.

Auto events are missing

Confirm the SDK is initialized once at app startup and that the app is using the platform package, not the internal sdk-core package directly.

Revenue event shape

Use helper methods so the SDK normalizes revenue into minor units before sending it to Attry.

await attry.purchase({
  value: 31.42,
  currency: "USD",
  productId: "pro_monthly",
  transactionId: "txn_123"
});
stored revenue -> amountMinor: 3142, currency: "USD"

Can I send custom event names?

Yes. Attry accepts custom event names for app-specific behavior. Use predefined names only when the action matches a standard Attry event.

Is first open different from install?

Attry tracks install as the first SDK initialization on that device and open as app activity. In many apps they can happen close together, but they answer different questions.

Why is purchase strict?

Purchase is strict because it powers campaign revenue. Attry requires stable amount and currency fields so revenue is not inferred from arbitrary custom properties.