All new journey events use version 1 and a strict envelope:
{
eventId: string; // UUID and PostHog deduplication key
eventType: string;
eventVersion: 1;
source: string; // auth, z-agent, zlink, ...
surface?: string;
environment?: string;
occurredAt: string; // ISO timestamp
eventData?: object; // sanitized metadata only
userSessionId?: string;
posthogDistinctId?: string;
posthogSessionId?: string;
entityId?: string;
}
Unknown top-level properties are rejected and the serialized payload is limited to 16 KiB.
| Stats label | Event type |
|---|---|
| Z-Link opened | ZLINK_VIEW or z_agent_zlink_page_view |
| Signup started | auth_signup_started, with auth_signup_submitted and z_agent_onboarding_signin_clicked as reliable rollup signals |
| Signup completed | auth_signup_completed |
| Onboarding completed | z_agent_onboarding_building_completed |
| Agent created | z_agent_agent_created |
| Link copied | z_agent_dashboard_link_copy_succeeded |
| New contact | z_agent_conversation_external_created |
| Offer received | z_agent_offer_received |
Counts are distinct journeys, not raw event totals. Conversion is measured against the first funnel step.
A visit to zooly.ai and what the person does next in the app is one journey. The session id lives in a cookie shared by every zooly.ai subdomain, so a visitor who reads the agent page and then opens onboarding on app.zooly.ai keeps the same session. Locally the website (port 3005) and the app (port 3004) share it the same way.
website_page_view — every page, with the page and its localewebsite_page_leave — when the page is left, with how long the visit lasted, so a real visit reads as a session with a length rather than a single instantwebsite_cta_clicked — any link or button on the website, with which control it was and where it leads (internal, app, auth, external, mailto, or button). A click into the app is what joins the website visit to the onboarding that follows.website_login_clicked / website_login_completed — the navbar Loginwebsite_contact_submitted / website_contact_failed — the contact page form and the contact dialogUTM tags on the landing URL are attached to the website events. The app's first events show zooly.ai as the referrer.
Website events carry the id of the visit's PostHog recording, the same way app events do. That is what lets Sessions open the replay of a marketing visit, so a website visit with a recording is no longer hidden by the recorded-session filter.
auth_signup_startedauth_signup_submittedauth_signup_completedauth_signup_failedauth_confirm_completedauth_confirm_failedauth_login_startedauth_login_completedauth_login_failedauth_social_login_completedauth_social_login_failedauth_logoutUse auth_method, result, and safe error_code metadata for breakdowns. Do not send email addresses, confirmation codes, or auth tokens in event metadata. Verified email is now deliberately allowed through the separate person-identity path; codes and tokens remain prohibited there too.
z_agent_onboarding_view, z_agent_onboarding_started, z_agent_onboarding_resumedz_agent_onboarding_step_view, z_agent_onboarding_step_skippedz_agent_onboarding_service_selected, z_agent_onboarding_focus_selectedz_agent_onboarding_research_started, ..._completed, ..._partial, ..._failedz_agent_onboarding_links_submitted, ..._profile_confirmed, ..._photo_uploadedflow: default (/onboarding), talent, brand or agency (/onboarding/talent, /onboarding/brand, /onboarding/agency).flow: "talent"): z_agent_onboarding_name_submitted, ..._confirm_choice, ..._pref_submitted, ..._talent_completed (now logged right before the talent dashboard opens)z_agent_onboarding_signin_clicked, ..._signin_completedz_agent_onboarding_agent_create_started, ..._agent_created, ..._agent_create_failedz_agent_onboarding_building_completed, ..._dashboard_opened, ..._copy_link_clicked, ..._abandonedUse onboarding_step for step breakdowns. The signup funnel events come from Auth; onboarding sign-in events describe the App-side transition around the Auth modal.
Z-Link events include page view, conversation selection/creation, sign-in click, profile click, and received messages. Conversation events distinguish internal and external conversations. Dashboard events cover page views, agent selection, conversation/Offer/Agreement actions, simulation, admin tabs, filters, and link-copy success/failure.
z_agent_agent_created, z_agent_agent_create_failed, z_agent_agent_updatedz_agent_offer_created, ..._received, ..._sent, ..._approved, ..._rejected, ..._completedz_agent_agreement_generated, z_agent_agreement_failedz_agent_email_queued, ..._sent, ..._delivered, ..._bounced, ..._failed, and ..._skipped are operational events. They remain in journey_event but are intentionally suppressed from PostHog to prevent high-volume email noise.
The server adds these normalized properties where available:
journey_stage, source, surface, normalized path, environmentauth_method, onboarding_step, result, duration_ms, error_codeuser_session_id, $session_id, $insert_id, journey_event_idaccount_id, account_slug, actor_account_idtarget_account_id, target_account_slugagency_ids, agency_slugs, $groupsSee Privacy and Security for fields that must never be included.