Embedding Interactive Courses & Webinars in Your App

Your end users are yours, not MailInApp's — the Embed API lets your backend enroll or register them into a course or webinar and embed the actual viewer in your app, with your own billing deciding entitlement, while MailInApp handles hosting, video, and the lifecycle emails around it.

Subject

You're registered — here's your link

The Embed API lets your own backend register or enroll your own end users into a MailInApp course or webinar and embed the viewer in your app — without that user ever touching a MailInApp dashboard account.

Your end users are yours, not MailInApp's — they shouldn't have to create a separate account just to watch a course you're hosting on their behalf.

Your backend, your entitlement

POST /api/v1/courses/[id]/enroll grants or revokes course access for an email address, and POST /api/v1/webinars/[id]/register registers a webinar attendee — both authenticated with the same Bearer API key as the Send API. Your own billing or checkout system decides who's entitled; MailInApp just renders the result.

Embed the actual viewer

Once enrolled, POST /api/v1/courses/[id]/embed-token mints a short-lived signed token. Redirect your app's iframe or window at the returned URL, and it bootstraps a deterministic sign-in behind the scenes — the end user sees your app the whole time, never a MailInApp login.

Interactive emails around the registration, if you want them

A course or webinar's lifecycleBindings can point registered/reminder/enrolled/completed events at a studio project — a Meeting-link with the real Join button, a Countdown to start time. Falls back automatically to plain-text copy when nothing's bound, so opting in never breaks an existing setup.

Same key, its own quota

The Embed API shares the Send API's 60-requests-per-minute per-key limit, plus its own dedicated monthly call quota by plan — zero on Free/Starter, matching how the Send API itself is gated on those tiers.

Getting started

Mint an API key under Developers, call the register or enroll endpoint from your backend, then mint an embed token and redirect into it — see the Embed API quickstart for the full request shapes.

A typical build-and-send sequence

  1. 1

    Mint an API key

    The Embed API shares the same bearer API key as the transactional Send API — one key authenticates every route on your account.

  2. 2

    Register or enroll your end user

    POST /api/v1/webinars/[id]/register for a registration-gated webinar, or POST /api/v1/courses/[id]/enroll for course access — your own backend calls it, no MailInApp form or account involved.

  3. 3

    Embed the viewer

    POST /api/v1/courses/[id]/embed-token mints a short-lived signed token; redirect your app's iframe or window at the returned URL to hand off into the actual course/webinar experience.

  4. 4

    Bind the lifecycle emails, optionally

    A course or webinar's lifecycleBindings can point registered/reminder/enrolled/completed events at a studio project, so those emails carry real interactive blocks instead of the default plain-text copy — falling back automatically if nothing's bound.

Frequently asked questions

Does the end user need a MailInApp dashboard account?

No — that's the point of the Embed API. A signed embed token bootstraps a deterministic sign-in behind the scenes, so the end user only ever sees your app, never a MailInApp login or dashboard.

Who decides whether a user is entitled to a course?

You do — your own backend calls the enroll endpoint to grant or revoke access based on your own billing or checkout system. MailInApp just renders the course; it isn't the source of truth for who's paid.

Can the registration/reminder emails include interactive blocks like a normal campaign?

Yes, once a course or webinar has a lifecycleBindings entry pointing that event at a studio project — it renders through the same pipeline as any other send, fallback engine included. Without a binding, the event still emails the existing plain-text lifecycle copy, so nothing breaks if you don't opt in.

Is there a separate rate limit or quota for the Embed API?

It shares the 60-requests-per-minute per-key limit with the Send API, plus its own dedicated monthly call quota by plan — zero on Free/Starter, matching how the transactional Send API is gated on those tiers.

Does this work for a webinar with public sign-up, not just an app-embedded one?

Both — a webinar can stay open for anyone to register through MailInApp's own hosted page, use the Embed API for app-embedded registration, or both at once; the API just forces registration mode rather than open access.

Build this in the studio

Start on the free plan — every interactive block and the full fallback engine are included on every tier.