# nodes

node_type: n8n-nodes-base.Zoom
name: Zoom
display_name: Zoom
description: Consume Zoom API
category: input
icon: file:zoom.svg
code_hash: 3e25ea570d229e7c9f4e48f3ac95cff39b47a344bf1b3113609fd838b9d42038
documentation_url: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.Zoom
documentation_title: Zoom node documentation
operations: []
api_methods: []
documentation_examples: []
templates: [{"name":"zoom","description":"Templates for zoom"}]
related_resources: []
required_scopes: []
parameter_schemas: []
troubleshooting_info: []
example_parameters: {"authentication":"accessToken","resource":"meeting","dynamic_property":null}
package_name: n8n-nodes-base
version: 1.0
extracted_at: 2025-06-12 08:59:27
updated_at: 2025-06-12 08:59:27
source_code:
  "use strict";
  var __importDefault = (this && this.__importDefault) || function (mod) {
      return (mod && mod.__esModule) ? mod : { "default": mod };
  };
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.Zoom = void 0;
  const GenericFunctions_1 = require("./GenericFunctions");
  const MeetingDescription_1 = require("./MeetingDescription");
  const moment_timezone_1 = __importDefault(require("moment-timezone"));
  class Zoom {
      constructor() {
          this.description = {
              displayName: 'Zoom',
              name: 'zoom',
              group: ['input'],
              version: 1,
              description: 'Consume Zoom API',
              subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
              defaults: {
                  name: 'Zoom',
              },
              icon: 'file:zoom.svg',
              inputs: ['main'],
              outputs: ['main'],
              credentials: [
                  {
                      name: 'zoomApi',
                      required: true,
                      displayOptions: {
                          show: {
                              authentication: ['accessToken'],
                          },
                      },
                  },
                  {
                      name: 'zoomOAuth2Api',
                      required: true,
                      displayOptions: {
                          show: {
                              authentication: ['oAuth2'],
                          },
                      },
                  },
              ],
              properties: [
                  {
                      displayName: 'Authentication',
                      name: 'authentication',
                      type: 'options',
                      options: [
                          {
                              name: 'Access Token',
                              value: 'accessToken',
                          },
                          {
                              name: 'OAuth2',
                              value: 'oAuth2',
                          },
                      ],
                      default: 'accessToken',
                  },
                  {
                      displayName: 'Resource',
                      name: 'resource',
                      type: 'options',
                      noDataExpression: true,
                      options: [
                          {
                              name: 'Meeting',
                              value: 'meeting',
                          },
                      ],
                      default: 'meeting',
                  },
                  ...MeetingDescription_1.meetingOperations,
                  ...MeetingDescription_1.meetingFields,
              ],
          };
          this.methods = {
              loadOptions: {
                  async getTimezones() {
                      const returnData = [];
                      for (const timezone of moment_timezone_1.default.tz.names()) {
                          const timezoneName = timezone;
                          const timezoneId = timezone;
                          returnData.push({
                              name: timezoneName,
                              value: timezoneId,
                          });
                      }
                      return returnData;
                  },
              },
          };
      }
      async execute() {
          const items = this.getInputData();
          const returnData = [];
          let qs = {};
          let responseData;
          const resource = this.getNodeParameter('resource', 0);
          const operation = this.getNodeParameter('operation', 0);
          for (let i = 0; i < items.length; i++) {
              try {
                  qs = {};
                  if (resource === 'meeting') {
                      if (operation === 'get') {
                          const meetingId = this.getNodeParameter('meetingId', i);
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          if (additionalFields.showPreviousOccurrences) {
                              qs.show_previous_occurrences = additionalFields.showPreviousOccurrences;
                          }
                          if (additionalFields.occurrenceId) {
                              qs.occurrence_id = additionalFields.occurrenceId;
                          }
                          responseData = await GenericFunctions_1.zoomApiRequest.call(this, 'GET', `/meetings/${meetingId}`, {}, qs);
                      }
                      if (operation === 'getAll') {
                          const returnAll = this.getNodeParameter('returnAll', i);
                          const filters = this.getNodeParameter('filters', i);
                          if (filters.type) {
                              qs.type = filters.type;
                          }
                          if (returnAll) {
                              responseData = await GenericFunctions_1.zoomApiRequestAllItems.call(this, 'meetings', 'GET', '/users/me/meetings', {}, qs);
                          }
                          else {
                              qs.page_size = this.getNodeParameter('limit', i);
                              responseData = await GenericFunctions_1.zoomApiRequest.call(this, 'GET', '/users/me/meetings', {}, qs);
                              responseData = responseData.meetings;
                          }
                      }
                      if (operation === 'delete') {
                          const meetingId = this.getNodeParameter('meetingId', i);
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          if (additionalFields.scheduleForReminder) {
                              qs.schedule_for_reminder = additionalFields.scheduleForReminder;
                          }
                          if (additionalFields.occurrenceId) {
                              qs.occurrence_id = additionalFields.occurrenceId;
                          }
                          responseData = await GenericFunctions_1.zoomApiRequest.call(this, 'DELETE', `/meetings/${meetingId}`, {}, qs);
                          responseData = { success: true };
                      }
                      if (operation === 'create') {
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          const body = {};
                          if (additionalFields.settings) {
                              const settingValues = {};
                              const settings = additionalFields.settings;
                              if (settings.cnMeeting) {
                                  settingValues.cn_meeting = settings.cnMeeting;
                              }
                              if (settings.inMeeting) {
                                  settingValues.in_meeting = settings.inMeeting;
                              }
                              if (settings.joinBeforeHost) {
                                  settingValues.join_before_host = settings.joinBeforeHost;
                              }
                              if (settings.muteUponEntry) {
                                  settingValues.mute_upon_entry = settings.muteUponEntry;
                              }
                              if (settings.watermark) {
                                  settingValues.watermark = settings.watermark;
                              }
                              if (settings.audio) {
                                  settingValues.audio = settings.audio;
                              }
                              if (settings.alternativeHosts) {
                                  settingValues.alternative_hosts = settings.alternativeHosts;
                              }
                              if (settings.participantVideo) {
                                  settingValues.participant_video = settings.participantVideo;
                              }
                              if (settings.hostVideo) {
                                  settingValues.host_video = settings.hostVideo;
                              }
                              if (settings.autoRecording) {
                                  settingValues.auto_recording = settings.autoRecording;
                              }
                              if (settings.registrationType) {
                                  settingValues.registration_type = settings.registrationType;
                              }
                              body.settings = settingValues;
                          }
                          body.topic = this.getNodeParameter('topic', i);
                          if (additionalFields.type) {
                              body.type = additionalFields.type;
                          }
                          if (additionalFields.startTime) {
                              if (additionalFields.timeZone) {
                                  body.start_time = (0, moment_timezone_1.default)(additionalFields.startTime).format('YYYY-MM-DDTHH:mm:ss');
                              }
                              else {
                                  body.start_time = moment_timezone_1.default
                                      .tz(additionalFields.startTime, this.getTimezone())
                                      .format();
                              }
                          }
                          if (additionalFields.duration) {
                              body.duration = additionalFields.duration;
                          }
                          if (additionalFields.scheduleFor) {
                              body.schedule_for = additionalFields.scheduleFor;
                          }
                          if (additionalFields.timeZone) {
                              body.timezone = additionalFields.timeZone;
                          }
                          if (additionalFields.password) {
                              body.password = additionalFields.password;
                          }
                          if (additionalFields.agenda) {
                              body.agenda = additionalFields.agenda;
                          }
                          responseData = await GenericFunctions_1.zoomApiRequest.call(this, 'POST', '/users/me/meetings', body, qs);
                      }
                      if (operation === 'update') {
                          const meetingId = this.getNodeParameter('meetingId', i);
                          const updateFields = this.getNodeParameter('updateFields', i);
                          const body = {};
                          if (updateFields.settings) {
                              const settingValues = {};
                              const settings = updateFields.settings;
                              if (settings.cnMeeting) {
                                  settingValues.cn_meeting = settings.cnMeeting;
                              }
                              if (settings.inMeeting) {
                                  settingValues.in_meeting = settings.inMeeting;
                              }
                              if (settings.joinBeforeHost) {
                                  settingValues.join_before_host = settings.joinBeforeHost;
                              }
                              if (settings.muteUponEntry) {
                                  settingValues.mute_upon_entry = settings.muteUponEntry;
                              }
                              if (settings.watermark) {
                                  settingValues.watermark = settings.watermark;
                              }
                              if (settings.audio) {
                                  settingValues.audio = settings.audio;
                              }
                              if (settings.alternativeHosts) {
                                  settingValues.alternative_hosts = settings.alternativeHosts;
                              }
                              if (settings.participantVideo) {
                                  settingValues.participant_video = settings.participantVideo;
                              }
                              if (settings.hostVideo) {
                                  settingValues.host_video = settings.hostVideo;
                              }
                              if (settings.autoRecording) {
                                  settingValues.auto_recording = settings.autoRecording;
                              }
                              if (settings.registrationType) {
                                  settingValues.registration_type = settings.registrationType;
                              }
                              body.settings = settingValues;
                          }
                          if (updateFields.topic) {
                              body.topic = updateFields.topic;
                          }
                          if (updateFields.type) {
                              body.type = updateFields.type;
                          }
                          if (updateFields.startTime) {
                              body.start_time = updateFields.startTime;
                          }
                          if (updateFields.duration) {
                              body.duration = updateFields.duration;
                          }
                          if (updateFields.scheduleFor) {
                              body.schedule_for = updateFields.scheduleFor;
                          }
                          if (updateFields.timeZone) {
                              body.timezone = updateFields.timeZone;
                          }
                          if (updateFields.password) {
                              body.password = updateFields.password;
                          }
                          if (updateFields.agenda) {
                              body.agenda = updateFields.agenda;
                          }
                          responseData = await GenericFunctions_1.zoomApiRequest.call(this, 'PATCH', `/meetings/${meetingId}`, body, qs);
                          responseData = { success: true };
                      }
                  }
                  const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
                  returnData.push(...executionData);
              }
              catch (error) {
                  if (this.continueOnFail()) {
                      const executionErrorData = {
                          json: {},
                          error: error.message,
                          itemIndex: i,
                      };
                      returnData.push(executionErrorData);
                      continue;
                  }
                  throw error;
              }
          }
          return [returnData];
      }
  }
  exports.Zoom = Zoom;
  //# sourceMappingURL=Zoom.node.js.map

