List webinars
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.
apiKeyAuthorizationBearer <vk_live_<public id>_<secret>>An API key from the Vidyst studio (Developer → API keys), sent as Authorization: Bearer vk_live_….
limit?integerHow many webinars a page has (1–100).
1 <= value <= 10020cursor?stringContinues a list: the nextCursor of the previous page. Use it with the same filters and sort it came from (otherwise 400 invalid_cursor).
^[A-Za-z0-9_-]{1,200}$status?stringOnly webinars in one of these statuses: a comma list of draft, scheduled, live, ended.
length <= 100access?stringOnly open or only registration webinars.
"open""registration"licenceKey?stringOnly webinars on this licence (its key, as the studio shows it).
length <= 40search?stringOnly webinars whose title contains this (2–100 characters, case-insensitive, matched literally).
2 <= length <= 100startsAfter?stringOnly webinars with a session starting at or after this time (ISO 8601 with an offset). With a series, any of its sessions counts.
^(?:(?:\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-timestartsBefore?stringOnly webinars with a session starting before this time. With startsAfter, a session in the range.
^(?:(?:\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-timesort?string-createdAt newest first (the default), createdAt oldest first, scheduledAt soonest first session first, -scheduledAt latest first. Drafts without a date come last in both schedule orders.
"-createdAt""-createdAt""createdAt""scheduledAt""-scheduledAt"A page of webinars.
application/json- response
A page of webinars.
data*array<>This page's webinars, in the order asked for.
nextCursor*|Pass it as cursor for the next page; null on the last page.
hasMore*booleanWhether there's another page (nextCursor isn't null).
curl -X GET 'https://vapi.vidyst.com/public/v1/webinars' \ -H 'Authorization: Bearer vk_live_…'{ "data": [ { "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" } ], "nextCursor": "eyJ2IjoyLCJzIjoiLWNyZWF0ZWRBdCJ9", "hasMore": true}Get a webinar GET
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`.
Update a webinar PATCH
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`.