oEmbed and Iframely
Optional discovery for public Experiences. Platforms resolve a Meet URL to the hosted Liforma Player — the SDK and player API stay unchanged.
What this is
oEmbed and Iframely are an optional layer on top of the existing hosted
player. They let CMSs, LMSs, and platforms such as Canva turn a public Meet URL into an
iframe. They do not replace @liforma/client, Session Launch, or player.liforma.ai/embed.
Use the SDK or a direct iframe when you are building your own site. Use this path when a platform only accepts a pasteable URL.
Who can be discovered
Only published Experiences that allow public player-session creation (allowBrowserEmbeds). Authenticated embeds that mint a launch token on your
server cannot be Iframely-embedded — the host cannot run our SDK.
This first release discovers https://www.liforma.ai/meet/{slug} URLs.
How discovery works
- A human or platform opens a Meet share URL.
- The page exposes canonical, Open Graph, oEmbed, and Iframely metadata. The Iframely
hrefis the player, not the Meet page. - The platform iframes
https://player.liforma.ai/embed?experienceId=exp_…directly — one visual player iframe. - The player enforces the experience allowlist and self-mints a public session.
oEmbed
GET https://api.liforma.ai/oembed?url=…&format=json
url— a Meet share URL (https://www.liforma.ai/meet/{slug})format—jsononlymaxwidth/maxheight— optional; response stays 16:9
A successful response is type: "rich". The html field is a single
iframe whose src is the hosted player. External URLs, unpublished Experiences,
and Experiences with public embeds disabled are rejected. thumbnail_url is https://cdn.liforma.ai/thumbs/experiences/landscape/{expId} — a flattened landscape Experience thumbnail (location + standing avatar),
not a viseme plate. A second og:image advertises /thumbs/experiences/square/{expId} for compact cards.
Open Graph and Twitter descriptions use experience copy only: optional description (authored or generated at publish), otherwise the
introduction, otherwise the title.
GET https://api.liforma.ai/oembed?url=https%3A%2F%2Fwww.liforma.ai%2Fmeet%2Fnewton&format=json
{
"version": "1.0",
"type": "rich",
"provider_name": "Liforma",
"title": "Isaac Newton",
"html": "<iframe src=\"https://player.liforma.ai/embed?experienceId=exp_…\" …></iframe>"
} Iframely
Eligible Meet pages also publish an Iframely discovery link. Unrecognized publishers do
nothing until Iframely reviews the domain — submitting www.liforma.ai is an operational step after production metadata is live.
<link
rel="iframely app microphone fullscreen"
type="text/html"
href="https://player.liforma.ai/embed?experienceId=exp_…"
media="aspect-ratio: 16/9"
/> Do not treat autoplay in that rel as an iframe permission — Iframely
uses it to mean “this widget auto-starts.” Microphone support inside a host such as Canva
still depends on that host forwarding allow="microphone".
Canva
Canva embeds are Iframely iframes. After Iframely lists Liforma, pasting a Meet URL into a design should resolve to the hosted player. A Liforma Canva App is not required for that and is not part of this integration.
The iframe parent is Canva, not Iframely. The Experience owner must allowlist the real Canva
origins. We do not open frame-ancestors globally.
Billing
For now, self-minted embed sessions (including Canva) are billed to the Experience author / owning organization. Viewer-pays / unlock-to-play is a future option.