A single JSON object that describes a complete Pulse event — the agenda, speakers, polls, prepared questions, timed segments, links, survey, and appearance. Hand your slides and this spec to an AI assistant; it returns a blueprint you upload to create the event. Pulse embeds no AI — it just defines this format so an AI you already use can design a rich, thoughtful event for you.
This page evolves with the product — always fetch the current version rather than
a saved copy. Machine schema: /spec/event-blueprint.schema.json (JSON Schema, CORS-enabled).
A blueprint carries no ids. A segment points at its speaker with speakerIndex (into
speakers[]); a link attaches to a speaker or segment with attachIndex. Pulse
mints real ids on import and wires everything up. This keeps a blueprint portable and re-runnable.
If a blueprint has problems, the import returns HTTP 400 with a machine-readable list — every issue at once — so you can paste it straight back to the AI to fix in one pass:
{
"error": "The blueprint has 2 problem(s).",
"code": "blueprintInvalid",
"errors": [
{ "path": "agenda[1].speakerIndex", "error": "No speaker at index 3.", "hint": "speakerIndex must be 0..1, or omitted." },
{ "path": "polls[0].options", "error": "A poll needs at least 2 options.", "hint": "Add options[] with text values." }
]
}
| Field | Meaning |
|---|---|
pulseTemplate | Required. The schema version — use 3. |
title | Required. The event name. |
scheduledStart / scheduledEnd | ISO 8601. The event auto-starts/ends at these times. |
settings | Feature toggles (reactions, chat, polls, questions, slides, guestAccess, …). |
reactionSetId / controlSize | Reaction set (a preset or "custom") + one-tap size (XS/S/M/L). |
customReactions | 3–8 emoji (from the curated reaction picker) used when reactionSetId is "custom". |
attendeeLayout | Order of the attendee tabs — any of engage, slides, chat, qa, info. Order only; an omitted tab still shows. |
speakers[] | Name, title, bio, and up to 6 links each. Set hidden: true to stand a speaker down (kept in the blueprint, hidden from every attendee surface). |
agenda[] | Ordered segments; each can tie to a speakerIndex, a slide range, planned minutes, and its own reactionSetId. |
resources[] | Links or text cards with attachKind (manual / event / speaker / segment / slide) so they surface at the right moment. A slide resource opens after slideIndex; add a body for a text-only note/definition (url optional); set topTab: true to also pin it as a top-of-screen attendee tab. |
polls[] / questions[] / survey | Prepared polls, quizzes, icebreakers & word clouds (kind: poll / quiz / icebreaker / wordCloud), seeded Q&A, and the post-event survey. A wordCloud collects one free-text word per attendee (no options[]); every other kind needs at least two options. Any poll can set launchAtSlide (0-based) to auto-launch when the presenter reaches that slide, plus an optional timeLimitSeconds. |
slidesOnHome, showAgendaPreStart, showAgendaDuringEvent, windDownMinutes | Slide follower on attendee Home (default on); show the agenda in the lobby / during the live event; keep the room read-only for N minutes after it ends. |
viewStyle, overlay, slideCaptions | Attendee view style (classic or overlay) and, for overlay, its glass options (idleFadeSeconds 0/2/4/8, showPoll/showTicker/showFloaters/showPacing). slideCaptions[] gives each slide a title ({index, text}, 0-based) so the run-of-show reads by name, not "Slide 1/2". |
video | Attendee-device YouTube for the lobby, live, and ended phases (each a YouTube link or 11-char id; live plays on the moderator's cue). Each slot defaults to muted autoplay; set its *Autoplay flag to false to instead let the viewer press play with sound. |
stageQr, themeId, qrFgColor, passcode | Stage-QR placement, per-event theme, QR color, and room passcode. |
Build it out to the maximum useful complexity: a real agenda with timed segments and
speakers, a poll or quiz per major section — anchor each to the slide it belongs on with
launchAtSlide (add launchOnAdvance to fire as the presenter leaves that slide)
so it fires automatically — an icebreaker to open, prepared Q&A that fits the talk, and a short survey.
Engagements can also live in a PowerPoint deck itself: write a block in a slide's speaker notes and push
the deck from the Pulse add-in to create or update the engagement, anchored to that slide (reorder-safe).
See Engagements in slide notes (fetchable as
.md) — the same fields as polls[] here.
{
"pulseTemplate": 3,
"title": "Q3 Product All-Hands",
"scheduledStart": "2026-08-01T16:00:00Z",
"reactionSetId": "professional",
"settings": { "reactions": true, "questions": true, "polls": true, "slides": true },
"speakers": [
{ "name": "Priya Sharma", "title": "VP Product", "bio": "Leads product.", "links": [{ "kind": "linkedin", "value": "https://linkedin.com/in/priya" }] },
{ "name": "Marcus Lee", "title": "Head of Eng" }
],
"agenda": [
{ "type": "intro", "title": "Welcome", "plannedMinutes": 5 },
{ "type": "speaker", "title": "Roadmap", "speakerIndex": 0, "slideFrom": 1, "slideTo": 8, "plannedMinutes": 20, "reactionSetId": "celebration" },
{ "type": "speaker", "title": "Reliability", "speakerIndex": 1, "slideFrom": 9, "slideTo": 15, "plannedMinutes": 15 }
],
"resources": [
{ "title": "Roadmap doc", "url": "https://example.com/roadmap", "attachKind": "segment", "attachIndex": 1 }
],
"polls": [
{ "kind": "poll", "prompt": "Which area matters most to you?", "resultsVisibility": "live",
"options": [{ "text": "Speed" }, { "text": "Reliability" }, { "text": "New features" }] }
],
"questions": ["What's the timeline for the mobile app?"],
"survey": { "enabled": true, "questions": [{ "prompt": "How useful was this?", "type": "Rating", "scale": 5 }] }
}
Pulse™. Spec version 2 — served live at nowpresenting.net/spec.