Create a webinar by pasting JSON
The webinar JSON format: create a draft webinar from a pasted document, replace a draft's plan, or export a webinar's plan.
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.