GoTo Webinar Recording Assets API

Recording asset search for GoTo Webinar — 2 operations to search stored recordings for the authenticated organizer or, with an admin token, across an entire account. Assets can be reused as the source of a Simulive webinar.

OpenAPI Specification

goto-webinar-recordingassets-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: GoTo Webinar 2.0 REST Recording Assets 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
servers:
- url: https://api.getgo.com/G2W/rest/v2
security:
- OAuth2: []
tags:
- name: RecordingAssets
  description: Operations available for assets of a given organizer.
paths:
  /recordingassets/search:
    post:
      tags:
      - RecordingAssets
      operationId: searchAssets
      summary: Search for completed recording assets
      description: "Allows search for a completed recording asset.\n\n### Example Interaction with curl\n\nThe default request is represented below, that excludes the `includes` query parameter.\nYou will get the `mp4DownloadUrl` and `transcriptUrl` by default in the response if they exist. \nThe `recordingShareUrl` and `webinarKey` fields will not be included.\n\n```\ncurl --request PUT 'https://api.getgo.com/G2W/rest/v2/recordingassets/search?page={page}&size={size}' \\\n--header 'Authorization: Bearer {ACCESS_TOKEN}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n     \"accountKey\": \"123456\",\n     \"sortField\": \"CREATETIME\",\n     \"sortOrder\": \"DESC\"\n}'\n\n```\nBy adding the `includes` query parameter has shown below, you'll get\nthe `recordingShareUrl` and `webinarKey` fields in the response.\n\n```\ncurl --request PUT 'https://api.getgo.com/G2W/rest/v2/recordingassets/search?page={page}&size={size}&includes=recordingShareUrl%2CwebinarKey' \\\n--header 'Authorization: Bearer {ACCESS_TOKEN}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n      \"accountKey\": \"123456\",\n      \"sortField\": \"CREATETIME\",\n      \"sortOrder\": \"DESC\"\n    }'\n ```\n"
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/size'
      - $ref: '#/components/parameters/includes'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetsSearchReq'
        description: The asset search parameters
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetsResponse'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
        '404':
          description: Not Found
      x-codeSamples:
      - lang: Node + Axios
        source: "var axios = require(\"axios\").default;\n\nvar options = {\n  method: 'POST',\n  url: 'https://api.getgo.com/G2W/rest/v2/recordingassets/search',\n  params: {\n    page: 'SOME_INTEGER_VALUE',\n    size: 'SOME_INTEGER_VALUE',\n    includes: 'SOME_ARRAY_VALUE'\n  },\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n  },\n  data: {\n    accountKey: 'string',\n    name: 'string',\n    sortField: 'CREATETIME',\n    sortOrder: 'DESC'\n  }\n};\n\naxios.request(options).then(function (response) {\n  console.log(response.data);\n}).catch(function (error) {\n  console.error(error);\n});"
      - lang: Shell + Curl
        source: "curl --request POST \\\n  --url 'https://api.getgo.com/G2W/rest/v2/recordingassets/search?page=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE&includes=SOME_ARRAY_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"accountKey\":\"string\",\"name\":\"string\",\"sortField\":\"CREATETIME\",\"sortOrder\":\"DESC\"}'"
      - lang: Python + Python3
        source: "import http.client\n\nconn = http.client.HTTPSConnection(\"api.getgo.com\")\n\npayload = \"{\\\"accountKey\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"sortField\\\":\\\"CREATETIME\\\",\\\"sortOrder\\\":\\\"DESC\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n    }\n\nconn.request(\"POST\", \"/G2W/rest/v2/recordingassets/search?page=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE&includes=SOME_ARRAY_VALUE\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"
      - lang: Php + Http2
        source: "<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$body = new http\\Message\\Body;\n$body->append('{\"accountKey\":\"string\",\"name\":\"string\",\"sortField\":\"CREATETIME\",\"sortOrder\":\"DESC\"}');\n\n$request->setRequestUrl('https://api.getgo.com/G2W/rest/v2/recordingassets/search');\n$request->setRequestMethod('POST');\n$request->setBody($body);\n\n$request->setQuery(new http\\QueryString([\n  'page' => 'SOME_INTEGER_VALUE',\n  'size' => 'SOME_INTEGER_VALUE',\n  'includes' => 'SOME_ARRAY_VALUE'\n]));\n\n$request->setHeaders([\n  'Authorization' => 'Bearer REPLACE_BEARER_TOKEN',\n  'content-type' => 'application/json'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $response->getBody();"
      - lang: Ruby + Native
        source: 'require ''uri''

          require ''net/http''

          require ''openssl''


          url = URI("https://api.getgo.com/G2W/rest/v2/recordingassets/search?page=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE&includes=SOME_ARRAY_VALUE")


          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 = "{\"accountKey\":\"string\",\"name\":\"string\",\"sortField\":\"CREATETIME\",\"sortOrder\":\"DESC\"}"


          response = http.request(request)

          puts response.read_body'
  /accounts/{accountKey}/recordingassets/search:
    post:
      tags:
      - RecordingAssets
      operationId: searchAssetsForAdmin
      summary: Search for completed recording assets of an admin user
      description: "Allows search for a completed recording asset for an admin user. The authorization token must represent an admin.\n\n### Example Interaction with curl\n\nThe default request is represented below, that excludes the `includes` query parameter.\nYou will get the `mp4DownloadUrl` and `transcriptUrl` by default in the response if they exist.\nThe `recordingShareUrl` and `webinarKey` fields will not be included.\n\n```\ncurl --request POST 'https://api.getgo.com/G2W/rest/v2/accounts/{accountKey}/recordingassets/search?page={page}&size={size}' \\\n--header 'Authorization: Bearer {ACCESS_TOKEN}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n      \"name\": \"Test\"\n      \"organizerKey\": \"123456\",\n      \"sortField\": \"CREATETIME\",\n      \"sortOrder\": \"DESC\",\n      \"fromTime\":\"2021-01-01T00:00:00Z\",\n      \"toTime\":\"2022-02-02T06:36:02.352Z\"\n    }'\n\n```\nBy adding the `includes` query parameter has shown below, you'll get\nthe `recordingShareUrl` and `webinarKey` fields in the response.\n\n```\ncurl --request POST 'https://api.getgo.com/G2W/rest/v2/accounts/{accountKey}/recordingassets/search?page={page}&size={size}&includes=recordingShareUrl%2CwebinarKey' \\\n--header 'Authorization: Bearer {ACCESS_TOKEN}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n      \"name\": \"Test\"\n      \"organizerKey\": \"123456\",\n      \"sortField\": \"CREATETIME\",\n      \"sortOrder\": \"DESC\",\n      \"fromTime\":\"2021-01-01T00:00:00Z\",\n      \"toTime\":\"2022-02-02T06:36:02.352Z\"\n    }'\n ```\n"
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/size'
      - $ref: '#/components/parameters/includes'
      - $ref: '#/components/parameters/accountKey'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetsSearchRequestForAdmin'
        description: The asset search parameters
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetsResponse'
        '400':
          description: Bad Request
        '403':
          description: Forbidden or oauth scope is invalid
        '404':
          description: Not Found
      x-codeSamples:
      - lang: Node + Axios
        source: "var axios = require(\"axios\").default;\n\nvar options = {\n  method: 'POST',\n  url: 'https://api.getgo.com/G2W/rest/v2/accounts/%7BaccountKey%7D/recordingassets/search',\n  params: {\n    page: 'SOME_INTEGER_VALUE',\n    size: 'SOME_INTEGER_VALUE',\n    includes: 'SOME_ARRAY_VALUE'\n  },\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n  },\n  data: {\n    organizerKey: 'string',\n    name: 'string',\n    sortField: 'CREATETIME',\n    sortOrder: 'DESC',\n    fromTime: 'string',\n    toTime: 'string'\n  }\n};\n\naxios.request(options).then(function (response) {\n  console.log(response.data);\n}).catch(function (error) {\n  console.error(error);\n});"
      - lang: Shell + Curl
        source: "curl --request POST \\\n  --url 'https://api.getgo.com/G2W/rest/v2/accounts/%7BaccountKey%7D/recordingassets/search?page=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE&includes=SOME_ARRAY_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"organizerKey\":\"string\",\"name\":\"string\",\"sortField\":\"CREATETIME\",\"sortOrder\":\"DESC\",\"fromTime\":\"string\",\"toTime\":\"string\"}'"
      - lang: Python + Python3
        source: "import http.client\n\nconn = http.client.HTTPSConnection(\"api.getgo.com\")\n\npayload = \"{\\\"organizerKey\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"sortField\\\":\\\"CREATETIME\\\",\\\"sortOrder\\\":\\\"DESC\\\",\\\"fromTime\\\":\\\"string\\\",\\\"toTime\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n    }\n\nconn.request(\"POST\", \"/G2W/rest/v2/accounts/%7BaccountKey%7D/recordingassets/search?page=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE&includes=SOME_ARRAY_VALUE\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"
      - lang: Php + Http2
        source: "<?php\n\n$client = new http\\Client;\n$request = new http\\Client\\Request;\n\n$body = new http\\Message\\Body;\n$body->append('{\"organizerKey\":\"string\",\"name\":\"string\",\"sortField\":\"CREATETIME\",\"sortOrder\":\"DESC\",\"fromTime\":\"string\",\"toTime\":\"string\"}');\n\n$request->setRequestUrl('https://api.getgo.com/G2W/rest/v2/accounts/%7BaccountKey%7D/recordingassets/search');\n$request->setRequestMethod('POST');\n$request->setBody($body);\n\n$request->setQuery(new http\\QueryString([\n  'page' => 'SOME_INTEGER_VALUE',\n  'size' => 'SOME_INTEGER_VALUE',\n  'includes' => 'SOME_ARRAY_VALUE'\n]));\n\n$request->setHeaders([\n  'Authorization' => 'Bearer REPLACE_BEARER_TOKEN',\n  'content-type' => 'application/json'\n]);\n\n$client->enqueue($request)->send();\n$response = $client->getResponse();\n\necho $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/recordingassets/search?page=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE&includes=SOME_ARRAY_VALUE")


          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 = "{\"organizerKey\":\"string\",\"name\":\"string\",\"sortField\":\"CREATETIME\",\"sortOrder\":\"DESC\",\"fromTime\":\"string\",\"toTime\":\"string\"}"


          response = http.request(request)

          puts response.read_body'
