pex

apex-spec v1.0.0

The Apex Spec

The canonical event vocabulary your app and Apex's platform speak. Templates, journeys, audiences, and conversion goals all read field names from this catalog \u2014 so naming a payload the spec way means everything you wire up afterward just snaps together.

Customer SDK

App events

47 declared

What your customer-facing app fires through the snippet or SDK. Commerce, identity, engagement, communication \u2014 the canonical vocabulary you stand up day one.

apex.track('add_to_cart', { product_id, value, currency })

Apex platform

Platform events

25 declared

What Apex's dashboard fires as merchants use it. Invitations, integrations, experiments, portfolio access, billing transitions. Templates and journeys wire up these out of the box.

trackApexInternal({ eventName: 'user_invitation_accepted', \u2026 })

App events

What your customer-facing app fires. Field names are flat snake_case (e.g. product_id, order_id).

Commerce

Cart, checkout, and revenue. Drives attribution + abandonment journeys.

add_to_cart

Primary metric

User added a product to their cart.

product_id*
string
prod_atlas_runner_blue_42
value
number
129.99
currency
string
USD
quantity
number
1
cart_id
string
cart_9f2e1a

remove_from_cart

User removed a product from their cart.

product_id*
string
prod_atlas_runner_blue_42
value
number
129.99
currency
string
USD
quantity
number
1
cart_id
string
cart_9f2e1a

product_view

User viewed a product detail screen.

product_id*
string
prod_atlas_runner_blue_42
category
string
Footwear / Running
value
number
129.99
currency
string
USD

add_to_wishlist

User added a product to a wishlist or saved-for-later list.

product_id*
string
prod_atlas_runner_blue_42
value
number
129.99
currency
string
USD

checkout_started

Primary metric

User began the checkout flow.

value
number
259.98
currency
string
USD
item_count
number
2
cart_id
string
cart_9f2e1a

in_app_purchase

Primary metric

Revenue event: user completed a purchase inside the app.

order_id*
string
ord_2024_03_45891
value*
number
259.98
currency*
string
USD
product_id
string
prod_atlas_runner_blue_42
transaction_id
string
txn_stripe_3PqXyZ
items
array
is_restored
boolean
false

purchase_refunded

Primary metric

A prior purchase was refunded.

order_id*
string
ord_2024_03_45891
value*
number
129.99
currency*
string
USD
reason
string
Customer requested refund within return window

subscription_event

Primary metric

Subscription lifecycle transition (start, renew, cancel, trial conversion, etc).

product_id*
string
atlas_pro_annual
action*
string
start
amount
number
299
currency
string
USD
period_type
string
annual
transaction_id
string
txn_stripe_3PqXyZ
expires_at
string
2027-05-21T00:00:00Z
is_trial
boolean
false

Identity

Sign-up, sign-in, and identity stitching.

user_signed_up

Primary metric

A new user account was created.

method
string
email
referrer
string
https://google.com/search?q=atlas+running

user_signed_in

User authenticated into the app.

method
string
email

user_signed_out

User signed out of the app.

No payload fields required.

user_identified

Anonymous visitor was linked to a known user identity.

user_id*
string
usr_atlas_8f3a92
traits
object

Lifecycle

Install, open, background, uninstall. Session foundation.

app_install

First install of the app on this device.

No payload fields required.

app_open

Primary metric

App was foregrounded by the user. Foundational session signal.

source
string
push_notification

app_background

App was backgrounded.

No payload fields required.

app_uninstall

App was uninstalled from the device (server-inferred from push silent failure).

No payload fields required.

app_reinstall

App was reinstalled within the reinstall window.

No payload fields required.

Session

Explicit session boundaries with duration.

session_start

Beginning of a session (gap from last event > session timeout).

session_id
string
sess_2026_05_21_abc123

session_end

End of a session (background or timeout).

session_id
string
sess_2026_05_21_abc123
duration_ms
number
187320

Engagement

Page views, screens, searches, content interactions.

page_view

User viewed a screen or page. Canonical name across web and mobile.

path
string
/products/atlas-runner
title
string
Atlas Runner — Atlas Athletics
referrer
string
https://google.com/search?q=atlas+running

pageview

Deprecated · use page_view

Legacy web pageview. Prefer `page_view` for new integrations.

path
string
/products/atlas-runner
title
string
Atlas Runner — Atlas Athletics
referrer
string
https://google.com/search?q=atlas+running

screen_view

Mobile screen render. Equivalent to `page_view` for native screens.

screen_name*
string
ProductDetail
previous_screen
string
ProductList

search

User executed a search query.

query*
string
trail running shoes
results_count
number
24

share

User shared content to an external surface.

content_id
string
prod_atlas_runner_blue_42
channel
string
twitter

content_view

User viewed a piece of content (article, video, etc).

content_id*
string
blog_2026_05_running_form_guide
content_type
string
article
duration_ms
number
42500

form_submit