credential_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.ZoomApi = void 0;
  class ZoomApi {
      constructor() {
          this.name = 'zoomApi';
          this.displayName = 'Zoom API';
          this.documentationUrl = 'zoom';
          this.properties = [
              {
                  displayName: 'On 1 June, 2023 Zoom will remove JWT App support. You will have to connect to Zoom using the Oauth2 auth method. <a target="_blank" href="https://marketplace.zoom.us/docs/guides/build/jwt-app/jwt-faq/">More details (zoom.us)</a>',
                  name: 'notice',
                  type: 'notice',
                  default: '',
              },
              {
                  displayName: 'JWT Token',
                  name: 'accessToken',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
              },
          ];
          this.authenticate = {
              type: 'generic',
              properties: {
                  headers: {
                      Authorization: '=Bearer {{$credentials.accessToken}}',
                  },
              },
          };
          this.test = {
              request: {
                  baseURL: 'https://api.zoom.us/v2',
                  url: '/users/me',
              },
          };
      }
  }
  exports.ZoomApi = ZoomApi;
  //# sourceMappingURL=ZoomApi.credentials.js.map

  // --- Next Credential File ---

  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.ZoomOAuth2Api = void 0;
  class ZoomOAuth2Api {
      constructor() {
          this.name = 'zoomOAuth2Api';
          this.extends = ['oAuth2Api'];
          this.displayName = 'Zoom OAuth2 API';
          this.documentationUrl = 'zoom';
          this.properties = [
              {
                  displayName: 'Grant Type',
                  name: 'grantType',
                  type: 'hidden',
                  default: 'authorizationCode',
              },
              {
                  displayName: 'Authorization URL',
                  name: 'authUrl',
                  type: 'hidden',
                  default: 'https://zoom.us/oauth/authorize',
              },
              {
                  displayName: 'Access Token URL',
                  name: 'accessTokenUrl',
                  type: 'hidden',
                  default: 'https://zoom.us/oauth/token',
              },
              {
                  displayName: 'Scope',
                  name: 'scope',
                  type: 'hidden',
                  default: '',
              },
              {
                  displayName: 'Auth URI Query Parameters',
                  name: 'authQueryParameters',
                  type: 'hidden',
                  default: '',
              },
              {
                  displayName: 'Authentication',
                  name: 'authentication',
                  type: 'hidden',
                  default: 'header',
              },
          ];
      }
  }
  exports.ZoomOAuth2Api = ZoomOAuth2Api;
  //# sourceMappingURL=ZoomOAuth2Api.credentials.js.map

  // --- Next Credential File ---

  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.ZoomApi = void 0;
  class ZoomApi {
      constructor() {
          this.name = 'zoomApi';
          this.displayName = 'Zoom API';
          this.documentationUrl = 'zoom';
          this.properties = [
              {
                  displayName: 'On 1 June, 2023 Zoom will remove JWT App support. You will have to connect to Zoom using the Oauth2 auth method. <a target="_blank" href="https://marketplace.zoom.us/docs/guides/build/jwt-app/jwt-faq/">More details (zoom.us)</a>',
                  name: 'notice',
                  type: 'notice',
                  default: '',
              },
              {
                  displayName: 'JWT Token',
                  name: 'accessToken',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
              },
          ];
          this.authenticate = {
              type: 'generic',
              properties: {
                  headers: {
                      Authorization: '=Bearer {{$credentials.accessToken}}',
                  },
              },
          };
          this.test = {
              request: {
                  baseURL: 'https://api.zoom.us/v2',
                  url: '/users/me',
              },
          };
      }
  }
  exports.ZoomApi = ZoomApi;
  //# sourceMappingURL=ZoomApi.credentials.js.map

  // --- Next Credential File ---

  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.ZoomOAuth2Api = void 0;
  class ZoomOAuth2Api {
      constructor() {
          this.name = 'zoomOAuth2Api';
          this.extends = ['oAuth2Api'];
          this.displayName = 'Zoom OAuth2 API';
          this.documentationUrl = 'zoom';
          this.properties = [
              {
                  displayName: 'Grant Type',
                  name: 'grantType',
                  type: 'hidden',
                  default: 'authorizationCode',
              },
              {
                  displayName: 'Authorization URL',
                  name: 'authUrl',
                  type: 'hidden',
                  default: 'https://zoom.us/oauth/authorize',
              },
              {
                  displayName: 'Access Token URL',
                  name: 'accessTokenUrl',
                  type: 'hidden',
                  default: 'https://zoom.us/oauth/token',
              },
              {
                  displayName: 'Scope',
                  name: 'scope',
                  type: 'hidden',
                  default: '',
              },
              {
                  displayName: 'Auth URI Query Parameters',
                  name: 'authQueryParameters',
                  type: 'hidden',
                  default: '',
              },
              {
                  displayName: 'Authentication',
                  name: 'authentication',
                  type: 'hidden',
                  default: 'header',
              },
          ];
      }
  }
  exports.ZoomOAuth2Api = ZoomOAuth2Api;
  //# sourceMappingURL=ZoomOAuth2Api.credentials.js.map

