Get a webinar
One webinar the API key's account owns. Needs the webinars:read scope. A webinar that doesn't exist, or that the account doesn't own (even one it helps run), is 404 not_found.
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)$uuidA 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 GET 'https://vapi.vidyst.com/public/v1/webinars/01929c5e-8f3a-7b21-9d4e-5a6b7c8d9e0f' \ -H 'Authorization: Bearer vk_live_…'{ "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"}Create a webinar POST
Creates a webinar owned by the API key's account, on the licence you name. Needs the `webinars:write` scope. A `scheduled` webinar (the default) is published straight away: its page (`pageUrl`) goes live and, with `access: registration`, registration opens. Create it as a `draft` to keep it private. Send an `Idempotency-Key` so a retry after a timeout can't create it twice.
List webinars GET
The webinars the API key's account owns, newest first, a page at a time. Needs the `webinars:read` scope (`webinars:write` includes it). Filter by `status`, `access`, `licenceKey`, sessions in a time range (`startsAfter`, `startsBefore`) and a title `search`; order with `sort`. Filters combine: a webinar must match all of them. Page with `cursor`: pass the `nextCursor` of one page to get the next, with the same filters and sort. See [Pagination](https://api-docs.vidyst.com/docs/pagination).