A webinar's plan can be written as one JSON document and pasted into Magpie. New webinar → Paste JSON will create a draft webinar from it. On a draft, More → Import JSON will replace the draft's plan with it. Export JSON, in any webinar's More menu, will download its plan in the same format. An export will import back as the same plan, as long as its start is still in the future. A choice question needs at least 2 options for its export to import back.

Use Copy the prompt in the import box to copy these instructions for an assistant you use. The assistant will ask you for what it needs, then write the document.

Importing is all or nothing. Magpie will check the whole document before it saves anything, and will name a mistake by its place in the document, such as "polls[0].options" has 9 values; the limit is 8. An imported webinar is a draft: its registration page will open only when you publish it.

Replacing a draft's plan will change its title, start, time zone, length, description, email messages, registration questions, polls, questions ready for the Q&A, resources and call to action, and will replace the speakers from outside your team. Everything else on the draft will be kept: its hosts, co-hosts and moderators, members of your team who speak, the registration page address, the cover picture, who can register, the capacity, the reminders and the breakout rooms. Only a draft can be replaced; to change the plan of a published webinar, duplicate it and import into the copy.

The document never holds attendees. Speakers in it will be added by name, without an email address. To send a speaker their personal link, add their email address on their page; in a draft, the link will be sent when you publish.

The document

{
  "schema": "magpie.webinar",
  "version": 1,
  "title": "Pricing a freelance project",
  "startsAt": "2026-11-12T17:00:00",
  "timezone": "America/Toronto",
  "durationMinutes": 60,
  "description": "What to charge, how to say it, and what to do when the client pushes back.",
  "speakers": [],
  "registrationQuestions": [],
  "polls": [],
  "seedQuestions": [],
  "resources": [],
  "callToAction": { "label": "Book a call", "url": "https://example.com/book" },
  "emails": { "confirmation": "Thanks for registering." }
}
Field Type Notes
schema string, optional "magpie.webinar".
version number, optional 1.
title string, required Up to 200 characters.
startsAt string, required The date and start time, written as YYYY-MM-DDTHH:MM or YYYY-MM-DDTHH:MM:SS. It is the time on the clock in timezone, so "2026-11-12T17:00:00" with "America/Toronto" is 5:00 PM in Toronto. Write it without an offset or Z. It must be in the future.
timezone string, required A time zone name such as America/Toronto or Europe/London.
durationMinutes number, optional The length in minutes: 15, 30, 45, 60, 75, 90, 120, 150, 180 or 240. 60 if left out.
description string, optional What the webinar is about, in Markdown, up to 20,000 characters. It is shown on the registration page.
speakers array, optional Who is presenting, up to 10. See below.
registrationQuestions array, optional Questions people answer when they register, up to 5. See below.
polls array, optional Polls to run during the webinar, up to 50. See below.
seedQuestions array of strings, optional Questions ready for the Q&A, shown as asked by the host. Up to 50, each up to 500 characters.
resources array, optional Web addresses attendees can open during the webinar, up to 20. See below.
callToAction object, optional The button attendees are shown during the webinar. See below.
emails object, optional Your own message for each email. See below.

A field not in these tables will be refused.

Each speaker:

Field Type Notes
name string, required Up to 120 characters.
jobTitle string, optional Up to 120 characters.
bio string, optional A line about them, up to 1,000 characters.

Each registration question:

Field Type Notes
label string, required The question, up to 200 characters.
type string, optional "text" for a short answer or "choice" for a choice from a list. "text" if left out.
options array of strings Required for a "choice" question and refused for a "text" one: 2 to 8 options, each up to 200 characters and each different.
required boolean, optional true when people must answer it to register. false if left out.

Each poll:

Field Type Notes
question string, required Up to 300 characters.
options array of strings, required 2 to 8 options, each up to 200 characters and each different.
multiple boolean, optional true lets attendees choose several options. false (one answer) if left out.

Each resource:

Field Type Notes
name string, required Up to 200 characters.
url string, required A web address. example.com/worksheet.pdf will become https://example.com/worksheet.pdf.

An imported resource will be shown from the start of the webinar. Change When shown on the webinar's page to show it when you choose.

The call to action:

Field Type Notes
label string, required The button's text, up to 40 characters.
url string, required The web address the button opens, completed the same way as a resource's.

The emails:

Field Type Notes
confirmation string, optional The message in the email someone gets when they are registered at once.
reminder string, optional The message in each reminder email.
followUp string, optional The message in the follow-up email sent after the webinar.
cancelled string, optional The message in the email attendees get if the webinar is cancelled.

Each message is up to 2,000 characters. A message you leave out will use the one in Webinars settings.

A complete example

{
  "schema": "magpie.webinar",
  "version": 1,
  "title": "Pricing a freelance project",
  "startsAt": "2026-11-12T17:00:00",
  "timezone": "America/Toronto",
  "durationMinutes": 60,
  "description": "What to charge, how to say it, and what to do when the client pushes back.\n\n## You will leave with\n\n- A way to price a project from its parts\n- Words for the first conversation about money",
  "speakers": [
    { "name": "Dana Lee", "jobTitle": "Studio owner", "bio": "Runs a three-person design studio." },
    { "name": "Sam Ortiz", "jobTitle": "Freelance developer" }
  ],
  "registrationQuestions": [
    { "label": "What do you sell?", "type": "choice", "options": ["Design", "Writing", "Development", "Other"], "required": false },
    { "label": "What would you like us to cover?", "type": "text", "required": false }
  ],
  "polls": [
    { "question": "How do you price today?", "options": ["Hourly", "Per project", "Retainer", "Not sure"], "multiple": false },
    { "question": "Which of these has a client asked you for?", "options": ["A discount", "Extra work for free", "Paying after the deadline"], "multiple": true }
  ],
  "seedQuestions": ["What if the client asks for a discount?", "How often should I raise my prices?"],
  "resources": [
    { "name": "Pricing worksheet", "url": "https://example.com/worksheet.pdf" }
  ],
  "callToAction": { "label": "Book a call", "url": "https://example.com/book" },
  "emails": {
    "confirmation": "Thanks for registering. Bring a project you are pricing now.",
    "followUp": "Here is the replay and the pricing worksheet."
  }
}

If an import is rejected for a reason you can't work out, Contact support.

Ask Magpie support

Send Magpie staff a question about anything this article does not answer.

Related articles