Time-Based Surfacing Reference


Daniel Baudino

Updated March 26, 2026

TL;DR: How to trigger time-based lock screen surfacing for wallet passes.
  • Apple: Uses `relevant.date` for passive lock screen surfacing
  • Google: Each pass type uses different fields (`dateTime.start` or `validTimeInterval`)
  • Apple timing window is undocumented; Google sends 3-24 hours before depending on pass type
  • Google supports automatic expiry reminders (48 hours before)
  • Apple only supports Event Ticket and Access Control pass types

Overview

This reference covers time-based pass surfacing for Apple Wallet and Google Wallet. When the relevant time approaches, passes automatically appear on the lock screen or trigger notifications.


Quick Reference

SpecApple WalletGoogle Wallet
Fieldrelevant.dateVaries by pass type (see below)
Dates allowed1 per passStart + End range
BehaviorPassive (lock screen surfacing)Active (push notification)
Timing windowUndocumented ("within a few hours")Fixed (3-24 hours by pass type)
Expiry reminderNone (manual via update)48 hours automatic
Pass type restrictionsEvent Ticket / Access Control onlyEvent Ticket / Access Control

Apple Wallet

How It Works

  1. Pass includes relevant.date timestamp
  2. Device monitors proximity to that date/time
  3. When user is "close enough" to the date, pass surfaces on lock screen
  4. User sees the pass card — no notification text

This is passive lock screen surfacing, not a push notification. The pass appears automatically based on time proximity.

Limits

LimitValue
Relevant dates per pass1
Timing windowUndocumented (Apple-controlled)

Pass Type Support

Pass TypeSupportBehavior
Event TicketYesDate alone works
Access ControlYesDate alone works; location optional
LoyaltyNoN/A
CouponNoN/A

Timing Window Behavior

Apple does not document exact timing windows. The system calculates "close enough" based on pass style:

Pass TypeEstimated Window
Event TicketHours before event
Access ControlHours before date

relevant.date should not be interpreted as the exact moment of an event, but as "an arbitrary date marker for the system to highlight relevance within a few hours."

relevant.date vs expiration.date

FieldPurposeLock ScreenPass State
relevant.dateWhen pass surfacesControls surfacingNo effect
expiration.dateWhen pass expiresNo effectMoves to "Expired Passes"

User Requirements

RequirementSetting
Location ServicesEnabled (if location-based)
Wallet location accessEnabled
"Suggest on Lock Screen"Enabled (per-pass setting)

Google Wallet

How It Works by Pass Type

Each Google Wallet pass type uses different fields and timing for automatic notifications:

Pass TypeTime FieldNotification TimingNotification TextAuto-Dismiss
Event TicketdateTime.start3 hours before"[eventName]"60 min after start
Access ControlvalidTimeInterval.start24 hours before"[cardTitle] is available now"Based on validTimeInterval.end

Google sends active push notifications, not passive surfacing. Users must have "Updates about your passes" enabled in Settings > Notifications.

Expiry Notifications

All pass types with a validTimeInterval.end support automatic expiry notifications:

TimingNotification TextCustomizable
48 hours before end"[cardTitle] expires in [x] days"No

Multiple Passes Behavior

When users have multiple passes, only the soonest usable pass is shown in the notification. For grouped passes, tapping the notification allows users to swipe through the complete group.

Notification Pinning

All automatic notifications are pinned and won't auto-dismiss when opened by the user. They remain until the auto-dismiss time is reached.

Rate Limits

LimitValue
Notifications per 24 hours3 per pass (enforced)
Exceeding limitQuotaExceededException

Platform Comparison

Surfacing Behavior

AspectApple WalletGoogle Wallet
TypePassive (lock screen card)Active (push notification)
User action requiredSwipe to openTap notification
Custom textNoNo (Google-controlled)
Timing controlNone (Apple-controlled)Fixed intervals by pass type

Timing Specifications

Pass TypeApple TimingGoogle TimingGoogle Field
Event TicketUndocumented3 hours beforedateTime.start
Access ControlUndocumented24 hours beforevalidTimeInterval.start
Expiry reminderNot automatic48 hours beforevalidTimeInterval.end

Pass Type Support

Pass TypeAppleGoogle
Event TicketYesYes
Access ControlYesYes
LoyaltyNoNo (no automatic time-based)
CouponNoNo (no automatic time-based)

Common Mistakes

  1. Using relevant.date for Loyalty passes (Apple) — Not supported; pass won't surface

  2. Omitting timezone in relevant.date (Apple) — Defaults to UTC, causing wrong timing

  3. Expecting custom notification text (Google) — Google controls all notification content

  4. Relying on exact timing (Apple) — Timing window is undocumented and variable

  5. Exceeding 3 notifications/day (Google) — Results in QuotaExceededException

  6. Using relevant.date as expiration (Apple) — Known iOS bug; use expiration.date separately

  7. Forgetting timezone differences — Multi-timezone events need careful timestamp handling


Sources

Was this article helpful?
Yes No