Rheo documentation
Developer Guide

Event catalog

SDK analytics event names, properties, and sensitive text redaction.

Purpose

Mobile SDKs emit a closed set of analytics events that power flow funnels, experiment stats, customer timelines, and response breakdowns in the dashboard. This page lists every event name, what triggers it, and which properties you can expect.

Experiments can use these events as a primary metric. Flow completion and paywall purchase map to flow_completed and iap_purchase. Custom metrics may also require properties.field_key (choice or capture layers) or step_id (screen/surface events) so multi-layer flows stay unambiguous.

Events are batched automatically by the SDK. You do not call these APIs directly.

Common fields on every event

FieldDescription
Event idUnique id per event
TimestampWhen the event occurred (UTC)
Flow + versionWhich flow revision was running
Experiment + variantSet when the channel runs an A/B test
Step idCurrent screen (or external surface for paywall events)
App user idStable SDK user id you provide
Custom user idOptional CRM/backend id
Session idPer-launch session
Platformios, android, or web
Locale, app versionOptional host metadata
Custom propertiesArbitrary key-value from SDK config
PropertiesEvent-specific payload (when applicable)

Event reference

flow_started

Emitted once when resolve succeeds and the runtime starts.

No extra properties.

step_viewed

Emitted when the current screen changes.

No extra properties.

step_completed

Emitted when leaving a screen forward (not skip, not OAuth failure without advance).

PropertyWhen
field_keyManual-submit input on screen
empty_capturetrue when navigating away without capture

step_skipped

Emitted on explicit skip action.

PropertyWhen
field_key, empty_captureSame as step_completed for manual-submit screens

choice_selected

One event per choice (multi-select emits multiple).

PropertyMeaning
field_keyInput layer field key
valueChoice option id

text_submitted

Capture values from text fields, scale, wheel picker, date/time, number stepper, phone, address, permission requests, and app-review outcomes.

PropertyMeaning
field_keyCapture key
valueString value (redacted server-side when sensitive)

Mark PII fields as sensitive in the manifest; Rheo replaces values with __redacted__ before storage.

flow_completed

Terminal success.

PropertyMeaning
responseCountNumber of captured answers in completion map

flow_abandoned

User abandon, host abandon(), or provider unmount while still running.

PropertyMeaning
stepIdLast screen id (when available)

decision_evaluated

Branch taken at a decision node.

PropertyMeaning
decision_node_idDecision node id
matched_case_idCase id or null for else branch
used_else_branchWhether the else branch ran
clause_digestStable hash of evaluated clause

Hyperlink layer tap (https only for host extraction).

PropertyMeaning
layerIdLayer id
hrefSchemeURL scheme
linkHostHost when scheme is https

surface_presented

External surface shown (Integration Node such as RevenueCat or Superwall, or External Surface Node / headless host UI).

PropertyMeaning
surface_node_idIntegration / External Surface Node id (surf_*)
providere.g. revenuecat, superwall, headless
offering_idRevenueCat offering when configured
placement_idSuperwall placement when configured

surface_outcome

External surface finished.

PropertyMeaning
surface_node_id, providerSame as presented
outcomePaywall: purchase_completed, purchase_cancelled, restore_completed, dismissed, failed. Headless: completed, back, dismissed, failed.

app_review_prompt_shown / app_review_prompt_dismissed

In-app review button flow (iOS ~1.5s delay semantics).

PropertyMeaning
layer_idButton layer id

attribution_context_observed

Once per attribution provider when merged SDK attributes first expose that source (integration health).

PropertyMeaning
attribution_providerNormalized provider id

iap_purchase

Successful in-app purchase from a paywall / commerce external surface in the flow.

PropertyMeaning
provider, surface_node_id, product_idCommerce context (provider is revenuecat or superwall)
offering_id, package_id, period_typeOptional partner metadata (RevenueCat offering/package; Superwall may mirror placement as offering_id)
price, currencyOptional localized store price

Experiment Paywall purchase primary metrics count distinct users with this event.

Sensitive text redaction

Only text_submitted events participate in field-level redaction:

  1. Mark capture layers as sensitive in the manifest for PII fields (text, date/time, phone, address, and similar).
  2. Rheo replaces properties.value and properties.text with __redacted__ for sensitive fields.
  3. Safe fields (scales, permission outcomes, app review outcomes, and other non-PII captures) store literal values.

OAuth and email-password values never appear in analytics events or terminal answers — see Authentication layers.

Delivery semantics

  • The SDK batches 1–500 events per upload; one channel per batch.
  • Blocked workspaces (usage limit or billing suspended) reject events before ingest.
  • Accepted batches may not appear in analytics instantly if backend ingestion is delayed—see SDK troubleshooting.