GoToWebinar Webhooks API

The GoToWebinar Webhooks API lets developers create and manage webhook subscriptions and receive real-time HTTP callbacks for registrant.added, registrant.joined, webinar.created, and webinar.changed events, secured via the X-Webhook-Signature header.

GoToWebinar Webhooks API is one of 2 APIs that GoToWebinar publishes on the APIs.io network, described by a machine-readable OpenAPI specification and an AsyncAPI event-driven specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include Callbacks, Events, Real-Time, Subscriptions, and Webhooks. The published artifact set on APIs.io includes an OpenAPI specification, an AsyncAPI specification, API documentation, an API reference, and 1 Naftiko capability spec.

OpenAPI Specification

gotowebinar-webhooks-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: GoToWebinar Webhooks Management API
  version: '2.0'
  description: |
    Webhook lifecycle and subscription management for GoToWebinar.
    Webhooks deliver registrant.added, registrant.joined, webinar.created, and
    webinar.changed events to a developer-supplied callback URL, signed via the
    X-Webhook-Signature header.

    Both `webhookState` and `userSubscriptionState` must be ACTIVE to enable
    webhook events to be captured and sent.
  contact:
    name: GoTo Developer Support
    email: [email protected]
    url: https://developer.goto.com/support
servers:
  - url: https://api.getgo.com/G2W/rest/v2
    description: GoToWebinar V2 production base URL
security:
  - oauth2: []
tags:
  - name: Webhooks
    description: Manage webhook definitions and secret keys.
  - name: User Subscriptions
    description: Manage per-user subscriptions to a webhook.
paths:
  /webhooks:
    post:
      tags: [Webhooks]
      summary: Create A Webhook
      operationId: createWebhook
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/WebhookCreate' }
      responses:
        '201':
          description: Webhook created in INACTIVE state.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Webhook' }
    put:
      tags: [Webhooks]
      summary: Activate Or Update Webhooks
      operationId: updateWebhooks
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items: { $ref: '#/components/schemas/WebhookUpdate' }
      responses:
        '204': { description: Webhooks updated. }
  /webhooks/{webhookKey}:
    get:
      tags: [Webhooks]
      summary: Get Webhook Status
      operationId: getWebhook
      parameters:
        - $ref: '#/components/parameters/WebhookKey'
      responses:
        '200':
          description: Webhook record.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Webhook' }
  /webhooks/secretkey:
    post:
      tags: [Webhooks]
      summary: Create A Webhook Secret Key
      operationId: createWebhookSecretKey
      responses:
        '201':
          description: Secret key created.
          content:
            application/json:
              schema:
                type: object
                properties:
                  secretKey: { type: string }
  /userSubscriptions:
    get:
      tags: [User Subscriptions]
      summary: List User Subscriptions
      operationId: listUserSubscriptions
      responses:
        '200':
          description: User subscriptions.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/UserSubscription' }
    post:
      tags: [User Subscriptions]
      summary: Create A User Subscription
      operationId: createUserSubscription
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/UserSubscriptionCreate' }
      responses:
        '201':
          description: User subscription created.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/UserSubscription' }
  /userSubscriptions/{subscriptionKey}:
    get:
      tags: [User Subscriptions]
      summary: Get A User Subscription
      operationId: getUserSubscription
      parameters:
        - $ref: '#/components/parameters/SubscriptionKey'
      responses:
        '200':
          description: User subscription.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/UserSubscription' }
    put:
      tags: [User Subscriptions]
      summary: Update A User Subscription
      operationId: updateUserSubscription
      parameters:
        - $ref: '#/components/parameters/SubscriptionKey'
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/UserSubscriptionUpdate' }
      responses:
        '204': { description: Updated. }
    delete:
      tags: [User Subscriptions]
      summary: Delete A User Subscription
      operationId: deleteUserSubscription
      parameters:
        - $ref: '#/components/parameters/SubscriptionKey'
      responses:
        '204': { description: Deleted. }
components:
  parameters:
    WebhookKey:
      name: webhookKey
      in: path
      required: true
      schema: { type: string }
    SubscriptionKey:
      name: subscriptionKey
      in: path
      required: true
      schema: { type: string }
  securitySchemes:
    oauth2:
      type: oauth2
      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: GoToWebinar webhooks scope.
  schemas:
    Webhook:
      type: object
      properties:
        webhookKey: { type: string }
        product:
          type: string
          enum: [g2w]
        eventName:
          type: string
          enum: [registrant.added, registrant.joined, webinar.created, webinar.changed]
        eventVersion: { type: string, example: '1.0.0' }
        callbackUrl: { type: string, format: uri }
        webhookState:
          type: string
          enum: [ACTIVE, INACTIVE]
        createTime: { type: string, format: date-time }
        secretKey: { type: string }
    WebhookCreate:
      type: object
      required: [product, eventName, eventVersion, callbackUrl]
      properties:
        product: { type: string, enum: [g2w] }
        eventName:
          type: string
          enum: [registrant.added, registrant.joined, webinar.created, webinar.changed]
        eventVersion: { type: string }
        callbackUrl: { type: string, format: uri }
        secretKey: { type: string }
    WebhookUpdate:
      type: object
      required: [webhookKey, webhookState]
      properties:
        webhookKey: { type: string }
        webhookState: { type: string, enum: [ACTIVE, INACTIVE] }
    UserSubscription:
      type: object
      properties:
        subscriptionKey: { type: string }
        userKey: { type: string }
        webhookKey: { type: string }
        callbackUrl: { type: string, format: uri }
        userSubscriptionState:
          type: string
          enum: [ACTIVE, INACTIVE]
    UserSubscriptionCreate:
      type: object
      required: [webhookKey, callbackUrl]
      properties:
        webhookKey: { type: string }
        callbackUrl: { type: string, format: uri }
        userSubscriptionState:
          type: string
          enum: [ACTIVE, INACTIVE]
          default: ACTIVE
    UserSubscriptionUpdate:
      type: object
      properties:
        callbackUrl: { type: string, format: uri }
        userSubscriptionState:
          type: string
          enum: [ACTIVE, INACTIVE]