Update a webinar
Changes a webinar the API key's account owns. Needs the webinars:write scope. Only the fields you send change; null clears the ones that can be empty, and lists are replaced whole.
Send the ETag from when you read it as If-Match, so the edit can't overwrite someone else's change made in between (412 precondition_failed). The response carries the new ETag.
An ended webinar can't change (410 webinar_ended). While a session is live you can still edit its details, but not move it to another licence or change its status.
apiKeyAuthorizationBearer <vk_live_<public id>_<secret>>An API key from the Vidyst studio (Developer → API keys), sent as Authorization: Bearer vk_live_….
webinarId*stringThe webinar's id.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuidIf-Match?stringMakes the edit conditional: the ETag from when you read the webinar (* matches any version). If it has changed since (someone else edited it), or the value isn't one of its ETags, the edit is refused with 412 precondition_failed and nothing changes. Leave it out to edit whatever is there.
length <= 200application/json- body
Changes to a webinar: only the fields sent change.
title?stringThe webinar's title (1–200 characters).
1 <= length <= 200licenceKey?stringMoves the webinar to another licence (its key, VDL-…). You must be able to host on it, and it must be active. Not while a session is live (409 conflict).
length <= 40status?stringscheduled publishes a draft (it needs a scheduledAt, sent now or set before); draft unpublishes it. Ignored while a session is live.
"draft""scheduled"scheduledAt?|When the (first) session starts, ISO 8601 with an offset. null removes the date, which makes a scheduled webinar a draft.
timezone?stringThe IANA time zone it's shown in and its series repeats by.
length <= 64durationMinutes?integerPlanned length of each session, in minutes (1–1440).
1 <= value <= 1440description?|Plain text for the public page (up to 5,000 characters); null removes it.
access?stringopen or registration.
"open""registration"registrationLimit?|The most registrations it takes; null removes its own limit (the licence's still applies).
passcode?|A new passcode (4–64 characters); null removes it. Never returned.
reminders?array<>The emails registrants get, replacing the current list ([] for none).
items <= 8repeat?stringHow it repeats. Changing it lays out the sessions again from scheduledAt.
"none""daily""weekly""monthly""custom"repeatCount?integerHow many sessions a series has (2–52).
2 <= value <= 52repeatDays?array<>The weekdays of a custom series (0 = Sunday … 6 = Saturday), replacing the current ones.
items <= 7agenda?array<>The agenda, replacing the current one ([] clears it).
items <= 30faqs?array<>The questions and answers, replacing the current ones ([] clears them).
items <= 20questions?array<>The registration form's questions, replacing the current ones ([] removes them).
items <= 20A webinar.
application/json- response
A webinar.
id*stringThe webinar's id.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuidtitle*stringIts title.
description*|Its plain-text description, or null.
status*stringdraft (private), scheduled (published, not live), live (a session is on) or ended (no sessions left).
"draft""scheduled""live""ended"access*stringopen or registration.
"open""registration"licenceKey*|The key of the licence it runs on.
scheduledAt*|When the first session starts (UTC), or null for a draft without a date.
timezone*stringThe IANA time zone it's shown in.
durationMinutes*integerPlanned length of each session, in minutes.
-9007199254740991 <= value <= 9007199254740991repeat*stringHow the series repeats (none for a single session).
"none""daily""weekly""monthly""custom"repeatCount*integerHow many sessions it has (1 for a single session).
-9007199254740991 <= value <= 9007199254740991repeatDays*array<>The weekdays of a custom series (0 = Sunday); empty otherwise.
occurrences*array<>Every session, in order.
nextSessionAt*|The session on now or the next one (UTC); null when none is left.
sessionsLeft*integerSessions not over yet, the one on now included.
-9007199254740991 <= value <= 9007199254740991registrationLimit*|The most registrations it takes, or null for no limit of its own.
registrationCount*integerHow many people have registered.
-9007199254740991 <= value <= 9007199254740991passcodeProtected*booleanWhether attendees need a passcode to join.
reminders*array<>The emails registrants get.
agenda*array<>The agenda shown on its page.
faqs*array<>The questions and answers shown on its page.
questions*array<>The registration form's questions.
pageUrl*stringIts public page, where people register and join. Share this link.
uristartedAt*|When its current or last session went live (UTC), or null.
endedAt*|When it ended for good (UTC), or null.
createdAt*stringWhen it was created (UTC).
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$date-timeupdatedAt*stringWhen it last changed (UTC).
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$date-timecurl -X PATCH 'https://vapi.vidyst.com/public/v1/webinars/01929c5e-8f3a-7b21-9d4e-5a6b7c8d9e0f' \ -H 'Authorization: Bearer vk_live_…' \ -H 'Content-Type: application/json' \ -d '{}'{ "id": "01929c5e-8f3a-7b21-9d4e-5a6b7c8d9e0f", "title": "Product launch: what's new in Q4", "description": "A tour of everything we shipped this quarter, with live Q&A.", "status": "scheduled", "access": "registration", "licenceKey": "VDL-M4A05-TKY9Q-0A5V6-WMR8H", "scheduledAt": "2026-12-01T15:30:00.000Z", "timezone": "Asia/Kolkata", "durationMinutes": 45, "repeat": "weekly", "repeatCount": 6, "repeatDays": [], "occurrences": [ { "index": 0, "startsAt": "2026-12-01T15:30:00.000Z", "done": false } ], "nextSessionAt": "2026-12-01T15:30:00.000Z", "sessionsLeft": 6, "registrationLimit": 500, "registrationCount": 0, "passcodeProtected": true, "reminders": [ "confirmation", "day_before", "hour_before" ], "agenda": [ { "time": "10:00", "title": "Welcome and introductions" } ], "faqs": [ { "question": "Will there be a replay?", "answer": "Yes, registrants get the replay by email." } ], "questions": [ { "label": "What's your role?", "type": "multiple_choice", "required": true, "options": [ "Marketing", "Engineering", "Other" ] } ], "pageUrl": "https://vidyst.live/w/4fQ9zK2mXp", "startedAt": null, "endedAt": null, "createdAt": "2026-11-03T09:30:00.000Z", "updatedAt": "2026-11-03T09:30:00.000Z"}