openapi: 3.0.3
info:
title: GoToWebinar REST API
version: '2.0'
description: |
REST API for the GoTo (formerly Citrix / LogMeIn) GoToWebinar virtual event platform.
Operations cover webinars, organizers, registrants, attendees, sessions, co-organizers,
panelists, polls, questions, surveys, and recordings.
Source documentation: https://developer.goto.com/GoToWebinarV2
contact:
name: GoTo Developer Support
email: [email protected]
url: https://developer.goto.com/support
license:
name: GoTo Developer Terms
url: https://www.goto.com/company/legal
servers:
- url: https://api.getgo.com/G2W/rest/v2
description: GoToWebinar V2 production base URL
security:
- oauth2: []
tags:
- name: Organizers
description: Authenticated organizer account operations.
- name: Webinars
description: Create, read, update, and delete webinars.
- name: Registrants
description: Manage registrants for upcoming webinars.
- name: Attendees
description: Read attendees for past webinar sessions.
- name: Sessions
description: Inspect past and live webinar sessions.
- name: Co-Organizers
description: Manage co-organizers on a webinar.
- name: Panelists
description: Manage panelists on a webinar.
- name: Polls
description: Retrieve poll results from past sessions.
- name: Questions
description: Retrieve Q&A from past sessions.
- name: Surveys
description: Retrieve survey results from past sessions.
- name: Recordings
description: Retrieve webinar recording assets.
paths:
/organizers/{organizerKey}/webinars:
get:
tags: [Webinars]
summary: Get Webinars For An Organizer
operationId: getWebinars
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- name: fromTime
in: query
required: true
schema: { type: string, format: date-time }
- name: toTime
in: query
required: true
schema: { type: string, format: date-time }
responses:
'200':
description: List of webinars in the time range.
content:
application/json:
schema:
type: array
items: { $ref: '#/components/schemas/Webinar' }
post:
tags: [Webinars]
summary: Create A Webinar
operationId: createWebinar
parameters:
- $ref: '#/components/parameters/OrganizerKey'
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/WebinarCreate' }
responses:
'201':
description: Webinar created.
content:
application/json:
schema: { $ref: '#/components/schemas/WebinarKeyResponse' }
/organizers/{organizerKey}/webinars/{webinarKey}:
get:
tags: [Webinars]
summary: Get A Single Webinar
operationId: getWebinar
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
responses:
'200':
description: Webinar details.
content:
application/json:
schema: { $ref: '#/components/schemas/Webinar' }
put:
tags: [Webinars]
summary: Update A Webinar
operationId: updateWebinar
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/WebinarUpdate' }
responses:
'204': { description: Webinar updated. }
delete:
tags: [Webinars]
summary: Cancel A Webinar
operationId: cancelWebinar
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
- name: deleteAll
in: query
description: When true, deletes all past sessions of a recurring webinar (added 2025-03-25).
schema: { type: boolean }
responses:
'204': { description: Webinar canceled. }
/organizers/{organizerKey}/webinars/{webinarKey}/registrants:
get:
tags: [Registrants]
summary: List Registrants
operationId: listRegistrants
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
responses:
'200':
description: Registrants.
content:
application/json:
schema:
type: array
items: { $ref: '#/components/schemas/Registrant' }
post:
tags: [Registrants]
summary: Create A Registrant
operationId: createRegistrant
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
- name: resendConfirmation
in: query
schema: { type: boolean, default: false }
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/RegistrantCreate' }
responses:
'201':
description: Registrant created.
content:
application/json:
schema: { $ref: '#/components/schemas/RegistrantCreated' }
/organizers/{organizerKey}/webinars/{webinarKey}/registrants/{registrantKey}:
get:
tags: [Registrants]
summary: Get A Single Registrant
operationId: getRegistrant
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
- $ref: '#/components/parameters/RegistrantKey'
responses:
'200':
description: Registrant.
content:
application/json:
schema: { $ref: '#/components/schemas/Registrant' }
delete:
tags: [Registrants]
summary: Delete A Registrant
operationId: deleteRegistrant
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
- $ref: '#/components/parameters/RegistrantKey'
responses:
'204': { description: Registrant deleted. }
/organizers/{organizerKey}/webinars/{webinarKey}/attendees:
get:
tags: [Attendees]
summary: List All Attendees For A Webinar
operationId: listAllAttendees
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
responses:
'200':
description: Attendees across all sessions.
content:
application/json:
schema:
type: array
items: { $ref: '#/components/schemas/Attendee' }
/organizers/{organizerKey}/webinars/{webinarKey}/sessions:
get:
tags: [Sessions]
summary: List Sessions For A Webinar
operationId: listSessions
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
responses:
'200':
description: Sessions for the webinar.
content:
application/json:
schema:
type: array
items: { $ref: '#/components/schemas/Session' }
/organizers/{organizerKey}/webinars/{webinarKey}/sessions/{sessionKey}/attendees:
get:
tags: [Attendees]
summary: List Session Attendees
operationId: listSessionAttendees
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
- $ref: '#/components/parameters/SessionKey'
responses:
'200':
description: Attendees for the session.
content:
application/json:
schema:
type: array
items: { $ref: '#/components/schemas/Attendee' }
/organizers/{organizerKey}/webinars/{webinarKey}/sessions/{sessionKey}/attendees/{registrantKey}:
get:
tags: [Attendees]
summary: Get A Session Attendee
operationId: getSessionAttendee
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
- $ref: '#/components/parameters/SessionKey'
- $ref: '#/components/parameters/RegistrantKey'
responses:
'200':
description: Attendee.
content:
application/json:
schema: { $ref: '#/components/schemas/Attendee' }
/organizers/{organizerKey}/webinars/{webinarKey}/sessions/{sessionKey}/polls:
get:
tags: [Polls]
summary: Get Poll Results For A Session
operationId: getSessionPolls
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
- $ref: '#/components/parameters/SessionKey'
responses:
'200':
description: Poll results.
/organizers/{organizerKey}/webinars/{webinarKey}/sessions/{sessionKey}/questions:
get:
tags: [Questions]
summary: Get Questions And Answers For A Session
operationId: getSessionQuestions
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
- $ref: '#/components/parameters/SessionKey'
responses:
'200':
description: Q&A.
/organizers/{organizerKey}/webinars/{webinarKey}/sessions/{sessionKey}/surveys:
get:
tags: [Surveys]
summary: Get Survey Results For A Session
operationId: getSessionSurveys
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
- $ref: '#/components/parameters/SessionKey'
responses:
'200':
description: Survey results.
/organizers/{organizerKey}/webinars/{webinarKey}/coorganizers:
get:
tags: [Co-Organizers]
summary: List Co-Organizers
operationId: listCoorganizers
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
responses:
'200':
description: Co-organizers for the webinar.
post:
tags: [Co-Organizers]
summary: Create Co-Organizers
operationId: createCoorganizers
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
requestBody:
required: true
content:
application/json:
schema:
type: array
items: { $ref: '#/components/schemas/Coorganizer' }
responses:
'201': { description: Co-organizers added. }
/organizers/{organizerKey}/webinars/{webinarKey}/panelists:
get:
tags: [Panelists]
summary: List Panelists
operationId: listPanelists
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
responses:
'200':
description: Panelists for the webinar.
post:
tags: [Panelists]
summary: Create Panelists
operationId: createPanelists
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- $ref: '#/components/parameters/WebinarKey'
requestBody:
required: true
content:
application/json:
schema:
type: array
items: { $ref: '#/components/schemas/Panelist' }
responses:
'201': { description: Panelists added. }
/organizers/{organizerKey}/recordingassets:
get:
tags: [Recordings]
summary: List Recording Assets For An Organizer
operationId: listRecordingAssets
parameters:
- $ref: '#/components/parameters/OrganizerKey'
- name: fromTime
in: query
schema: { type: string, format: date-time }
- name: toTime
in: query
schema: { type: string, format: date-time }
responses:
'200':
description: Recording assets.
components:
parameters:
OrganizerKey:
name: organizerKey
in: path
required: true
schema: { type: string }
description: Authenticated organizer's key.
WebinarKey:
name: webinarKey
in: path
required: true
schema: { type: string }
description: Unique key identifying a webinar.
SessionKey:
name: sessionKey
in: path
required: true
schema: { type: string }
description: Unique key identifying a past session.
RegistrantKey:
name: registrantKey
in: path
required: true
schema: { type: string }
description: Unique key identifying a registrant.
securitySchemes:
oauth2:
type: oauth2
description: OAuth 2.0 via the GoTo authentication service.
flows:
authorizationCode:
authorizationUrl: https://authentication.logmeininc.com/oauth/authorize
tokenUrl: https://authentication.logmeininc.com/oauth/token
refreshUrl: https://authentication.logmeininc.com/oauth/token
scopes:
collab: Collaboration / GoToWebinar scope.
identity:scim.me: Read the authenticated user's identity (SCIM /me).
schemas:
Webinar:
type: object
properties:
webinarKey: { type: string }
subject: { type: string }
description: { type: string }
organizerKey: { type: string }
times:
type: array
items:
type: object
properties:
startTime: { type: string, format: date-time }
endTime: { type: string, format: date-time }
timeZone: { type: string }
registrationUrl: { type: string, format: uri }
experienceType:
type: string
enum: [CLASSIC, BROADCAST, SIMULIVE]
recurrenceType:
type: string
enum: [single_session, sequence, series]
status:
type: string
enum: [NEW, UPDATED, DELETED]
WebinarCreate:
type: object
required: [subject, times, timeZone]
properties:
subject: { type: string }
description: { type: string }
times:
type: array
items:
type: object
properties:
startTime: { type: string, format: date-time }
endTime: { type: string, format: date-time }
timeZone: { type: string }
type:
type: string
enum: [single_session, sequence, series]
experienceType:
type: string
enum: [CLASSIC, BROADCAST, SIMULIVE]
isPasswordProtected: { type: boolean }
WebinarUpdate:
type: object
properties:
subject: { type: string }
description: { type: string }
times:
type: array
items:
type: object
properties:
startTime: { type: string, format: date-time }
endTime: { type: string, format: date-time }
timeZone: { type: string }
WebinarKeyResponse:
type: object
properties:
webinarKey: { type: string }
Registrant:
type: object
properties:
registrantKey: { type: string }
firstName: { type: string }
lastName: { type: string }
email: { type: string, format: email }
phone: { type: string }
organization: { type: string }
jobTitle: { type: string }
registrationDate: { type: string, format: date-time }
status:
type: string
enum: [APPROVED, DENIED, WAITING]
joinUrl: { type: string, format: uri }
responses:
type: array
items:
type: object
properties:
question: { type: string }
answer: { type: string }
RegistrantCreate:
type: object
required: [firstName, lastName, email]
properties:
firstName: { type: string }
lastName: { type: string }
email: { type: string, format: email }
phone: { type: string }
organization: { type: string }
jobTitle: { type: string }
industry: { type: string }
responses:
type: array
items:
type: object
properties:
questionKey: { type: string }
responseText: { type: string }
RegistrantCreated:
type: object
properties:
registrantKey: { type: string }
joinUrl: { type: string, format: uri }
status: { type: string }
Attendee:
type: object
properties:
registrantKey: { type: string }
sessionKey: { type: string }
firstName: { type: string }
lastName: { type: string }
email: { type: string, format: email }
attendanceTimeInSeconds: { type: integer }
joinTime: { type: string, format: date-time }
leaveTime: { type: string, format: date-time }
Session:
type: object
properties:
sessionKey: { type: string }
webinarKey: { type: string }
webinarID: { type: string }
subject: { type: string }
startTime: { type: string, format: date-time }
endTime: { type: string, format: date-time }
registrantsAttended: { type: integer }
Coorganizer:
type: object
required: [email, givenName, surname]
properties:
email: { type: string, format: email }
givenName: { type: string }
surname: { type: string }
external: { type: boolean }
Panelist:
type: object
required: [name, email]
properties:
name: { type: string }
email: { type: string, format: email }