Use Webinar Embeds with API Registrations
When you embed a Wistia webinar on your own site, you usually want two things to keep working: attendees should register from your page, and the personalized link they get back should send them to your embedded page — not to the Wistia-hosted event URL. This guide explains how the embed location, the registration API, and the personalized attendee URL fit together, and the two things that most often break.
How the pieces fit together
A webinar has three moving parts when you embed it:
| Piece | What it does |
|---|---|
| Embed location | The URL of the page where you've embedded the webinar. You set this in the webinar's Embed settings, under "Where will your webinar be embedded? (required)." |
| Registration | A registrant is created either by Wistia's registration form or by your own call to the registration API. Each registration gets a unique visitor_key. |
| Personalized event URL | The link a registrant uses to join. It points to your embed location (if set) and carries the registrant's vk (visitor key) and uid (email) so one-click join works. |
The key rule: the personalized event URL is built from your embed location. If the embed location is set, every registrant's join link points to your embedded page. If it's blank, the join link falls back to the Wistia-hosted event URL.
Registering attendees through the API
Register a person with the Create Webinar Registration endpoint. It takes the registrant's email and name, and returns their visitor_key plus a ready-to-use personalized_event_url:
curl -X POST "https://api.wistia.com/modern/webinars/WEBINAR_ID/registrations" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"first_name": "John",
"last_name": "Doe"
}'Response:
{
"visitor_key": "iv_1234567890",
"personalized_event_url": "https://your-site.com/your-embed-page?vk=iv_1234567890&[email protected]"
}Replace WEBINAR_ID with the hashed ID of your webinar. This endpoint requires an API token with the Read, update & delete anything permission.
Notice the personalized_event_url host: because the webinar's embed location is set to your-site.com/your-embed-page, the returned link points there and appends vk and uid. Send registrants that exact URL, as those query parameters are what enable one-click join, so don't strip them. If you register through your own marketing-automation (MAP) form instead of the API, take the personalized_event_url from the API response (or from Wistia's registration emails) and use it as the link in your confirmation, reminder, and follow-up emails.
Embedding the registration form on your page
If you want attendees to register from your embedded page, drop in the webinar registration form embed code:
<script src="https://fast.wistia.com/assets/external/form.js"></script>
<wistia-form live-event-id="WEBINAR_ID"></wistia-form>The <script> loads the form runtime; the <wistia-form> custom element is where the form renders. Both must reach the published page intact.
CMS or email tools may strip the form. Some content management systems and email builders (HubSpot is a common one) sanitize HTML and remove unknown custom elements or external<script>tags. If<wistia-form>or theform.jsscript gets stripped, the form silently never renders. If your embedded form isn't showing up, view the page's published source and confirm both the<script>tag and the<wistia-form>element are still present. If your CMS strips them, add the Wistia domains to the platform's HTML allowlist, embed via a raw-HTML / custom-code block, or use a plain<iframe>embed of the registration form instead.
Player-only embeds with an external registration form
You can embed the webinar player only, no Wistia registration form, and handle registration with your MAP's own form elsewhere on the page. That works: the player embed and your MAP form are independent. To keep Wistia's attendance tracking accurate, register each attendee through the Create Webinar Registration API (above) so they receive a visitor_key, then send them to the returned personalized_event_url to join.
Common pitfalls
- Join link points to wistia.com instead of your site. The embed location is blank. Open the webinar's Embed settings and set "Where will your webinar be embedded?" to your embedded page's URL, then save. New personalized URLs will point there.
- Audience link looks wrong after duplicating a webinar. Duplicated events do not carry over the embed location, so a copied webinar starts with a blank embed location (and a Wistia-hosted audience link). Set the embed location on the new event if you want it embedded.
- Form doesn't appear on the published page. The CMS stripped the
<wistia-form>element or theform.jsscript — see the callout above. - One-click join doesn't work. The
vkanduidquery parameters were dropped from the link. Always send registrants the fullpersonalized_event_url, parameters included.