Skip to main content

Capture Events

Basic capture​

client.capture('button_clicked', { buttonId: 'cta', screen: 'home' });

capture() is consent-gated. If the user has not opted in, the call returns immediately with no side effects.

Screen views​

client.screen('Checkout', { step: 2 });

On web, enable automatic screen tracking via SunglassesProvider:

<SunglassesProvider client={client} screenTracking={{ useHistoryApi: true }}>

On React Native, use useExpoRouterScreenTracking or useNavigationScreenTracking. See Screen tracking.

Identify and group​

client.identify('user-123', { plan: 'pro', country: 'US' });
client.alias('user-123', anonymousId);
client.group('org-456', { name: 'Acme Corp' });

Super properties​

Properties registered with register() are merged into every subsequent event:

client.register({ experiment_group: 'A' });
client.unregister('experiment_group');
client.getRegisteredProperties();

Advanced capture options​

Pass a third argument to capture() for back-dating or deduplication:

// Back-date an offline event
client.capture('purchase_completed', { amount: 29.99 }, {
timestamp: '2026-01-15T10:00:00.000Z',
});

// Inject a server-side deduplication ID
client.capture('order_created', { orderId: '123' }, {
messageId: '550e8400-e29b-41d4-a716-446655440000',
});

UTM / attribution​

See Screen tracking for UTM capture on web and deep links.

Type-safe events​

See Type-safe event catalog for compile-time event name checking.