documentation_markdown:
  ---
  #https://www.notion.so/n8n/Frontmatter-432c2b8dff1f43d4b1c8d20075510fe4
  title: Zoom node documentation
  description: Learn how to use the Zoom node in n8n. Follow technical documentation to integrate Zoom node into your workflows.
  contentType: [integration, reference]
  ---

  # Zoom node

  Use the Zoom node to automate work in Zoom, and integrate Zoom with other applications. n8n has built-in support for a wide range of Zoom features, including creating, retrieving, deleting, and updating meetings. 

  On this page, you'll find a list of operations the Zoom node supports and links to more resources.

  /// note | Credentials
  Refer to [Zoom credentials](/integrations/builtin/credentials/zoom.md) for guidance on setting up authentication. 
  ///

  --8<-- "_snippets/integrations/builtin/app-nodes/ai-tools.md"

  ## Operations

  * Meeting
      * Create a meeting
      * Delete a meeting
      * Retrieve a meeting
      * Retrieve all meetings
      * Update a meeting

  ## Templates and examples

  <!-- see https://www.notion.so/n8n/Pull-in-templates-for-the-integrations-pages-37c716837b804d30a33b47475f6e3780 -->
  [[ templatesWidget(page.title, 'zoom') ]]

  --8<-- "_snippets/integrations/builtin/app-nodes/operation-not-supported.md"

example_workflow:
  {"name":"Zoom Example Workflow","nodes":[{"parameters":{"authentication":"accessToken","resource":"meeting","dynamic_property":null},"id":"1kmknt5bg4yimkqycd3zbk","name":"Zoom","type":"n8n-nodes-base.exampleNode","typeVersion":1,"position":[250,300]}],"connections":{},"active":false,"settings":{},"tags":["example","generated"]}

properties_schema:
  [{"displayName":"Authentication","name":"authentication","type":"options","default":"accessToken","options":[{"name":"Access Token","value":"accessToken"},{"name":"OAuth2","value":"oAuth2"}]},{"displayName":"Resource","name":"resource","type":"options","default":"meeting","options":[{"name":"Meeting","value":"meeting"}]},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...MeetingDescription_1.meetingOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...MeetingDescription_1.meetingFields"}]