Form was submitted by the user.

form_id
string
newsletter_signup

click

Generic click event.

target
string
button#hero-cta

engagement

Composite engagement signal (web only — replaced by individual events on mobile).

No payload fields required.

heartbeat

Periodic heartbeat indicating the user is still active on a page.

No payload fields required.

rage_click

Multiple rapid clicks on the same element — frustration signal.

target
string
button#submit-disabled

dead_click

Click that produced no observable effect — frustration signal.

target
string
div.banner-image

goal_conversion

Primary metric

User completed a defined conversion goal.

goal_id*
string
signup_completed
value
number
25

Where this is used

Communication

Push, email, in-app message delivery + interaction.

push_received

Device received a push notification (delivery confirmation).

message_id
string
msg_2026_05_21_abc
campaign_id
string
cmp_atlas_spring_2026

push_opened

User tapped/opened a push notification.

message_id
string
msg_2026_05_21_abc
campaign_id
string
cmp_atlas_spring_2026
deep_link
string
atlas://product/atlas-runner

email_opened

Email open tracked via pixel.

message_id
string
msg_2026_05_21_abc
campaign_id
string
cmp_atlas_spring_2026

email_clicked

Link in email was clicked.

message_id
string
msg_2026_05_21_abc
campaign_id
string
cmp_atlas_spring_2026
link
string
https://atlasathletics.com/products/atlas-runner

in_app_message_seen

In-app message was rendered to the user.

message_id
string
msg_2026_05_21_abc
campaign_id
string
cmp_atlas_spring_2026

in_app_message_clicked

User interacted with an in-app message CTA.

message_id
string
msg_2026_05_21_abc
campaign_id
string
cmp_atlas_spring_2026
cta
string
upgrade_now

Attribution

Reattribution and reengagement signals.

reattribution

A re-install was matched to a prior install.

partner_id
string
partner_facebook_ads
original_install_id
string
inst_2025_11_xyz

reengagement

A returning user opened the app after a period of inactivity.

partner_id
string
partner_email_winback
inactive_days
number
30

Smart banner

Apex smart banner impressions, clicks, dismissals.

smart_banner_impression

Apex smart banner was shown on a mobile web page.

No payload fields required.

smart_banner_click

User clicked the smart banner CTA.

No payload fields required.

smart_banner_dismiss

User dismissed the smart banner.

No payload fields required.

System

Custom events and internal lifecycle transitions.

custom

Custom event type. Stored with the original event name preserved in `data.eventName`. Use canonical events when possible.

No payload fields required.

lifecycle_transition

Internal Apex lifecycle/level transition event (not user-generated).

No payload fields required.

js_error

JavaScript runtime error captured by the web SDK.

