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: developer-support@goto.com 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 }