Quickstart
The Embed API lets your own backend enroll or register your own end users into a MailInApp course or webinar, and embed the viewing/joining experience in your app — without that end user ever touching a MailInApp dashboard account. It shares the same bearer API key as the transactional Send API — no new credential to mint.
Mint a key
Same key as everywhere else: under API & Integrations in the dashboard, hit Create key. The full key — mia_live_... — is shown exactly once; MailInApp only keeps a hash. One key can call every route on your account, including the ones below.
Register a webinar attendee
Registers an end user for a public-registration webinar and returns a join link — no MailInApp form, no MailInApp account for your user:
curl -X POST https://mailinapp.com/api/v1/webinars/<liveSessionId>/register \
-H "Authorization: Bearer mia_live_..." \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"name": "Ada Lovelace"
}'
A successful call returns either a confirmed join link or a waitlisted status:
{ "status": "confirmed", "joinUrl": "https://mailinapp.com/webinar/.../join?token=..." }
Create the webinar itself the same way — POST /api/v1/webinars — or reuse one you already created from Live in the dashboard; either way it must have accessMode: "registration". See the API reference for the full request/response shapes.
Enroll a course subscriber
Grants (or revokes) course access for an email address — your own billing or checkout system decides who's entitled, MailInApp just renders the course:
curl -X POST https://mailinapp.com/api/v1/courses/<courseId>/enroll \
-H "Authorization: Bearer mia_live_..." \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"active": true
}'
{ "subscriberId": "abc123", "active": true }
Embed the course viewer
Once a subscriber is enrolled, mint a short-lived (5-minute) signed token and redirect your app's iframe or window at the returned URL:
curl -X POST https://mailinapp.com/api/v1/courses/<courseId>/embed-token \
-H "Authorization: Bearer mia_live_..." \
-H "Content-Type: application/json" \
-d '{ "email": "[email protected]" }'
{ "portalUrl": "https://mailinapp.com/learn/<slug>/courses/<courseId>/embed?token=..." }
Opening portalUrl signs the visitor into a bootstrap page that redeems the token and lands them in the same course portal — video, progress, quizzes — a directly-enrolled subscriber gets. The course must be published and the account must have already claimed a membership slug (/learn/<slug>) for this to succeed.
The actual differentiator: interactive lifecycle emails
Registration, reminder, enrollment and completion emails all still go out — by default, with today's plain confirmation copy. From the course or webinar's own settings panel in the dashboard, a new Lifecycle emails section lets you point any of those events at a project you built in the studio instead: the email that goes out then renders through the full fallback engine (kinetic blocks, merge tags, live view) rather than a hardcoded string. Nothing changes for an event you leave unbound.
Next steps
- Full request/response shapes, lifecycle-binding events, rate limits and error codes: API reference.
- No existing course or webinar to enroll/register against? Create one from Courses or Live in the dashboard first — the Embed API wraps the same underlying data, it doesn't create a separate catalog.
- Freeform or studio-project transactional sends still go through the Send API — the Embed API is specifically for course/webinar enrollment and embedding.