Overview
The Webinars API lets you run your entire webinar communication flow through Flywheel:- Create a webinar (or create it in the dashboard) and link it to a workflow
- Register people as they sign up — registrants don’t need to exist in Flywheel first; profiles are created or matched automatically
- Flywheel enrolls each registrant into every live workflow with a matching Webinar Registration trigger (reminder emails/SMS anchored to the start time, etc.)
- Report attendance during or after the webinar so Webinar Attendance Split nodes can branch attendees vs no-shows for follow-up
- 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: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.
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.
What happens on registration
- Identification — the person is found (by
external_user_id→email→phone→anonymous_idpriority) or created. Withvisitor_id, the pixel visitor who filled the form in is claimed, bringing their touch history;ad_sourceis recorded for attribution. Name fields and custompropertiesare merged into their profile. - Registration — an idempotent registration record is created for the (webinar, user) pair.
- Workflow enrollment — the user is enrolled into every live workflow with a Webinar Registration trigger matching this webinar (or bound to “any webinar”).
- Event fired — a
$fw_webinar_registrationevent 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.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:
$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:- The registrant is pushed to the Demio event, so they exist in Demio without any extra call.
- Demio’s personalized join link for that attendee is stored on the registration and exposed to workflows as the
registration_join_urlcontext variable — use it in reminder emails/SMS so each person gets their own join button.
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.