Put your content anywhere

Every published Demades episode carries a player you can drop onto any site — your blog, your newsletter, your docs, your company's about page. Paste a link and most platforms turn it into a playable episode on their own. No API key, no script tag, no account required to listen.

Live, on this page, right now

That player is not a screenshot — it is the real /embed/ widget, embedded on this page the same way it would embed on yours. Press play.

Paste this on your site — a tiny Demades player your readers can listen to inline. How embeds work →

1. Paste a link — nothing else

Paste a bare episode URL on its own line and a surprising number of editors replace it with the live player automatically. That is the oEmbed protocol, and Demades has been an oEmbed provider since the widget shipped:

https://demades.ai/e/my-episode-1a2b3c4d
This is free, on every plan, forever. Link unfurling is not metered, not gated behind a paid tier, and does not need an account — not yours and not your readers'. Anyone can embed any published episode.

Which platforms do it automatically

oEmbed consumers come in two kinds, and the difference decides whether a bare link is enough:

Everywhere else, a pasted link still unfurls the standard share card (title, description and cover art) — never a bare URL.

2. Or paste the iframe

Works on every platform that allows an iframe, including the ones above that will not auto-unfurl. Copy it from any episode page's Embed button, or build it by hand:

<iframe src="https://demades.ai/embed/my-episode-1a2b3c4d"
        width="100%" height="180"
        style="border:0;border-radius:12px;max-width:560px"
        loading="lazy" title="My episode — Demades"
        allow="autoplay; clipboard-write; encrypted-media"></iframe>

What each attribute is for

AttributeWhy it is there
srcThe embed route for the thing you are embedding — see the table below.
height180 fits the player exactly. The widget does not resize its own frame, so a shorter box clips the transport.
width + max-widthwidth="100%" lets the player fill a narrow column; the max-width stops it stretching absurdly wide in a full-bleed layout.
loading="lazy"Keeps a page of many embeds cheap. The player also sets preload="none" internally, so an embed that is merely seen downloads no audio and is not counted as a play.
titleScreen readers announce it. An untitled iframe is an accessibility failure on your page, not ours.
allow="autoplay; clipboard-write; encrypted-media"Lets the transport controls work inside your page's permission policy — playback, the copy-link button, and DRM-wrapped media respectively. Playback still needs a real tap: the embed never autoplays on its own.

3. What you can embed

RouteWhat it rendersExample
/embed/<slug> A published episode. https://demades.ai/embed/my-episode-1a2b3c4d
/embed/clip/<id> A shareable clip. https://demades.ai/embed/clip/1a2b3c4d
/embed/show/<slug> A whole show — cover, episode list, and one shared player. https://demades.ai/embed/show/my-show-1a2b3c4d

Only published episodes embed. A private, unlisted or still-rendering episode returns nothing at all — the embed route cannot be used to probe for content that is not public.

4. Sizing and responsiveness

5. The oEmbed endpoint

If you are building the integration yourself, call the provider endpoint directly. It is public, needs no key, and does no I/O beyond resolving the episode:

GET https://demades.ai/api/oembed?url=<public page URL>
ParameterMeaning
url (required)The canonical page URL — /e/<slug> or /clip/<id>. The embed forms (/embed/…) are accepted too. A URL on any other host is rejected: an oEmbed provider must only answer for its own URLs.
formatjson (default) or xml — the two representations the spec defines.
maxwidth / maxheightShrink the box. Shrink-only: values are clamped to the 480×180 default above and to a 200×80 floor below, so a hostile or accidental value can never produce a degenerate frame. Junk is ignored.

The response

A standard oEmbed rich descriptor. The fields that matter:

{
  "version": "1.0",
  "type": "rich",
  "provider_name": "Demades",
  "provider_url": "https://demades.ai",
  "title": "",
  "author_name": "Demades",
  "html": "<iframe src=\"…/embed/<slug>\" …></iframe>",
  "width": 480,
  "height": 180,
  "thumbnail_url": "…/e/<slug>/og.png",
  "thumbnail_width": 1200,
  "thumbnail_height": 630,
  "cache_age": 86400
}

Render html as-is — it is the same player, already escaped and sized. An unknown, private or deleted target returns 404, never a partially-filled descriptor.

6. Attribution and referrals

Every embed is a link home: the brand chip and the episode title both open demades.ai in the top-level window, breaking out of the frame rather than navigating inside your page.

If you have a referral code, put it on the iframe src — once, on the embed itself:

https://demades.ai/embed/my-episode-1a2b3c4d?ref=YOURCODE&utm_source=embed&utm_medium=widget&utm_campaign=embed-episode

Your code lives on your referral overview and on the invite card in settings — this is the same referral rail as an invite link, not a separate program to sign up for.

7. Things worth knowing

Find something to embed →

Every episode is AI-generated by Demades.