GoTo Webinar · AsyncAPI Specification
Goto Webinar Webhooks
Version
View Spec
View on GitHub
WebinarsVirtual EventsVideo ConferencingMarketingLead CaptureRegistrationWebhookEvent ManagementCollaborationAnalyticsAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-13'
method: searched
source: https://developer.goto.com/guides/GoToWebinar/07_HOW_WebHooksOverview/
docs:
- https://developer.goto.com/guides/GoToWebinar/07_HOW_WebHooksOverview/
- https://developer.goto.com/guides/GoToWebinar/08_HOW_webhooks/
spec_type: Webhooks
asyncapi:
published: false
note: >-
GoTo publishes no AsyncAPI document for GoTo Webinar. The event surface is
real and well documented in prose plus a management REST API, but there is
no machine-readable event contract — no AsyncAPI, no JSON Schema per event,
no CloudEvents envelope. This file captures the published webhook catalog
verbatim from GoTo's own documentation; it is NOT an AsyncAPI and nothing
here was authored on GoTo's behalf.
summary: >-
Webhooks are GoTo Webinar's only push surface, and GoTo notes they are
available for GoTo Webinar ONLY across the whole product portfolio. Five
events are published. Delivery is to a developer-registered callback URL, with
a shared secret key for origin validation, and end users are subscribed
individually. Management is fully API-driven — the Webhooks tag of the
GoToWebinarV2 OpenAPI carries 12 operations for creating, updating, listing
and deleting both webhooks and per-user subscriptions.
transport:
mechanism: HTTP callback
callback_url: developer-supplied per webhook
signing:
supported: true
mechanism: shared secret key
operation: createSecretKey
note: >-
"the integration developer can create a secret key for a webhook. The key
enables the application receiving the data to validate that it came from a
trusted source." The docs do not publish the signature algorithm, the
header name, or a verification example — an integrator cannot implement
verification from the published material alone.
retries:
documented: false
ordering:
documented: false
state_model:
fields: [webhookState, userSubscriptionState, activationState]
rules:
- webhookState defaults to INACTIVE on creation; must be set to ACTIVE via updateWebhooks before any event is delivered.
- userSubscriptionState defaults to ACTIVE on creation; set to INACTIVE via createUserSubscriptions to pause a specific subscriber.
- activationState is derived — ACTIVE only when webhookState AND userSubscriptionState are both ACTIVE, otherwise INACTIVE.
gotcha: >-
A newly created webhook delivers nothing until it is explicitly activated.
This is the most common first-integration failure and it is a two-call
sequence, not one.
events:
- name: registrant.added
version: 1.0.0
product: g2w
description: Fired to the webinar organizer when a user registers for the webinar. Carries the full registrant record.
key_fields: [eventName, eventVersion, product, eventKey, firstName, lastName, email, phone, address, city, state, country, zipCode, organization, jobTitle, Industry, comments, registrationDate, numberOfEmployees, purchasingRole, purchasingTimeFrame, status, webinarKey, webinarTitle, experienceType, recurrenceType, webinarCreatorKey, registrationSource, joinUrl, registrantKey, timestamp, responses]
notes:
- 'status is one of: Waiting, Approved, Cancelled, Denied.'
- joinUrl is present only when status is Approved.
- responses carries custom registration questions as [questionText, questionType, [answerText]] with questionType MULTIPLE_CHOICE or SHORT_ANSWER.
- registrationSource reflects the Share Your Webinar values set in the GoTo Webinar dashboard — this is the lead-attribution field.
- name: registrant.joined
version: 1.0.0
product: g2w
description: Fired to the organizer when a registrant actually joins the live session.
key_fields: [eventName, eventVersion, product, eventKey, firstName, lastName, email, webinarKey, sessionKey, webinarTitle, experienceType, recurrenceType, registrantKey, webinarCreatorKey, joinTime, timestamp]
- name: webinar.created
version: 1.0.0
product: g2w
description: Fired to the organizer when a webinar is created.
key_fields: [eventName, eventVersion, accountKey, organizerKey, product, eventKey, webinarKey, webinarTitle, description, experienceType, recurrenceType, recurrenceKey, webinarCreationDate, status, times, startTime, endTime, timeZone]
notes:
- status is always NEW.
- recurrenceKey correlates series webinars and is null for other types.
- times is a list of [startTime, endTime] pairs, one per session.
- name: webinar.changed
version: 1.0.0
product: g2w
description: Fired to the organizer when an existing webinar is updated or deleted.
key_fields: [eventName, eventVersion, accountKey, organizerKey, product, eventKey, webinarKey, webinarTitle, description, experienceType, recurrenceType, status, times, startTime, endTime, timeZone]
notes:
- 'status is UPDATED or DELETED — deletion is delivered on the changed event, not a separate webinar.deleted event.'
- name: survey.submitted
version: 1.0.0
product: g2w
added: '2026-06-09'
description: Fired to the organizer when a webinar attendee submits a post-session survey.
key_fields: [eventName, eventVersion, product, eventKey, timestamp, webinarKey, webinarTitle, webinarCreatorKey, experienceType, sessionKey, registrantKey, surveyName, responses]
notes:
- responses uses the same shape as registrant.added, with questionType one of MULTIPLE_CHOICE, MULTIPLE_ANSWER, RATING, SHORT_ANSWER.
- The newest addition to the event surface — see changelog/goto-webinar-changelog.yml.
common_fields:
eventName: string — the event type, matching the name above
eventVersion: string — currently 1.0.0 on every event
product: string — always "g2w" for GoTo Webinar
eventKey: string — unique alphanumeric identifier for the event instance, usable for consumer-side deduplication
timestamp: string — ISO 8601 event generation time
management_api:
spec: openapi/goto-webinar-webhooks-api-openapi.yml
operations:
- createSecretKey
- createWebhooks
- updateWebhooks
- getWebhooks
- getWebhook
- deleteWebhooks
- createUserSubscriptions
- updateUserSubscriptions
- getUserSubscriptions
- getUserSubscription
- deleteUserSubscriptions
gaps:
- No AsyncAPI or JSON Schema for any of the five event payloads — field lists exist only as HTML tables in a guide.
- The signature/verification scheme for the secret key is not published (no algorithm, no header name, no example).
- No retry, backoff, ordering or at-least-once/at-most-once delivery semantics are documented.
- No replay or event-history endpoint; a missed delivery cannot be recovered from GoTo.
- eventVersion exists on every payload but no version-negotiation or evolution policy is published.