Skip to content

API

Registrations

Who registered, what they did, corrections, new links, and erasing someone's data.

A registration is somebody signing up for a webinar, through the form, a paid ticket order or the API, with what they typed and where they came from. The same person registering again is another registration. Creating one is the webinar’s route (see Create a registration).

Where it sits depends on the webinar. On an evergreen, the time it picked, its webinarEvergreenRegistration. On a launch it can open every date not called off, and each one it has opened, or whose replay it has, is an entry of its webinarLaunchSessionRegistrations, empty until then. It carries one or the other, and that is also where what they did is kept.

GET/public/v1/webinar-registrations

Across every webinar of the organization, or one’s by webinarId.

Filter Narrows to
webinarId One webinar’s.
name, email Containing it.
phone Digits contained in the whole number; phoneCc the calling code exactly.
timezone Exactly.
source, medium, campaign, content, term The UTM tag exactly.
webinarLaunchSessionId Those who entered this session of a launch.
watchedSeconds Who watched at least this long: the longest play of each session and of each replay, added.
createdAtFrom, createdAtTo Registered in the span.
startsAtFrom, startsAtTo Those whose seat starts in the span: an evergreen’s time, or a launch’s session.
GET/public/v1/webinar-registrations/:webinarRegistrationId
Field What it is
id, organizationId, webinarId
firstName, lastName, name name is the two together.
email, phoneCc, phoneNumber, phone phone is the two together, +5511987654321; all three empty where none was given.
country Where they registered from, as read off their address; absent where it could not be.
timezone The clock their sessions are read in.
source, medium, campaign, content, term The page’s UTM tags when they registered.
webinarEvergreenRegistration On an evergreen, the time they picked (below). Absent on a launch.
webinarLaunchSessionRegistrations On a launch, the sessions they entered, soonest first (below). Absent on an evergreen.
webinarTicketOrderId The ticket order they were created from, on a webinar that charges; absent where it is free.
abTestId The A/B test that dealt the form they registered through — on a paid webinar, the form their ticket order was sent from. Absent where no test dealt it, and where they did not come through a form: the dashboard, this API, an order made without one.
accessToken What opens their pages beside their id — below. Made anew with a new access token.
conversionCode What a checkout link of your own carries to name them: ?sck=r{conversionCode} (with the r), so a Hotmart sale made through it is counted as theirs. In an automation, ?sck=r{{webinarRegistration.conversionCode}}.
anonymized Whether what identified them was erased; firstName to phone are then empty.
ticketRefunded Whether the ticket order that made it was refunded; its watch pages no longer open.
createdAt When they registered.

webinarEvergreenRegistration:

Field What it is
id, webinarRegistrationId
startsAt The time they picked. Waiting, running and over come from it and the length of the video published, nothing stored saying so.
selectedSchedule The entry of the webinar’s schedule that names that time, worked out by Sparkwebinar: type, standardCron or justInTimeCron, and value, the cron as the webinar held it. The just-in-time cron names only its next time, and takes that time whatever else names it. Theirs, whatever the schedule becomes.
webinarPlayerPageViews Each opening of the watch page or of the replay’s: kind session or replay, openToWatch whether it could be watched then, a gate ahead of the time being no, and when.
webinarPlays Each play on those pages, session and replay alike, with watchedSeconds, and, on one registration’s read, the offers they clicked.
createdAt When they registered.

Each entry of webinarLaunchSessionRegistrations:

Field What it is
id, webinarRegistrationId
webinarLaunchSessionId The session.
sessionStartsAt When that session starts.
sessionStatus How that session stands: open, canceled or closed. An open one is on from sessionStartsAt. A session canceled stays in the list.
webinarPlayerPageViews, webinarPlays What they did on that session’s pages, as above.
createdAt When they joined that session, later than the registration for a date added after it.

webinarPlayerPageViews and webinarPlays come on the list and on one registration’s read. They are absent from the answer to a create or a correction, and from a webhook’s body.

On a launch:

{
"id": 109,
"webinarId": 12,
"email": "ana@example.com",
"webinarLaunchSessionRegistrations": [
{
"id": 301,
"webinarRegistrationId": 109,
"webinarLaunchSessionId": 412,
"sessionStartsAt": "2026-11-10T22:00:00.000Z",
"sessionStatus": "open",
"webinarPlayerPageViews": [],
"webinarPlays": [],
"createdAt": "2026-10-20T14:02:11.000Z"
},
{
"id": 302,
"webinarRegistrationId": 109,
"webinarLaunchSessionId": 413,
"sessionStartsAt": "2026-11-12T22:00:00.000Z",
"sessionStatus": "open",
"webinarPlayerPageViews": [],
"webinarPlays": [],
"createdAt": "2026-10-20T14:02:11.000Z"
}
],
"...": "..."
}

On an evergreen:

{
"id": 110,
"webinarId": 13,
"email": "ana@example.com",
"webinarEvergreenRegistration": {
"id": 88,
"webinarRegistrationId": 110,
"startsAt": "2026-11-10T22:00:00.000Z",
"selectedSchedule": { "type": "standardCron", "value": "0 19 * * *" },
"webinarPlayerPageViews": [],
"webinarPlays": [],
"createdAt": "2026-10-20T14:02:11.000Z"
},
"...": "..."
}

Their pages open by their id and their access token, on the watch host, https://dev.watch.sparkwebinar.io or the domain of your own the webinar is on: /session/<id>?accessToken=<accessToken> and /replay/<id>?accessToken=<accessToken>. There is one link per registration, however many sessions it is in: on an evergreen, it opens their time; on a launch, the session link opens the session on air, or else the next one, or else the last one over, and the replay link opens the last one over. A survey opens at /response/<surveyId>/<id>?accessToken=<accessToken> on the surveys host, the same way. The token is theirs: a link with it opens their pages. The page takes it off its address as it opens and keeps it in that browser tab, so reloading it still works; the address left in the bar opens nothing anywhere else.

POST/public/v1/webinar-registrations/:webinarRegistrationId/access-token

Makes their accessToken anew, for a link that got out: every link with the old one, watch pages and surveys, opens nothing from now on, pages already open included. The answer is the registration with the new token, for the links you send from here on. Nothing is sent to them.

Status infoCode Why
409 WEBINAR_REGISTRATION_ANONYMIZED The registration was anonymized: it has no pages to open.
PATCH/public/v1/webinar-registrations/:webinarRegistrationId

Any of firstName, lastName, email, phoneCc, phoneNumber, timezone, the UTM tags, startsAt, whichever are sent. The phone is a pair: a half sent is checked against the half that stays.

On an evergreen, sending another time of the webinar’s schedule as startsAt moves them to that time. It is read in the timezone sent, or the registration’s own, and checked as a new registration’s is. What they did moves with them, and whatever was counting from the old time, such as automations waiting for it, counts from the new one.

Status infoCode Why
400 WEBINAR_SESSION_NOT_FOUND, WEBINAR_SESSION_STARTED As on a new registration.
400 WEBINAR_REGISTRATION_TOO_FAR_AHEAD A time more than 90 days from now.
409 WEBINAR_LAUNCH_SEAT_FIXED startsAt sent on a launch: a registration is in all of its sessions, and there is nothing to move.
409 WEBINAR_REGISTRATIONS_CLOSED The webinar’s registrations are closed, and nobody is seated at that time yet.
409 WEBINAR_REGISTRATION_ANONYMIZED The registration was anonymized.
POST/public/v1/webinar-registrations/:webinarRegistrationId/anonymize

What identified the person is erased for good, and nothing brings it back: the name, e-mail and phone are blank — on the registration and on the ticket order that made it —, the country and the avatar absent. Their chat lines stay in no name, the comment beside their rating and their answers in words to surveys are erased, what automations kept of them is erased and the ones still under way are canceled, and the webhook deliveries that told of them are gone. What was already sent to anyone else is theirs to erase.

The registration stays with anonymized: true, and counts as any other: in the registrations quota, in its sessions and in every number, with its plays, sales and rating, its UTM tags, and its time zone. Its watch and survey links open nothing. Anonymizing one twice answers the same; correcting one is refused as WEBINAR_REGISTRATION_ANONYMIZED (409).

A registration is never deleted.

© 2026 Sparkwebinar. All rights reserved.