message
string
ReferenceError: window.atlas is not defined
stack
string
at fn (https://atlasathletics.com/app.js:123:45)

Platform events

What Apex itself fires as merchants use the dashboard. Useful when you build agent automations on top of the platform.

Invitations

Team invite lifecycle from Apex's dashboard.

user_invitation_created

An organization owner/admin invited a new teammate. Drives the invite email + reminder branch.

inviter_name*
string
Sarah Chen
inviter_email
string
sarah@hypernova.inc
org_name*
string
Hypernova Inc
org_id*
string
org_hypernova_8f3a
invitee_email*
string
alex@example.com
role*
string
admin
accept_url*
string
https://app.apex.inc/invite/accept?token=inv_4f8a2b7c9d3e1f6a
invitation_token
string
inv_4f8a2b7c9d3e1f6a
invitation_id
string
inv_4f8a2b7c

Where this is used

user_invitation_accepted

A pending invitation was accepted. Notifies the inviter that their teammate joined.

member_name*
string
Alex Rivera
inviter_name
string
Sarah Chen
inviter_email
string
sarah@hypernova.inc
org_name*
string
Hypernova Inc
role*
string
admin
invitee_email
string
alex@example.com
href
string
/dashboard/settings/organization/team

developer_invite_sent

An operator handed SDK wire-up off to a developer with a private integration-guide link.

inviter_name*
string
Sarah Chen
inviter_role
string
admin
developer_email*
string
dev@hypernova.inc
workspace_name
string
Hypernova Production
note
string
Snippet goes in the global layout please.
handoff_url*
string
https://app.apex.inc/onboarding/developer-handoff?token=hof_4f8a2b7c
signup_url
string
https://app.apex.inc/signup

Where this is used

Integrations

Connector connect / sync / failure events Apex fires per merchant.

integration_sync_failed

A scheduled data import from a connected integration failed.

integration_name*
string
Google Analytics
error_message
string
Authentication expired — please reconnect.
integrations_url
string
/dashboard/integrations

Experiments

Launches, significance, conclusions, promotion to default.

experiment_launched

An A/B experiment was started.

experiment_name*
string
Homepage CTA Copy Test
experiment_url
string
/dashboard/experiments/exp_homepage_cta
hypothesis
string
Changing the CTA from 'Get Started' to 'Start Free' lifts signup rate by 15%.

Where this is used

experiment_concluded

An experiment finished (either by significance or by evaluation-window expiry).

experiment_name*
string
Homepage CTA Copy Test
result
string
winner
lift
string
18.3%
confidence
string
97.2%
experiment_url
string
/dashboard/experiments/exp_homepage_cta
result_label
string
Significant winner

Where this is used

experiment_promoted

An experiment's winning arm was promoted to the default.

experiment_name*
string
Homepage CTA Copy Test
winning_arm
string
Start Free
experiment_url
string
/dashboard/experiments/exp_homepage_cta

Portfolio

Investor / partner access requests and share-link acceptances.

portfolio_access_requested

An investor or partner requested access to a portfolio.

requester_name*
string
Sequoia Capital
requester_email
string
partners@sequoia.com
portfolio_name
string
Atlas Athletics — Series B Data Room
approve_url*
string
https://app.apex.inc/portfolio/requests/req_abc/approve
reject_url
string
https://app.apex.inc/portfolio/requests/req_abc/reject

portfolio_access_rejected

A portfolio access request was rejected by the owner.

granter_name*
string
Atlas Athletics
portfolio_name
string
Atlas Athletics — Series B Data Room
reason
string
Not ready to share yet — let's reconnect after our next board meeting.

portfolio_share_accepted

A recipient accepted a portfolio share link.

viewer_email*
string
partners@sequoia.com
portfolio_name
string
Atlas Athletics — Series B Data Room
portfolio_url
string
/dashboard/portfolio
owner_name
string
Chris at Atlas
shared_at
string
2026-05-21T14:30:00Z

Engagement

Page views, screens, searches, content interactions.

badge_awarded

A user unlocked a new capability badge (e.g. connecting multiple integrations).

badge_name*
string
Multi-Source
category
string
observe
impact_message
string
Cross-reference traffic, pipeline, and revenue.
total_badges
number
5
next_badge
string
Full Spectrum
growth_journey_url
string
/dashboard/engagement

Where this is used

user_level_up

User's engagement score crossed into a new level tier.

name
string
Chris
level*
string
Strategist
previous_level
string
Analyst
score
number
42
growth_journey_url
string
/dashboard/engagement

Where this is used

nudge_scheduled

Engagement engine scheduled a contextual nudge for the user.

name
string
Chris
nudge_body*
string
You haven't run an experiment in two weeks — your last winner is starting to drift.
nudge_url
string
/dashboard/experiments

Where this is used

drip_step_scheduled

Engagement engine scheduled the next step of a drip sequence.

step_label*
string
Day 3 — add a second data source
step_body
string
Most teams see attribution clarity jump when they connect a CRM in addition to ads.
step_url
string
/dashboard/integrations

Where this is used

Billing

Subscription upgrades, downgrades, and tier-limit nudges.

subscription_upgraded

A workspace upgraded to a higher plan.

name
string
Chris
from_plan*
string
Starter
to_plan*
string
Pro
dashboard_url
string
/dashboard

Where this is used

Templates

subscription_downgraded

A workspace moved to a lower plan tier.

name
string
Chris
from_plan*
string
Pro
to_plan*
string
Starter
dashboard_url
string
/dashboard

Where this is used

tier_limit_approaching

Workspace is nearing a plan limit; eligible for an upgrade nudge.

name
string
Chris
current_tier*
string
Starter
next_tier
string
Pro
feature_count
number
8
top_feature
string
CPWU Attribution
upgrade_url
string
/dashboard/billing/upgrade

Where this is used

Templates

Operations

Anomaly alerts, weekly digests, Cognito auth hooks.

anomaly_detected

Apex detected a statistically anomalous shift in a tracked metric.

metric_name*
string
Google Ads CPC
scope
string
Atlas Athletics — Production
delta
string
+340% vs. 30-day average
investigate_url*
string
/dashboard/intelligence/anomalies/anom_2026_05_21
anomaly_url
string
/dashboard/intelligence/anomalies

Where this is used

weekly_digest_scheduled

Weekly summary digest was scheduled for delivery.

name
string
Chris
period*
string
May 14–20, 2026
digest_url
string
/dashboard/digest/2026-05-20
total_imports
string
4,832
active_integrations
string
3
experiments
string
2

Where this is used

Templates

cognito_verification_code

AWS Cognito custom-message hook needs a verification-code email rendered.

code*
string
482915
code_parameter
string
{####}

Where this is used

Lifecycle

Install, open, background, uninstall. Session foundation.

user_signup

Apex-internal signup completion event — fires when a new merchant finishes signup in the Apex dashboard. Distinct from the SDK-side `user_signed_up` event which customers fire from their own app.

name
string
Chris
onboarding_url
string
/onboarding

Where this is used

Already firing events with different names? Map them to canonical in your workspace \u2014 every Apex surface picks up the alias automatically.