Skip to main content

Overview

The Webinars API lets you run your entire webinar communication flow through Flywheel:
  1. Create a webinar (or create it in the dashboard) and link it to a workflow
  2. Register people as they sign up — registrants don’t need to exist in Flywheel first; profiles are created or matched automatically
  3. Flywheel enrolls each registrant into every live workflow with a matching Webinar Registration trigger (reminder emails/SMS anchored to the start time, etc.)
  4. Report attendance during or after the webinar so Webinar Attendance Split nodes can branch attendees vs no-shows for follow-up
  5. Reschedule if the date moves — all pending anchored reminders automatically recompute to the new time

Authentication

All webinar endpoints require authentication using an API key and authentication type header. Include both headers in your requests:
API keys are managed in the Flywheel dashboard under Settings → API Keys. All webinar objects are scoped to the organization the API key belongs to.

Create a Webinar

POST /v1/webinars
Webinars can also be created in the dashboard under Webinars. Either way they start as scheduled unless you pass draft.

Register a User

POST /v1/webinars/{webinar_id}/registrants The core endpoint. Pass whatever your signup form collected as person — they do not need to be an existing Flywheel user. Flywheel matches them to an existing profile by external_user_id, email, phone or anonymous_id, or creates a new one. Send ad_source and the pixel’s visitor_id too and the registration carries its attribution.
The response:
Use join_url for a join button on your thank-you page or in a calendar invite. Check join_url_personal first when the webinar requires registration on its platform: on such a Zoom webinar the shared link opens Zoom’s own registration form, not the room. A repeat registration returns the same link. A platform that could not be reached never fails the registration; the response then carries the shared link with join_url_personal: false. Someone already in Flywheel can be registered by id instead: send { "person_id": "..." } in place of person.
POST /v1/webinars/register is deprecated (September 2026). It still works — same behaviour, it runs the same code — but new integrations should use the endpoint above. Its user object becomes person, and user.user_id becomes person.external_user_id; the response names the person person_id instead of org_user_id.

What happens on registration

  1. Identification — the person is found (by external_user_id → email → phone → anonymous_id priority) or created. With visitor_id, the pixel visitor who filled the form in is claimed, bringing their touch history; ad_source is recorded for attribution. Name fields and custom properties are merged into their profile.
  2. Registration — an idempotent registration record is created for the (webinar, user) pair.
  3. Workflow enrollment — the user is enrolled into every live workflow with a Webinar Registration trigger matching this webinar (or bound to “any webinar”).
  4. Event fired — a $fw_webinar_registration event is recorded on the user’s timeline with the webinar details, usable in event-triggered workflows, segments, and analytics.
Registering the same user for the same webinar twice is safe: the API returns the existing registration with already_registered: true and fires no duplicate workflows or events.
A canceled webinar refuses registrations with a 400 whose code is failed_precondition — registering would start its reminder workflows for a session that is not happening. The person is still identified (created or matched) first, so a signup from a stale page is not lost.

Person object

At least one of external_user_id, email, phone or anonymous_id is required.

The $fw_webinar_registration event

Every new registration records this event with the following properties:
The $fw_ prefix is reserved — it can only be produced by Flywheel itself, so the event is a trustworthy signal in workflows and segments.

Webinar Platform Integrations (Demio)

If your organization has connected Demio (Dashboard → Settings → Integrations) and the webinar is linked to a Demio event in the webinar drawer, registration does two extra things automatically:
  1. The registrant is pushed to the Demio event, so they exist in Demio without any extra call.
  2. Demio’s personalized join link for that attendee is stored on the registration and exposed to workflows as the registration_join_url context variable — use it in reminder emails/SMS so each person gets their own join button.
Attendance also syncs automatically: about 30 minutes after the webinar’s scheduled end, Flywheel pulls Demio’s participants report and marks attendees, feeding Webinar Attendance Split workflow nodes with no manual attendance calls. You can still call the attendance endpoint below for corrections or non-Demio webinars.

Mark Attendance

POST /v1/webinars/attendance Report that a registrant attended (or didn’t). Resolve the user by user_id or email. Attendance is read live by Webinar Attendance Split workflow nodes when they run, so you can report it during the webinar or after it ends. Reporting it also arms the webinar’s attended / no-show follow-up sequences. A canceled webinar refuses attendance (failed_precondition).

Reschedule a Webinar

POST /v1/webinars/reschedule Move the start time. Every pending “wait until webinar start ± offset” step in in-flight workflow runs is recomputed, the webinar’s own scheduled messages are re-anchored, and a linked platform’s attendance sync moves to the new end time — so everything timed off the webinar follows automatically.

Manage Webinars, Series and Attendance

The endpoints above cover the signup path. The management API covers everything else the dashboard does — list and edit webinars, recurring series, registrants, the send plan, revenue and platform links. The same operations are available to AI agents as MCP tools on /mcp (list_webinars, get_webinar_plan, register_for_webinar and so on). Status moves are validated: draft → scheduled or canceled; scheduled → live, completed or canceled; live → completed or canceled; canceled → scheduled (messages whose time passed while canceled are not re-sent); completed is final.

Typical Integration

A landing-page signup form wired to Flywheel:
Pair this with a workflow that uses the Webinar Registration trigger, anchored waits (“1 day before start”, “1 hour before start”), and a Webinar Attendance Split after the webinar ends for attendee vs no-show follow-ups.