Events
An event is one thing that happened: a page view, an app launch, a sign-up, a purchase. Every report in Rabolic is built from events.
What an event holds
| Part | Example | What it is |
|---|---|---|
| Name | signup_completed | What happened |
| Time | 2026-11-08T10:00:01.000Z | When it happened, on the device's clock. Rabolic corrects clocks that are off by more than 30 s |
| Anonymous id | a random UUID | The browser or app install that sent it |
| User id | usr_8f2k1x9q | Your own id for the person, after identify() |
| Session id | a UUIDv7 | The session it belongs to. See Sessions |
| Properties | { "method": "google" } | Details you choose to send |
| Context | platform, app version, device, OS, locale, page, campaign | Filled in by the SDK |
Sending your own events
rabolic.track('signup_completed', { method: 'google' })
- Name events in
snake_case, in the past tense of what the person did:signup_completed,checkout_completed,workout_started. - Put the details in properties, not in the name:
plan_selectedwith{ plan: 'pro' }, notpro_plan_selected. - Names are 1 to 200 characters, may not start with
$and may not contain control characters. - Properties can be strings, numbers, booleans,
null, arrays and objects. At most 255 keys per level, nested at most 5 levels deep, keys up to 255 characters. - One event is at most 32 KB (32,768 bytes of UTF-8 JSON). The SDKs drop larger events, and the server rejects them.
Super properties
register() sets properties that every later event carries, until unregister() or reset(). A property on the event itself wins over a super property with the same name.
rabolic.register({ app_theme: 'dark' })
Person traits
identify(userId, traits) sends $identify with traits, such as { plan: 'pro' }. Traits are properties of the person, shown on their profile in Users.
Properties Rabolic removes
Rabolic removes these keys from properties and traits without rejecting the event:
- keys longer than 255 characters;
__proto__,constructorandprototype;- objects nested deeper than 5 levels;
- sensitive names:
password,passwd,pwd,card_number,cc_number,cvv,cvc,iban,ssn,social_security_number; - properties you block in Project settings → Privacy & data → Sensitive property blocking.
Don't send personal data you don't need.
Reserved events
Names that start with $ are reserved. Rabolic accepts only these; any other $ name is rejected with reserved_name.
| Name | Sent by | Properties |
|---|---|---|
$pageview | Web, automatic | The page is in context.page |
$page_leave | Web, automatic | active_ms, scroll_depth (0–1) |
$screen | Apps, with the navigation helper or screen() | The screen name, in context.screen_name and properties.name |
$identify | identify() | traits |
$app_first_open | Apps, the first launch after install | None today |
$app_open | Apps, each launch or return to the foreground | from_background (boolean) |
$app_background | Apps, leaving the foreground | foreground_ms |
$app_update | Apps, the first launch on a new app version | previous_version |
$deep_link | Apps, trackDeepLink() or handleDeepLink() | url, linked_anonymous_id |
$purchase, $renewal, $refund | Secret keys only: your server, or Dodo Payments webhooks | amount, currency, transaction_id, product |
Revenue events sent with a publishable key are rejected with revenue_needs_secret_key. See Revenue and attribution.
Duplicates
Every event has an event_id, created when the event happens and kept on every retry. Rabolic drops an event whose id it has received in the last 48 hours, so a retried batch counts once. Duplicates aren't billed.
Where events show up
- Live: within seconds, under Events as they arrive.
- Events: the catalog of every event name the project has received, with counts and properties. See Events.
- Reports: results are cached for a minute while the date range includes today, so trends catch up within about a minute.
Ingest HTTP API
Send events to Rabolic from any language with POST /v1/batch. Authentication, the batch envelope and event fields, reserved events, responses and retries, rejection reasons, deduplication, clock correction and remote config.
Identity
How Rabolic links browsers, app installs and server events to one person with identify(), when people are merged, what reset() does, and what doesn't link people yet.