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

  1. A human or platform opens a Meet share URL.
  2. The page exposes canonical, Open Graph, oEmbed, and Iframely metadata. The Iframely href is the player, not the Meet page.
  3. The platform iframes https://player.liforma.ai/embed?experienceId=exp_… directly — one visual player iframe.
  4. 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})
  • formatjson only
  • maxwidth / 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.