Manifest ReferenceTracking

Tracking

Reference for the Tracking section — enabling analytics, consent requirements, the event whitelist enum, and the ingest endpoint.

The optional top-level tracking section configures what analytics events a player may emit for this work, and where to send them. It is deliberately allowlist-based: only events named in eventWhitelist should be reported.

Tracking

Defined as $defs/Tracking. All properties are optional.

PropertyTypeDefaultDescription
enabledbooleantrueMaster switch for tracking.
consentobject—Consent requirements (see below).
eventWhiteliststring[] (unique, enum)—The events the player is allowed to emit.
endpointUri—Absolute URI of the analytics ingest endpoint.
PropertyTypeDefaultDescription
requiredbooleanfalseWhether explicit reader consent is required before any event is sent.
defaultOptInbooleanfalseWhether readers are opted in by default (when consent is not strictly required).

eventWhitelist values

The enum contains exactly these event names:

EventFires when…
session_startA reading session begins.
session_endA reading session ends.
panel_viewA panel becomes current.
dwell_timeDwell time on a panel is reported.
transitionThe reader navigates along an edge.
hotspot_clickA hotspot is activated.
decisionA branching decision is made.
autoplay_startAutoplay starts.
autoplay_stopAutoplay stops.
lang_changeThe reader switches language.
audio_toggleThe audio toggle changes.
sfx_toggleThe SFX toggle changes.
speech_toggleThe speech toggle changes.
paywall_viewA paywall prompt is shown.
likeThe reader likes the work.
bookmarkThe reader bookmarks a position.
shareThe reader shares content.
comment_postedA comment is posted.
export_triggeredAn export is triggered.
videoPlayA video layer starts playing (format 1.1+).
videoPauseA video layer is paused (format 1.1+).
videoEndedA video layer finishes (format 1.1+).
videoLoopA video layer loops (format 1.1+).

Naming note: the four video events added in format 1.1 are camelCase (matching the events the player emits), while the older entries are snake_case. This inconsistency is inherited from 1.0 and kept for compatibility.

Example

{
  "tracking": {
    "enabled": true,
    "consent": {
      "required": true,
      "defaultOptIn": false
    },
    "eventWhitelist": [
      "session_start",
      "panel_view",
      "transition",
      "hotspot_click",
      "decision",
      "paywall_view",
      "videoPlay",
      "videoEnded"
    ],
    "endpoint": "https://analytics.panelwave.cloud/ingest"
  }
}

With this configuration a compliant player asks for consent first, then reports only the eight whitelisted events to the given endpoint.