{ "schema_version": "1.0.0", "product": "Fan Passport", "season": "world_cup_2026", "description": "Analytics event taxonomy for World Cup live operations, growth, retention, rewards, moderation, and future passport expansion.", "pii_policy": { "allowed": "Pseudonymous user IDs, stable content IDs, campaign IDs, device class, platform, locale, timezone, and coarse country or region where permitted.", "not_allowed": "Raw email, phone number, payment card data, government ID, precise GPS location, private reward codes, password data, or unredacted support text." }, "common_properties": [ { "name": "event_id", "type": "string", "required": true, "description": "Unique ID for this event emission." }, { "name": "user_id", "type": "string", "required": true, "description": "Pseudonymous stable user identifier." }, { "name": "anonymous_id", "type": "string", "required": false, "description": "Pre-account anonymous identifier when available." }, { "name": "occurred_at", "type": "datetime", "required": true, "description": "UTC event time." }, { "name": "user_timezone", "type": "string", "required": true, "description": "IANA timezone used for local-day retention." }, { "name": "platform", "type": "string", "required": true, "description": "web, ios, android, or admin." }, { "name": "app_version", "type": "string", "required": false, "description": "Client application version when available." }, { "name": "locale", "type": "string", "required": false, "description": "Locale code for user-facing content." }, { "name": "session_id", "type": "string", "required": false, "description": "Session identifier for client-side events." }, { "name": "acquisition_source", "type": "string", "required": false, "description": "Organic, referral, paid, sponsor, search, social, or direct." }, { "name": "campaign_id", "type": "string", "required": false, "description": "Growth, sponsor, CRM, or live-ops campaign ID." }, { "name": "experiment_id", "type": "string", "required": false, "description": "Experiment ID when user is exposed to a test." }, { "name": "variant_id", "type": "string", "required": false, "description": "Experiment variant ID." } ], "user_properties": [ { "name": "account_created_at", "type": "datetime", "description": "UTC account creation time." }, { "name": "followed_team_ids", "type": "array", "description": "Teams or countries followed by the user." }, { "name": "home_country_code", "type": "string", "description": "Optional coarse country preference or locale-derived country." }, { "name": "notification_push_opt_in", "type": "boolean", "description": "Whether the user has enabled push notifications." }, { "name": "squad_count", "type": "integer", "description": "Number of squads the user belongs to." }, { "name": "current_streak_days", "type": "integer", "description": "Current meaningful passport day streak." }, { "name": "lifecycle_segment", "type": "string", "description": "New fan, daily streaker, collector, predictor, dormant, squad player, reward seeker, or bridge user." } ], "events": [ { "name": "app_opened", "category": "lifecycle", "description": "User opens the app or web product.", "trigger": "Client app loads a usable session.", "properties": [ { "name": "entry_route", "type": "string", "required": false }, { "name": "referrer", "type": "string", "required": false } ] }, { "name": "account_created", "category": "identity", "description": "User creates an account.", "trigger": "Account creation succeeds.", "properties": [ { "name": "signup_method", "type": "string", "required": true }, { "name": "referral_code", "type": "string", "required": false } ] }, { "name": "profile_completed", "category": "identity", "description": "User completes initial profile or onboarding requirements.", "trigger": "Required onboarding fields are saved.", "properties": [ { "name": "followed_team_count", "type": "integer", "required": true }, { "name": "selected_country_code", "type": "string", "required": false } ] }, { "name": "team_followed", "category": "identity", "description": "User follows a team or country.", "trigger": "Follow action succeeds.", "properties": [ { "name": "team_id", "type": "string", "required": true }, { "name": "competition_id", "type": "string", "required": false }, { "name": "source_surface", "type": "string", "required": false } ] }, { "name": "stadium_followed", "category": "identity", "description": "User follows or saves a stadium page.", "trigger": "Stadium save action succeeds.", "properties": [ { "name": "stadium_id", "type": "string", "required": true }, { "name": "source_surface", "type": "string", "required": false } ] }, { "name": "notification_permission_updated", "category": "crm", "description": "User grants, denies, or changes notification permission.", "trigger": "Permission state changes or is confirmed.", "properties": [ { "name": "channel", "type": "string", "required": true }, { "name": "permission_status", "type": "string", "required": true }, { "name": "prompt_context", "type": "string", "required": false } ] }, { "name": "passport_viewed", "category": "passport", "description": "User views a passport page, season page, or recap page.", "trigger": "Passport screen is visible.", "properties": [ { "name": "passport_season", "type": "string", "required": true }, { "name": "page_type", "type": "string", "required": true }, { "name": "completion_percent", "type": "number", "required": false } ] }, { "name": "daily_feed_viewed", "category": "passport", "description": "User views the daily live-ops feed.", "trigger": "Daily feed screen is visible.", "properties": [ { "name": "feed_date", "type": "date", "required": true }, { "name": "tournament_phase", "type": "string", "required": true } ] }, { "name": "daily_stamp_claimed", "category": "passport", "description": "User claims the daily passport stamp.", "trigger": "Daily stamp claim succeeds server-side.", "properties": [ { "name": "stamp_date", "type": "date", "required": true }, { "name": "streak_count_after", "type": "integer", "required": true }, { "name": "used_streak_freeze", "type": "boolean", "required": false } ] }, { "name": "challenge_started", "category": "challenge", "description": "User starts or opens a challenge with intent.", "trigger": "Challenge detail is opened or start action is tapped.", "properties": [ { "name": "challenge_id", "type": "string", "required": true }, { "name": "challenge_type", "type": "string", "required": true }, { "name": "tournament_phase", "type": "string", "required": false } ] }, { "name": "challenge_completed", "category": "challenge", "description": "User completes a challenge and receives the configured outcome.", "trigger": "Server validates challenge completion.", "properties": [ { "name": "challenge_id", "type": "string", "required": true }, { "name": "completion_method", "type": "string", "required": true }, { "name": "xp_awarded", "type": "integer", "required": true }, { "name": "reward_id", "type": "string", "required": false } ] }, { "name": "challenge_failed", "category": "challenge", "description": "User fails or misses a challenge condition.", "trigger": "Challenge expires or result resolves negatively.", "properties": [ { "name": "challenge_id", "type": "string", "required": true }, { "name": "failure_reason", "type": "string", "required": true } ] }, { "name": "streak_updated", "category": "passport", "description": "User streak changes after a meaningful passport action or expiry.", "trigger": "Streak calculation runs.", "properties": [ { "name": "streak_type", "type": "string", "required": true }, { "name": "streak_count_after", "type": "integer", "required": true }, { "name": "change_reason", "type": "string", "required": true } ] }, { "name": "achievement_unlocked", "category": "achievement", "description": "User unlocks an achievement or badge.", "trigger": "Achievement rule validates server-side.", "properties": [ { "name": "achievement_id", "type": "string", "required": true }, { "name": "achievement_type", "type": "string", "required": true }, { "name": "rarity", "type": "string", "required": false } ] }, { "name": "badge_equipped", "category": "achievement", "description": "User equips or displays a badge.", "trigger": "Badge display preference is saved.", "properties": [ { "name": "badge_id", "type": "string", "required": true }, { "name": "source_surface", "type": "string", "required": false } ] }, { "name": "trivia_question_viewed", "category": "trivia", "description": "User views a trivia question.", "trigger": "Trivia card is visible.", "properties": [ { "name": "trivia_id", "type": "string", "required": true }, { "name": "question_set_id", "type": "string", "required": false }, { "name": "difficulty", "type": "string", "required": false } ] }, { "name": "trivia_answer_submitted", "category": "trivia", "description": "User submits a trivia answer.", "trigger": "Answer submission is accepted.", "properties": [ { "name": "trivia_id", "type": "string", "required": true }, { "name": "is_correct", "type": "boolean", "required": true }, { "name": "answer_time_ms", "type": "integer", "required": false }, { "name": "xp_awarded", "type": "integer", "required": false } ] }, { "name": "prediction_submitted", "category": "prediction", "description": "User submits a prediction before lock.", "trigger": "Prediction write succeeds server-side.", "properties": [ { "name": "prediction_id", "type": "string", "required": true }, { "name": "fixture_id", "type": "string", "required": false }, { "name": "prediction_type", "type": "string", "required": true }, { "name": "locked_at", "type": "datetime", "required": true } ] }, { "name": "prediction_changed", "category": "prediction", "description": "User changes a prediction before lock where edits are allowed.", "trigger": "Prediction update succeeds before lock.", "properties": [ { "name": "prediction_id", "type": "string", "required": true }, { "name": "fixture_id", "type": "string", "required": false }, { "name": "change_count_after", "type": "integer", "required": true } ] }, { "name": "prediction_resolved", "category": "prediction", "description": "Prediction is resolved after official result or event outcome.", "trigger": "Resolution job or admin action validates outcome.", "properties": [ { "name": "prediction_id", "type": "string", "required": true }, { "name": "fixture_id", "type": "string", "required": false }, { "name": "resolution_status", "type": "string", "required": true }, { "name": "points_awarded", "type": "integer", "required": true } ] }, { "name": "match_detail_viewed", "category": "match", "description": "User views match detail page.", "trigger": "Match page is visible.", "properties": [ { "name": "fixture_id", "type": "string", "required": true }, { "name": "match_state", "type": "string", "required": true } ] }, { "name": "match_check_in_started", "category": "match", "description": "User begins match check-in.", "trigger": "Check-in surface is opened.", "properties": [ { "name": "fixture_id", "type": "string", "required": true }, { "name": "check_in_method", "type": "string", "required": true } ] }, { "name": "match_check_in_completed", "category": "match", "description": "User completes a valid match check-in.", "trigger": "Check-in is validated server-side.", "properties": [ { "name": "fixture_id", "type": "string", "required": true }, { "name": "check_in_method", "type": "string", "required": true }, { "name": "xp_awarded", "type": "integer", "required": false } ] }, { "name": "match_memory_created", "category": "memory", "description": "User creates or saves a match memory.", "trigger": "Memory card is saved.", "properties": [ { "name": "memory_id", "type": "string", "required": true }, { "name": "fixture_id", "type": "string", "required": false }, { "name": "memory_type", "type": "string", "required": true }, { "name": "has_user_caption", "type": "boolean", "required": true } ] }, { "name": "sticker_pack_opened", "category": "collection", "description": "User opens a sticker pack.", "trigger": "Pack opening succeeds.", "properties": [ { "name": "pack_id", "type": "string", "required": true }, { "name": "pack_source", "type": "string", "required": true }, { "name": "stickers_granted", "type": "integer", "required": true } ] }, { "name": "sticker_collected", "category": "collection", "description": "User receives or reveals a sticker.", "trigger": "Sticker is added to collection.", "properties": [ { "name": "sticker_id", "type": "string", "required": true }, { "name": "collection_id", "type": "string", "required": true }, { "name": "rarity", "type": "string", "required": false }, { "name": "is_duplicate", "type": "boolean", "required": true } ] }, { "name": "collection_completed", "category": "collection", "description": "User completes a collection set.", "trigger": "Collection completion rule validates.", "properties": [ { "name": "collection_id", "type": "string", "required": true }, { "name": "collection_type", "type": "string", "required": true }, { "name": "items_required", "type": "integer", "required": true } ] }, { "name": "sticker_trade_requested", "category": "social", "description": "User requests or offers a sticker trade.", "trigger": "Trade request is created.", "properties": [ { "name": "trade_id", "type": "string", "required": true }, { "name": "offered_sticker_id", "type": "string", "required": false }, { "name": "requested_sticker_id", "type": "string", "required": false } ] }, { "name": "sticker_trade_completed", "category": "social", "description": "Sticker trade completes successfully.", "trigger": "Both sides accept and inventory updates.", "properties": [ { "name": "trade_id", "type": "string", "required": true }, { "name": "collection_id", "type": "string", "required": false } ] }, { "name": "leaderboard_viewed", "category": "competition", "description": "User views a leaderboard.", "trigger": "Leaderboard is visible.", "properties": [ { "name": "leaderboard_id", "type": "string", "required": true }, { "name": "leaderboard_type", "type": "string", "required": true }, { "name": "user_rank", "type": "integer", "required": false } ] }, { "name": "squad_created", "category": "social", "description": "User creates a squad.", "trigger": "Squad creation succeeds.", "properties": [ { "name": "squad_id", "type": "string", "required": true }, { "name": "squad_privacy", "type": "string", "required": true } ] }, { "name": "squad_joined", "category": "social", "description": "User joins a squad.", "trigger": "Squad membership is created.", "properties": [ { "name": "squad_id", "type": "string", "required": true }, { "name": "join_source", "type": "string", "required": true } ] }, { "name": "share_card_generated", "category": "growth", "description": "User generates a share card.", "trigger": "Share preview is rendered.", "properties": [ { "name": "share_card_id", "type": "string", "required": true }, { "name": "share_card_type", "type": "string", "required": true }, { "name": "source_content_id", "type": "string", "required": false } ] }, { "name": "share_completed", "category": "growth", "description": "User completes an external or internal share.", "trigger": "Share action is confirmed by client or server callback.", "properties": [ { "name": "share_card_id", "type": "string", "required": true }, { "name": "share_channel", "type": "string", "required": true }, { "name": "invite_code", "type": "string", "required": false } ] }, { "name": "referral_link_created", "category": "growth", "description": "User creates or retrieves a referral link.", "trigger": "Referral link is generated.", "properties": [ { "name": "invite_code", "type": "string", "required": true }, { "name": "source_surface", "type": "string", "required": true } ] }, { "name": "referral_attributed", "category": "growth", "description": "A signup or activation is attributed to a referral.", "trigger": "Referral attribution is validated.", "properties": [ { "name": "invite_code", "type": "string", "required": true }, { "name": "referrer_user_id", "type": "string", "required": true }, { "name": "attribution_stage", "type": "string", "required": true } ] }, { "name": "notification_sent", "category": "crm", "description": "Notification is sent by CRM or messaging system.", "trigger": "Messaging provider accepts send request.", "properties": [ { "name": "notification_id", "type": "string", "required": true }, { "name": "trigger_id", "type": "string", "required": true }, { "name": "channel", "type": "string", "required": true } ] }, { "name": "notification_opened", "category": "crm", "description": "User opens a notification.", "trigger": "Deep link opens from notification.", "properties": [ { "name": "notification_id", "type": "string", "required": true }, { "name": "trigger_id", "type": "string", "required": true }, { "name": "deeplink", "type": "string", "required": false } ] }, { "name": "notification_dismissed", "category": "crm", "description": "User dismisses or ignores a notification where detectable.", "trigger": "Client or provider records dismissal.", "properties": [ { "name": "notification_id", "type": "string", "required": true }, { "name": "trigger_id", "type": "string", "required": true } ] }, { "name": "reward_viewed", "category": "reward", "description": "User views reward details.", "trigger": "Reward detail page or modal is visible.", "properties": [ { "name": "reward_id", "type": "string", "required": true }, { "name": "reward_type", "type": "string", "required": true }, { "name": "sponsor_id", "type": "string", "required": false } ] }, { "name": "reward_redeemed", "category": "reward", "description": "User redeems or claims a reward.", "trigger": "Reward redemption succeeds server-side.", "properties": [ { "name": "reward_id", "type": "string", "required": true }, { "name": "reward_type", "type": "string", "required": true }, { "name": "fulfilment_status", "type": "string", "required": true } ] }, { "name": "sponsor_card_viewed", "category": "monetization", "description": "User views a sponsored placement.", "trigger": "Sponsored card meets viewability threshold.", "properties": [ { "name": "sponsor_id", "type": "string", "required": true }, { "name": "placement_id", "type": "string", "required": true }, { "name": "content_id", "type": "string", "required": false } ] }, { "name": "offer_clicked", "category": "monetization", "description": "User clicks a sponsor offer or affiliate link.", "trigger": "Offer click is accepted.", "properties": [ { "name": "offer_id", "type": "string", "required": true }, { "name": "sponsor_id", "type": "string", "required": false }, { "name": "destination_type", "type": "string", "required": true } ] }, { "name": "purchase_started", "category": "monetization", "description": "User starts a purchase flow.", "trigger": "Purchase checkout begins.", "properties": [ { "name": "product_id", "type": "string", "required": true }, { "name": "product_type", "type": "string", "required": true }, { "name": "currency", "type": "string", "required": true } ] }, { "name": "purchase_completed", "category": "monetization", "description": "User completes a purchase.", "trigger": "Payment provider confirms purchase.", "properties": [ { "name": "product_id", "type": "string", "required": true }, { "name": "product_type", "type": "string", "required": true }, { "name": "currency", "type": "string", "required": true }, { "name": "amount_minor_units", "type": "integer", "required": true } ] }, { "name": "purchase_refunded", "category": "monetization", "description": "A purchase is refunded.", "trigger": "Refund is confirmed.", "properties": [ { "name": "product_id", "type": "string", "required": true }, { "name": "refund_reason", "type": "string", "required": false }, { "name": "amount_minor_units", "type": "integer", "required": true } ] }, { "name": "content_reported", "category": "safety", "description": "User reports content, profile, squad, leaderboard entry, or message.", "trigger": "Report submission succeeds.", "properties": [ { "name": "report_id", "type": "string", "required": true }, { "name": "reported_surface", "type": "string", "required": true }, { "name": "reason", "type": "string", "required": true }, { "name": "reported_content_id", "type": "string", "required": false } ] }, { "name": "moderation_action_applied", "category": "safety", "description": "Moderator or automated policy system applies an enforcement action.", "trigger": "Moderation decision is saved.", "properties": [ { "name": "moderation_case_id", "type": "string", "required": true }, { "name": "action_type", "type": "string", "required": true }, { "name": "policy_area", "type": "string", "required": true }, { "name": "is_automated", "type": "boolean", "required": true } ] }, { "name": "fraud_signal_detected", "category": "safety", "description": "System detects a fraud, abuse, or integrity signal.", "trigger": "Fraud rule emits a signal.", "properties": [ { "name": "signal_id", "type": "string", "required": true }, { "name": "signal_type", "type": "string", "required": true }, { "name": "severity", "type": "string", "required": true }, { "name": "related_entity_id", "type": "string", "required": false } ] }, { "name": "content_published", "category": "ops", "description": "Admin or scheduler publishes live-ops content.", "trigger": "Content state changes to live.", "properties": [ { "name": "content_id", "type": "string", "required": true }, { "name": "content_type", "type": "string", "required": true }, { "name": "scheduled_for", "type": "datetime", "required": false } ] }, { "name": "challenge_schedule_updated", "category": "ops", "description": "Admin updates a scheduled challenge.", "trigger": "Challenge schedule version changes.", "properties": [ { "name": "challenge_id", "type": "string", "required": true }, { "name": "previous_version", "type": "string", "required": true }, { "name": "new_version", "type": "string", "required": true }, { "name": "change_reason", "type": "string", "required": true } ] } ] }