Skip to content

Webinars

GET /public/v1/webinars
Filter Narrows to
name Webinars whose dashboard name contains it.
method live or evergreen.
archived true or false.
createdAtFrom, createdAtTo Made in the span.
GET /public/v1/webinars/:webinarId

The webinar whole, as the dashboard reads it. The fields worth knowing from outside:

Field What it is
id, name, title name is the dashboard’s label; title is what the pages show.
method live: sessions transmitted at their time. evergreen: a recording played at scheduled times.
scheduleMethod, fixedDates, recurringStandardCrons, recurringJustInTimeCron How a live’s or an evergreen’s sessions are dated: fixed dates, or a recurrence — recurringStandardCrons, each a time of day on some days (0 15 * * *), and, on an evergreen, one recurringJustInTimeCron, a session every 15, 30 or 60 minutes, or on the hour, through a span of hours, every day (*/15 9-21 * * *, 0 9-21 * * *); null for none.
useWebinarRegistrationTimezone On an evergreen, the schedule’s hours are read in each registrant’s own timezone instead of the webinar’s — 15:00 wherever they are. Always false on a live.
sessions Its sessions, newest first — id, startsAt, status (scheduled, running, canceled, closed), closedAt and the rest.
timezone The zone the schedule is written in, and read in unless useWebinarRegistrationTimezone.
organizationCustomDomainId The watch domain of your own its pages open on (see Custom domains); absent, watch.sparkwebinar.io.
formFields What the registration form asks, each with whether it is on and required.
enableTicket, ticket Whether entry is paid for, and through which integration.
webinarRegistrationsCount How many have registered.
enableReplay, replayExpirationSeconds Whether a replay is offered after a session, and for how long.
archived Put away from the lists: it stops nothing. Only a webinar with its sign-ups paused and everything over is archived.
lastPublishedAt, createdAt, updatedAt Its instants.
registrationsClosed Its sign-ups were paused from the dashboard: no new registration comes in, and the sessions there are go on. Always true on an archived webinar, and it stays so when the webinar is brought back.
GET /public/v1/webinars/:webinarId/sessions

The webinar’s sessions, in the order they start, a live’s and an evergreen’s alike: the ones there are. None is made ahead — a session is made by the first registration at a time of the schedule, and the ones after it take a seat in it; a time nobody registered for has no session.

Filter Narrows to
status scheduled, running, canceled or closed.
startsAtFrom, startsAtTo Starting in the span.
GET /public/v1/webinars/12/sessions?status=scheduled&startsAtFrom=2026-11-02T00:00:00Z
{
"data": [
{ "id": 412, "webinarId": 12, "startsAt": "2026-11-10T22:00:00.000Z", "status": "scheduled", "createdAt": "2026-10-20T14:02:11.000Z" }
],
"metadata": { "list": { "pagination": { "page": 1, "size": 20 }, "total": 1 } }
}
Field What it is
id, webinarId id is what a registration reads back as webinarSessionId.
startsAt When it starts: what a registration sends, as sessionStartsAt, to take a seat in it.
status scheduled until it starts, running while it is on, closed once over, canceled where it was called off.
canceledAt, closedAt When it was canceled or closed; absent until then.
createdAt When its first registration made it.
POST /public/v1/webinars/:webinarId/registrations

A seat taken from your own system — the same as one taken through the form: the registration is written with an access token of its own, said to be created, and whatever that sets off — your automations, your webhooks — follows.

The seat is a time of the webinar’s schedule — read from its fixedDates, recurringStandardCrons and recurringJustInTimeCron, in its timezone or, with useWebinarRegistrationTimezone on, the registrant’s —, sent as sessionStartsAt: the session there is found — even once it has started, where it is not canceled nor over — or made by this registration. Sparkwebinar works out which entry of the schedule names the time and keeps it on the registration as its selectedSchedule. The just-in-time cron offers only its next time, counted from when the registration comes in, and that time is always the just-in-time cron’s; its later times are no time of the schedule, unless a date or a recurring cron names them, which they then go under.

Field What it is
firstName required
email required
lastName Empty where not sent.
phoneCc, phoneNumber The calling code with its plus, +55, and the digits after it, 11987654321. Both or neither.
timezone An IANA zone, America/Sao_Paulo: the clock their sessions are read in. The webinar’s own where not sent — and required where the webinar has useWebinarRegistrationTimezone on, since sessionStartsAt is read in it.
source, medium, campaign, content, term UTM tags — whatever brought them. Empty where not sent.
sessionStartsAt required An instant, on a live as on an evergreen: a time of its schedule — still to come, unless a session not canceled nor closed is already there, and no more than 90 days from now, session there or not.
{ "firstName": "Ana", "lastName": "Silva", "email": "ana@example.com", "sessionStartsAt": "2026-11-04T18:00:00.000Z" }

The answer is the registration, whole, their accessToken with them. Nothing refuses a second seat with the same e-mail: a registration is a seat, not a person. A webinar that charges for entry is not charged here — your system is the organization, seating whom it will.

Status infoCode Why
400 WEBINAR_SESSION_NOT_FOUND The webinar’s schedule does not name sessionStartsAt — a later time of the just-in-time cron than its next among them — or the session there is canceled or over.
400 WEBINAR_SESSION_STARTED A time of the schedule already past, with no session there.
400 WEBINAR_REGISTRATION_TOO_FAR_AHEAD A time more than 90 days from now: Sparkwebinar does not accept registrations further ahead.
400 VALIDATION_FAILED A field that does not fit: an e-mail that is none, a phone in one half, a zone the clock does not know — or no timezone where the webinar reads its schedule in each registrant’s own.
409 WEBINAR_REGISTRATIONS_CLOSED The webinar’s sign-ups are paused (registrationsClosed), whatever the time sent: none comes in, in a session there already either.