Skip to main content
POST
Record a presentation event

Path Parameters

presentationId
string<uuid>
required

Body

application/json
_token
string
required

HMAC authentication token

type
enum<string>
required

Event type. presentation_started is sent when the viewer presses Start on the intro screen, and records a presentation.started event. slides_shown is sent once per visit, the first time the viewer shows slides. AI Presentations records the first time slides are shown to a homeowner as the presentation's start, once, and later visits never change it. Visits by Demand IQ staff, by signed-in members of your organization, in rep mode, or from presentations whose opened emails all went to Demand IQ staff or your organization's own users don't record a start. Visits from link scanners, such as Microsoft Safe Links, are ignored. action_detection and action_execution are deprecated: they are acknowledged but not stored.

Available options:
presentation_opened,
presentation_started,
slides_shown,
slide_viewed,
slide_viewed_batch,
narration_played_batch,
cta_clicked,
last_slide_reached,
session_summary,
narration_session_summary,
action_detection,
action_execution
pointerCoarse
boolean

Whether the viewer's primary pointer is coarse, as reported by the (pointer: coarse) media query. Optional. Applies to presentation_opened. AI Presentations combines it with the request's user agent to classify the device as mobile, tablet, or desktop.

introShown
boolean

Whether this visit opened on the intro screen, so the viewer had a Start button to press. Optional. Applies to presentation_opened.

openSource
string

The utm_source value from the presentation link. Optional. Applies to presentation_opened. AI Presentations lower-cases it and keeps it only when it is 1 to 40 characters of a-z, 0-9, _, or -. Any other value is dropped.

viewId
string<uuid>

Per-visit ID generated by the viewer. Optional. AI Presentations stores one slide.viewed event per viewId. A later report with the same viewId updates that event's durationMs and skipped instead of adding a new event, as long as its durationMs is not lower. Omit it to record a new event for every report.

slideId
string

Slide ID. Required for slide_viewed and last_slide_reached. For last_slide_reached, send the presentation snapshot slide ID (the deck_presentation_slides row ID), not the deck slide ID. AI Presentations ignores any other ID and does not record presentation.completed. IDs longer than 100 characters are rejected with 400.

slideIndex
integer
durationMs
integer
skipped
boolean

Whether the viewer left the slide in under 2 seconds. A flag, not a filter: fast flips are still recorded as slide.viewed events, not as a separate skip event.

views
object[]

Batched entries. Required when type is slide_viewed_batch or narration_played_batch. Each entry counts against the rate limit individually. For slide_viewed_batch, each item is a slide view (slideId, slideIndex, optional viewId, durationMs, and skipped). For narration_played_batch, each item is a narration outcome (slideId, slideIndex, narrationStarted, narrationCompleted, secondsPlayed, and secondsAvailable, which is null when the audio duration was never known).

Maximum array length: 25
ctaType
string
ctaLabel
string
ctaUrl
string

Destination URL of an external_link CTA. Send it only on cta_clicked events for that CTA type.

repMode
boolean

Whether a sales rep is driving the presentation. Client-supplied; the server cannot resolve it. Applies to cta_clicked, slides_shown, last_slide_reached, session_summary, and narration_session_summary.

firstScreen
enum<string>

The first screen the viewer showed on this visit. Client-supplied and optional. Applies to cta_clicked and session_summary. Any value outside the enum is rejected with 400.

Available options:
intro,
loading,
slides,
pending_data
Example:

"intro"

conversationId
string<uuid>

UUID that persists for the lifetime of the viewer's tab. Applies to session_summary and narration_session_summary.

slidesViewed
integer

Session-to-date count of distinct slides viewed. session_summary only.

Required range: x >= 0
slidesTotal
integer

Total number of slides in the presentation. session_summary only.

Required range: x >= 0
furthestSlideIndex
integer

Highest 0-based slide index reached in this session. session_summary only.

Required range: x >= 0
totalDwellMs
integer

Session-to-date wall-clock dwell across all slides, in milliseconds. session_summary only.

Required range: x >= 0
ctaConfigured
boolean

Whether the presentation has a CTA configured. session_summary only.

slidesNarrationStarted
integer

Session-to-date count of slides on which narration playback actually started. narration_session_summary only. > 0 is the derived read for "audio enabled".

Required range: x >= 0
slidesNarrationCompleted
integer

Session-to-date count of slides on which narration played to the end. narration_session_summary only.

Required range: x >= 0
totalSecondsPlayed
number

Session-to-date sum of secondsPlayed across all slides. narration_session_summary only.

Required range: x >= 0
totalSecondsAvailable
number

Session-to-date sum of secondsAvailable across all slides for which narration was attempted. narration_session_summary only.

Required range: x >= 0
qaVoiceAudioStarted
integer

Session-to-date count of Q&A answer audio plays that actually started, where the question was asked by voice. narration_session_summary only.

Required range: x >= 0
qaVoiceAudioCompleted
integer

Session-to-date count of Q&A answer audio plays that finished, where the question was asked by voice. Skips, errors, and rejected plays do not count. narration_session_summary only.

Required range: x >= 0
qaChatAudioStarted
integer

Session-to-date count of Q&A answer audio plays that actually started, where the question was typed. narration_session_summary only.

Required range: x >= 0
qaChatAudioCompleted
integer

Session-to-date count of Q&A answer audio plays that finished, where the question was typed. Skips, errors, and rejected plays do not count. narration_session_summary only.

Required range: x >= 0

Response

Event recorded

success
boolean