GoTo Webinar REST API v2

The full GoTo Webinar v2 REST API as GoTo publishes it — 53 operations across 39 paths covering webinars, sessions, registrants, attendees, panelists, co-organizers, polls, Q&A, surveys, recording assets and webhook management. Authentication is OAuth 2.0 authorization-code with PKCE (S256) against GoTo's identity service — authorization at identity.goto.com/oauth/authorize and token exchange at identity.goto.com/oauth/token, still named as authentication.logmeininc.com in the contract — using the product-level scope `collab:`. API access carries no additional charge beyond a GoTo Webinar product subscription.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/rest-api-v2"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

goto-webinar-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: GoTo Webinar 2.0 REST API
  description: |
    We recommend you use the v2 of this API. If you are still using v1, you can access [v1 documentation](/GoToWebinarV1).

    ### Authentication Scopes
    `collab:` must be used when a token is requested from the Authentication API.

    # GoTo Webinar API Overview
    Use the GoTo Webinar API to:
    - Schedule webinars of one or more sessions
    - Tailor your webinars with panelists, polls, questions and surveys
    - Accept registrations
    - Manage registrants and, once the webinar starts, attendees
    - View data about historical and future webinars, registrants and attendees

    Refer to GoTo Webinar product documentation to review the webinar types and product functionality.

    Review call bodies and example call bodies in the API calls for alternate usage.

    Note: Both userKey and organizerKey used in the APIs contain the same value

    ## Getting Started
    1. [Register](/guides/Get%20Started/01_HOW_developerAccount) for a developer account.
    2. Create an [OAuth client](/guides/Get%20Started/02_HOW_createClient) and include the product(s) you plan to develop with.
    3. Obtain a product account as needed. Trial versions will work, but last only 30 days. We recommend a full-featured account, preferably with an Admin role.
    4. Request an [Access Token](/guides/Authentication/03_HOW_accessToken) to make API calls.
    5. Make your first API calls. You can use cURL, Postman, or other API interfaces to make calls.
  version: 2.0.0
tags:
  - name: Webinars
    description: Operations available for webinars of a given organizer.
  - name: Co-organizers
    description: Operations available for co-organizers of a given webinar.
  - name: Panelists
    description: Operations available for panelists of a given webinar.
  - name: Registrants
    description: Operations available for registrants of a given webinar.
  - name: Sessions
    description: Operations available for sessions of a given webinar.
  - name: Attendees
    description: Operations available for attendees of a given webinar session.
  - name: RecordingAssets
    description: Operations available for assets of a given organizer.
  - name: Webhooks
    description: APIs available for management of a webhooks.
security:
  - OAuth2: []