components:
  schemas:
    Assets:
      description: ''
      required:
      - recordingAssets
      properties:
        recordingAssets:
          type: array
          items:
            $ref: '#/components/schemas/Asset'
    Asset:
      description: Describes a completed recordingasset.
      required:
      - name
      - recordingAssetKey
      - productName
      - createTime
      - creatorKey
      - accountKey
      - totalReferenceCount
      - mp4DownloadUrl
      properties:
        name:
          type: string
          description: The name of the asset
        recordingAssetKey:
          type: string
          description: The unique identifier for the recording asset
        productName:
          type: string
          description: The product with which the asset was originally created
        createTime:
          type: string
          format: date-time
          description: The create time of the asset
        creatorKey:
          type: string
          description: The key of the creator
        accountKey:
          type: string
          description: The key of the account
        totalReferenceCount:
          type: integer
          format: int32
          description: The total number of references of the asset across products
        mp4DownloadUrl:
          type: string
          description: The url to download recording assets video
        transcriptDownloadUrl:
          type: string
          description: The url to download the transcript for the given recording video, available only if the transcript was generated
        recordingShareUrl:
          type: string
          description: The share link for recording
        webinarKey:
          type: string
          description: The webinarKey of parent webinar for which this online recordings was created, not available for uploaded recordings
    AssetsResponse:
      description: Describes a list of completed assets
      required:
      - _embedded
      - page
      properties:
        _embedded:
          $ref: '#/components/schemas/Assets'
        page:
          $ref: '#/components/schemas/page'
    AssetsSearchRequestForAdmin:
      description: Describes the details used to search a completed recordingasset.
      required:
      - organizerKey
      properties:
        organizerKey:
          type: string
          description: The key of the organizer
        name:
          type: string
          description: The name of the recordingasset
        sortField:
          type: string
          description: Sorts on the specified field. The default value is 'CREATETIME'. The possible values are 'CREATETIME' and 'NAME'.
          default: CREATETIME
        sortOrder:
          description: Specifies the sort order type. The default value is 'DESC'. The possible values are 'DESC', 'ASC'.
          type: string
          default: DESC
        fromTime:
          description: Specifies the time from which the recordings should be included. Date should be in ISO format.
          type: string
        toTime:
          description: Specifies the time till which the recordings should be included. Date should be in ISO format.
          type: string
    page:
      required:
      - size
      - totalElements
      - totalPages
      - number
      properties:
        size:
          type: integer
          format: int32
          description: The page size
        totalElements:
          type: integer
          format: int32
          description: The total elements
        totalPages:
          type: integer
          format: int32
          description: The pages count
        number:
          type: integer
          format: int32
          description: The current page number. The first page is 0
    AssetsSearchReq:
      description: Describes the details used to search a completed recordingasset.
      required:
      - accountKey
      properties:
        accountKey:
          type: string
          description: The key of the account
        name:
          type: string
          description: The name of the recordingasset
        sortField:
          type: string
          description: Sorts on the specified field. The default value is 'CREATETIME'. The possible values are 'CREATETIME' and 'NAME'.
          default: CREATETIME
        sortOrder:
          description: Specifies the sort order type. The default value is 'DESC'. The possible values are 'DESC', 'ASC'.
          type: string
          default: DESC
  parameters:
    accountKey:
      name: accountKey
      in: path
      description: The key of the account
      required: true
      schema:
        type: integer
        format: int64
    page:
      name: page
      in: query
      required: false
      description: The page number to be displayed. The first page is 0.
      schema:
        type: integer
        format: int64
    size:
      name: size
      in: query
      required: false
      description: The size of the page.
      schema:
        type: integer
        format: int64
        maximum: 200
    includes:
      name: includes
      in: query
      required: false
      description: Add the response variables.
      schema:
        type: array
        collectionFormat: csv
        items:
          type: string
          enum:
          - recordingShareUrl
          - webinarKey
  securitySchemes:
    OAuth2:
      type: oauth2
      description: 'To use this API, you _must_ provide an OAuth Token that has been requested from LogMeIn OAuth Authorization Server. See https://goto-developer.logmeininc.com/how-get-access-token-and-organizer-key for documentation about how to use LogMeIn’s OAuth.

        '
      in: header
      name: Authorization
      scheme: Bearer
      flows:
        password:
          tokenUrl: https://authentication.logmeininc.com/oauth/token
          refreshUrl: https://authentication.logmeininc.com/oauth/token
        authorizationCode:
          authorizationUrl: https://authentication.logmeininc.com/oauth/authorize
          tokenUrl: https://authentication.logmeininc.com/oauth/token
          refreshUrl: https://authentication.logmeininc.com/oauth/token