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