paths:
  /accounts/{accountKey}/webinars:
    get:
      tags:
        - Webinars
      operationId: getAllAccountWebinars
      summary: Get all webinars for an account
      description: |
        Retrieves the list of webinars for an account within a given date range. `Page` and `size` parameters are optional. Default `page` is 0 and default `size` is 20.
      parameters:
        - $ref: '#/components/parameters/accountKey'
        - $ref: '#/components/parameters/requiredFromTime'
        - $ref: '#/components/parameters/requiredToTime'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/size'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportingWebinarsResponse'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
        '404':
          description: Not Found
      x-codeSamples:
        - lang: Node + Axios
          source: |-
            var axios = require("axios").default;

            var options = {
              method: 'GET',
              url: 'https://api.getgo.com/G2W/rest/v2/accounts/%7BaccountKey%7D/webinars',
              params: {
                fromTime: '2020-03-13T10:00:00Z',
                toTime: '2020-03-13T22:00:00Z',
                page: 'SOME_INTEGER_VALUE',
                size: 'SOME_INTEGER_VALUE'
              },
              headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}
            };

            axios.request(options).then(function (response) {
              console.log(response.data);
            }).catch(function (error) {
              console.error(error);
            });
        - lang: Shell + Curl
          source: |-
            curl --request GET \
              --url 'https://api.getgo.com/G2W/rest/v2/accounts/%7BaccountKey%7D/webinars?fromTime=2020-03-13T10%3A00%3A00Z&toTime=2020-03-13T22%3A00%3A00Z&page=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE' \
              --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
        - lang: Python + Python3
          source: |-
            import http.client

            conn = http.client.HTTPSConnection("api.getgo.com")

            headers = { 'Authorization': "Bearer REPLACE_BEARER_TOKEN" }

            conn.request("GET", "/G2W/rest/v2/accounts/%7BaccountKey%7D/webinars?fromTime=2020-03-13T10%3A00%3A00Z&toTime=2020-03-13T22%3A00%3A00Z&page=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE", headers=headers)

            res = conn.getresponse()
            data = res.read()

            print(data.decode("utf-8"))
        - lang: Php + Http2
          source: |-
            <?php

            $client = new http\Client;
            $request = new http\Client\Request;

            $request->setRequestUrl('https://api.getgo.com/G2W/rest/v2/accounts/%7BaccountKey%7D/webinars');
            $request->setRequestMethod('GET');
            $request->setQuery(new http\QueryString([
              'fromTime' => '2020-03-13T10:00:00Z',
              'toTime' => '2020-03-13T22:00:00Z',
              'page' => 'SOME_INTEGER_VALUE',
              'size' => 'SOME_INTEGER_VALUE'
            ]));

            $request->setHeaders([
              'Authorization' => 'Bearer REPLACE_BEARER_TOKEN'
            ]);

            $client->enqueue($request)->send();
            $response = $client->getResponse();

            echo $response->getBody();
        - lang: Ruby + Native
          source: |-
            require 'uri'
            require 'net/http'
            require 'openssl'

            url = URI("https://api.getgo.com/G2W/rest/v2/accounts/%7BaccountKey%7D/webinars?fromTime=2020-03-13T10%3A00%3A00Z&toTime=2020-03-13T22%3A00%3A00Z&page=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE")

            http = Net::HTTP.new(url.host, url.port)
            http.use_ssl = true
            http.verify_mode = OpenSSL::SSL::VERIFY_NONE

            request = Net::HTTP::Get.new(url)
            request["Authorization"] = 'Bearer REPLACE_BEARER_TOKEN'

            response = http.request(request)
            puts response.read_body
  /organizers/{organizerKey}/sessions:
    get:
      tags:
        - Sessions
      operationId: getOrganizerSessions
      summary: Get organizer sessions
      description: Retrieve all completed sessions of all the webinars of a given organizer.
      parameters:
        - $ref: '#/components/parameters/organizerKey'
        - $ref: '#/components/parameters/requiredFromTime'
        - $ref: '#/components/parameters/requiredToTime'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/size'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportingSessionsResponse'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      x-codeSamples:
        - lang: Node + Axios
          source: |-
            var axios = require("axios").default;

            var options = {
              method: 'GET',
              url: 'https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/sessions',
              params: {
                fromTime: '2020-03-13T10:00:00Z',
                toTime: '2020-03-13T22:00:00Z',
                page: 'SOME_INTEGER_VALUE',
                size: 'SOME_INTEGER_VALUE'
              },
              headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}
            };

            axios.request(options).then(function (response) {
              console.log(response.data);
            }).catch(function (error) {
              console.error(error);
            });
        - lang: Shell + Curl
          source: |-
            curl --request GET \
              --url 'https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/sessions?fromTime=2020-03-13T10%3A00%3A00Z&toTime=2020-03-13T22%3A00%3A00Z&page=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE' \
              --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
        - lang: Python + Python3
          source: |-
            import http.client

            conn = http.client.HTTPSConnection("api.getgo.com")

            headers = { 'Authorization': "Bearer REPLACE_BEARER_TOKEN" }

            conn.request("GET", "/G2W/rest/v2/organizers/%7BorganizerKey%7D/sessions?fromTime=2020-03-13T10%3A00%3A00Z&toTime=2020-03-13T22%3A00%3A00Z&page=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE", headers=headers)

            res = conn.getresponse()
            data = res.read()

            print(data.decode("utf-8"))
        - lang: Php + Http2
          source: |-
            <?php

            $client = new http\Client;
            $request = new http\Client\Request;

            $request->setRequestUrl('https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/sessions');
            $request->setRequestMethod('GET');
            $request->setQuery(new http\QueryString([
              'fromTime' => '2020-03-13T10:00:00Z',
              'toTime' => '2020-03-13T22:00:00Z',
              'page' => 'SOME_INTEGER_VALUE',
              'size' => 'SOME_INTEGER_VALUE'
            ]));

            $request->setHeaders([
              'Authorization' => 'Bearer REPLACE_BEARER_TOKEN'
            ]);

            $client->enqueue($request)->send();
            $response = $client->getResponse();

            echo $response->getBody();
        - lang: Ruby + Native
          source: |-
            require 'uri'
            require 'net/http'
            require 'openssl'

            url = URI("https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/sessions?fromTime=2020-03-13T10%3A00%3A00Z&toTime=2020-03-13T22%3A00%3A00Z&page=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE")

            http = Net::HTTP.new(url.host, url.port)
            http.use_ssl = true
            http.verify_mode = OpenSSL::SSL::VERIFY_NONE

            request = Net::HTTP::Get.new(url)
            request["Authorization"] = 'Bearer REPLACE_BEARER_TOKEN'

            response = http.request(request)
            puts response.read_body
  /organizers/{organizerKey}/webinars:
    get:
      tags:
        - Webinars
      operationId: getWebinars
      summary: Get Webinars
      description: Returns upcoming and past webinars for the currently authenticated organizer that are scheduled within the specified date/time range. `Page` and `size` parameters are optional. Default `page` is 0 and default `size` is 20. Maximum `size` is 200.
      parameters:
        - $ref: '#/components/parameters/organizerKey'
        - $ref: '#/components/parameters/requiredFromTime'
        - $ref: '#/components/parameters/requiredToTime'
        - $ref: '#/components/parameters/page'
        - name: size
          in: query
          required: false
          description: The size of the page.
          schema:
            type: integer
            format: int64
            maximum: 200
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportingWebinarsResponse'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      x-codeSamples:
        - lang: Node + Axios
          source: |-
            var axios = require("axios").default;

            var options = {
              method: 'GET',
              url: 'https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/webinars',
              params: {
                fromTime: '2020-03-13T10:00:00Z',
                toTime: '2020-03-13T22:00:00Z',
                page: 'SOME_INTEGER_VALUE',
                size: 'SOME_INTEGER_VALUE'
              },
              headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}
            };

            axios.request(options).then(function (response) {
              console.log(response.data);
            }).catch(function (error) {
              console.error(error);
            });
        - lang: Shell + Curl
          source: |-
            curl --request GET \
              --url 'https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/webinars?fromTime=2020-03-13T10%3A00%3A00Z&toTime=2020-03-13T22%3A00%3A00Z&page=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE' \
              --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
        - lang: Python + Python3
          source: |-
            import http.client

            conn = http.client.HTTPSConnection("api.getgo.com")

            headers = { 'Authorization': "Bearer REPLACE_BEARER_TOKEN" }

            conn.request("GET", "/G2W/rest/v2/organizers/%7BorganizerKey%7D/webinars?fromTime=2020-03-13T10%3A00%3A00Z&toTime=2020-03-13T22%3A00%3A00Z&page=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE", headers=headers)

            res = conn.getresponse()
            data = res.read()

            print(data.decode("utf-8"))
        - lang: Php + Http2
          source: |-
            <?php

            $client = new http\Client;
            $request = new http\Client\Request;

            $request->setRequestUrl('https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/webinars');
            $request->setRequestMethod('GET');
            $request->setQuery(new http\QueryString([
              'fromTime' => '2020-03-13T10:00:00Z',
              'toTime' => '2020-03-13T22:00:00Z',
              'page' => 'SOME_INTEGER_VALUE',
              'size' => 'SOME_INTEGER_VALUE'
            ]));

            $request->setHeaders([
              'Authorization' => 'Bearer REPLACE_BEARER_TOKEN'
            ]);

            $client->enqueue($request)->send();
            $response = $client->getResponse();

            echo $response->getBody();
        - lang: Ruby + Native
          source: |-
            require 'uri'
            require 'net/http'
            require 'openssl'

            url = URI("https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/webinars?fromTime=2020-03-13T10%3A00%3A00Z&toTime=2020-03-13T22%3A00%3A00Z&page=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE")

            http = Net::HTTP.new(url.host, url.port)
            http.use_ssl = true
            http.verify_mode = OpenSSL::SSL::VERIFY_NONE

            request = Net::HTTP::Get.new(url)
            request["Authorization"] = 'Bearer REPLACE_BEARER_TOKEN'

            response = http.request(request)
            puts response.read_body
    post:
      tags:
        - Webinars
      operationId: createWebinar
      summary: Create webinar
      description: |
        Creates a single session webinar, a sequence of webinars or a series of webinars depending on the type field in the body:
         * `"type": "single_session"` creates a single webinar session
         * `"type": "sequence"` creates a webinar with multiple meeting times where attendees are expected to be the same for
        all sessions
         * `"type": "series"` creates a webinar with multiple meetings times where attendees choose only one to attend

        The default, if no type is declared, is `"single_session"`.

         A sequence webinar requires a `"recurrenceStart"` object consisting of a `"startTime"` and `"endTime"` key
          for the first webinar of the sequence, a `"recurrencePattern"` of "daily",
          "weekly", "monthly", and a `"recurrenceEnd"` which is the last date of the sequence (for example, 2016-12-01).

         A series webinar requires a `"times"`
          array with a discrete `"startTime"` and `"endTime"` for each webinar in the
          series.

         The call requires a webinar subject and description. The "isPasswordProtected" sets whether the webinar requires a password for
          attendees to join. If set to True, the organizer must go to Registration Settings at My Webinars (https://global.gotowebinar.com/webinars.tmpl)
          and add the password to the webinar, and send the password to the registrants. The response provides a numeric webinarKey in string format
          for the new webinar. Once a webinar has been created with this method,you can accept registrations.
      parameters:
        - $ref: '#/components/parameters/organizerKey'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebinarReqCreate'
        description: The webinar details
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreatedWebinar'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      x-codeSamples:
        - lang: Node + Axios
          source: |-
            var axios = require("axios").default;

            var options = {
              method: 'POST',
              url: 'https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/webinars',
              headers: {
                Authorization: 'Bearer REPLACE_BEARER_TOKEN',
              },
              data: {
                subject: 'string',
                description: 'string',
                times: [{startTime: '2019-08-24T14:15:22Z', endTime: '2019-08-24T14:15:22Z'}],
                timeZone: 'string',
                type: 'single_session',
                locale: 'en_US',
                isPasswordProtected: false,
                recordingAssetKey: 'string',
                isOndemand: false,
                isBreakout: false,
                experienceType: 'CLASSIC',
                emailSettings: {
                  confirmationEmail: {enabled: true},
                  reminderEmail: {enabled: true},
                  absenteeFollowUpEmail: {enabled: true},
                  attendeeFollowUpEmail: {enabled: true, includeCertificate: true}
                }
              }
            };

            axios.request(options).then(function (response) {
              console.log(response.data);
            }).catch(function (error) {
              console.error(error);
            });
        - lang: Shell + Curl
          source: |-
            curl --request POST \
              --url https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/webinars \
              --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \
              --header 'content-type: application/json' \
              --data '{"subject":"string","description":"string","times":[{"startTime":"2019-08-24T14:15:22Z","endTime":"2019-08-24T14:15:22Z"}],"timeZone":"string","type":"single_session","locale":"en_US","isPasswordProtected":false,"recordingAssetKey":"string","isOndemand":false,"isBreakout":false,"experienceType":"CLASSIC","emailSettings":{"confirmationEmail":{"enabled":true},"reminderEmail":{"enabled":true},"absenteeFollowUpEmail":{"enabled":true},"attendeeFollowUpEmail":{"enabled":true,"includeCertificate":true}}}'
        - lang: Python + Python3
          source: |-
            import http.client

            conn = http.client.HTTPSConnection("api.getgo.com")

            payload = "{\"subject\":\"string\",\"description\":\"string\",\"times\":[{\"startTime\":\"2019-08-24T14:15:22Z\",\"endTime\":\"2019-08-24T14:15:22Z\"}],\"timeZone\":\"string\",\"type\":\"single_session\",\"locale\":\"en_US\",\"isPasswordProtected\":false,\"recordingAssetKey\":\"string\",\"isOndemand\":false,\"isBreakout\":false,\"experienceType\":\"CLASSIC\",\"emailSettings\":{\"confirmationEmail\":{\"enabled\":true},\"reminderEmail\":{\"enabled\":true},\"absenteeFollowUpEmail\":{\"enabled\":true},\"attendeeFollowUpEmail\":{\"enabled\":true,\"includeCertificate\":true}}}"

            headers = {
                'Authorization': "Bearer REPLACE_BEARER_TOKEN",
                'content-type': "application/json"
                }

            conn.request("POST", "/G2W/rest/v2/organizers/%7BorganizerKey%7D/webinars", payload, headers)

            res = conn.getresponse()
            data = res.read()

            print(data.decode("utf-8"))
        - lang: Php + Http2
          source: |-
            <?php

            $client = new http\Client;
            $request = new http\Client\Request;

            $body = new http\Message\Body;
            $body->append('{"subject":"string","description":"string","times":[{"startTime":"2019-08-24T14:15:22Z","endTime":"2019-08-24T14:15:22Z"}],"timeZone":"string","type":"single_session","locale":"en_US","isPasswordProtected":false,"recordingAssetKey":"string","isOndemand":false,"isBreakout":false,"experienceType":"CLASSIC","emailSettings":{"confirmationEmail":{"enabled":true},"reminderEmail":{"enabled":true},"absenteeFollowUpEmail":{"enabled":true},"attendeeFollowUpEmail":{"enabled":true,"includeCertificate":true}}}');

            $request->setRequestUrl('https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/webinars');
            $request->setRequestMethod('POST');
            $request->setBody($body);

            $request->setHeaders([
              'Authorization' => 'Bearer REPLACE_BEARER_TOKEN',
              'content-type' => 'application/json'
            ]);

            $client->enqueue($request)->send();
            $response = $client->getResponse();

            echo $response->getBody();
        - lang: Ruby + Native
          source: |-
            require 'uri'
            require 'net/http'
            require 'openssl'

            url = URI("https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/webinars")

            http = Net::HTTP.new(url.host, url.port)
            http.use_ssl = true
            http.verify_mode = OpenSSL::SSL::VERIFY_NONE

            request = Net::HTTP::Post.new(url)
            request["Authorization"] = 'Bearer REPLACE_BEARER_TOKEN'
            request["content-type"] = 'application/json'
            request.body = "{\"subject\":\"string\",\"description\":\"string\",\"times\":[{\"startTime\":\"2019-08-24T14:15:22Z\",\"endTime\":\"2019-08-24T14:15:22Z\"}],\"timeZone\":\"string\",\"type\":\"single_session\",\"locale\":\"en_US\",\"isPasswordProtected\":false,\"recordingAssetKey\":\"string\",\"isOndemand\":false,\"isBreakout\":false,\"experienceType\":\"CLASSIC\",\"emailSettings\":{\"confirmationEmail\":{\"enabled\":true},\"reminderEmail\":{\"enabled\":true},\"absenteeFollowUpEmail\":{\"enabled\":true},\"attendeeFollowUpEmail\":{\"enabled\":true,\"includeCertificate\":true}}}"

            response = http.request(request)
            puts response.read_body
  /organizers/{organizerKey}/insessionWebinars:
    get:
      tags:
        - Webinars
      operationId: getInSessionWebinars
      summary: Get All Insession Webinars
      description: |
        Returns all insession webinars for the currently authenticated organizer that are scheduled within the specified date/time range. All inession webinars are returned in case no date/time range is provided.
      parameters:
        - $ref: '#/components/parameters/organizerKey'
        - $ref: '#/components/parameters/optionalFromTime'
        - $ref: '#/components/parameters/optionalToTime'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BrokerWebinar'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      x-codeSamples:
        - lang: Node + Axios
          source: |-
            var axios = require("axios").default;

            var options = {
              method: 'GET',
              url: 'https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/insessionWebinars',
              params: {fromTime: '2020-03-13T10:00:00Z', toTime: '2020-03-13T22:00:00Z'},
              headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}
            };

            axios.request(options).then(function (response) {
              console.log(response.data);
            }).catch(function (error) {
              console.error(error);
            });
        - lang: Shell + Curl
          source: |-
            curl --request GET \
              --url 'https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/insessionWebinars?fromTime=2020-03-13T10%3A00%3A00Z&toTime=2020-03-13T22%3A00%3A00Z' \
              --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
        - lang: Python + Python3
          source: |-
            import http.client

            conn = http.client.HTTPSConnection("api.getgo.com")

            headers = { 'Authorization': "Bearer REPLACE_BEARER_TOKEN" }

            conn.request("GET", "/G2W/rest/v2/organizers/%7BorganizerKey%7D/insessionWebinars?fromTime=2020-03-13T10%3A00%3A00Z&toTime=2020-03-13T22%3A00%3A00Z", headers=headers)

            res = conn.getresponse()
            data = res.read()

            print(data.decode("utf-8"))
        - lang: Php + Http2
          source: |-
            <?php

            $client = new http\Client;
            $request = new http\Client\Request;

            $request->setRequestUrl('https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/insessionWebinars');
            $request->setRequestMethod('GET');
            $request->setQuery(new http\QueryString([
              'fromTime' => '2020-03-13T10:00:00Z',
              'toTime' => '2020-03-13T22:00:00Z'
            ]));

            $request->setHeaders([
              'Authorization' => 'Bearer REPLACE_BEARER_TOKEN'
            ]);

            $client->enqueue($request)->send();
            $response = $client->getResponse();

            echo $response->getBody();
        - lang: Ruby + Native
          source: |-
            require 'uri'
            require 'net/http'
            require 'openssl'

            url = URI("https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/insessionWebinars?fromTime=2020-03-13T10%3A00%3A00Z&toTime=2020-03-13T22%3A00%3A00Z")

            http = Net::HTTP.new(url.host, url.port)
            http.use_ssl = true
            http.verify_mode = OpenSSL::SSL::VERIFY_NONE

            request = Net::HTTP::Get.new(url)
            request["Authorization"] = 'Bearer REPLACE_BEARER_TOKEN'

            response = http.request(request)
            puts response.read_body
  /organizers/{organizerKey}/webinars/{webinarKey}:
    get:
      tags:
        - Webinars
      operationId: getWebinar
      summary: Get webinar
      description: |
        Retrieve information on a specific webinar. If the type of the webinar is 'sequence', a sequence of future times will be provided. Webinars of type 'series' are treated the same as normal webinars - each session in the webinar series has a different webinarKey. If an organizer cancels a webinar, then a request to get that webinar would return a '404 Not Found' error.
      parameters:
        - $ref: '#/components/parameters/organizerKey'
        - $ref: '#/components/parameters/webinarKey'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebinarByKey'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
        '404':
          description: Not Found
      x-codeSamples:
        - lang: Node + Axios
          source: |-
            var axios = require("axios").default;

            var options = {
              method: 'GET',
              url: 'https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/webinars/%7BwebinarKey%7D',
              headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}
            };

            axios.request(options).then(function (response) {
              console.log(response.data);
            }).catch(function (error) {
              console.error(error);
            });
        - lang: Shell + Curl
          source: |-
            curl --request GET \
              --url https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/webinars/%7BwebinarKey%7D \
              --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
        - lang: Python + Python3
          source: |-
            import http.client

            conn = http.client.HTTPSConnection("api.getgo.com")

            headers = { 'Authorization': "Bearer REPLACE_BEARER_TOKEN" }

            conn.request("GET", "/G2W/rest/v2/organizers/%7BorganizerKey%7D/webinars/%7BwebinarKey%7D", headers=headers)

            res = conn.getresponse()
            data = res.read()

            print(data.decode("utf-8"))
        - lang: Php + Http2
          source: |-
            <?php

            $client = new http\Client;
            $request = new http\Client\Request;

            $request->setRequestUrl('https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/webinars/%7BwebinarKey%7D');
            $request->setRequestMethod('GET');
            $request->setHeaders([
              'Authorization' => 'Bearer REPLACE_BEARER_TOKEN'
            ]);

            $client->enqueue($request)->send();
            $response = $client->getResponse();

            echo $response->getBody();
        - lang: Ruby + Native
          source: |-
            require 'uri'
            require 'net/http'
            require 'openssl'

            url = URI("https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/webinars/%7BwebinarKey%7D")

            http = Net::HTTP.new(url.host, url.port)
            http.use_ssl = true
            http.verify_mode = OpenSSL::SSL::VERIFY_NONE

            request = Net::HTTP::Get.new(url)
            request["Authorization"] = 'Bearer REPLACE_BEARER_TOKEN'

            response = http.request(request)
            puts response.read_body
    put:
      tags:
        - Webinars
      operationId: updateWebinar
      summary: Update webinar
      description: |
        Updates a webinar. The call requires at least one of the parameters in the request body. The request completely replaces the existing session, series, or sequence and so must include the full definition of each as for the Create call. Set notifyParticipants=true to send update emails to registrants.
      parameters:
        - $ref: '#/components/parameters/organizerKey'
        - $ref: '#/components/parameters/webinarKey'
        - name: notifyParticipants
          in: query
          description: Defines whether to send notifications to participants
          required: false
          schema:
            type: boolean
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebinarReqUpdate'
        description: The webinar details
        required: true
      responses:
        '202':
          description: Accepted
        '400':
          description: Bad Request (times not valid, webinar in progress, webinar ended, etc.)
        '403':
          description: Forbidden
      x-codeSamples:
        - lang: Node + Axios
          source: |-
            var axios = require("axios").default;

            var options = {
              method: 'PUT',
              url: 'https://api.getgo.com/G2W/rest/v2/organizers/%7BorganizerKey%7D/webinars/%7BwebinarKey%7D',
              params: {notifyParticipants: 'SOME_BOOLEAN_VALUE'},
              headers: {
                Authorization: 'Bearer REPLACE_BEARER_TOKEN',
              },
              data: {
                subject: 'string',
                description: 'string',
                times: [{startTime: '2019-08-24T14:15:22Z', endTime: '2019-08-24T14:15:22Z'}],
                timeZone: 'string',
                locale: 'en_US',
                emailSettings: {
                  confirmationEmail: {enabled: true},
                  reminderEmail: {enabled: true},
                  absenteeFollowUpEmail: {enabled: true},
                  attendeeFollowUpEmail: {enabled: true, includeCertificate: true}
                }
              }
            };

            axios.request(options).then(function (response) {
              console.log(response.data);
            }).catch(function (error) {
              console.error(error);
            });
        - lan

# --- truncated at 32 KB (288 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/goto-webinar/refs/heads/main/openapi/_original/goto-webinar-openapi.yml