The embed widget puts your bookable schedule on your own website with a single script tag. The snippet generator at /mentor/settings/embed builds the tag for you, with a kind picker (All kinds, Classes, Events, Retreats, Videos), theme and accent controls, and a live preview. This article documents everything the widget can do beyond those defaults.
The widget is a Premium feature. On other plans the script still loads, but it shows a short "embed unavailable" notice instead of your schedule.
The snippet
<script src="https://movementors.com/embed.js" data-mentor="MENTOR_ID" async></script>
One script tag, nothing else. There is no iframe: the widget mounts in a Shadow DOM, so your site's CSS cannot leak into the widget and the widget's CSS cannot leak into your site. By default it renders exactly where you paste the tag.
MENTOR_ID is your mentor ID. The snippet generator fills it in; you never need to look it up by hand.
Every attribute
| Attribute | What it does |
|---|---|
data-mentor | Required. Your mentor ID, filled in by the snippet generator. |
data-mode | Theme: light, dark, or auto (default). auto follows the visitor's system setting. |
data-accent | Accent color for buttons and highlights. Any CSS color, for example #4F8C5E. |
data-target | A CSS selector to mount into, for example #my-container. Default: the widget renders where the script tag sits. |
data-kind | Filters the catalog: all (default), classes, events, retreats, or videos. videos renders only your video library. |
data-layout | list (default) or cards. |
data-locale | Widget language: en, es, pt, de, fr, it, or nl. Default: the host page's language, then the visitor's browser language. |
data-detail-mode | How a class opens: inline, modal, or page. Overrides the default you saved in the configurator. page navigates to the page pattern you configured. |
data-detail-target | Page mode only: _self (default) or _blank to open in a new tab. |
data-class | A class slug. Booking-only mode: the widget skips the catalog and mounts that one class's detail view. |
data-schedule | A session ID. Pins the widget to one date of a class and opens the booking form on that session directly. |
data-show-icon | true or false. Shows or hides your profile picture in the widget header. |
data-show-name | true or false. Shows or hides your name in the header. |
data-show-location | true or false. Shows or hides your location in the header. |
data-show-language | true or false. Shows or hides the language chips on classes. |
Typos fall back safely: an unknown data-kind value renders all instead of an empty widget, and an unknown data-detail-mode falls back to your saved default.
What visitors can do in the widget
The widget runs the same booking flow as your MoveMentors page:
- Browse your upcoming classes, events, and retreats. Retreats show a date-range card and share one seat ceiling across their days.
- Book as a guest with just a name and email, or sign in: a popup signs them into movementors.com and the widget continues with their account. Subscriptions, class packs, and promo codes apply once signed in. The password is typed on movementors.com, never on the host site.
- Pay by card (Stripe's hosted checkout opens, then returns) or by any off-platform method you accept, like bank transfer, cash, or wallets, with your payment instructions shown in place. Online classes are card-only.
- Book for a group with a party size and named attendees, add per-class add-ons, and leave a tip.
- Redeem promo codes (signed in only).
- Pay a retreat in installments when it has an installment plan: the first installment is charged at checkout, the rest are charged automatically to the saved card on the plan's dates, with an email reminder before each charge and a receipt after.
Bookings made in the widget are normal MoveMentors bookings: same confirmation emails, same dashboard, same cancellation flows.
The video library in the widget
With data-kind="videos" (or as part of all), your published videos render as cards, free or priced:
- Signed-in visitors (via the widget's sign-in popup) claim free videos or buy by card through Stripe without leaving the page; the video saves to their MoveMentors account. You keep 100 percent of every sale.
- Visitors who are not signed in are handed to the video's page on movementors.com to sign in, or create a free MoveMentors account, and claim or buy there. Either way the video lands in their account, ready to watch on any device they sign in on.
Watching happens on movementors.com, so the host site never needs a video player. See Sell videos from your library.
Multi-widget setups
The widget loads once per page: a second script tag on the same page is ignored. To run different widgets, put them on different pages of your site and vary the attributes.
A videos-only library on your /videos page:
<script src="https://movementors.com/embed.js" data-mentor="MENTOR_ID" data-kind="videos" async></script>
An events widget on your /workshops page, in cards:
<script src="https://movementors.com/embed.js" data-mentor="MENTOR_ID" data-kind="events" data-layout="cards" async></script>
If your site builder only lets you add scripts in a fixed place (a footer block, for example), use data-target to mount the widget where you actually want it:
<div id="schedule"></div>
<script src="https://movementors.com/embed.js" data-mentor="MENTOR_ID" data-target="#schedule" async></script>
Booking-only mode
For a landing page about one offering, skip the catalog entirely. data-class mounts a single class's detail view, with its session picker and booking form:
<script src="https://movementors.com/embed.js" data-mentor="MENTOR_ID" data-class="sunrise-yoga" async></script>
To pin one specific session ("book Friday's class"), use the session ID instead. The booking form opens directly on that date, no picking needed:
<script src="https://movementors.com/embed.js" data-mentor="MENTOR_ID" data-schedule="SCHEDULE_ID" async></script>
If both data-class and data-schedule are set, data-schedule wins.
The origin allowlist
By default, any website with your snippet can embed your widget. To lock it down, add your sites' origins at /mentor/settings/embed (up to 20). An origin is scheme plus domain, for example https://www.pamelaspilates.com. Once at least one origin is listed, every other site gets a clear "not authorised" state instead of your schedule.
Note that https://example.com and https://www.example.com are different origins. If your site answers on both, list both.
Embed analytics
/mentor/settings/embed shows what the widget is doing for you: views (widget loads), class opens, booking starts and completions, plus the sites they came from. The bookings themselves appear in your normal dashboard with everything else.
What the widget cannot do yet
- There is no studio widget. The widget embeds one mentor's schedule; studios cannot yet embed their multi-instructor schedule.
- There is no custom CSS injection. The Shadow DOM keeps styles sealed in both directions; use
data-accentanddata-modeto match your brand.
Next steps
- Embed widget not loading: the checklist when nothing renders.
- Mentor tiers: the plan that unlocks the widget.