# nodes

node_type: n8n-nodes-base.Metabase
name: Metabase
display_name: Metabase
description: Use the Metabase API
category: transform
icon: file:metabase.svg
code_hash: 629de446f4ba15b8957d92fa93685d006e99cb0fee1e36c14a0e40ceeaf99abd
documentation_url: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.Metabase
documentation_title: Metabase node documentation
operations: []
api_methods: []
documentation_examples: []
templates: [{"name":"metabase","description":"Templates for metabase"}]
related_resources: []
required_scopes: []
parameter_schemas: []
troubleshooting_info: []
example_parameters: {"resource":"alerts","dynamic_property":null}
package_name: n8n-nodes-base
version: 1.0
extracted_at: 2025-06-12 08:58:54
updated_at: 2025-06-12 08:58:54
source_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.Metabase = void 0;
  const QuestionsDescription_1 = require("./QuestionsDescription");
  const MetricsDescription_1 = require("./MetricsDescription");
  const DatabasesDescription_1 = require("./DatabasesDescription");
  const AlertsDescription_1 = require("./AlertsDescription");
  class Metabase {
      constructor() {
          this.description = {
              displayName: 'Metabase',
              name: 'metabase',
              icon: 'file:metabase.svg',
              group: ['transform'],
              version: 1,
              subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
              description: 'Use the Metabase API',
              defaults: {
                  name: 'Metabase',
              },
              inputs: ['main'],
              outputs: ['main'],
              credentials: [
                  {
                      name: 'metabaseApi',
                      required: true,
                  },
              ],
              requestDefaults: {
                  returnFullResponse: true,
                  baseURL: '={{$credentials.url.replace(new RegExp("/$"), "")}}',
                  headers: {},
              },
              properties: [
                  {
                      displayName: 'Resource',
                      name: 'resource',
                      type: 'options',
                      noDataExpression: true,
                      options: [
                          {
                              name: 'Alert',
                              value: 'alerts',
                          },
                          {
                              name: 'Database',
                              value: 'databases',
                          },
                          {
                              name: 'Metric',
                              value: 'metrics',
                          },
                          {
                              name: 'Question',
                              value: 'questions',
                          },
                      ],
                      default: 'questions',
                  },
                  ...QuestionsDescription_1.questionsOperations,
                  ...QuestionsDescription_1.questionsFields,
                  ...MetricsDescription_1.metricsOperations,
                  ...MetricsDescription_1.metricsFields,
                  ...DatabasesDescription_1.databasesOperations,
                  ...DatabasesDescription_1.databasesFields,
                  ...AlertsDescription_1.alertsOperations,
                  ...AlertsDescription_1.alertsFields,
              ],
          };
      }
  }
  exports.Metabase = Metabase;
  //# sourceMappingURL=Metabase.node.js.map

credential_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MetabaseApi = void 0;
  class MetabaseApi {
      constructor() {
          this.name = 'metabaseApi';
          this.displayName = 'Metabase API';
          this.documentationUrl = 'metabase';
          this.properties = [
              {
                  displayName: 'Session Token',
                  name: 'sessionToken',
                  type: 'hidden',
                  typeOptions: {
                      expirable: true,
                  },
                  default: '',
              },
              {
                  displayName: 'URL',
                  name: 'url',
                  type: 'string',
                  default: '',
              },
              {
                  displayName: 'Username',
                  name: 'username',
                  type: 'string',
                  default: '',
              },
              {
                  displayName: 'Password',
                  name: 'password',
                  type: 'string',
                  typeOptions: {
                      password: true,
                  },
                  default: '',
              },
          ];
          this.authenticate = {
              type: 'generic',
              properties: {
                  headers: {
                      'X-Metabase-Session': '={{$credentials.sessionToken}}',
                  },
              },
          };
          this.test = {
              request: {
                  baseURL: '={{$credentials?.url}}',
                  url: '/api/user/current',
              },
          };
      }
      async preAuthentication(credentials) {
          const url = credentials.url;
          const { id } = (await this.helpers.httpRequest({
              method: 'POST',
              url: `${url.endsWith('/') ? url.slice(0, -1) : url}/api/session`,
              body: {
                  username: credentials.username,
                  password: credentials.password,
              },
          }));
          return { sessionToken: id };
      }
  }
  exports.MetabaseApi = MetabaseApi;
  //# sourceMappingURL=MetabaseApi.credentials.js.map

  // --- Next Credential File ---

  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MetabaseApi = void 0;
  class MetabaseApi {
      constructor() {
          this.name = 'metabaseApi';
          this.displayName = 'Metabase API';
          this.documentationUrl = 'metabase';
          this.properties = [
              {
                  displayName: 'Session Token',
                  name: 'sessionToken',
                  type: 'hidden',
                  typeOptions: {
                      expirable: true,
                  },
                  default: '',
              },
              {
                  displayName: 'URL',
                  name: 'url',
                  type: 'string',
                  default: '',
              },
              {
                  displayName: 'Username',
                  name: 'username',
                  type: 'string',
                  default: '',
              },
              {
                  displayName: 'Password',
                  name: 'password',
                  type: 'string',
                  typeOptions: {
                      password: true,
                  },
                  default: '',
              },
          ];
          this.authenticate = {
              type: 'generic',
              properties: {
                  headers: {
                      'X-Metabase-Session': '={{$credentials.sessionToken}}',
                  },
              },
          };
          this.test = {
              request: {
                  baseURL: '={{$credentials?.url}}',
                  url: '/api/user/current',
              },
          };
      }
      async preAuthentication(credentials) {
          const url = credentials.url;
          const { id } = (await this.helpers.httpRequest({
              method: 'POST',
              url: `${url.endsWith('/') ? url.slice(0, -1) : url}/api/session`,
              body: {
                  username: credentials.username,
                  password: credentials.password,
              },
          }));
          return { sessionToken: id };
      }
  }
  exports.MetabaseApi = MetabaseApi;
  //# sourceMappingURL=MetabaseApi.credentials.js.map

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

  # Metabase node

  Use the Metabase node to automate work in Metabase, and integrate Metabase with other applications. n8n has built-in support for a wide range of Metabase features, including adding, and getting alerts, databases, metrics, and questions. 

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

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

  ## Operations

  * Alert
      * Get
      * Get All
  * Database
      * Add
      * Get All
      * Get Fields
  * Metric
      * Get
      * Get All
  * Question
      * Get
      * Get All
      * Result Data

  ## Templates and examples

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

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

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

properties_schema:
  [{"displayName":"Resource","name":"resource","type":"options","default":"questions","options":[{"name":"Alert","value":"alerts"},{"name":"Database","value":"databases"},{"name":"Metric","value":"metrics"},{"name":"Question","value":"questions"}]},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...QuestionsDescription_1.questionsOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...QuestionsDescription_1.questionsFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...MetricsDescription_1.metricsOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...MetricsDescription_1.metricsFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...DatabasesDescription_1.databasesOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...DatabasesDescription_1.databasesFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...AlertsDescription_1.alertsOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...AlertsDescription_1.alertsFields"}]


node_type: n8n-nodes-base.Mautic
name: Mautic
display_name: Mautic
description: Consume Mautic API
category: output
icon: file:mautic.svg
code_hash: 9fd6ac004d6538dd3a615d81114369f98b52d90f5404a73e452c9f6321c81771
documentation_url: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.Mautic
documentation_title: Mautic node documentation
operations: []
api_methods: []
documentation_examples: []
templates: [{"name":"mautic","description":"Templates for mautic"}]
related_resources: []
required_scopes: []
parameter_schemas: []
troubleshooting_info: []
example_parameters: {"authentication":"credentials","resource":"campaignContact","dynamic_property":null}
package_name: n8n-nodes-base
version: 1.0
extracted_at: 2025-06-12 08:58:54
updated_at: 2025-06-12 08:58:54
source_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.Mautic = void 0;
  const n8n_workflow_1 = require("n8n-workflow");
  const GenericFunctions_1 = require("./GenericFunctions");
  const ContactDescription_1 = require("./ContactDescription");
  const SegmentEmailDescription_1 = require("./SegmentEmailDescription");
  const CompanyDescription_1 = require("./CompanyDescription");
  const CompanyContactDescription_1 = require("./CompanyContactDescription");
  const ContactSegmentDescription_1 = require("./ContactSegmentDescription");
  const CampaignContactDescription_1 = require("./CampaignContactDescription");
  const change_case_1 = require("change-case");
  class Mautic {
      constructor() {
          this.description = {
              displayName: 'Mautic',
              name: 'mautic',
              icon: 'file:mautic.svg',
              group: ['output'],
              version: 1,
              subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
              description: 'Consume Mautic API',
              defaults: {
                  name: 'Mautic',
              },
              inputs: ['main'],
              outputs: ['main'],
              credentials: [
                  {
                      name: 'mauticApi',
                      required: true,
                      displayOptions: {
                          show: {
                              authentication: ['credentials'],
                          },
                      },
                  },
                  {
                      name: 'mauticOAuth2Api',
                      required: true,
                      displayOptions: {
                          show: {
                              authentication: ['oAuth2'],
                          },
                      },
                  },
              ],
              properties: [
                  {
                      displayName: 'Authentication',
                      name: 'authentication',
                      type: 'options',
                      options: [
                          {
                              name: 'Credentials',
                              value: 'credentials',
                          },
                          {
                              name: 'OAuth2',
                              value: 'oAuth2',
                          },
                      ],
                      default: 'credentials',
                  },
                  {
                      displayName: 'Resource',
                      name: 'resource',
                      type: 'options',
                      noDataExpression: true,
                      options: [
                          {
                              name: 'Campaign Contact',
                              value: 'campaignContact',
                              description: 'Add/remove contacts to/from a campaign',
                          },
                          {
                              name: 'Company',
                              value: 'company',
                              description: 'Create or modify a company',
                          },
                          {
                              name: 'Company Contact',
                              value: 'companyContact',
                              description: 'Add/remove contacts to/from a company',
                          },
                          {
                              name: 'Contact',
                              value: 'contact',
                              description: 'Create & modify contacts',
                          },
                          {
                              name: 'Contact Segment',
                              value: 'contactSegment',
                              description: 'Add/remove contacts to/from a segment',
                          },
                          {
                              name: 'Segment Email',
                              value: 'segmentEmail',
                              description: 'Send an email',
                          },
                      ],
                      default: 'contact',
                  },
                  ...CompanyDescription_1.companyOperations,
                  ...CompanyDescription_1.companyFields,
                  ...ContactDescription_1.contactOperations,
                  ...ContactDescription_1.contactFields,
                  ...ContactSegmentDescription_1.contactSegmentOperations,
                  ...ContactSegmentDescription_1.contactSegmentFields,
                  ...CampaignContactDescription_1.campaignContactOperations,
                  ...CampaignContactDescription_1.campaignContactFields,
                  ...CompanyContactDescription_1.companyContactOperations,
                  ...CompanyContactDescription_1.companyContactFields,
                  ...SegmentEmailDescription_1.segmentEmailOperations,
                  ...SegmentEmailDescription_1.segmentEmailFields,
              ],
          };
          this.methods = {
              loadOptions: {
                  async getCompanies() {
                      const returnData = [];
                      const companies = await GenericFunctions_1.mauticApiRequestAllItems.call(this, 'companies', 'GET', '/companies');
                      for (const company of companies) {
                          returnData.push({
                              name: company.fields.all.companyname,
                              value: company.fields.all.companyname,
                          });
                      }
                      return returnData;
                  },
                  async getTags() {
                      const returnData = [];
                      const tags = await GenericFunctions_1.mauticApiRequestAllItems.call(this, 'tags', 'GET', '/tags');
                      for (const tag of tags) {
                          returnData.push({
                              name: tag.tag,
                              value: tag.tag,
                          });
                      }
                      return returnData;
                  },
                  async getStages() {
                      const returnData = [];
                      const stages = await GenericFunctions_1.mauticApiRequestAllItems.call(this, 'stages', 'GET', '/stages');
                      for (const stage of stages) {
                          returnData.push({
                              name: stage.name,
                              value: stage.id,
                          });
                      }
                      return returnData;
                  },
                  async getCompanyFields() {
                      const returnData = [];
                      const fields = await GenericFunctions_1.mauticApiRequestAllItems.call(this, 'fields', 'GET', '/fields/company');
                      for (const field of fields) {
                          returnData.push({
                              name: field.label,
                              value: field.alias,
                          });
                      }
                      return returnData;
                  },
                  async getIndustries() {
                      const returnData = [];
                      const fields = await GenericFunctions_1.mauticApiRequestAllItems.call(this, 'fields', 'GET', '/fields/company');
                      for (const field of fields) {
                          if (field.alias === 'companyindustry') {
                              for (const { label, value } of field.properties.list) {
                                  returnData.push({
                                      name: label,
                                      value,
                                  });
                              }
                          }
                      }
                      return returnData;
                  },
                  async getContactFields() {
                      const returnData = [];
                      const fields = await GenericFunctions_1.mauticApiRequestAllItems.call(this, 'fields', 'GET', '/fields/contact');
                      for (const field of fields) {
                          returnData.push({
                              name: field.label,
                              value: field.alias,
                          });
                      }
                      return returnData;
                  },
                  async getSegments() {
                      const returnData = [];
                      const segments = await GenericFunctions_1.mauticApiRequestAllItems.call(this, 'lists', 'GET', '/segments');
                      for (const segment of segments) {
                          returnData.push({
                              name: segment.name,
                              value: segment.id,
                          });
                      }
                      return returnData;
                  },
                  async getCampaigns() {
                      const returnData = [];
                      const campaings = await GenericFunctions_1.mauticApiRequestAllItems.call(this, 'campaigns', 'GET', '/campaigns');
                      for (const campaign of campaings) {
                          returnData.push({
                              name: campaign.name,
                              value: campaign.id,
                          });
                      }
                      return returnData;
                  },
                  async getEmails() {
                      const returnData = [];
                      const emails = await GenericFunctions_1.mauticApiRequestAllItems.call(this, 'emails', 'GET', '/emails');
                      for (const email of emails) {
                          returnData.push({
                              name: email.name,
                              value: email.id,
                          });
                      }
                      return returnData;
                  },
                  async getSegmentEmails() {
                      const returnData = [];
                      const emails = await GenericFunctions_1.mauticApiRequestAllItems.call(this, 'emails', 'GET', '/emails');
                      for (const email of emails) {
                          if (email.emailType === 'list') {
                              returnData.push({
                                  name: email.name,
                                  value: email.id,
                              });
                          }
                      }
                      return returnData;
                  },
                  async getCampaignEmails() {
                      const returnData = [];
                      const emails = await GenericFunctions_1.mauticApiRequestAllItems.call(this, 'emails', 'GET', '/emails');
                      for (const email of emails) {
                          if (email.emailType === 'template') {
                              returnData.push({
                                  name: email.name,
                                  value: email.id,
                              });
                          }
                      }
                      return returnData;
                  },
              },
          };
      }
      async execute() {
          const items = this.getInputData();
          const returnData = [];
          const length = items.length;
          let qs;
          let responseData;
          const resource = this.getNodeParameter('resource', 0);
          const operation = this.getNodeParameter('operation', 0);
          for (let i = 0; i < length; i++) {
              qs = {};
              try {
                  if (resource === 'company') {
                      if (operation === 'create') {
                          const simple = this.getNodeParameter('simple', i);
                          const name = this.getNodeParameter('name', i);
                          const body = {
                              companyname: name,
                          };
                          const { addressUi, customFieldsUi, companyEmail, fax, industry, numberOfEmpoyees, phone, website, annualRevenue, description, ...rest } = this.getNodeParameter('additionalFields', i);
                          if (addressUi === null || addressUi === void 0 ? void 0 : addressUi.addressValues) {
                              const { addressValues } = addressUi;
                              body.companyaddress1 = addressValues.address1;
                              body.companyaddress2 = addressValues.address2;
                              body.companycity = addressValues.city;
                              body.companystate = addressValues.state;
                              body.companycountry = addressValues.country;
                              body.companyzipcode = addressValues.zipCode;
                          }
                          if (companyEmail) {
                              body.companyemail = companyEmail;
                          }
                          if (fax) {
                              body.companyfax = fax;
                          }
                          if (industry) {
                              body.companyindustry = industry;
                          }
                          if (industry) {
                              body.companyindustry = industry;
                          }
                          if (numberOfEmpoyees) {
                              body.companynumber_of_employees = numberOfEmpoyees;
                          }
                          if (phone) {
                              body.companyphone = phone;
                          }
                          if (website) {
                              body.companywebsite = website;
                          }
                          if (annualRevenue) {
                              body.companyannual_revenue = annualRevenue;
                          }
                          if (description) {
                              body.companydescription = description;
                          }
                          if (customFieldsUi === null || customFieldsUi === void 0 ? void 0 : customFieldsUi.customFieldValues) {
                              const { customFieldValues } = customFieldsUi;
                              const data = customFieldValues.reduce((obj, value) => Object.assign(obj, { [`${value.fieldId}`]: value.fieldValue }), {});
                              Object.assign(body, data);
                          }
                          Object.assign(body, rest);
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'POST', '/companies/new', body);
                          responseData = responseData.company;
                          if (simple) {
                              responseData = responseData.fields.all;
                          }
                      }
                      if (operation === 'update') {
                          const companyId = this.getNodeParameter('companyId', i);
                          const simple = this.getNodeParameter('simple', i);
                          const body = {};
                          const { addressUi, customFieldsUi, companyEmail, name, fax, industry, numberOfEmpoyees, phone, website, annualRevenue, description, ...rest } = this.getNodeParameter('updateFields', i);
                          if (addressUi === null || addressUi === void 0 ? void 0 : addressUi.addressValues) {
                              const { addressValues } = addressUi;
                              body.companyaddress1 = addressValues.address1;
                              body.companyaddress2 = addressValues.address2;
                              body.companycity = addressValues.city;
                              body.companystate = addressValues.state;
                              body.companycountry = addressValues.country;
                              body.companyzipcode = addressValues.zipCode;
                          }
                          if (companyEmail) {
                              body.companyemail = companyEmail;
                          }
                          if (name) {
                              body.companyname = name;
                          }
                          if (fax) {
                              body.companyfax = fax;
                          }
                          if (industry) {
                              body.companyindustry = industry;
                          }
                          if (industry) {
                              body.companyindustry = industry;
                          }
                          if (numberOfEmpoyees) {
                              body.companynumber_of_employees = numberOfEmpoyees;
                          }
                          if (phone) {
                              body.companyphone = phone;
                          }
                          if (website) {
                              body.companywebsite = website;
                          }
                          if (annualRevenue) {
                              body.companyannual_revenue = annualRevenue;
                          }
                          if (description) {
                              body.companydescription = description;
                          }
                          if (customFieldsUi === null || customFieldsUi === void 0 ? void 0 : customFieldsUi.customFieldValues) {
                              const { customFieldValues } = customFieldsUi;
                              const data = customFieldValues.reduce((obj, value) => Object.assign(obj, { [`${value.fieldId}`]: value.fieldValue }), {});
                              Object.assign(body, data);
                          }
                          Object.assign(body, rest);
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'PATCH', `/companies/${companyId}/edit`, body);
                          responseData = responseData.company;
                          if (simple) {
                              responseData = responseData.fields.all;
                          }
                      }
                      if (operation === 'get') {
                          const companyId = this.getNodeParameter('companyId', i);
                          const simple = this.getNodeParameter('simple', i);
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'GET', `/companies/${companyId}`);
                          responseData = responseData.company;
                          if (simple) {
                              responseData = responseData.fields.all;
                          }
                      }
                      if (operation === 'getAll') {
                          const returnAll = this.getNodeParameter('returnAll', i);
                          const simple = this.getNodeParameter('simple', i);
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          qs = Object.assign(qs, additionalFields);
                          if (returnAll) {
                              responseData = await GenericFunctions_1.mauticApiRequestAllItems.call(this, 'companies', 'GET', '/companies', {}, qs);
                          }
                          else {
                              qs.limit = this.getNodeParameter('limit', i);
                              qs.start = 0;
                              responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'GET', '/companies', {}, qs);
                              if (responseData.errors) {
                                  throw new n8n_workflow_1.NodeApiError(this.getNode(), responseData);
                              }
                              responseData = responseData.companies;
                              responseData = Object.values(responseData);
                          }
                          if (simple) {
                              responseData = responseData.map((item) => item.fields.all);
                          }
                      }
                      if (operation === 'delete') {
                          const simple = this.getNodeParameter('simple', i);
                          const companyId = this.getNodeParameter('companyId', i);
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'DELETE', `/companies/${companyId}/delete`);
                          responseData = responseData.company;
                          if (simple) {
                              responseData = responseData.fields.all;
                          }
                      }
                  }
                  if (resource === 'contact') {
                      if (operation === 'create') {
                          const options = this.getNodeParameter('options', i);
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          const jsonActive = this.getNodeParameter('jsonParameters', i);
                          let body = {};
                          if (!jsonActive) {
                              body.email = this.getNodeParameter('email', i);
                              body.firstname = this.getNodeParameter('firstName', i);
                              body.lastname = this.getNodeParameter('lastName', i);
                              body.company = this.getNodeParameter('company', i);
                              body.position = this.getNodeParameter('position', i);
                              body.title = this.getNodeParameter('title', i);
                          }
                          else {
                              const json = (0, GenericFunctions_1.validateJSON)(this.getNodeParameter('bodyJson', i));
                              if (json !== undefined) {
                                  body = { ...json };
                              }
                              else {
                                  throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Invalid JSON', { itemIndex: i });
                              }
                          }
                          if (additionalFields.ipAddress) {
                              body.ipAddress = additionalFields.ipAddress;
                          }
                          if (additionalFields.lastActive) {
                              body.lastActive = additionalFields.lastActive;
                          }
                          if (additionalFields.ownerId) {
                              body.owner = additionalFields.ownerId;
                          }
                          if (additionalFields.addressUi) {
                              const addressValues = additionalFields.addressUi
                                  .addressValues;
                              if (addressValues) {
                                  body.address1 = addressValues.address1;
                                  body.address2 = addressValues.address2;
                                  body.city = addressValues.city;
                                  body.state = addressValues.state;
                                  body.country = addressValues.country;
                                  body.zipcode = addressValues.zipCode;
                              }
                          }
                          if (additionalFields.socialMediaUi) {
                              const socialMediaValues = additionalFields.socialMediaUi
                                  .socialMediaValues;
                              if (socialMediaValues) {
                                  body.facebook = socialMediaValues.facebook;
                                  body.foursquare = socialMediaValues.foursquare;
                                  body.instagram = socialMediaValues.instagram;
                                  body.linkedin = socialMediaValues.linkedIn;
                                  body.skype = socialMediaValues.skype;
                                  body.twitter = socialMediaValues.twitter;
                              }
                          }
                          if (additionalFields.customFieldsUi) {
                              const customFields = additionalFields.customFieldsUi
                                  .customFieldValues;
                              if (customFields) {
                                  const data = customFields.reduce((obj, value) => Object.assign(obj, { [`${value.fieldId}`]: value.fieldValue }), {});
                                  Object.assign(body, data);
                              }
                          }
                          if (additionalFields.b2bOrb2c) {
                              body.b2b_or_b2c = additionalFields.b2bOrb2c;
                          }
                          if (additionalFields.crmId) {
                              body.crm_id = additionalFields.crmId;
                          }
                          if (additionalFields.fax) {
                              body.fax = additionalFields.fax;
                          }
                          if (additionalFields.hasPurchased) {
                              body.haspurchased = additionalFields.hasPurchased;
                          }
                          if (additionalFields.mobile) {
                              body.mobile = additionalFields.mobile;
                          }
                          if (additionalFields.phone) {
                              body.phone = additionalFields.phone;
                          }
                          if (additionalFields.prospectOrCustomer) {
                              body.prospect_or_customer = additionalFields.prospectOrCustomer;
                          }
                          if (additionalFields.sandbox) {
                              body.sandbox = additionalFields.sandbox;
                          }
                          if (additionalFields.stage) {
                              body.stage = additionalFields.stage;
                          }
                          if (additionalFields.tags) {
                              body.tags = additionalFields.tags;
                          }
                          if (additionalFields.website) {
                              body.website = additionalFields.website;
                          }
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'POST', '/contacts/new', body);
                          responseData = [responseData.contact];
                          if (options.rawData === false) {
                              responseData = responseData.map((item) => item.fields.all);
                          }
                      }
                      if (operation === 'update') {
                          const options = this.getNodeParameter('options', i);
                          const updateFields = this.getNodeParameter('updateFields', i);
                          const contactId = this.getNodeParameter('contactId', i);
                          let body = {};
                          if (updateFields.email) {
                              body.email = updateFields.email;
                          }
                          if (updateFields.firstName) {
                              body.firstname = updateFields.firstName;
                          }
                          if (updateFields.lastName) {
                              body.lastname = updateFields.lastName;
                          }
                          if (updateFields.company) {
                              body.company = updateFields.company;
                          }
                          if (updateFields.position) {
                              body.position = updateFields.position;
                          }
                          if (updateFields.title) {
                              body.title = updateFields.title;
                          }
                          if (updateFields.bodyJson) {
                              const json = (0, GenericFunctions_1.validateJSON)(updateFields.bodyJson);
                              if (json !== undefined) {
                                  body = { ...json };
                              }
                              else {
                                  throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Invalid JSON', { itemIndex: i });
                              }
                          }
                          if (updateFields.ipAddress) {
                              body.ipAddress = updateFields.ipAddress;
                          }
                          if (updateFields.lastActive) {
                              body.lastActive = updateFields.lastActive;
                          }
                          if (updateFields.ownerId) {
                              body.owner = updateFields.ownerId;
                          }
                          if (updateFields.addressUi) {
                              const addressValues = updateFields.addressUi
                                  .addressValues;
                              if (addressValues) {
                                  body.address1 = addressValues.address1;
                                  body.address2 = addressValues.address2;
                                  body.city = addressValues.city;
                                  body.state = addressValues.state;
                                  body.country = addressValues.country;
                                  body.zipcode = addressValues.zipCode;
                              }
                          }
                          if (updateFields.socialMediaUi) {
                              const socialMediaValues = updateFields.socialMediaUi
                                  .socialMediaValues;
                              if (socialMediaValues) {
                                  body.facebook = socialMediaValues.facebook;
                                  body.foursquare = socialMediaValues.foursquare;
                                  body.instagram = socialMediaValues.instagram;
                                  body.linkedin = socialMediaValues.linkedIn;
                                  body.skype = socialMediaValues.skype;
                                  body.twitter = socialMediaValues.twitter;
                              }
                          }
                          if (updateFields.customFieldsUi) {
                              const customFields = updateFields.customFieldsUi
                                  .customFieldValues;
                              if (customFields) {
                                  const data = customFields.reduce((obj, value) => Object.assign(obj, { [`${value.fieldId}`]: value.fieldValue }), {});
                                  Object.assign(body, data);
                              }
                          }
                          if (updateFields.b2bOrb2c) {
                              body.b2b_or_b2c = updateFields.b2bOrb2c;
                          }
                          if (updateFields.crmId) {
                              body.crm_id = updateFields.crmId;
                          }
                          if (updateFields.fax) {
                              body.fax = updateFields.fax;
                          }
                          if (updateFields.hasPurchased) {
                              body.haspurchased = updateFields.hasPurchased;
                          }
                          if (updateFields.mobile) {
                              body.mobile = updateFields.mobile;
                          }
                          if (updateFields.phone) {
                              body.phone = updateFields.phone;
                          }
                          if (updateFields.prospectOrCustomer) {
                              body.prospect_or_customer = updateFields.prospectOrCustomer;
                          }
                          if (updateFields.sandbox) {
                              body.sandbox = updateFields.sandbox;
                          }
                          if (updateFields.stage) {
                              body.stage = updateFields.stage;
                          }
                          if (updateFields.tags) {
                              body.tags = updateFields.tags;
                          }
                          if (updateFields.website) {
                              body.website = updateFields.website;
                          }
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'PATCH', `/contacts/${contactId}/edit`, body);
                          responseData = [responseData.contact];
                          if (options.rawData === false) {
                              responseData = responseData.map((item) => item.fields.all);
                          }
                      }
                      if (operation === 'get') {
                          const options = this.getNodeParameter('options', i);
                          const contactId = this.getNodeParameter('contactId', i);
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'GET', `/contacts/${contactId}`);
                          responseData = [responseData.contact];
                          if (options.rawData === false) {
                              responseData = responseData.map((item) => item.fields.all);
                          }
                      }
                      if (operation === 'getAll') {
                          const returnAll = this.getNodeParameter('returnAll', i);
                          const options = this.getNodeParameter('options', i);
                          qs = Object.assign(qs, options);
                          if (qs.orderBy) {
                              qs.orderBy = (0, change_case_1.snakeCase)(qs.orderBy);
                          }
                          if (returnAll) {
                              responseData = await GenericFunctions_1.mauticApiRequestAllItems.call(this, 'contacts', 'GET', '/contacts', {}, qs);
                          }
                          else {
                              qs.limit = this.getNodeParameter('limit', i);
                              qs.start = 0;
                              responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'GET', '/contacts', {}, qs);
                              if (responseData.errors) {
                                  throw new n8n_workflow_1.NodeApiError(this.getNode(), responseData);
                              }
                              responseData = responseData.contacts;
                              responseData = Object.values(responseData);
                          }
                          if (options.rawData === false) {
                              responseData = responseData.map((item) => item.fields.all);
                          }
                      }
                      if (operation === 'delete') {
                          const options = this.getNodeParameter('options', i);
                          const contactId = this.getNodeParameter('contactId', i);
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'DELETE', `/contacts/${contactId}/delete`);
                          responseData = [responseData.contact];
                          if (options.rawData === false) {
                              responseData = responseData.map((item) => item.fields.all);
                          }
                      }
                      if (operation === 'sendEmail') {
                          const contactId = this.getNodeParameter('contactId', i);
                          const campaignEmailId = this.getNodeParameter('campaignEmailId', i);
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'POST', `/emails/${campaignEmailId}/contact/${contactId}/send`);
                      }
                      if (operation === 'editDoNotContactList') {
                          const contactId = this.getNodeParameter('contactId', i);
                          const action = this.getNodeParameter('action', i);
                          const channel = this.getNodeParameter('channel', i);
                          const body = {};
                          if (action === 'add') {
                              const additionalFields = this.getNodeParameter('additionalFields', i);
                              Object.assign(body, additionalFields);
                          }
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'POST', `/contacts/${contactId}/dnc/${channel}/${action}`, body);
                          responseData = responseData.contact;
                      }
                      if (operation === 'editContactPoint') {
                          const contactId = this.getNodeParameter('contactId', i);
                          const action = this.getNodeParameter('action', i);
                          const points = this.getNodeParameter('points', i);
                          const path = action === 'add' ? 'plus' : 'minus';
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'POST', `/contacts/${contactId}/points/${path}/${points}`);
                      }
                  }
                  if (resource === 'contactSegment') {
                      if (operation === 'add') {
                          const contactId = this.getNodeParameter('contactId', i);
                          const segmentId = this.getNodeParameter('segmentId', i);
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'POST', `/segments/${segmentId}/contact/${contactId}/add`);
                      }
                      if (operation === 'remove') {
                          const contactId = this.getNodeParameter('contactId', i);
                          const segmentId = this.getNodeParameter('segmentId', i);
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'POST', `/segments/${segmentId}/contact/${contactId}/remove`);
                      }
                  }
                  if (resource === 'campaignContact') {
                      if (operation === 'add') {
                          const contactId = this.getNodeParameter('contactId', i);
                          const campaignId = this.getNodeParameter('campaignId', i);
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'POST', `/campaigns/${campaignId}/contact/${contactId}/add`);
                      }
                      if (operation === 'remove') {
                          const contactId = this.getNodeParameter('contactId', i);
                          const campaignId = this.getNodeParameter('campaignId', i);
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'POST', `/campaigns/${campaignId}/contact/${contactId}/remove`);
                      }
                  }
                  if (resource === 'segmentEmail') {
                      if (operation === 'send') {
                          const segmentEmailId = this.getNodeParameter('segmentEmailId', i);
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'POST', `/emails/${segmentEmailId}/send`);
                      }
                  }
                  if (resource === 'companyContact') {
                      if (operation === 'add') {
                          const contactId = this.getNodeParameter('contactId', i);
                          const companyId = this.getNodeParameter('companyId', i);
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'POST', `/companies/${companyId}/contact/${contactId}/add`, {});
                      }
                      if (operation === 'remove') {
                          const contactId = this.getNodeParameter('contactId', i);
                          const companyId = this.getNodeParameter('companyId', i);
                          responseData = await GenericFunctions_1.mauticApiRequest.call(this, 'POST', `/companies/${companyId}/contact/${contactId}/remove`, {});
                      }
                  }
                  const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
                  returnData.push(...executionData);
              }
              catch (error) {
                  if (this.continueOnFail()) {
                      returnData.push({ json: { error: error.message } });
                      continue;
                  }
                  throw error;
              }
          }
          return [returnData];
      }
  }
  exports.Mautic = Mautic;
  //# sourceMappingURL=Mautic.node.js.map

credential_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MauticApi = void 0;
  class MauticApi {
      constructor() {
          this.name = 'mauticApi';
          this.displayName = 'Mautic API';
          this.documentationUrl = 'mautic';
          this.properties = [
              {
                  displayName: 'URL',
                  name: 'url',
                  type: 'string',
                  default: '',
                  placeholder: 'https://name.mautic.net',
              },
              {
                  displayName: 'Username',
                  name: 'username',
                  type: 'string',
                  default: '',
              },
              {
                  displayName: 'Password',
                  name: 'password',
                  type: 'string',
                  typeOptions: {
                      password: true,
                  },
                  default: '',
              },
          ];
          this.authenticate = {
              type: 'generic',
              properties: {
                  auth: {
                      username: '={{$credentials.username}}',
                      password: '={{$credentials.password}}',
                  },
              },
          };
          this.test = {
              request: {
                  baseURL: '={{$credentials.url.replace(new RegExp("/$"), "")}}',
                  url: '/api/users/self',
              },
          };
      }
  }
  exports.MauticApi = MauticApi;
  //# sourceMappingURL=MauticApi.credentials.js.map

  // --- Next Credential File ---

  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MauticOAuth2Api = void 0;
  class MauticOAuth2Api {
      constructor() {
          this.name = 'mauticOAuth2Api';
          this.extends = ['oAuth2Api'];
          this.displayName = 'Mautic OAuth2 API';
          this.documentationUrl = 'mautic';
          this.properties = [
              {
                  displayName: 'Grant Type',
                  name: 'grantType',
                  type: 'hidden',
                  default: 'authorizationCode',
              },
              {
                  displayName: 'URL',
                  name: 'url',
                  type: 'string',
                  default: '',
                  placeholder: 'https://name.mautic.net',
              },
              {
                  displayName: 'Authorization URL',
                  name: 'authUrl',
                  type: 'hidden',
                  default: '={{$self["url"].endsWith("/") ? $self["url"].slice(0, -1) : $self["url"]}}/oauth/v2/authorize',
                  required: true,
              },
              {
                  displayName: 'Access Token URL',
                  name: 'accessTokenUrl',
                  type: 'hidden',
                  default: '={{$self["url"].endsWith("/") ? $self["url"].slice(0, -1) : $self["url"]}}/oauth/v2/token',
                  required: true,
              },
              {
                  displayName: 'Scope',
                  name: 'scope',
                  type: 'hidden',
                  default: '',
              },
              {
                  displayName: 'Auth URI Query Parameters',
                  name: 'authQueryParameters',
                  type: 'hidden',
                  default: '',
              },
              {
                  displayName: 'Authentication',
                  name: 'authentication',
                  type: 'hidden',
                  default: 'body',
              },
          ];
      }
  }
  exports.MauticOAuth2Api = MauticOAuth2Api;
  //# sourceMappingURL=MauticOAuth2Api.credentials.js.map

  // --- Next Credential File ---

  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MauticApi = void 0;
  class MauticApi {
      constructor() {
          this.name = 'mauticApi';
          this.displayName = 'Mautic API';
          this.documentationUrl = 'mautic';
          this.properties = [
              {
                  displayName: 'URL',
                  name: 'url',
                  type: 'string',
                  default: '',
                  placeholder: 'https://name.mautic.net',
              },
              {
                  displayName: 'Username',
                  name: 'username',
                  type: 'string',
                  default: '',
              },
              {
                  displayName: 'Password',
                  name: 'password',
                  type: 'string',
                  typeOptions: {
                      password: true,
                  },
                  default: '',
              },
          ];
          this.authenticate = {
              type: 'generic',
              properties: {
                  auth: {
                      username: '={{$credentials.username}}',
                      password: '={{$credentials.password}}',
                  },
              },
          };
          this.test = {
              request: {
                  baseURL: '={{$credentials.url.replace(new RegExp("/$"), "")}}',
                  url: '/api/users/self',
              },
          };
      }
  }
  exports.MauticApi = MauticApi;
  //# sourceMappingURL=MauticApi.credentials.js.map

  // --- Next Credential File ---

  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MauticOAuth2Api = void 0;
  class MauticOAuth2Api {
      constructor() {
          this.name = 'mauticOAuth2Api';
          this.extends = ['oAuth2Api'];
          this.displayName = 'Mautic OAuth2 API';
          this.documentationUrl = 'mautic';
          this.properties = [
              {
                  displayName: 'Grant Type',
                  name: 'grantType',
                  type: 'hidden',
                  default: 'authorizationCode',
              },
              {
                  displayName: 'URL',
                  name: 'url',
                  type: 'string',
                  default: '',
                  placeholder: 'https://name.mautic.net',
              },
              {
                  displayName: 'Authorization URL',
                  name: 'authUrl',
                  type: 'hidden',
                  default: '={{$self["url"].endsWith("/") ? $self["url"].slice(0, -1) : $self["url"]}}/oauth/v2/authorize',
                  required: true,
              },
              {
                  displayName: 'Access Token URL',
                  name: 'accessTokenUrl',
                  type: 'hidden',
                  default: '={{$self["url"].endsWith("/") ? $self["url"].slice(0, -1) : $self["url"]}}/oauth/v2/token',
                  required: true,
              },
              {
                  displayName: 'Scope',
                  name: 'scope',
                  type: 'hidden',
                  default: '',
              },
              {
                  displayName: 'Auth URI Query Parameters',
                  name: 'authQueryParameters',
                  type: 'hidden',
                  default: '',
              },
              {
                  displayName: 'Authentication',
                  name: 'authentication',
                  type: 'hidden',
                  default: 'body',
              },
          ];
      }
  }
  exports.MauticOAuth2Api = MauticOAuth2Api;
  //# sourceMappingURL=MauticOAuth2Api.credentials.js.map

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

  # Mautic node

  Use the Mautic node to automate work in Mautic, and integrate Mautic with other applications. n8n has built-in support for a wide range of Mautic features, including creating, updating, deleting, and getting companies, and contacts, as well as adding and removing campaign contacts. 

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

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

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

  ## Operations

  * Campaign Contact
      * Add contact to a campaign
      * Remove contact from a campaign
  * Company
      * Create a new company
      * Delete a company
      * Get data of a company
      * Get data of all companies
      * Update a company
  * Company Contact
      * Add contact to a company
      * Remove a contact from a company
  * Contact
      * Create a new contact
      * Delete a contact
      * Edit contact's points
      * Add/remove contacts from/to the don't contact list
      * Get data of a contact
      * Get data of all contacts
      * Send email to contact
      * Update a contact
  * Contact Segment
      * Add contact to a segment
      * Remove contact from a segment
  * Segment Email
      * Send

  ## Templates and examples

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

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

example_workflow:
  {"name":"Mautic Example Workflow","nodes":[{"parameters":{"authentication":"credentials","resource":"campaignContact","dynamic_property":null},"id":"4gncrpbmqge97eejyzdo1d","name":"Mautic","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":"credentials","options":[{"name":"Credentials","value":"credentials"},{"name":"OAuth2","value":"oAuth2"}]},{"displayName":"Resource","name":"resource","type":"options","default":"contact","description":"Add/remove contacts to/from a campaign","options":[{"name":"Campaign Contact","value":"campaignContact","description":"Add/remove contacts to/from a campaign"},{"name":"Company","value":"company","description":"Create or modify a company"},{"name":"Company Contact","value":"companyContact","description":"Add/remove contacts to/from a company"},{"name":"Contact","value":"contact","description":"Create & modify contacts"},{"name":"Contact Segment","value":"contactSegment","description":"Add/remove contacts to/from a segment"},{"name":"Segment Email","value":"segmentEmail","description":"Send an email"}]},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...CompanyDescription_1.companyOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...CompanyDescription_1.companyFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...ContactDescription_1.contactOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...ContactDescription_1.contactFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...ContactSegmentDescription_1.contactSegmentOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...ContactSegmentDescription_1.contactSegmentFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...CampaignContactDescription_1.campaignContactOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...CampaignContactDescription_1.campaignContactFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...CompanyContactDescription_1.companyContactOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...CompanyContactDescription_1.companyContactFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...SegmentEmailDescription_1.segmentEmailOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...SegmentEmailDescription_1.segmentEmailFields"}]


node_type: n8n-nodes-base.MessageBird
name: MessageBird
display_name: MessageBird
description: Sends SMS via MessageBird
category: output
icon: file:messagebird.svg
code_hash: faf1b5016a688104f7c30fde0b8b2b93731a2df58937aad8efc85e0be6ece42c
documentation_url: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.MessageBird
documentation_title: MessageBird node documentation
operations: []
api_methods: []
documentation_examples: []
templates: [{"name":"messagebird","description":"Templates for messagebird"}]
related_resources: []
required_scopes: []
parameter_schemas: []
troubleshooting_info: []
package_name: n8n-nodes-base
version: 1.0
extracted_at: 2025-06-12 08:58:54
updated_at: 2025-06-12 08:58:54
source_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MessageBird = void 0;
  const n8n_workflow_1 = require("n8n-workflow");
  const GenericFunctions_1 = require("./GenericFunctions");
  class MessageBird {
      constructor() {
          this.description = {
              displayName: 'MessageBird',
              name: 'messageBird',
              icon: 'file:messagebird.svg',
              group: ['output'],
              version: 1,
              subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
              description: 'Sends SMS via MessageBird',
              defaults: {
                  name: 'MessageBird',
              },
              inputs: ['main'],
              outputs: ['main'],
              credentials: [
                  {
                      name: 'messageBirdApi',
                      required: true,
                  },
              ],
              properties: [
                  {
                      displayName: 'Resource',
                      name: 'resource',
                      type: 'options',
                      noDataExpression: true,
                      options: [
                          {
                              name: 'SMS',
                              value: 'sms',
                          },
                          {
                              name: 'Balance',
                              value: 'balance',
                          },
                      ],
                      default: 'sms',
                  },
                  {
                      displayName: 'Operation',
                      name: 'operation',
                      type: 'options',
                      noDataExpression: true,
                      displayOptions: {
                          show: {
                              resource: ['sms'],
                          },
                      },
                      options: [
                          {
                              name: 'Send',
                              value: 'send',
                              description: 'Send text messages (SMS)',
                              action: 'Send an SMS',
                          },
                      ],
                      default: 'send',
                  },
                  {
                      displayName: 'Operation',
                      name: 'operation',
                      type: 'options',
                      noDataExpression: true,
                      displayOptions: {
                          show: {
                              resource: ['balance'],
                          },
                      },
                      options: [
                          {
                              name: 'Get',
                              value: 'get',
                              description: 'Get the balance',
                              action: 'Get the current balance',
                          },
                      ],
                      default: 'get',
                  },
                  {
                      displayName: 'From',
                      name: 'originator',
                      type: 'string',
                      default: '',
                      placeholder: '14155238886',
                      required: true,
                      displayOptions: {
                          show: {
                              operation: ['send'],
                              resource: ['sms'],
                          },
                      },
                      description: 'The number from which to send the message',
                  },
                  {
                      displayName: 'To',
                      name: 'recipients',
                      type: 'string',
                      default: '',
                      placeholder: '14155238886/+14155238886',
                      required: true,
                      displayOptions: {
                          show: {
                              operation: ['send'],
                              resource: ['sms'],
                          },
                      },
                      description: 'All recipients separated by commas',
                  },
                  {
                      displayName: 'Message',
                      name: 'message',
                      type: 'string',
                      default: '',
                      required: true,
                      displayOptions: {
                          show: {
                              operation: ['send'],
                              resource: ['sms'],
                          },
                      },
                      description: 'The message to be send',
                  },
                  {
                      displayName: 'Additional Fields',
                      name: 'additionalFields',
                      type: 'collection',
                      displayOptions: {
                          show: {
                              operation: ['send'],
                              resource: ['sms'],
                          },
                      },
                      placeholder: 'Add Fields',
                      default: {},
                      options: [
                          {
                              displayName: 'Created Date-Time',
                              name: 'createdDatetime',
                              type: 'dateTime',
                              default: '',
                              description: 'The date and time of the creation of the message in RFC3339 format (Y-m-dTH:i:sP)',
                          },
                          {
                              displayName: 'Datacoding',
                              name: 'datacoding',
                              type: 'options',
                              options: [
                                  {
                                      name: 'Auto',
                                      value: 'auto',
                                  },
                                  {
                                      name: 'Plain',
                                      value: 'plain',
                                  },
                                  {
                                      name: 'Unicode',
                                      value: 'unicode',
                                  },
                              ],
                              default: '',
                              description: 'Using unicode will limit the maximum number of characters to 70 instead of 160',
                          },
                          {
                              displayName: 'Gateway',
                              name: 'gateway',
                              type: 'number',
                              default: '',
                              description: 'The SMS route that is used to send the message',
                          },
                          {
                              displayName: 'Group IDs',
                              name: 'groupIds',
                              placeholder: '1,2',
                              type: 'string',
                              default: '',
                              description: 'Group IDs separated by commas, If provided recipients can be omitted',
                          },
                          {
                              displayName: 'Message Type',
                              name: 'mclass',
                              type: 'options',
                              placeholder: 'Permissible values from 0-3',
                              options: [
                                  {
                                      name: 'Flash',
                                      value: 1,
                                  },
                                  {
                                      name: 'Normal',
                                      value: 0,
                                  },
                              ],
                              default: 1,
                              description: 'Indicated the message type. 1 is a normal message, 0 is a flash message.',
                          },
                          {
                              displayName: 'Reference',
                              name: 'reference',
                              type: 'string',
                              default: '',
                              description: 'A client reference',
                          },
                          {
                              displayName: 'Report Url',
                              name: 'reportUrl',
                              type: 'string',
                              default: '',
                              description: 'The status report URL to be used on a per-message basis. Reference is required for a status report webhook to be sent.',
                          },
                          {
                              displayName: 'Scheduled Date-Time',
                              name: 'scheduledDatetime',
                              type: 'dateTime',
                              default: '',
                              description: 'The scheduled date and time of the message in RFC3339 format (Y-m-dTH:i:sP)',
                          },
                          {
                              displayName: 'Type',
                              name: 'type',
                              type: 'options',
                              options: [
                                  {
                                      name: 'Binary',
                                      value: 'binary',
                                  },
                                  {
                                      name: 'Flash',
                                      value: 'flash',
                                  },
                                  {
                                      name: 'SMS',
                                      value: 'sms',
                                  },
                              ],
                              default: '',
                              description: 'The type of message. Values can be: sms, binary, or flash.',
                          },
                          {
                              displayName: 'Type Details',
                              name: 'typeDetails',
                              type: 'string',
                              default: '',
                              description: 'A hash with extra information. Is only used when a binary message is sent.',
                          },
                          {
                              displayName: 'Validity',
                              name: 'validity',
                              type: 'number',
                              default: 1,
                              typeOptions: {
                                  minValue: 1,
                              },
                              description: 'The amount of seconds that the message is valid',
                          },
                      ],
                  },
              ],
          };
      }
      async execute() {
          const items = this.getInputData();
          const returnData = [];
          let operation;
          let resource;
          let bodyRequest = {};
          let qs;
          let requestMethod;
          let requestPath;
          for (let i = 0; i < items.length; i++) {
              qs = {};
              try {
                  resource = this.getNodeParameter('resource', i);
                  operation = this.getNodeParameter('operation', i);
                  if (resource === 'sms') {
                      if (operation === 'send') {
                          requestMethod = 'POST';
                          requestPath = '/messages';
                          const originator = this.getNodeParameter('originator', i);
                          const body = this.getNodeParameter('message', i);
                          bodyRequest = {
                              recipients: [],
                              originator,
                              body,
                          };
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          if (additionalFields.groupIds) {
                              bodyRequest.groupIds = additionalFields.groupIds;
                          }
                          if (additionalFields.type) {
                              bodyRequest.type = additionalFields.type;
                          }
                          if (additionalFields.reference) {
                              bodyRequest.reference = additionalFields.reference;
                          }
                          if (additionalFields.reportUrl) {
                              bodyRequest.reportUrl = additionalFields.reportUrl;
                          }
                          if (additionalFields.validity) {
                              bodyRequest.validity = additionalFields.reportUrl;
                          }
                          if (additionalFields.gateway) {
                              bodyRequest.gateway = additionalFields.gateway;
                          }
                          if (additionalFields.typeDetails) {
                              bodyRequest.typeDetails = additionalFields.typeDetails;
                          }
                          if (additionalFields.datacoding) {
                              bodyRequest.datacoding = additionalFields.datacoding;
                          }
                          if (additionalFields.mclass) {
                              bodyRequest.mclass = additionalFields.mclass;
                          }
                          if (additionalFields.scheduledDatetime) {
                              bodyRequest.scheduledDatetime = additionalFields.scheduledDatetime;
                          }
                          if (additionalFields.createdDatetime) {
                              bodyRequest.createdDatetime = additionalFields.createdDatetime;
                          }
                          const receivers = this.getNodeParameter('recipients', i);
                          bodyRequest.recipients = receivers.split(',').map((item) => {
                              return parseInt(item, 10);
                          });
                      }
                      else {
                          throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation "${operation}" is not known!`, { itemIndex: i });
                      }
                  }
                  else if (resource === 'balance') {
                      requestMethod = 'GET';
                      requestPath = '/balance';
                  }
                  else {
                      throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The resource "${resource}" is not known!`, {
                          itemIndex: i,
                      });
                  }
                  const responseData = await GenericFunctions_1.messageBirdApiRequest.call(this, requestMethod, requestPath, bodyRequest, qs);
                  returnData.push(responseData);
              }
              catch (error) {
                  if (this.continueOnFail()) {
                      returnData.push({ error: error.message });
                      continue;
                  }
                  throw error;
              }
          }
          return [this.helpers.returnJsonArray(returnData)];
      }
  }
  exports.MessageBird = MessageBird;
  //# sourceMappingURL=MessageBird.node.js.map

credential_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MessageBirdApi = void 0;
  class MessageBirdApi {
      constructor() {
          this.name = 'messageBirdApi';
          this.displayName = 'MessageBird API';
          this.documentationUrl = 'messageBird';
          this.properties = [
              {
                  displayName: 'API Key',
                  name: 'accessKey',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
              },
          ];
      }
  }
  exports.MessageBirdApi = MessageBirdApi;
  //# sourceMappingURL=MessageBirdApi.credentials.js.map

  // --- Next Credential File ---

  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MessageBirdApi = void 0;
  class MessageBirdApi {
      constructor() {
          this.name = 'messageBirdApi';
          this.displayName = 'MessageBird API';
          this.documentationUrl = 'messageBird';
          this.properties = [
              {
                  displayName: 'API Key',
                  name: 'accessKey',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
              },
          ];
      }
  }
  exports.MessageBirdApi = MessageBirdApi;
  //# sourceMappingURL=MessageBirdApi.credentials.js.map

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

  # MessageBird node

  Use the MessageBird node to automate work in MessageBird, and integrate MessageBird with other applications. n8n has built-in support for a wide range of MessageBird features, including sending messages, and getting balances. 

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

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

  ## Operations

  * SMS
      * Send text messages (SMS)
  * Balance
      * Get the balance

  ## Templates and examples

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

example_workflow:
  {"name":"MessageBird Example Workflow","nodes":[{"parameters":{"resource":"sms","operation":"get","originator":"example-value","recipients":"example-value","message":"example-value","additionalFields":{}},"id":"1jdr7wd9mal68pfqok0d84","name":"MessageBird","type":"n8n-nodes-base.exampleNode","typeVersion":1,"position":[250,300]}],"connections":{},"active":false,"settings":{},"tags":["example","generated"]}

example_parameters:
  {"resource":"sms","operation":"get","originator":"example-value","recipients":"example-value","message":"example-value","additionalFields":{}}

properties_schema:
  [{"displayName":"Resource","name":"resource","type":"options","default":"sms","options":[{"name":"SMS","value":"sms"},{"name":"Balance","value":"balance"}]},{"displayName":"Operation","name":"operation","type":"options","default":"send","description":"Send text messages (SMS)","options":[{"name":"Send","value":"send","description":"Send text messages (SMS)"}]},{"displayName":"Operation","name":"operation","type":"options","default":"get","description":"Get the balance","options":[{"name":"Get","value":"get","description":"Get the balance"}]},{"displayName":"From","name":"originator","type":"string","default":"","required":true,"description":"The number from which to send the message","placeholder":"14155238886"},{"displayName":"To","name":"recipients","type":"string","default":"","required":true,"description":"All recipients separated by commas","placeholder":"14155238886/+14155238886"},{"displayName":"Message","name":"message","type":"string","default":"","required":true,"description":"The message to be send"},{"displayName":"Additional Fields","name":"additionalFields","type":"collection","default":"{","description":"The date and time of the creation of the message in RFC3339 format (Y-m-dTH:i:sP)","placeholder":"Add Fields"}]


node_type: n8n-nodes-base.Mindee
name: Mindee
display_name: Mindee
description: Consume Mindee API
category: input
icon: file:mindee.svg
code_hash: e1b1546baf295f10ce7fdfc174b3cd8ef000536f32d745f5b0220db885ec1fa2
documentation_url: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.Mindee
documentation_title: Mindee node documentation
operations: []
api_methods: []
documentation_examples: []
templates: [{"name":"mindee","description":"Templates for mindee"}]
related_resources: []
required_scopes: []
parameter_schemas: []
troubleshooting_info: []
example_parameters: {"resource":"invoice","operation":"predict","binaryPropertyName":"Example Name","rawData":false}
package_name: n8n-nodes-base
extracted_at: 2025-06-12 08:58:56
updated_at: 2025-06-12 08:58:56
source_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.Mindee = void 0;
  const n8n_workflow_1 = require("n8n-workflow");
  const GenericFunctions_1 = require("./GenericFunctions");
  class Mindee {
      constructor() {
          this.description = {
              displayName: 'Mindee',
              name: 'mindee',
              icon: 'file:mindee.svg',
              group: ['input'],
              version: [1, 2, 3],
              subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
              description: 'Consume Mindee API',
              defaults: {
                  name: 'Mindee',
              },
              inputs: ['main'],
              outputs: ['main'],
              credentials: [
                  {
                      name: 'mindeeReceiptApi',
                      required: true,
                      displayOptions: {
                          show: {
                              resource: ['receipt'],
                          },
                      },
                  },
                  {
                      name: 'mindeeInvoiceApi',
                      required: true,
                      displayOptions: {
                          show: {
                              resource: ['invoice'],
                          },
                      },
                  },
              ],
              properties: [
                  {
                      displayName: 'API Version',
                      name: 'apiVersion',
                      type: 'options',
                      isNodeSetting: true,
                      displayOptions: {
                          show: {
                              '@version': [1],
                          },
                      },
                      options: [
                          {
                              name: '1',
                              value: 1,
                          },
                          {
                              name: '3',
                              value: 3,
                          },
                          {
                              name: '4',
                              value: 4,
                          },
                      ],
                      default: 1,
                      description: 'Which Mindee API Version to use',
                  },
                  {
                      displayName: 'API Version',
                      name: 'apiVersion',
                      type: 'options',
                      isNodeSetting: true,
                      displayOptions: {
                          show: {
                              '@version': [2],
                          },
                      },
                      options: [
                          {
                              name: '1',
                              value: 1,
                          },
                          {
                              name: '3',
                              value: 3,
                          },
                          {
                              name: '4',
                              value: 4,
                          },
                      ],
                      default: 3,
                      description: 'Which Mindee API Version to use',
                  },
                  {
                      displayName: 'API Version',
                      name: 'apiVersion',
                      type: 'options',
                      isNodeSetting: true,
                      displayOptions: {
                          show: {
                              '@version': [3],
                          },
                      },
                      options: [
                          {
                              name: '1',
                              value: 1,
                          },
                          {
                              name: '3',
                              value: 3,
                          },
                          {
                              name: '4',
                              value: 4,
                          },
                      ],
                      default: 4,
                      description: 'Which Mindee API Version to use',
                  },
                  {
                      displayName: 'Resource',
                      name: 'resource',
                      type: 'options',
                      noDataExpression: true,
                      options: [
                          {
                              name: 'Invoice',
                              value: 'invoice',
                          },
                          {
                              name: 'Receipt',
                              value: 'receipt',
                          },
                      ],
                      default: 'receipt',
                  },
                  {
                      displayName: 'Operation',
                      name: 'operation',
                      type: 'options',
                      noDataExpression: true,
                      options: [
                          {
                              name: 'Predict',
                              value: 'predict',
                          },
                      ],
                      default: 'predict',
                  },
                  {
                      displayName: 'Binary Property',
                      name: 'binaryPropertyName',
                      type: 'string',
                      required: true,
                      default: 'data',
                      displayOptions: {
                          show: {
                              operation: ['predict'],
                              resource: ['receipt', 'invoice'],
                          },
                      },
                      description: 'Name of the binary property which containsthe data for the file to be uploaded',
                  },
                  {
                      displayName: 'RAW Data',
                      name: 'rawData',
                      type: 'boolean',
                      default: false,
                      description: 'Whether to return the data exactly in the way it got received from the API',
                  },
              ],
          };
      }
      async execute() {
          const items = this.getInputData();
          const returnData = [];
          const length = items.length;
          let responseData;
          const version = this.getNodeParameter('apiVersion', 0);
          const resource = this.getNodeParameter('resource', 0);
          const operation = this.getNodeParameter('operation', 0);
          let endpoint;
          for (let i = 0; i < length; i++) {
              try {
                  if (resource === 'receipt') {
                      if (operation === 'predict') {
                          const rawData = this.getNodeParameter('rawData', i);
                          const binaryPropertyName = this.getNodeParameter('binaryPropertyName', i);
                          const binaryData = this.helpers.assertBinaryData(i, binaryPropertyName);
                          const dataBuffer = await this.helpers.getBinaryDataBuffer(i, binaryPropertyName);
                          if (version === 1) {
                              responseData = await GenericFunctions_1.mindeeApiRequest.call(this, 'POST', '/expense_receipts/v2/predict', {}, {}, {
                                  formData: {
                                      file: {
                                          value: dataBuffer,
                                          options: {
                                              filename: binaryData.fileName,
                                          },
                                      },
                                  },
                              });
                          }
                          else if (version === 3) {
                              endpoint = '/expense_receipts/v3/predict';
                              responseData = await GenericFunctions_1.mindeeApiRequest.call(this, 'POST', endpoint, {}, {}, {
                                  formData: {
                                      document: {
                                          value: dataBuffer,
                                          options: {
                                              filename: binaryData.fileName,
                                          },
                                      },
                                  },
                              });
                          }
                          else if (version === 4) {
                              endpoint = '/expense_receipts/v4/predict';
                              responseData = await GenericFunctions_1.mindeeApiRequest.call(this, 'POST', endpoint, {}, {}, {
                                  formData: {
                                      document: {
                                          value: dataBuffer,
                                          options: {
                                              filename: binaryData.fileName,
                                          },
                                      },
                                  },
                              });
                          }
                          if (!rawData) {
                              if (version === 1) {
                                  responseData = (0, GenericFunctions_1.cleanDataPreviousApiVersions)(responseData.predictions);
                              }
                              else if (version === 3 || version === 4) {
                                  responseData = (0, GenericFunctions_1.cleanData)(responseData.document);
                              }
                          }
                      }
                  }
                  if (resource === 'invoice') {
                      if (operation === 'predict') {
                          const rawData = this.getNodeParameter('rawData', i);
                          const binaryPropertyName = this.getNodeParameter('binaryPropertyName', i);
                          const binaryData = this.helpers.assertBinaryData(i, binaryPropertyName);
                          const dataBuffer = await this.helpers.getBinaryDataBuffer(i, binaryPropertyName);
                          if (version === 1) {
                              endpoint = '/invoices/v1/predict';
                              responseData = await GenericFunctions_1.mindeeApiRequest.call(this, 'POST', endpoint, {}, {}, {
                                  formData: {
                                      file: {
                                          value: dataBuffer,
                                          options: {
                                              filename: binaryData.fileName,
                                          },
                                      },
                                  },
                              });
                          }
                          else if (version === 3) {
                              endpoint = '/invoices/v3/predict';
                              responseData = await GenericFunctions_1.mindeeApiRequest.call(this, 'POST', endpoint, {}, {}, {
                                  formData: {
                                      document: {
                                          value: dataBuffer,
                                          options: {
                                              filename: binaryData.fileName,
                                          },
                                      },
                                  },
                              });
                          }
                          else if (version === 4) {
                              endpoint = '/invoices/v4/predict';
                              responseData = await GenericFunctions_1.mindeeApiRequest.call(this, 'POST', endpoint, {}, {}, {
                                  formData: {
                                      document: {
                                          value: dataBuffer,
                                          options: {
                                              filename: binaryData.fileName,
                                          },
                                      },
                                  },
                              });
                          }
                          else {
                              throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Invalid API version');
                          }
                          if (!rawData) {
                              if (version === 1) {
                                  responseData = (0, GenericFunctions_1.cleanDataPreviousApiVersions)(responseData.predictions);
                              }
                              else if (version === 3 || version === 4) {
                                  responseData = (0, GenericFunctions_1.cleanData)(responseData.document);
                              }
                          }
                      }
                  }
                  if (Array.isArray(responseData)) {
                      returnData.push.apply(returnData, responseData);
                  }
                  else if (responseData !== undefined) {
                      returnData.push(responseData);
                  }
              }
              catch (error) {
                  if (this.continueOnFail()) {
                      returnData.push({ error: error.message });
                      continue;
                  }
                  throw error;
              }
          }
          return [this.helpers.returnJsonArray(returnData)];
      }
  }
  exports.Mindee = Mindee;
  //# sourceMappingURL=Mindee.node.js.map

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

  # Mindee node

  Use the Mindee node to automate work in Mindee, and integrate Mindee with other applications. n8n has built-in support for a wide range of Mindee features, including predicting invoices. 

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

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

  ## Operations

  - **Invoice**
      - Predict
  - **Receipt**
      - Predict

  ## Templates and examples

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

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

example_workflow:
  {"name":"Mindee Example Workflow","nodes":[{"parameters":{"resource":"invoice","operation":"predict","binaryPropertyName":"Example Name","rawData":false},"id":"k0kb78i5qvuvwjlh9celg","name":"Mindee","type":"n8n-nodes-base.exampleNode","typeVersion":1,"position":[250,300]}],"connections":{},"active":false,"settings":{},"tags":["example","generated"]}

properties_schema:
  [{"displayName":"API Version","name":"apiVersion","type":"options","default":1,"description":"Which Mindee API Version to use","options":[{"name":"1"},{"name":"3"},{"name":"4"}]},{"displayName":"API Version","name":"apiVersion","type":"options","default":3,"description":"Which Mindee API Version to use","options":[{"name":"1"},{"name":"3"},{"name":"4"}]},{"displayName":"API Version","name":"apiVersion","type":"options","default":4,"description":"Which Mindee API Version to use","options":[{"name":"1"},{"name":"3"},{"name":"4"}]},{"displayName":"Resource","name":"resource","type":"options","default":"receipt","options":[{"name":"Invoice","value":"invoice"},{"name":"Receipt","value":"receipt"}]},{"displayName":"Operation","name":"operation","type":"options","default":"predict","options":[{"name":"Predict","value":"predict"}]},{"displayName":"Binary Property","name":"binaryPropertyName","type":"string","default":"data","required":true,"description":"Name of the binary property which containsthe data for the file to be uploaded"},{"displayName":"RAW Data","name":"rawData","type":"boolean","default":false,"description":"Whether to return the data exactly in the way it got received from the API"}]


node_type: n8n-nodes-base.MongoDb
name: MongoDb
display_name: MongoDB
description: Find, insert and update documents in MongoDB
category: input
icon: file:mongodb.svg
code_hash: b2ba16dd51375f7dbee76439f8443f7c8377528cce99ef36d8b45f549e6b6471
documentation_url: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.MongoDb
documentation_title: MongoDB node documentation
operations: []
api_methods: []
documentation_examples: []
templates: [{"name":"mongodb","description":"Templates for mongodb"}]
related_resources: []
required_scopes: []
parameter_schemas: []
troubleshooting_info: []
example_parameters: {}
properties_schema: []
package_name: n8n-nodes-base
version: 1.0
extracted_at: 2025-06-12 08:58:58
updated_at: 2025-06-12 08:58:58
source_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MongoDb = void 0;
  const n8n_workflow_1 = require("n8n-workflow");
  const mongodb_1 = require("mongodb");
  const MongoDbProperties_1 = require("./MongoDbProperties");
  const GenericFunctions_1 = require("./GenericFunctions");
  const utilities_1 = require("../../utils/utilities");
  class MongoDb {
      constructor() {
          this.description = {
              displayName: 'MongoDB',
              name: 'mongoDb',
              icon: 'file:mongodb.svg',
              group: ['input'],
              version: 1,
              description: 'Find, insert and update documents in MongoDB',
              defaults: {
                  name: 'MongoDB',
              },
              inputs: ['main'],
              outputs: ['main'],
              credentials: [
                  {
                      name: 'mongoDb',
                      required: true,
                      testedBy: 'mongoDbCredentialTest',
                  },
              ],
              properties: MongoDbProperties_1.nodeProperties,
          };
          this.methods = {
              credentialTest: {
                  async mongoDbCredentialTest(credential) {
                      const credentials = credential.data;
                      try {
                          const database = (credentials.database || '').trim();
                          let connectionString = '';
                          if (credentials.configurationType === 'connectionString') {
                              connectionString = (credentials.connectionString || '').trim();
                          }
                          else {
                              connectionString = (0, GenericFunctions_1.buildParameterizedConnString)(credentials);
                          }
                          const client = await mongodb_1.MongoClient.connect(connectionString);
                          const { databases } = await client.db().admin().listDatabases();
                          if (!databases.map((db) => db.name).includes(database)) {
                              throw new Error(`Database "${database}" does not exist`);
                          }
                          await client.close();
                      }
                      catch (error) {
                          return {
                              status: 'Error',
                              message: error.message,
                          };
                      }
                      return {
                          status: 'OK',
                          message: 'Connection successful!',
                      };
                  },
              },
          };
      }
      async execute() {
          const { database, connectionString } = (0, GenericFunctions_1.validateAndResolveMongoCredentials)(this, await this.getCredentials('mongoDb'));
          const client = await mongodb_1.MongoClient.connect(connectionString);
          const mdb = client.db(database);
          const returnItems = [];
          let responseData = [];
          const items = this.getInputData();
          const operation = this.getNodeParameter('operation', 0);
          if (operation === 'aggregate') {
              try {
                  const queryParameter = JSON.parse(this.getNodeParameter('query', 0));
                  if (queryParameter._id && typeof queryParameter._id === 'string') {
                      queryParameter._id = new mongodb_1.ObjectId(queryParameter._id);
                  }
                  const query = mdb
                      .collection(this.getNodeParameter('collection', 0))
                      .aggregate(queryParameter);
                  responseData = await query.toArray();
              }
              catch (error) {
                  if (this.continueOnFail()) {
                      responseData = [{ error: error.message }];
                  }
                  else {
                      throw error;
                  }
              }
          }
          else if (operation === 'delete') {
              try {
                  const { deletedCount } = await mdb
                      .collection(this.getNodeParameter('collection', 0))
                      .deleteMany(JSON.parse(this.getNodeParameter('query', 0)));
                  responseData = [{ deletedCount }];
              }
              catch (error) {
                  if (this.continueOnFail()) {
                      responseData = [{ error: error.message }];
                  }
                  else {
                      throw error;
                  }
              }
          }
          else if (operation === 'find') {
              try {
                  const queryParameter = JSON.parse(this.getNodeParameter('query', 0));
                  if (queryParameter._id && typeof queryParameter._id === 'string') {
                      queryParameter._id = new mongodb_1.ObjectId(queryParameter._id);
                  }
                  let query = mdb
                      .collection(this.getNodeParameter('collection', 0))
                      .find(queryParameter);
                  const options = this.getNodeParameter('options', 0);
                  const limit = options.limit;
                  const skip = options.skip;
                  const sort = options.sort && JSON.parse(options.sort);
                  if (skip > 0) {
                      query = query.skip(skip);
                  }
                  if (limit > 0) {
                      query = query.limit(limit);
                  }
                  if (sort && Object.keys(sort).length !== 0 && sort.constructor === Object) {
                      query = query.sort(sort);
                  }
                  const queryResult = await query.toArray();
                  responseData = queryResult;
              }
              catch (error) {
                  if (this.continueOnFail()) {
                      responseData = [{ error: error.message }];
                  }
                  else {
                      throw error;
                  }
              }
          }
          else if (operation === 'findOneAndReplace') {
              const fields = (0, GenericFunctions_1.prepareFields)(this.getNodeParameter('fields', 0));
              const useDotNotation = this.getNodeParameter('options.useDotNotation', 0, false);
              const dateFields = (0, GenericFunctions_1.prepareFields)(this.getNodeParameter('options.dateFields', 0, ''));
              const updateKey = (this.getNodeParameter('updateKey', 0) || '').trim();
              const updateOptions = this.getNodeParameter('upsert', 0)
                  ? { upsert: true }
                  : undefined;
              const updateItems = (0, GenericFunctions_1.prepareItems)(items, fields, updateKey, useDotNotation, dateFields);
              for (const item of updateItems) {
                  try {
                      const filter = { [updateKey]: item[updateKey] };
                      if (updateKey === '_id') {
                          filter[updateKey] = new mongodb_1.ObjectId(item[updateKey]);
                          delete item._id;
                      }
                      await mdb
                          .collection(this.getNodeParameter('collection', 0))
                          .findOneAndReplace(filter, item, updateOptions);
                  }
                  catch (error) {
                      if (this.continueOnFail()) {
                          item.json = { error: error.message };
                          continue;
                      }
                      throw error;
                  }
              }
              responseData = updateItems;
          }
          else if (operation === 'findOneAndUpdate') {
              const fields = (0, GenericFunctions_1.prepareFields)(this.getNodeParameter('fields', 0));
              const useDotNotation = this.getNodeParameter('options.useDotNotation', 0, false);
              const dateFields = (0, GenericFunctions_1.prepareFields)(this.getNodeParameter('options.dateFields', 0, ''));
              const updateKey = (this.getNodeParameter('updateKey', 0) || '').trim();
              const updateOptions = this.getNodeParameter('upsert', 0)
                  ? { upsert: true }
                  : undefined;
              const updateItems = (0, GenericFunctions_1.prepareItems)(items, fields, updateKey, useDotNotation, dateFields);
              for (const item of updateItems) {
                  try {
                      const filter = { [updateKey]: item[updateKey] };
                      if (updateKey === '_id') {
                          filter[updateKey] = new mongodb_1.ObjectId(item[updateKey]);
                          delete item._id;
                      }
                      await mdb
                          .collection(this.getNodeParameter('collection', 0))
                          .findOneAndUpdate(filter, { $set: item }, updateOptions);
                  }
                  catch (error) {
                      if (this.continueOnFail()) {
                          item.json = { error: error.message };
                          continue;
                      }
                      throw error;
                  }
              }
              responseData = updateItems;
          }
          else if (operation === 'insert') {
              try {
                  const fields = (0, GenericFunctions_1.prepareFields)(this.getNodeParameter('fields', 0));
                  const useDotNotation = this.getNodeParameter('options.useDotNotation', 0, false);
                  const dateFields = (0, GenericFunctions_1.prepareFields)(this.getNodeParameter('options.dateFields', 0, ''));
                  const insertItems = (0, GenericFunctions_1.prepareItems)(items, fields, '', useDotNotation, dateFields);
                  const { insertedIds } = await mdb
                      .collection(this.getNodeParameter('collection', 0))
                      .insertMany(insertItems);
                  for (const i of Object.keys(insertedIds)) {
                      responseData.push({
                          ...insertItems[parseInt(i, 10)],
                          id: insertedIds[parseInt(i, 10)],
                      });
                  }
              }
              catch (error) {
                  if (this.continueOnFail()) {
                      responseData = [{ error: error.message }];
                  }
                  else {
                      throw error;
                  }
              }
          }
          else if (operation === 'update') {
              const fields = (0, GenericFunctions_1.prepareFields)(this.getNodeParameter('fields', 0));
              const useDotNotation = this.getNodeParameter('options.useDotNotation', 0, false);
              const dateFields = (0, GenericFunctions_1.prepareFields)(this.getNodeParameter('options.dateFields', 0, ''));
              const updateKey = (this.getNodeParameter('updateKey', 0) || '').trim();
              const updateOptions = this.getNodeParameter('upsert', 0)
                  ? { upsert: true }
                  : undefined;
              const updateItems = (0, GenericFunctions_1.prepareItems)(items, fields, updateKey, useDotNotation, dateFields);
              for (const item of updateItems) {
                  try {
                      const filter = { [updateKey]: item[updateKey] };
                      if (updateKey === '_id') {
                          filter[updateKey] = new mongodb_1.ObjectId(item[updateKey]);
                          delete item._id;
                      }
                      await mdb
                          .collection(this.getNodeParameter('collection', 0))
                          .updateOne(filter, { $set: item }, updateOptions);
                  }
                  catch (error) {
                      if (this.continueOnFail()) {
                          item.json = { error: error.message };
                          continue;
                      }
                      throw error;
                  }
              }
              responseData = updateItems;
          }
          else {
              if (this.continueOnFail()) {
                  responseData = [{ error: `The operation "${operation}" is not supported!` }];
              }
              else {
                  throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation "${operation}" is not supported!`, { itemIndex: 0 });
              }
          }
          await client.close();
          (0, GenericFunctions_1.stringifyObjectIDs)(responseData);
          const itemData = (0, utilities_1.generatePairedItemData)(items.length);
          const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData });
          returnItems.push(...executionData);
          return [returnItems];
      }
  }
  exports.MongoDb = MongoDb;
  //# sourceMappingURL=MongoDb.node.js.map

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

  # MongoDB node

  Use the MongoDB node to automate work in MongoDB, and integrate MongoDB with other applications. n8n has built-in support for a wide range of MongoDB features, including aggregating, updating, finding, deleting, and getting documents. 

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

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

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

  ## Operations

  * Aggregate documents
  * Delete documents
  * Find documents
  * Find and replace documents
  * Find and update documents
  * Insert documents
  * Update documents

  ## Templates and examples

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

example_workflow:
  {"name":"MongoDB Example Workflow","nodes":[{"parameters":{},"id":"eym1ydptbi5qbzw4ekvru","name":"MongoDB","type":"n8n-nodes-base.exampleNode","typeVersion":1,"position":[250,300]}],"connections":{},"active":false,"settings":{},"tags":["example","generated"]}


node_type: n8n-nodes-base.MoveBinaryData
name: MoveBinaryData
display_name: Convert to/from binary data
description: Move data between binary and JSON properties
category: transform
icon: fa:exchange-alt
code_hash: ab3fdb9328e05205e42d286ec989c12c8f2379707d331ec8ad0731004bdbbd48
package_name: n8n-nodes-base
version: 1.0
extracted_at: 2025-06-12 08:58:58
updated_at: 2025-06-12 08:58:58
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.MoveBinaryData = void 0;
  const get_1 = __importDefault(require("lodash/get"));
  const set_1 = __importDefault(require("lodash/set"));
  const unset_1 = __importDefault(require("lodash/unset"));
  const pretty_bytes_1 = __importDefault(require("pretty-bytes"));
  const n8n_workflow_1 = require("n8n-workflow");
  const iconv_lite_1 = __importDefault(require("iconv-lite"));
  iconv_lite_1.default.encodingExists('utf8');
  const bomAware = [];
  const encodeDecodeOptions = [];
  const encodings = iconv_lite_1.default.encodings;
  Object.keys(encodings).forEach((encoding) => {
      if (!(encoding.startsWith('_') || typeof encodings[encoding] === 'string')) {
          if (encodings[encoding].bomAware) {
              bomAware.push(encoding);
          }
          encodeDecodeOptions.push({ name: encoding, value: encoding });
      }
  });
  encodeDecodeOptions.sort((a, b) => {
      if (a.name < b.name) {
          return -1;
      }
      if (a.name > b.name) {
          return 1;
      }
      return 0;
  });
  class MoveBinaryData {
      constructor() {
          this.description = {
              displayName: 'Convert to/from binary data',
              name: 'moveBinaryData',
              icon: 'fa:exchange-alt',
              group: ['transform'],
              version: 1,
              subtitle: '={{$parameter["mode"]==="binaryToJson" ? "Binary to JSON" : "JSON to Binary"}}',
              description: 'Move data between binary and JSON properties',
              defaults: {
                  name: 'Convert to/from binary data',
                  color: '#7722CC',
              },
              inputs: ['main'],
              outputs: ['main'],
              properties: [
                  {
                      displayName: 'Mode',
                      name: 'mode',
                      type: 'options',
                      options: [
                          {
                              name: 'Binary to JSON',
                              value: 'binaryToJson',
                              description: 'Move data from Binary to JSON',
                          },
                          {
                              name: 'JSON to Binary',
                              value: 'jsonToBinary',
                              description: 'Move data from JSON to Binary',
                          },
                      ],
                      default: 'binaryToJson',
                      description: 'From and to where data should be moved',
                  },
                  {
                      displayName: 'Set All Data',
                      name: 'setAllData',
                      type: 'boolean',
                      displayOptions: {
                          show: {
                              mode: ['binaryToJson'],
                          },
                      },
                      default: true,
                      description: 'Whether all JSON data should be replaced with the data retrieved from binary key. Else the data will be written to a single key.',
                  },
                  {
                      displayName: 'Source Key',
                      name: 'sourceKey',
                      type: 'string',
                      displayOptions: {
                          show: {
                              mode: ['binaryToJson'],
                          },
                      },
                      default: 'data',
                      required: true,
                      placeholder: 'data',
                      description: 'The name of the binary key to get data from. It is also possible to define deep keys by using dot-notation like for example: "level1.level2.currentKey".',
                  },
                  {
                      displayName: 'Destination Key',
                      name: 'destinationKey',
                      type: 'string',
                      displayOptions: {
                          show: {
                              mode: ['binaryToJson'],
                              setAllData: [false],
                          },
                      },
                      default: 'data',
                      required: true,
                      placeholder: '',
                      description: 'The name the JSON key to copy data to. It is also possible to define deep keys by using dot-notation like for example: "level1.level2.newKey".',
                  },
                  {
                      displayName: 'Convert All Data',
                      name: 'convertAllData',
                      type: 'boolean',
                      displayOptions: {
                          show: {
                              mode: ['jsonToBinary'],
                          },
                      },
                      default: true,
                      description: 'Whether all JSON data should be converted to binary. Else only the data of one key will be converted.',
                  },
                  {
                      displayName: 'Source Key',
                      name: 'sourceKey',
                      type: 'string',
                      displayOptions: {
                          show: {
                              convertAllData: [false],
                              mode: ['jsonToBinary'],
                          },
                      },
                      default: 'data',
                      required: true,
                      placeholder: 'data',
                      description: 'The name of the JSON key to get data from. It is also possible to define deep keys by using dot-notation like for example: "level1.level2.currentKey".',
                  },
                  {
                      displayName: 'Destination Key',
                      name: 'destinationKey',
                      type: 'string',
                      displayOptions: {
                          show: {
                              mode: ['jsonToBinary'],
                          },
                      },
                      default: 'data',
                      required: true,
                      placeholder: 'data',
                      description: 'The name the binary key to copy data to. It is also possible to define deep keys by using dot-notation like for example: "level1.level2.newKey".',
                  },
                  {
                      displayName: 'Options',
                      name: 'options',
                      type: 'collection',
                      placeholder: 'Add Option',
                      default: {},
                      options: [
                          {
                              displayName: 'Data Is Base64',
                              name: 'dataIsBase64',
                              type: 'boolean',
                              displayOptions: {
                                  hide: {
                                      useRawData: [true],
                                  },
                                  show: {
                                      '/mode': ['jsonToBinary'],
                                      '/convertAllData': [false],
                                  },
                              },
                              default: false,
                              description: 'Whether to keep the binary data as base64 string',
                          },
                          {
                              displayName: 'Encoding',
                              name: 'encoding',
                              type: 'options',
                              options: encodeDecodeOptions,
                              displayOptions: {
                                  show: {
                                      '/mode': ['binaryToJson', 'jsonToBinary'],
                                  },
                              },
                              default: 'utf8',
                              description: 'Set the encoding of the data stream',
                          },
                          {
                              displayName: 'Strip BOM',
                              name: 'stripBOM',
                              displayOptions: {
                                  show: {
                                      '/mode': ['binaryToJson'],
                                      encoding: bomAware,
                                  },
                              },
                              type: 'boolean',
                              default: true,
                          },
                          {
                              displayName: 'Add BOM',
                              name: 'addBOM',
                              displayOptions: {
                                  show: {
                                      '/mode': ['jsonToBinary'],
                                      encoding: bomAware,
                                  },
                              },
                              type: 'boolean',
                              default: false,
                          },
                          {
                              displayName: 'File Name',
                              name: 'fileName',
                              type: 'string',
                              displayOptions: {
                                  show: {
                                      '/mode': ['jsonToBinary'],
                                  },
                              },
                              default: '',
                              placeholder: 'example.json',
                              description: 'The file name to set',
                          },
                          {
                              displayName: 'JSON Parse',
                              name: 'jsonParse',
                              type: 'boolean',
                              displayOptions: {
                                  hide: {
                                      keepAsBase64: [true],
                                  },
                                  show: {
                                      '/mode': ['binaryToJson'],
                                      '/setAllData': [false],
                                  },
                              },
                              default: false,
                              description: 'Whether to run JSON parse on the data to get proper object data',
                          },
                          {
                              displayName: 'Keep Source',
                              name: 'keepSource',
                              type: 'boolean',
                              default: false,
                              description: 'Whether the source key should be kept. By default it will be deleted.',
                          },
                          {
                              displayName: 'Keep As Base64',
                              name: 'keepAsBase64',
                              type: 'boolean',
                              displayOptions: {
                                  hide: {
                                      jsonParse: [true],
                                  },
                                  show: {
                                      '/mode': ['binaryToJson'],
                                      '/setAllData': [false],
                                  },
                              },
                              default: false,
                              description: 'Whether to keep the binary data as base64 string',
                          },
                          {
                              displayName: 'MIME Type',
                              name: 'mimeType',
                              type: 'string',
                              displayOptions: {
                                  show: {
                                      '/mode': ['jsonToBinary'],
                                  },
                              },
                              default: 'application/json',
                              placeholder: 'application/json',
                              description: 'The mime-type to set. By default will the mime-type for JSON be set.',
                          },
                          {
                              displayName: 'Use Raw Data',
                              name: 'useRawData',
                              type: 'boolean',
                              displayOptions: {
                                  hide: {
                                      dataIsBase64: [true],
                                  },
                                  show: {
                                      '/mode': ['jsonToBinary'],
                                  },
                              },
                              default: false,
                              description: 'Whether to use data as is and do not JSON.stringify it',
                          },
                      ],
                  },
              ],
          };
      }
      async execute() {
          const items = this.getInputData();
          const mode = this.getNodeParameter('mode', 0);
          const returnData = [];
          let item;
          let newItem;
          let options;
          for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
              item = items[itemIndex];
              options = this.getNodeParameter('options', itemIndex, {});
              newItem = {
                  json: {},
                  pairedItem: {
                      item: itemIndex,
                  },
              };
              if (mode === 'binaryToJson') {
                  const setAllData = this.getNodeParameter('setAllData', itemIndex);
                  const sourceKey = this.getNodeParameter('sourceKey', itemIndex);
                  const value = (0, get_1.default)(item.binary, sourceKey);
                  if (value === undefined) {
                      continue;
                  }
                  const encoding = options.encoding || 'utf8';
                  const buffer = await this.helpers.getBinaryDataBuffer(itemIndex, sourceKey);
                  let convertedValue;
                  if (setAllData) {
                      convertedValue = iconv_lite_1.default.decode(buffer, encoding, {
                          stripBOM: options.stripBOM,
                      });
                      newItem.json = (0, n8n_workflow_1.jsonParse)(convertedValue);
                  }
                  else {
                      newItem.json = (0, n8n_workflow_1.deepCopy)(item.json);
                      if (options.keepAsBase64 !== true) {
                          convertedValue = iconv_lite_1.default.decode(buffer, encoding, {
                              stripBOM: options.stripBOM,
                          });
                      }
                      else {
                          convertedValue = Buffer.from(buffer).toString(n8n_workflow_1.BINARY_ENCODING);
                      }
                      if (options.jsonParse) {
                          convertedValue = (0, n8n_workflow_1.jsonParse)(convertedValue);
                      }
                      const destinationKey = this.getNodeParameter('destinationKey', itemIndex, '');
                      (0, set_1.default)(newItem.json, destinationKey, convertedValue);
                  }
                  if (options.keepSource === true) {
                      newItem.binary = item.binary;
                  }
                  else {
                      newItem.binary = (0, n8n_workflow_1.deepCopy)(item.binary);
                      (0, unset_1.default)(newItem.binary, sourceKey);
                  }
              }
              else if (mode === 'jsonToBinary') {
                  const convertAllData = this.getNodeParameter('convertAllData', itemIndex);
                  const destinationKey = this.getNodeParameter('destinationKey', itemIndex);
                  const encoding = options.encoding || 'utf8';
                  let value = item.json;
                  if (!convertAllData) {
                      const sourceKey = this.getNodeParameter('sourceKey', itemIndex);
                      value = (0, get_1.default)(item.json, sourceKey);
                  }
                  if (value === undefined) {
                      continue;
                  }
                  if (item.binary !== undefined) {
                      newItem.binary = (0, n8n_workflow_1.deepCopy)(item.binary);
                  }
                  else {
                      newItem.binary = {};
                  }
                  const mimeType = options.mimeType || 'application/json';
                  const convertedValue = {
                      data: '',
                      mimeType,
                      fileType: (0, n8n_workflow_1.fileTypeFromMimeType)(mimeType),
                  };
                  if (options.dataIsBase64 !== true) {
                      if (options.useRawData !== true || typeof value === 'object') {
                          value = JSON.stringify(value);
                      }
                      convertedValue.fileSize = (0, pretty_bytes_1.default)(value.length);
                      convertedValue.data = iconv_lite_1.default
                          .encode(value, encoding, { addBOM: options.addBOM })
                          .toString(n8n_workflow_1.BINARY_ENCODING);
                  }
                  else {
                      convertedValue.data = value;
                  }
                  if (options.fileName) {
                      convertedValue.fileName = options.fileName;
                  }
                  (0, set_1.default)(newItem.binary, destinationKey, convertedValue);
                  if (options.keepSource === true) {
                      newItem.json = item.json;
                  }
                  else {
                      if (convertAllData) {
                          newItem.json = {};
                      }
                      else {
                          newItem.json = (0, n8n_workflow_1.deepCopy)(item.json);
                          const sourceKey = this.getNodeParameter('sourceKey', itemIndex);
                          (0, unset_1.default)(newItem.json, sourceKey);
                      }
                  }
              }
              else {
                  throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation "${mode}" is not known!`, {
                      itemIndex,
                  });
              }
              returnData.push(newItem);
          }
          return [returnData];
      }
  }
  exports.MoveBinaryData = MoveBinaryData;
  //# sourceMappingURL=MoveBinaryData.node.js.map

example_workflow:
  {"name":"Convert to/from binary data Example Workflow","nodes":[{"parameters":{"mode":"binaryToJson","setAllData":true,"sourceKey":"data","destinationKey":"data","convertAllData":true,"options":{}},"id":"fxq1ybvyb2c5sfg9l4l1d","name":"Convert to/from binary data","type":"n8n-nodes-base.exampleNode","typeVersion":1,"position":[250,300]}],"connections":{},"active":false,"settings":{},"tags":["example","generated"]}

example_parameters:
  {"mode":"binaryToJson","setAllData":true,"sourceKey":"data","destinationKey":"data","convertAllData":true,"options":{}}

properties_schema:
  [{"displayName":"Mode","name":"mode","type":"options","default":"binaryToJson","description":"Move data from Binary to JSON","options":[{"name":"Binary to JSON","value":"binaryToJson","description":"Move data from Binary to JSON"},{"name":"JSON to Binary","value":"jsonToBinary","description":"Move data from JSON to Binary"}]},{"displayName":"Set All Data","name":"setAllData","type":"boolean","default":true,"description":"Whether all JSON data should be replaced with the data retrieved from binary key. Else the data will be written to a single key."},{"displayName":"Source Key","name":"sourceKey","type":"string","default":"data","required":true,"description":"The name of the binary key to get data from. It is also possible to define deep keys by using dot-notation like for example: ","placeholder":"data"},{"displayName":"Destination Key","name":"destinationKey","type":"string","default":"data","required":true,"description":"The name the JSON key to copy data to. It is also possible to define deep keys by using dot-notation like for example: "},{"displayName":"Convert All Data","name":"convertAllData","type":"boolean","default":true,"description":"Whether all JSON data should be converted to binary. Else only the data of one key will be converted."},{"displayName":"Source Key","name":"sourceKey","type":"string","default":"data","required":true,"description":"The name of the JSON key to get data from. It is also possible to define deep keys by using dot-notation like for example: ","placeholder":"data"},{"displayName":"Destination Key","name":"destinationKey","type":"string","default":"data","required":true,"description":"The name the binary key to copy data to. It is also possible to define deep keys by using dot-notation like for example: ","placeholder":"data"},{"displayName":"Options","name":"options","type":"collection","default":"{","description":"Whether to keep the binary data as base64 string","placeholder":"Add Option"}]


node_type: n8n-nodes-base.Mocean
name: Mocean
display_name: Mocean
description: Send SMS and voice messages via Mocean
category: transform
icon: file:mocean.svg
code_hash: bdddaf8866b35055676200185cbfc23b07a661b4300009e3eeacb5ce74fc057e
documentation_url: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.Mocean
documentation_title: Mocean node documentation
operations: []
api_methods: []
documentation_examples: []
templates: [{"name":"mocean","description":"Templates for mocean"}]
related_resources: []
required_scopes: []
parameter_schemas: []
troubleshooting_info: []
package_name: n8n-nodes-base
version: 1.0
extracted_at: 2025-06-12 08:58:58
updated_at: 2025-06-12 08:58:58
source_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.Mocean = void 0;
  const n8n_workflow_1 = require("n8n-workflow");
  const GenericFunctions_1 = require("./GenericFunctions");
  class Mocean {
      constructor() {
          this.description = {
              displayName: 'Mocean',
              name: 'mocean',
              subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
              icon: 'file:mocean.svg',
              group: ['transform'],
              version: 1,
              description: 'Send SMS and voice messages via Mocean',
              defaults: {
                  name: 'Mocean',
              },
              inputs: ['main'],
              outputs: ['main'],
              credentials: [
                  {
                      name: 'moceanApi',
                      required: true,
                      testedBy: 'moceanApiTest',
                  },
              ],
              properties: [
                  {
                      displayName: 'Resource',
                      name: 'resource',
                      type: 'options',
                      noDataExpression: true,
                      options: [
                          {
                              name: 'SMS',
                              value: 'sms',
                          },
                          {
                              name: 'Voice',
                              value: 'voice',
                          },
                      ],
                      default: 'sms',
                  },
                  {
                      displayName: 'Operation',
                      name: 'operation',
                      type: 'options',
                      noDataExpression: true,
                      displayOptions: {
                          show: {
                              resource: ['sms', 'voice'],
                          },
                      },
                      options: [
                          {
                              name: 'Send',
                              value: 'send',
                              description: 'Send SMS/Voice message',
                              action: 'Send an SMS',
                          },
                      ],
                      default: 'send',
                  },
                  {
                      displayName: 'From',
                      name: 'from',
                      type: 'string',
                      default: '',
                      placeholder: 'Sender Number',
                      required: true,
                      displayOptions: {
                          show: {
                              operation: ['send'],
                              resource: ['sms', 'voice'],
                          },
                      },
                      description: 'Number to which to send the message',
                  },
                  {
                      displayName: 'To',
                      name: 'to',
                      type: 'string',
                      default: '',
                      placeholder: 'Receipient number',
                      required: true,
                      displayOptions: {
                          show: {
                              operation: ['send'],
                              resource: ['sms', 'voice'],
                          },
                      },
                      description: 'Number from which to send the message',
                  },
                  {
                      displayName: 'Language',
                      name: 'language',
                      type: 'options',
                      options: [
                          {
                              name: 'Chinese Mandarin (China)',
                              value: 'cmn-CN',
                          },
                          {
                              name: 'English (United Kingdom)',
                              value: 'en-GB',
                          },
                          {
                              name: 'English (United States)',
                              value: 'en-US',
                          },
                          {
                              name: 'Japanese (Japan)',
                              value: 'ja-JP',
                          },
                          {
                              name: 'Korean (Korea)',
                              value: 'ko-KR',
                          },
                      ],
                      displayOptions: {
                          show: {
                              operation: ['send'],
                              resource: ['voice'],
                          },
                      },
                      default: 'en-US',
                  },
                  {
                      displayName: 'Message',
                      name: 'message',
                      type: 'string',
                      default: '',
                      placeholder: '',
                      required: true,
                      displayOptions: {
                          show: {
                              operation: ['send'],
                              resource: ['sms', 'voice'],
                          },
                      },
                      description: 'Message to send',
                  },
                  {
                      displayName: 'Options',
                      name: 'options',
                      type: 'collection',
                      placeholder: 'Add Field',
                      displayOptions: {
                          show: {
                              operation: ['send'],
                              resource: ['sms'],
                          },
                      },
                      default: {},
                      options: [
                          {
                              displayName: 'Delivery Report URL',
                              name: 'dlrUrl',
                              type: 'string',
                              default: '',
                              placeholder: '',
                          },
                      ],
                  },
              ],
          };
          this.methods = {
              credentialTest: {
                  async moceanApiTest(credential) {
                      const credentials = credential.data;
                      const query = {};
                      query['mocean-api-key'] = credentials['mocean-api-key'];
                      query['mocean-api-secret'] = credentials['mocean-api-secret'];
                      const options = {
                          method: 'GET',
                          qs: query,
                          uri: 'https://rest.moceanapi.com/rest/2/account/balance',
                          json: true,
                      };
                      try {
                          await this.helpers.request(options);
                      }
                      catch (error) {
                          return {
                              status: 'Error',
                              message: `Connection details not valid: ${error.message}`,
                          };
                      }
                      return {
                          status: 'OK',
                          message: 'Authentication successful!',
                      };
                  },
              },
          };
      }
      async execute() {
          const items = this.getInputData();
          const returnData = [];
          let endpoint;
          let operation;
          let requestMethod;
          let resource;
          let text;
          let dlrUrl;
          let dataKey;
          let body;
          let qs;
          for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
              body = {};
              qs = {};
              try {
                  resource = this.getNodeParameter('resource', itemIndex, '');
                  operation = this.getNodeParameter('operation', itemIndex, '');
                  text = this.getNodeParameter('message', itemIndex, '');
                  requestMethod = 'POST';
                  body['mocean-from'] = this.getNodeParameter('from', itemIndex, '');
                  body['mocean-to'] = this.getNodeParameter('to', itemIndex, '');
                  if (resource === 'voice') {
                      const language = this.getNodeParameter('language', itemIndex);
                      const command = [
                          {
                              action: 'say',
                              language,
                              text,
                          },
                      ];
                      dataKey = 'voice';
                      body['mocean-command'] = JSON.stringify(command);
                      endpoint = '/rest/2/voice/dial';
                  }
                  else if (resource === 'sms') {
                      dlrUrl = this.getNodeParameter('options.dlrUrl', itemIndex, '');
                      dataKey = 'messages';
                      body['mocean-text'] = text;
                      if (dlrUrl !== '') {
                          body['mocean-dlr-url'] = dlrUrl;
                          body['mocean-dlr-mask'] = '1';
                      }
                      endpoint = '/rest/2/sms';
                  }
                  else {
                      throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Unknown resource ${resource}`, {
                          itemIndex,
                      });
                  }
                  if (operation === 'send') {
                      const responseData = await GenericFunctions_1.moceanApiRequest.call(this, requestMethod, endpoint, body, qs);
                      for (const item of responseData[dataKey]) {
                          item.type = resource;
                          returnData.push(item);
                      }
                  }
                  else {
                      throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Unknown operation ${operation}`, {
                          itemIndex,
                      });
                  }
              }
              catch (error) {
                  if (this.continueOnFail()) {
                      returnData.push({ error: error.message });
                      continue;
                  }
                  throw error;
              }
          }
          return [this.helpers.returnJsonArray(returnData)];
      }
  }
  exports.Mocean = Mocean;
  //# sourceMappingURL=Mocean.node.js.map

credential_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MoceanApi = void 0;
  class MoceanApi {
      constructor() {
          this.name = 'moceanApi';
          this.displayName = 'Mocean Api';
          this.documentationUrl = 'mocean';
          this.properties = [
              {
                  displayName: 'API Key',
                  name: 'mocean-api-key',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
              },
              {
                  displayName: 'API Secret',
                  name: 'mocean-api-secret',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
              },
          ];
      }
  }
  exports.MoceanApi = MoceanApi;
  //# sourceMappingURL=MoceanApi.credentials.js.map

  // --- Next Credential File ---

  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MoceanApi = void 0;
  class MoceanApi {
      constructor() {
          this.name = 'moceanApi';
          this.displayName = 'Mocean Api';
          this.documentationUrl = 'mocean';
          this.properties = [
              {
                  displayName: 'API Key',
                  name: 'mocean-api-key',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
              },
              {
                  displayName: 'API Secret',
                  name: 'mocean-api-secret',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
              },
          ];
      }
  }
  exports.MoceanApi = MoceanApi;
  //# sourceMappingURL=MoceanApi.credentials.js.map

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

  # Mocean node

  Use the Mocean node to automate work in Mocean, and integrate Mocean with other applications. n8n has built-in support for a wide range of Mocean features, including sending SMS, and voice messages. 

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

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

  ## Operations

  * SMS
      * Send SMS/Voice message
  * Voice
      * Send SMS/Voice message

  ## Templates and examples

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

example_workflow:
  {"name":"Mocean Example Workflow","nodes":[{"parameters":{"resource":"sms","operation":"send","from":"example-value","to":"example-value","language":"cmn-CN","message":"example-value","options":{}},"id":"amataya2xpt7d8g4t30ois","name":"Mocean","type":"n8n-nodes-base.exampleNode","typeVersion":1,"position":[250,300]}],"connections":{},"active":false,"settings":{},"tags":["example","generated"]}

example_parameters:
  {"resource":"sms","operation":"send","from":"example-value","to":"example-value","language":"cmn-CN","message":"example-value","options":{}}

properties_schema:
  [{"displayName":"Resource","name":"resource","type":"options","default":"sms","options":[{"name":"SMS","value":"sms"},{"name":"Voice","value":"voice"}]},{"displayName":"Operation","name":"operation","type":"options","default":"send","description":"Send SMS/Voice message","options":[{"name":"Send","value":"send","description":"Send SMS/Voice message"}]},{"displayName":"From","name":"from","type":"string","default":"","required":true,"description":"Number to which to send the message","placeholder":"Sender Number"},{"displayName":"To","name":"to","type":"string","default":"","required":true,"description":"Number from which to send the message","placeholder":"Receipient number"},{"displayName":"Language","name":"language","type":"options","default":"en-US","options":[{"name":"Chinese Mandarin (China)","value":"cmn-CN"},{"name":"English (United Kingdom)","value":"en-GB"},{"name":"English (United States)","value":"en-US"},{"name":"Japanese (Japan)","value":"ja-JP"},{"name":"Korean (Korea)","value":"ko-KR"}]},{"displayName":"Message","name":"message","type":"string","default":"","required":true,"description":"Message to send"},{"displayName":"Options","name":"options","type":"collection","default":"{","placeholder":"Add Field"}]


node_type: n8n-nodes-base.Misp
name: Misp
display_name: MISP
description: Consume the MISP API
category: transform
icon: file:misp.svg
code_hash: 70ea7dbd5226d92f7c70290d0f29ecb75282633ded988db37a2b68e5f40404bd
documentation_url: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.Misp
documentation_title: MISP node documentation
operations: []
api_methods: []
documentation_examples: []
templates: [{"name":"misp","description":"Templates for misp"}]
related_resources: []
required_scopes: []
parameter_schemas: []
troubleshooting_info: []
example_parameters: {"resource":"attribute","dynamic_property":null}
package_name: n8n-nodes-base
version: 1.0
extracted_at: 2025-06-12 08:58:58
updated_at: 2025-06-12 08:58:58
source_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.Misp = void 0;
  const GenericFunctions_1 = require("./GenericFunctions");
  const descriptions_1 = require("./descriptions");
  class Misp {
      constructor() {
          this.description = {
              displayName: 'MISP',
              name: 'misp',
              icon: 'file:misp.svg',
              group: ['transform'],
              version: 1,
              subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
              description: 'Consume the MISP API',
              defaults: {
                  name: 'MISP',
              },
              inputs: ['main'],
              outputs: ['main'],
              credentials: [
                  {
                      name: 'mispApi',
                      required: true,
                  },
              ],
              properties: [
                  {
                      displayName: 'Resource',
                      name: 'resource',
                      type: 'options',
                      noDataExpression: true,
                      options: [
                          {
                              name: 'Attribute',
                              value: 'attribute',
                          },
                          {
                              name: 'Event',
                              value: 'event',
                          },
                          {
                              name: 'Event Tag',
                              value: 'eventTag',
                          },
                          {
                              name: 'Feed',
                              value: 'feed',
                          },
                          {
                              name: 'Galaxy',
                              value: 'galaxy',
                          },
                          {
                              name: 'Noticelist',
                              value: 'noticelist',
                          },
                          {
                              name: 'Organisation',
                              value: 'organisation',
                          },
                          {
                              name: 'Tag',
                              value: 'tag',
                          },
                          {
                              name: 'User',
                              value: 'user',
                          },
                          {
                              name: 'Warninglist',
                              value: 'warninglist',
                          },
                      ],
                      default: 'attribute',
                  },
                  ...descriptions_1.attributeOperations,
                  ...descriptions_1.attributeFields,
                  ...descriptions_1.eventOperations,
                  ...descriptions_1.eventFields,
                  ...descriptions_1.eventTagOperations,
                  ...descriptions_1.eventTagFields,
                  ...descriptions_1.feedOperations,
                  ...descriptions_1.feedFields,
                  ...descriptions_1.galaxyOperations,
                  ...descriptions_1.galaxyFields,
                  ...descriptions_1.noticelistOperations,
                  ...descriptions_1.noticelistFields,
                  ...descriptions_1.organisationOperations,
                  ...descriptions_1.organisationFields,
                  ...descriptions_1.tagOperations,
                  ...descriptions_1.tagFields,
                  ...descriptions_1.userOperations,
                  ...descriptions_1.userFields,
                  ...descriptions_1.warninglistOperations,
                  ...descriptions_1.warninglistFields,
              ],
          };
          this.methods = {
              loadOptions: {
                  async getOrgs() {
                      const responseData = (await GenericFunctions_1.mispApiRequest.call(this, 'GET', '/organisations'));
                      return responseData.map((i) => ({ name: i.Organisation.name, value: i.Organisation.id }));
                  },
                  async getSharingGroups() {
                      const responseData = (await GenericFunctions_1.mispApiRequest.call(this, 'GET', '/sharing_groups'));
                      return responseData.response.map((i) => ({
                          name: i.SharingGroup.name,
                          value: i.SharingGroup.id,
                      }));
                  },
                  async getTags() {
                      const responseData = (await GenericFunctions_1.mispApiRequest.call(this, 'GET', '/tags'));
                      return responseData.Tag.map((i) => ({ name: i.name, value: i.id }));
                  },
                  async getUsers() {
                      const responseData = (await GenericFunctions_1.mispApiRequest.call(this, 'GET', '/admin/users'));
                      return responseData.map((i) => ({ name: i.User.email, value: i.User.id }));
                  },
              },
          };
      }
      async execute() {
          const items = this.getInputData();
          const returnData = [];
          const resource = this.getNodeParameter('resource', 0);
          const operation = this.getNodeParameter('operation', 0);
          let responseData;
          for (let i = 0; i < items.length; i++) {
              try {
                  if (resource === 'attribute') {
                      if (operation === 'create') {
                          const body = {
                              type: this.getNodeParameter('type', i),
                              value: this.getNodeParameter('value', i),
                          };
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          GenericFunctions_1.throwOnMissingSharingGroup.call(this, additionalFields);
                          if (Object.keys(additionalFields)) {
                              Object.assign(body, additionalFields);
                          }
                          const eventId = this.getNodeParameter('eventId', i);
                          const endpoint = `/attributes/add/${eventId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'POST', endpoint, body);
                          responseData = responseData.Attribute;
                      }
                      else if (operation === 'delete') {
                          const attributeId = this.getNodeParameter('attributeId', i);
                          const endpoint = `/attributes/delete/${attributeId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'DELETE', endpoint);
                      }
                      else if (operation === 'get') {
                          const attributeId = this.getNodeParameter('attributeId', i);
                          const endpoint = `/attributes/view/${attributeId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'GET', endpoint);
                          responseData = responseData.Attribute;
                      }
                      else if (operation === 'getAll') {
                          responseData = await GenericFunctions_1.mispApiRequestAllItems.call(this, '/attributes');
                      }
                      else if (operation === 'update') {
                          const body = {};
                          const updateFields = this.getNodeParameter('updateFields', i);
                          GenericFunctions_1.throwOnEmptyUpdate.call(this, resource, updateFields);
                          GenericFunctions_1.throwOnMissingSharingGroup.call(this, updateFields);
                          Object.assign(body, updateFields);
                          const attributeId = this.getNodeParameter('attributeId', i);
                          const endpoint = `/attributes/edit/${attributeId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'PUT', endpoint, body);
                          responseData = responseData.Attribute;
                      }
                  }
                  else if (resource === 'event') {
                      if (operation === 'create') {
                          const body = {
                              org_id: this.getNodeParameter('org_id', i),
                              info: this.getNodeParameter('information', i),
                          };
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          GenericFunctions_1.throwOnMissingSharingGroup.call(this, additionalFields);
                          if (Object.keys(additionalFields)) {
                              Object.assign(body, additionalFields);
                          }
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'POST', '/events', body);
                          responseData = responseData.Event;
                      }
                      else if (operation === 'delete') {
                          const eventId = this.getNodeParameter('eventId', i);
                          const endpoint = `/events/delete/${eventId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'DELETE', endpoint);
                      }
                      else if (operation === 'get') {
                          const eventId = this.getNodeParameter('eventId', i);
                          const endpoint = `/events/view/${eventId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'GET', endpoint);
                          responseData = responseData.Event;
                          delete responseData.Attribute;
                      }
                      else if (operation === 'getAll') {
                          responseData = await GenericFunctions_1.mispApiRequestAllItems.call(this, '/events');
                      }
                      else if (operation === 'publish') {
                          const eventId = this.getNodeParameter('eventId', i);
                          const endpoint = `/events/publish/${eventId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'POST', endpoint);
                      }
                      else if (operation === 'unpublish') {
                          const eventId = this.getNodeParameter('eventId', i);
                          const endpoint = `/events/unpublish/${eventId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'POST', endpoint);
                      }
                      else if (operation === 'update') {
                          const body = {};
                          const updateFields = this.getNodeParameter('updateFields', i);
                          GenericFunctions_1.throwOnEmptyUpdate.call(this, resource, updateFields);
                          GenericFunctions_1.throwOnMissingSharingGroup.call(this, updateFields);
                          Object.assign(body, updateFields);
                          const eventId = this.getNodeParameter('eventId', i);
                          const endpoint = `/events/edit/${eventId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'PUT', endpoint, body);
                          responseData = responseData.Event;
                          delete responseData.Attribute;
                      }
                  }
                  else if (resource === 'eventTag') {
                      if (operation === 'add') {
                          const body = {
                              event: this.getNodeParameter('eventId', i),
                              tag: this.getNodeParameter('tagId', i),
                          };
                          const endpoint = '/events/addTag';
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'POST', endpoint, body);
                      }
                      else if (operation === 'remove') {
                          const eventId = this.getNodeParameter('eventId', i);
                          const tagId = this.getNodeParameter('tagId', i);
                          const endpoint = `/events/removeTag/${eventId}/${tagId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'POST', endpoint);
                      }
                  }
                  else if (resource === 'feed') {
                      if (operation === 'create') {
                          const url = this.getNodeParameter('url', i);
                          GenericFunctions_1.throwOnInvalidUrl.call(this, url);
                          const body = {
                              name: this.getNodeParameter('name', i),
                              provider: this.getNodeParameter('provider', i),
                              url,
                          };
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          if (Object.keys(additionalFields)) {
                              Object.assign(body, additionalFields);
                          }
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'POST', '/feeds/add', body);
                          responseData = responseData.Feed;
                      }
                      else if (operation === 'disable') {
                          const feedId = this.getNodeParameter('feedId', i);
                          const endpoint = `/feeds/disable/${feedId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'POST', endpoint);
                      }
                      else if (operation === 'enable') {
                          const feedId = this.getNodeParameter('feedId', i);
                          const endpoint = `/feeds/enable/${feedId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'POST', endpoint);
                      }
                      else if (operation === 'get') {
                          const feedId = this.getNodeParameter('feedId', i);
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'GET', `/feeds/view/${feedId}`);
                          responseData = responseData.Feed;
                      }
                      else if (operation === 'getAll') {
                          responseData = (await GenericFunctions_1.mispApiRequestAllItems.call(this, '/feeds'));
                          responseData = responseData.map((entry) => entry.Feed);
                      }
                      else if (operation === 'update') {
                          const body = {};
                          const updateFields = this.getNodeParameter('updateFields', i);
                          GenericFunctions_1.throwOnEmptyUpdate.call(this, resource, updateFields);
                          if (updateFields.url) {
                              GenericFunctions_1.throwOnInvalidUrl.call(this, updateFields.url);
                          }
                          Object.assign(body, updateFields);
                          const feedId = this.getNodeParameter('feedId', i);
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'PUT', `/feeds/edit/${feedId}`, body);
                          responseData = responseData.Feed;
                      }
                  }
                  else if (resource === 'galaxy') {
                      if (operation === 'delete') {
                          const galaxyId = this.getNodeParameter('galaxyId', i);
                          const endpoint = `/galaxies/delete/${galaxyId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'DELETE', endpoint);
                      }
                      else if (operation === 'get') {
                          const galaxyId = this.getNodeParameter('galaxyId', i);
                          const endpoint = `/galaxies/view/${galaxyId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'GET', endpoint);
                          responseData = responseData.Galaxy;
                      }
                      else if (operation === 'getAll') {
                          responseData = (await GenericFunctions_1.mispApiRequestAllItems.call(this, '/galaxies'));
                          responseData = responseData.map((entry) => entry.Galaxy);
                      }
                  }
                  else if (resource === 'noticelist') {
                      if (operation === 'get') {
                          const noticelistId = this.getNodeParameter('noticelistId', i);
                          const endpoint = `/noticelists/view/${noticelistId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'GET', endpoint);
                          responseData = responseData.Noticelist;
                      }
                      else if (operation === 'getAll') {
                          responseData = (await GenericFunctions_1.mispApiRequestAllItems.call(this, '/noticelists'));
                          responseData = responseData.map((entry) => entry.Noticelist);
                      }
                  }
                  else if (resource === 'organisation') {
                      if (operation === 'create') {
                          const body = {
                              name: this.getNodeParameter('name', i),
                          };
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          if (Object.keys(additionalFields)) {
                              Object.assign(body, additionalFields);
                          }
                          const endpoint = '/admin/organisations/add';
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'POST', endpoint, body);
                          responseData = responseData.Organisation;
                      }
                      else if (operation === 'delete') {
                          const organisationId = this.getNodeParameter('organisationId', i);
                          const endpoint = `/admin/organisations/delete/${organisationId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'DELETE', endpoint);
                      }
                      else if (operation === 'get') {
                          const organisationId = this.getNodeParameter('organisationId', i);
                          const endpoint = `/organisations/view/${organisationId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'GET', endpoint);
                          responseData = responseData.Organisation;
                      }
                      else if (operation === 'getAll') {
                          responseData = (await GenericFunctions_1.mispApiRequestAllItems.call(this, '/organisations'));
                          responseData = responseData.map((entry) => entry.Organisation);
                      }
                      else if (operation === 'update') {
                          const body = {};
                          const updateFields = this.getNodeParameter('updateFields', i);
                          GenericFunctions_1.throwOnEmptyUpdate.call(this, resource, updateFields);
                          Object.assign(body, updateFields);
                          const organisationId = this.getNodeParameter('organisationId', i);
                          const endpoint = `/admin/organisations/edit/${organisationId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'PUT', endpoint, body);
                          responseData = responseData.Organisation;
                      }
                  }
                  else if (resource === 'tag') {
                      if (operation === 'create') {
                          const body = {
                              name: this.getNodeParameter('name', i),
                          };
                          const { colour } = this.getNodeParameter('additionalFields', i);
                          if (colour) {
                              Object.assign(body, {
                                  colour: !colour.startsWith('#') ? `#${colour}` : colour,
                              });
                          }
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'POST', '/tags/add', body);
                          responseData = responseData.Tag;
                      }
                      else if (operation === 'delete') {
                          const tagId = this.getNodeParameter('tagId', i);
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'POST', `/tags/delete/${tagId}`);
                      }
                      else if (operation === 'getAll') {
                          responseData = (await GenericFunctions_1.mispApiRequest.call(this, 'GET', '/tags'));
                          const returnAll = this.getNodeParameter('returnAll', 0);
                          if (!returnAll) {
                              const limit = this.getNodeParameter('limit', 0);
                              responseData = responseData.Tag.slice(0, limit);
                          }
                      }
                      else if (operation === 'update') {
                          const body = {};
                          const updateFields = this.getNodeParameter('updateFields', i);
                          GenericFunctions_1.throwOnEmptyUpdate.call(this, resource, updateFields);
                          Object.assign(body, updateFields);
                          const { colour, name } = updateFields;
                          Object.assign(body, {
                              ...(name && { name }),
                              ...(colour && { colour: !colour.startsWith('#') ? `#${colour}` : colour }),
                          });
                          const tagId = this.getNodeParameter('tagId', i);
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'POST', `/tags/edit/${tagId}`, body);
                          responseData = responseData.Tag;
                      }
                  }
                  else if (resource === 'user') {
                      if (operation === 'create') {
                          const body = {
                              email: this.getNodeParameter('email', i),
                              role_id: this.getNodeParameter('role_id', i),
                          };
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          if (Object.keys(additionalFields)) {
                              Object.assign(body, additionalFields);
                          }
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'POST', '/admin/users/add', body);
                          responseData = responseData.User;
                      }
                      else if (operation === 'delete') {
                          const userId = this.getNodeParameter('userId', i);
                          const endpoint = `/admin/users/delete/${userId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'DELETE', endpoint);
                      }
                      else if (operation === 'get') {
                          const userId = this.getNodeParameter('userId', i);
                          const endpoint = `/admin/users/view/${userId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'GET', endpoint);
                          responseData = responseData.User;
                      }
                      else if (operation === 'getAll') {
                          responseData = (await GenericFunctions_1.mispApiRequestAllItems.call(this, '/admin/users'));
                          responseData = responseData.map((entry) => entry.User);
                      }
                      else if (operation === 'update') {
                          const body = {};
                          const updateFields = this.getNodeParameter('updateFields', i);
                          GenericFunctions_1.throwOnEmptyUpdate.call(this, resource, updateFields);
                          Object.assign(body, updateFields);
                          const userId = this.getNodeParameter('userId', i);
                          const endpoint = `/admin/users/edit/${userId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'PUT', endpoint, body);
                          responseData = responseData.User;
                      }
                  }
                  else if (resource === 'warninglist') {
                      if (operation === 'get') {
                          const warninglistId = this.getNodeParameter('warninglistId', i);
                          const endpoint = `/warninglists/view/${warninglistId}`;
                          responseData = await GenericFunctions_1.mispApiRequest.call(this, 'GET', endpoint);
                          responseData = responseData.Warninglist;
                      }
                      else if (operation === 'getAll') {
                          responseData = (await GenericFunctions_1.mispApiRequest.call(this, 'GET', '/warninglists'));
                          const returnAll = this.getNodeParameter('returnAll', 0);
                          if (!returnAll) {
                              const limit = this.getNodeParameter('limit', 0);
                              responseData = responseData.Warninglists.slice(0, limit).map((entry) => entry.Warninglist);
                          }
                          else {
                              responseData = responseData.Warninglists.map((entry) => entry.Warninglist);
                          }
                      }
                  }
              }
              catch (error) {
                  if (this.continueOnFail()) {
                      const executionErrorData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray({ error: error.message }), { itemData: { item: i } });
                      returnData.push(...executionErrorData);
                      continue;
                  }
                  throw error;
              }
              const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
              returnData.push(...executionData);
          }
          return [returnData];
      }
  }
  exports.Misp = Misp;
  //# sourceMappingURL=Misp.node.js.map

credential_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MispApi = void 0;
  class MispApi {
      constructor() {
          this.name = 'mispApi';
          this.displayName = 'MISP API';
          this.documentationUrl = 'misp';
          this.properties = [
              {
                  displayName: 'API Key',
                  name: 'apiKey',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
              },
              {
                  displayName: 'Base URL',
                  name: 'baseUrl',
                  type: 'string',
                  default: '',
              },
              {
                  displayName: 'Allow Unauthorized Certificates',
                  name: 'allowUnauthorizedCerts',
                  type: 'boolean',
                  description: 'Whether to connect even if SSL certificate validation is not possible',
                  default: false,
              },
          ];
          this.authenticate = {
              type: 'generic',
              properties: {
                  headers: {
                      Authorization: '={{$credentials.apiKey}}',
                  },
              },
          };
          this.test = {
              request: {
                  baseURL: '={{$credentials.baseUrl.replace(new RegExp("/$"), "")}}',
                  url: '/tags',
                  skipSslCertificateValidation: '={{$credentials.allowUnauthorizedCerts}}',
              },
          };
      }
  }
  exports.MispApi = MispApi;
  //# sourceMappingURL=MispApi.credentials.js.map

  // --- Next Credential File ---

  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MispApi = void 0;
  class MispApi {
      constructor() {
          this.name = 'mispApi';
          this.displayName = 'MISP API';
          this.documentationUrl = 'misp';
          this.properties = [
              {
                  displayName: 'API Key',
                  name: 'apiKey',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
              },
              {
                  displayName: 'Base URL',
                  name: 'baseUrl',
                  type: 'string',
                  default: '',
              },
              {
                  displayName: 'Allow Unauthorized Certificates',
                  name: 'allowUnauthorizedCerts',
                  type: 'boolean',
                  description: 'Whether to connect even if SSL certificate validation is not possible',
                  default: false,
              },
          ];
          this.authenticate = {
              type: 'generic',
              properties: {
                  headers: {
                      Authorization: '={{$credentials.apiKey}}',
                  },
              },
          };
          this.test = {
              request: {
                  baseURL: '={{$credentials.baseUrl.replace(new RegExp("/$"), "")}}',
                  url: '/tags',
                  skipSslCertificateValidation: '={{$credentials.allowUnauthorizedCerts}}',
              },
          };
      }
  }
  exports.MispApi = MispApi;
  //# sourceMappingURL=MispApi.credentials.js.map

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

  # MISP node

  Use the MISP node to automate work in MISP, and integrate MISP with other applications. n8n has built-in support for a wide range of MISP features, including creating, updating, deleting and getting events, feeds, and organizations. 

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

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

  ## Operations

  * Attribute
      * Create
      * Delete
      * Get
      * Get All
  	* Search
      * Update
  * Event
      * Create
      * Delete
      * Get
      * Get All
      * Publish
  	* Search
      * Unpublish
      * Update
  * Event Tag
      * Add
      * Remove
  * Feed
      * Create
      * Disable
      * Enable
      * Get
      * Get All
      * Update
  * Galaxy
      * Delete
      * Get
      * Get All
  * Noticelist
      * Get
      * Get All
  * Object
  	* Search
  * Organisation
      * Create
      * Delete
      * Get
      * Get All
      * Update
  * Tag
      * Create
      * Delete
      * Get All
      * Update
  * User
      * Create
      * Delete
      * Get
      * Get All
      * Update
  * Warninglist
      * Get
      * Get All

  ## Templates and examples

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

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

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

properties_schema:
  [{"displayName":"Resource","name":"resource","type":"options","default":"attribute","options":[{"name":"Attribute","value":"attribute"},{"name":"Event","value":"event"},{"name":"Event Tag","value":"eventTag"},{"name":"Feed","value":"feed"},{"name":"Galaxy","value":"galaxy"},{"name":"Noticelist","value":"noticelist"},{"name":"Organisation","value":"organisation"},{"name":"Tag","value":"tag"},{"name":"User","value":"user"},{"name":"Warninglist","value":"warninglist"}]},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.attributeOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.attributeFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.eventOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.eventFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.eventTagOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.eventTagFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.feedOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.feedFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.galaxyOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.galaxyFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.noticelistOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.noticelistFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.organisationOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.organisationFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.tagOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.tagFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.userOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.userFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.warninglistOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.warninglistFields"}]


node_type: n8n-nodes-base.Msg91
name: Msg91
display_name: MSG91
description: Sends transactional SMS via MSG91
category: transform
icon: file:msg91.png
code_hash: 2f2d50fba570ecb3206112e2444333e5650effbec0b672b39030df8621bfce89
documentation_url: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.Msg91
documentation_title: MSG91 node documentation
operations: []
api_methods: []
documentation_examples: []
templates: [{"name":"msg91","description":"Templates for msg91"}]
related_resources: []
required_scopes: []
parameter_schemas: []
package_name: n8n-nodes-base
version: 1.0
extracted_at: 2025-06-12 08:58:58
updated_at: 2025-06-12 08:58:58
source_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.Msg91 = void 0;
  const n8n_workflow_1 = require("n8n-workflow");
  const GenericFunctions_1 = require("./GenericFunctions");
  class Msg91 {
      constructor() {
          this.description = {
              displayName: 'MSG91',
              name: 'msg91',
              icon: 'file:msg91.png',
              group: ['transform'],
              version: 1,
              subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
              description: 'Sends transactional SMS via MSG91',
              defaults: {
                  name: 'MSG91',
              },
              inputs: ['main'],
              outputs: ['main'],
              credentials: [
                  {
                      name: 'msg91Api',
                      required: true,
                  },
              ],
              properties: [
                  {
                      displayName: 'Resource',
                      name: 'resource',
                      type: 'options',
                      noDataExpression: true,
                      options: [
                          {
                              name: 'SMS',
                              value: 'sms',
                          },
                      ],
                      default: 'sms',
                  },
                  {
                      displayName: 'Operation',
                      name: 'operation',
                      type: 'options',
                      noDataExpression: true,
                      displayOptions: {
                          show: {
                              resource: ['sms'],
                          },
                      },
                      options: [
                          {
                              name: 'Send',
                              value: 'send',
                              description: 'Send SMS',
                              action: 'Send an SMS',
                          },
                      ],
                      default: 'send',
                  },
                  {
                      displayName: 'Sender ID',
                      name: 'from',
                      type: 'string',
                      default: '',
                      placeholder: '4155238886',
                      required: true,
                      displayOptions: {
                          show: {
                              operation: ['send'],
                              resource: ['sms'],
                          },
                      },
                      description: 'The number from which to send the message',
                  },
                  {
                      displayName: 'To',
                      name: 'to',
                      type: 'string',
                      default: '',
                      placeholder: '+14155238886',
                      required: true,
                      displayOptions: {
                          show: {
                              operation: ['send'],
                              resource: ['sms'],
                          },
                      },
                      description: 'The number, with coutry code, to which to send the message',
                  },
                  {
                      displayName: 'Message',
                      name: 'message',
                      type: 'string',
                      default: '',
                      required: true,
                      displayOptions: {
                          show: {
                              operation: ['send'],
                              resource: ['sms'],
                          },
                      },
                      description: 'The message to send',
                  },
              ],
          };
      }
      async execute() {
          const items = this.getInputData();
          const returnData = [];
          let operation;
          let resource;
          let body;
          let qs;
          let requestMethod;
          let endpoint;
          for (let i = 0; i < items.length; i++) {
              endpoint = '';
              body = {};
              qs = {};
              resource = this.getNodeParameter('resource', i);
              operation = this.getNodeParameter('operation', i);
              if (resource === 'sms') {
                  if (operation === 'send') {
                      requestMethod = 'GET';
                      endpoint = '/sendhttp.php';
                      qs.route = 4;
                      qs.country = 0;
                      qs.sender = this.getNodeParameter('from', i);
                      qs.mobiles = this.getNodeParameter('to', i);
                      qs.message = this.getNodeParameter('message', i);
                  }
                  else {
                      throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation "${operation}" is not known!`, { itemIndex: i });
                  }
              }
              else {
                  throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The resource "${resource}" is not known!`, {
                      itemIndex: i,
                  });
              }
              const responseData = await GenericFunctions_1.msg91ApiRequest.call(this, requestMethod, endpoint, body, qs);
              returnData.push({ requestId: responseData });
          }
          return [this.helpers.returnJsonArray(returnData)];
      }
  }
  exports.Msg91 = Msg91;
  //# sourceMappingURL=Msg91.node.js.map

credential_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.Msg91Api = void 0;
  class Msg91Api {
      constructor() {
          this.name = 'msg91Api';
          this.displayName = 'Msg91 Api';
          this.documentationUrl = 'msg91';
          this.properties = [
              {
                  displayName: 'Authentication Key',
                  name: 'authkey',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
              },
          ];
      }
  }
  exports.Msg91Api = Msg91Api;
  //# sourceMappingURL=Msg91Api.credentials.js.map

  // --- Next Credential File ---

  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.Msg91Api = void 0;
  class Msg91Api {
      constructor() {
          this.name = 'msg91Api';
          this.displayName = 'Msg91 Api';
          this.documentationUrl = 'msg91';
          this.properties = [
              {
                  displayName: 'Authentication Key',
                  name: 'authkey',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
              },
          ];
      }
  }
  exports.Msg91Api = Msg91Api;
  //# sourceMappingURL=Msg91Api.credentials.js.map

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

  # MSG91 node

  Use the MSG91 node to automate work in MSG91, and integrate MSG91 with other applications. n8n supports sending SMS with MSG91.

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

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

  ## Operations

  * SMS
      * Send SMS

  ## Templates and examples

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

  ## Find your Sender ID

  1. Log in to your MSG91 dashboard.
  2. Select **Sender Id** in the left panel.
  3. If you don't already have one, select **Add Sender Id +**, fill in the details, and select **Save Sender Id**.

troubleshooting_info:
  [{"issue":"Find your Sender ID","solution":"1. Log in to your MSG91 dashboard.\n2. Select **Sender Id** in the left panel.\n3. If you don't already have one, select **Add Sender Id +**, fill in the details, and select **Save Sender Id**."}]

example_workflow:
  {"name":"MSG91 Example Workflow","nodes":[{"parameters":{"resource":"sms","operation":"send","from":"example-value","to":"example-value","message":"example-value"},"id":"1ch1gk75qwd6bs5jy706tt","name":"MSG91","type":"n8n-nodes-base.exampleNode","typeVersion":1,"position":[250,300]}],"connections":{},"active":false,"settings":{},"tags":["example","generated"]}

example_parameters:
  {"resource":"sms","operation":"send","from":"example-value","to":"example-value","message":"example-value"}

properties_schema:
  [{"displayName":"Resource","name":"resource","type":"options","default":"sms","options":[{"name":"SMS","value":"sms"}]},{"displayName":"Operation","name":"operation","type":"options","default":"send","description":"Send SMS","options":[{"name":"Send","value":"send","description":"Send SMS"}]},{"displayName":"Sender ID","name":"from","type":"string","default":"","required":true,"description":"The number from which to send the message","placeholder":"4155238886"},{"displayName":"To","name":"to","type":"string","default":"","required":true,"description":"The number, with coutry code, to which to send the message","placeholder":"+14155238886"},{"displayName":"Message","name":"message","type":"string","default":"","required":true,"description":"The message to send"}]


node_type: n8n-nodes-base.MondayCom
name: MondayCom
display_name: Monday.com
description: Consume Monday.com API
category: output
icon: file:mondayCom.svg
code_hash: 2d6d2778a0bd18f40f8fe7d6ba9d6fe081f822e1491320263604668ca13d5bb3
documentation_url: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.MondayCom
documentation_title: monday.com node documentation
operations: []
api_methods: []
documentation_examples: []
templates: [{"name":"mondaycom","description":"Templates for mondaycom"}]
related_resources: []
required_scopes: []
parameter_schemas: []
troubleshooting_info: []
version_info: {"breakingChanges":[],"currentVersion":"1.22.6"}
example_parameters: {"authentication":"accessToken","resource":"board","dynamic_property":null}
package_name: n8n-nodes-base
version: 1.0
extracted_at: 2025-06-12 08:58:58
updated_at: 2025-06-12 08:58:58
source_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MondayCom = void 0;
  const n8n_workflow_1 = require("n8n-workflow");
  const GenericFunctions_1 = require("./GenericFunctions");
  const BoardDescription_1 = require("./BoardDescription");
  const BoardColumnDescription_1 = require("./BoardColumnDescription");
  const BoardGroupDescription_1 = require("./BoardGroupDescription");
  const BoardItemDescription_1 = require("./BoardItemDescription");
  const change_case_1 = require("change-case");
  class MondayCom {
      constructor() {
          this.description = {
              displayName: 'Monday.com',
              name: 'mondayCom',
              icon: 'file:mondayCom.svg',
              group: ['output'],
              version: 1,
              subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
              description: 'Consume Monday.com API',
              defaults: {
                  name: 'Monday.com',
              },
              inputs: ['main'],
              outputs: ['main'],
              credentials: [
                  {
                      name: 'mondayComApi',
                      required: true,
                      displayOptions: {
                          show: {
                              authentication: ['accessToken'],
                          },
                      },
                  },
                  {
                      name: 'mondayComOAuth2Api',
                      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: 'Board',
                              value: 'board',
                          },
                          {
                              name: 'Board Column',
                              value: 'boardColumn',
                          },
                          {
                              name: 'Board Group',
                              value: 'boardGroup',
                          },
                          {
                              name: 'Board Item',
                              value: 'boardItem',
                          },
                      ],
                      default: 'board',
                  },
                  ...BoardDescription_1.boardOperations,
                  ...BoardDescription_1.boardFields,
                  ...BoardColumnDescription_1.boardColumnOperations,
                  ...BoardColumnDescription_1.boardColumnFields,
                  ...BoardGroupDescription_1.boardGroupOperations,
                  ...BoardGroupDescription_1.boardGroupFields,
                  ...BoardItemDescription_1.boardItemOperations,
                  ...BoardItemDescription_1.boardItemFields,
              ],
          };
          this.methods = {
              loadOptions: {
                  async getBoards() {
                      const returnData = [];
                      const body = {
                          query: `query ($page: Int, $limit: Int) {
  							boards (page: $page, limit: $limit){
  								id
  								description
  								name
  							}
  						}`,
                          variables: {
                              page: 1,
                          },
                      };
                      const boards = await GenericFunctions_1.mondayComApiRequestAllItems.call(this, 'data.boards', body);
                      if (boards === undefined) {
                          return returnData;
                      }
                      for (const board of boards) {
                          const boardName = board.name;
                          const boardId = board.id;
                          const boardDescription = board.description;
                          returnData.push({
                              name: boardName,
                              value: boardId,
                              description: boardDescription,
                          });
                      }
                      return returnData;
                  },
                  async getColumns() {
                      const returnData = [];
                      const boardId = parseInt(this.getCurrentNodeParameter('boardId'), 10);
                      const body = {
                          query: `query ($boardId: [Int]) {
  							boards (ids: $boardId){
  								columns() {
  									id
  									title
  								}
  							}
  						}`,
                          variables: {
                              page: 1,
                              boardId,
                          },
                      };
                      const { data } = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                      if (data === undefined) {
                          return returnData;
                      }
                      const columns = data.boards[0].columns;
                      for (const column of columns) {
                          const columnName = column.title;
                          const columnId = column.id;
                          returnData.push({
                              name: columnName,
                              value: columnId,
                          });
                      }
                      return returnData;
                  },
                  async getGroups() {
                      const returnData = [];
                      const boardId = parseInt(this.getCurrentNodeParameter('boardId'), 10);
                      const body = {
                          query: `query ($boardId: Int!) {
  							boards ( ids: [$boardId]){
  								groups () {
  									id
  									title
  								}
  							}
  						}`,
                          variables: {
                              boardId,
                          },
                      };
                      const { data } = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                      if (data === undefined) {
                          return returnData;
                      }
                      const groups = data.boards[0].groups;
                      for (const group of groups) {
                          const groupName = group.title;
                          const groupId = group.id;
                          returnData.push({
                              name: groupName,
                              value: groupId,
                          });
                      }
                      return returnData;
                  },
              },
          };
      }
      async execute() {
          const items = this.getInputData();
          const returnData = [];
          const length = items.length;
          let responseData;
          const resource = this.getNodeParameter('resource', 0);
          const operation = this.getNodeParameter('operation', 0);
          for (let i = 0; i < length; i++) {
              try {
                  if (resource === 'board') {
                      if (operation === 'archive') {
                          const boardId = parseInt(this.getNodeParameter('boardId', i), 10);
                          const body = {
                              query: `mutation ($id: Int!) {
  									archive_board (board_id: $id) {
  										id
  									}
  								}`,
                              variables: {
                                  id: boardId,
                              },
                          };
                          responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                          responseData = responseData.data.archive_board;
                      }
                      if (operation === 'create') {
                          const name = this.getNodeParameter('name', i);
                          const kind = this.getNodeParameter('kind', i);
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          const body = {
                              query: `mutation ($name: String!, $kind: BoardKind!, $templateId: Int) {
  									create_board (board_name: $name, board_kind: $kind, template_id: $templateId) {
  										id
  									}
  								}`,
                              variables: {
                                  name,
                                  kind,
                              },
                          };
                          if (additionalFields.templateId) {
                              body.variables.templateId = additionalFields.templateId;
                          }
                          responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                          responseData = responseData.data.create_board;
                      }
                      if (operation === 'get') {
                          const boardId = parseInt(this.getNodeParameter('boardId', i), 10);
                          const body = {
                              query: `query ($id: [Int]) {
  									boards (ids: $id){
  										id
  										name
  										description
  										state
  										board_folder_id
  										board_kind
  										owner() {
  											id
  										}
  									}
  								}`,
                              variables: {
                                  id: boardId,
                              },
                          };
                          responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                          responseData = responseData.data.boards;
                      }
                      if (operation === 'getAll') {
                          const returnAll = this.getNodeParameter('returnAll', i);
                          const body = {
                              query: `query ($page: Int, $limit: Int) {
  									boards (page: $page, limit: $limit){
  										id
  										name
  										description
  										state
  										board_folder_id
  										board_kind
  										owner() {
  											id
  										}
  									}
  								}`,
                              variables: {
                                  page: 1,
                              },
                          };
                          if (returnAll) {
                              responseData = await GenericFunctions_1.mondayComApiRequestAllItems.call(this, 'data.boards', body);
                          }
                          else {
                              body.variables.limit = this.getNodeParameter('limit', i);
                              responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                              responseData = responseData.data.boards;
                          }
                      }
                  }
                  if (resource === 'boardColumn') {
                      if (operation === 'create') {
                          const boardId = parseInt(this.getNodeParameter('boardId', i), 10);
                          const title = this.getNodeParameter('title', i);
                          const columnType = this.getNodeParameter('columnType', i);
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          const body = {
                              query: `mutation ($boardId: Int!, $title: String!, $columnType: ColumnType, $defaults: JSON ) {
  									create_column (board_id: $boardId, title: $title, column_type: $columnType, defaults: $defaults) {
  										id
  									}
  								}`,
                              variables: {
                                  boardId,
                                  title,
                                  columnType: (0, change_case_1.snakeCase)(columnType),
                              },
                          };
                          if (additionalFields.defaults) {
                              try {
                                  JSON.parse(additionalFields.defaults);
                              }
                              catch (error) {
                                  throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Defauls must be a valid JSON', {
                                      itemIndex: i,
                                  });
                              }
                              body.variables.defaults = JSON.stringify(JSON.parse(additionalFields.defaults));
                          }
                          responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                          responseData = responseData.data.create_column;
                      }
                      if (operation === 'getAll') {
                          const boardId = parseInt(this.getNodeParameter('boardId', i), 10);
                          const body = {
                              query: `query ($boardId: [Int]) {
  									boards (ids: $boardId){
  										columns() {
  											id
  											title
  											type
  											settings_str
  											archived
  										}
  									}
  								}`,
                              variables: {
                                  page: 1,
                                  boardId,
                              },
                          };
                          responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                          responseData = responseData.data.boards[0].columns;
                      }
                  }
                  if (resource === 'boardGroup') {
                      if (operation === 'create') {
                          const boardId = parseInt(this.getNodeParameter('boardId', i), 10);
                          const name = this.getNodeParameter('name', i);
                          const body = {
                              query: `mutation ($boardId: Int!, $groupName: String!) {
  									create_group (board_id: $boardId, group_name: $groupName) {
  										id
  									}
  								}`,
                              variables: {
                                  boardId,
                                  groupName: name,
                              },
                          };
                          responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                          responseData = responseData.data.create_group;
                      }
                      if (operation === 'delete') {
                          const boardId = parseInt(this.getNodeParameter('boardId', i), 10);
                          const groupId = this.getNodeParameter('groupId', i);
                          const body = {
                              query: `mutation ($boardId: Int!, $groupId: String!) {
  									delete_group (board_id: $boardId, group_id: $groupId) {
  										id
  									}
  								}`,
                              variables: {
                                  boardId,
                                  groupId,
                              },
                          };
                          responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                          responseData = responseData.data.delete_group;
                      }
                      if (operation === 'getAll') {
                          const boardId = parseInt(this.getNodeParameter('boardId', i), 10);
                          const body = {
                              query: `query ($boardId: [Int]) {
  									boards (ids: $boardId, ){
  										id
  										groups() {
  											id
  											title
  											color
  											position
  											archived
  										}
  									}
  								}`,
                              variables: {
                                  boardId,
                              },
                          };
                          responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                          responseData = responseData.data.boards[0].groups;
                      }
                  }
                  if (resource === 'boardItem') {
                      if (operation === 'addUpdate') {
                          const itemId = parseInt(this.getNodeParameter('itemId', i), 10);
                          const value = this.getNodeParameter('value', i);
                          const body = {
                              query: `mutation ($itemId: Int!, $value: String!) {
  									create_update (item_id: $itemId, body: $value) {
  										id
  									}
  								}`,
                              variables: {
                                  itemId,
                                  value,
                              },
                          };
                          responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                          responseData = responseData.data.create_update;
                      }
                      if (operation === 'changeColumnValue') {
                          const boardId = parseInt(this.getNodeParameter('boardId', i), 10);
                          const itemId = parseInt(this.getNodeParameter('itemId', i), 10);
                          const columnId = this.getNodeParameter('columnId', i);
                          const value = this.getNodeParameter('value', i);
                          const body = {
                              query: `mutation ($boardId: Int!, $itemId: Int!, $columnId: String!, $value: JSON!) {
  									change_column_value (board_id: $boardId, item_id: $itemId, column_id: $columnId, value: $value) {
  										id
  									}
  								}`,
                              variables: {
                                  boardId,
                                  itemId,
                                  columnId,
                              },
                          };
                          try {
                              JSON.parse(value);
                          }
                          catch (error) {
                              throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Custom Values must be a valid JSON', {
                                  itemIndex: i,
                              });
                          }
                          body.variables.value = JSON.stringify(JSON.parse(value));
                          responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                          responseData = responseData.data.change_column_value;
                      }
                      if (operation === 'changeMultipleColumnValues') {
                          const boardId = parseInt(this.getNodeParameter('boardId', i), 10);
                          const itemId = parseInt(this.getNodeParameter('itemId', i), 10);
                          const columnValues = this.getNodeParameter('columnValues', i);
                          const body = {
                              query: `mutation ($boardId: Int!, $itemId: Int!, $columnValues: JSON!) {
  									change_multiple_column_values (board_id: $boardId, item_id: $itemId, column_values: $columnValues) {
  										id
  									}
  								}`,
                              variables: {
                                  boardId,
                                  itemId,
                              },
                          };
                          try {
                              JSON.parse(columnValues);
                          }
                          catch (error) {
                              throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Custom Values must be a valid JSON', {
                                  itemIndex: i,
                              });
                          }
                          body.variables.columnValues = JSON.stringify(JSON.parse(columnValues));
                          responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                          responseData = responseData.data.change_multiple_column_values;
                      }
                      if (operation === 'create') {
                          const boardId = parseInt(this.getNodeParameter('boardId', i), 10);
                          const groupId = this.getNodeParameter('groupId', i);
                          const itemName = this.getNodeParameter('name', i);
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          const body = {
                              query: `mutation ($boardId: Int!, $groupId: String!, $itemName: String!, $columnValues: JSON) {
  									create_item (board_id: $boardId, group_id: $groupId, item_name: $itemName, column_values: $columnValues) {
  										id
  									}
  								}`,
                              variables: {
                                  boardId,
                                  groupId,
                                  itemName,
                              },
                          };
                          if (additionalFields.columnValues) {
                              try {
                                  JSON.parse(additionalFields.columnValues);
                              }
                              catch (error) {
                                  throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Custom Values must be a valid JSON', {
                                      itemIndex: i,
                                  });
                              }
                              body.variables.columnValues = JSON.stringify(JSON.parse(additionalFields.columnValues));
                          }
                          responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                          responseData = responseData.data.create_item;
                      }
                      if (operation === 'delete') {
                          const itemId = parseInt(this.getNodeParameter('itemId', i), 10);
                          const body = {
                              query: `mutation ($itemId: Int!) {
  									delete_item (item_id: $itemId) {
  										id
  									}
  								}`,
                              variables: {
                                  itemId,
                              },
                          };
                          responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                          responseData = responseData.data.delete_item;
                      }
                      if (operation === 'get') {
                          const itemIds = this.getNodeParameter('itemId', i)
                              .split(',')
                              .map((n) => parseInt(n, 10));
                          const body = {
                              query: `query ($itemId: [Int!]){
  									items (ids: $itemId) {
  										id
  										name
  										created_at
  										state
  										column_values() {
  											id
  											text
  											title
  											type
  											value
  											additional_info
  										}
  									}
  								}`,
                              variables: {
                                  itemId: itemIds,
                              },
                          };
                          responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                          responseData = responseData.data.items;
                      }
                      if (operation === 'getAll') {
                          const boardId = parseInt(this.getNodeParameter('boardId', i), 10);
                          const groupId = this.getNodeParameter('groupId', i);
                          const returnAll = this.getNodeParameter('returnAll', i);
                          const body = {
                              query: `query ($boardId: [Int], $groupId: [String], $page: Int, $limit: Int) {
  									boards (ids: $boardId) {
  										groups (ids: $groupId) {
  											id
  											items(limit: $limit, page: $page) {
  												id
  												name
  												created_at
  												state
  												column_values() {
  													id
  													text
  													title
  													type
  													value
  													additional_info
  												}
  											}
  										}
  									}
  								}`,
                              variables: {
                                  boardId,
                                  groupId,
                              },
                          };
                          if (returnAll) {
                              responseData = await GenericFunctions_1.mondayComApiRequestAllItems.call(this, 'data.boards[0].groups[0].items', body);
                          }
                          else {
                              body.variables.limit = this.getNodeParameter('limit', i);
                              responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                              responseData = responseData.data.boards[0].groups[0].items;
                          }
                      }
                      if (operation === 'getByColumnValue') {
                          const boardId = parseInt(this.getNodeParameter('boardId', i), 10);
                          const columnId = this.getNodeParameter('columnId', i);
                          const columnValue = this.getNodeParameter('columnValue', i);
                          const returnAll = this.getNodeParameter('returnAll', i);
                          const body = {
                              query: `query ($boardId: Int!, $columnId: String!, $columnValue: String!, $page: Int, $limit: Int ){
  									items_by_column_values (board_id: $boardId, column_id: $columnId, column_value: $columnValue, page: $page, limit: $limit) {
  										id
  										name
  										created_at
  										state
  										board {
  											id
  										}
  										column_values() {
  											id
  											text
  											title
  											type
  											value
  											additional_info
  										}
  									}
  								}`,
                              variables: {
                                  boardId,
                                  columnId,
                                  columnValue,
                              },
                          };
                          if (returnAll) {
                              responseData = await GenericFunctions_1.mondayComApiRequestAllItems.call(this, 'data.items_by_column_values', body);
                          }
                          else {
                              body.variables.limit = this.getNodeParameter('limit', i);
                              responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                              responseData = responseData.data.items_by_column_values;
                          }
                      }
                      if (operation === 'move') {
                          const groupId = this.getNodeParameter('groupId', i);
                          const itemId = parseInt(this.getNodeParameter('itemId', i), 10);
                          const body = {
                              query: `mutation ($groupId: String!, $itemId: Int!) {
  									move_item_to_group (group_id: $groupId, item_id: $itemId) {
  										id
  									}
  								}`,
                              variables: {
                                  groupId,
                                  itemId,
                              },
                          };
                          responseData = await GenericFunctions_1.mondayComApiRequest.call(this, body);
                          responseData = responseData.data.move_item_to_group;
                      }
                  }
                  const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
                  returnData.push(...executionData);
              }
              catch (error) {
                  if (this.continueOnFail()) {
                      const executionErrorData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray({ error: error.message }), { itemData: { item: i } });
                      returnData.push(...executionErrorData);
                      continue;
                  }
                  throw error;
              }
          }
          return [returnData];
      }
  }
  exports.MondayCom = MondayCom;
  //# sourceMappingURL=MondayCom.node.js.map

credential_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MondayComApi = void 0;
  class MondayComApi {
      constructor() {
          this.name = 'mondayComApi';
          this.displayName = 'Monday.com API';
          this.documentationUrl = 'mondayCom';
          this.properties = [
              {
                  displayName: 'Token V2',
                  name: 'apiToken',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
              },
          ];
      }
  }
  exports.MondayComApi = MondayComApi;
  //# sourceMappingURL=MondayComApi.credentials.js.map

  // --- Next Credential File ---

  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MondayComOAuth2Api = void 0;
  const scopes = ['boards:write', 'boards:read'];
  class MondayComOAuth2Api {
      constructor() {
          this.name = 'mondayComOAuth2Api';
          this.extends = ['oAuth2Api'];
          this.displayName = 'Monday.com OAuth2 API';
          this.documentationUrl = 'mondaycom';
          this.properties = [
              {
                  displayName: 'Grant Type',
                  name: 'grantType',
                  type: 'hidden',
                  default: 'authorizationCode',
              },
              {
                  displayName: 'Authorization URL',
                  name: 'authUrl',
                  type: 'hidden',
                  default: 'https://auth.monday.com/oauth2/authorize',
                  required: true,
              },
              {
                  displayName: 'Access Token URL',
                  name: 'accessTokenUrl',
                  type: 'hidden',
                  default: 'https://auth.monday.com/oauth2/token',
                  required: true,
              },
              {
                  displayName: 'Scope',
                  name: 'scope',
                  type: 'hidden',
                  default: scopes.join(' '),
              },
              {
                  displayName: 'Auth URI Query Parameters',
                  name: 'authQueryParameters',
                  type: 'hidden',
                  default: '',
              },
              {
                  displayName: 'Authentication',
                  name: 'authentication',
                  type: 'hidden',
                  default: 'body',
              },
          ];
      }
  }
  exports.MondayComOAuth2Api = MondayComOAuth2Api;
  //# sourceMappingURL=MondayComOAuth2Api.credentials.js.map

  // --- Next Credential File ---

  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MondayComApi = void 0;
  class MondayComApi {
      constructor() {
          this.name = 'mondayComApi';
          this.displayName = 'Monday.com API';
          this.documentationUrl = 'mondayCom';
          this.properties = [
              {
                  displayName: 'Token V2',
                  name: 'apiToken',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
              },
          ];
      }
  }
  exports.MondayComApi = MondayComApi;
  //# sourceMappingURL=MondayComApi.credentials.js.map

  // --- Next Credential File ---

  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MondayComOAuth2Api = void 0;
  const scopes = ['boards:write', 'boards:read'];
  class MondayComOAuth2Api {
      constructor() {
          this.name = 'mondayComOAuth2Api';
          this.extends = ['oAuth2Api'];
          this.displayName = 'Monday.com OAuth2 API';
          this.documentationUrl = 'mondaycom';
          this.properties = [
              {
                  displayName: 'Grant Type',
                  name: 'grantType',
                  type: 'hidden',
                  default: 'authorizationCode',
              },
              {
                  displayName: 'Authorization URL',
                  name: 'authUrl',
                  type: 'hidden',
                  default: 'https://auth.monday.com/oauth2/authorize',
                  required: true,
              },
              {
                  displayName: 'Access Token URL',
                  name: 'accessTokenUrl',
                  type: 'hidden',
                  default: 'https://auth.monday.com/oauth2/token',
                  required: true,
              },
              {
                  displayName: 'Scope',
                  name: 'scope',
                  type: 'hidden',
                  default: scopes.join(' '),
              },
              {
                  displayName: 'Auth URI Query Parameters',
                  name: 'authQueryParameters',
                  type: 'hidden',
                  default: '',
              },
              {
                  displayName: 'Authentication',
                  name: 'authentication',
                  type: 'hidden',
                  default: 'body',
              },
          ];
      }
  }
  exports.MondayComOAuth2Api = MondayComOAuth2Api;
  //# sourceMappingURL=MondayComOAuth2Api.credentials.js.map

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

  # monday.com node

  Use the monday.com node to automate work in monday.com, and integrate monday.com with other applications. n8n has built-in support for a wide range of monday.com features, including creating a new board, and adding, deleting, and getting items on the board.

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

  /// warning | Minimum required version
  This node requires n8n version 1.22.6 or above.
  ///

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

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

  ## Operations

  * Board
      * Archive a board
      * Create a new board
      * Get a board
      * Get all boards
  * Board Column
      * Create a new column
      * Get all columns
  * Board Group
      * Delete a group in a board
      * Create a group in a board
      * Get list of groups in a board
  * Board Item
      * Add an update to an item.
      * Change a column value for a board item
      * Change multiple column values for a board item
      * Create an item in a board's group
      * Delete an item
      * Get an item
      * Get all items
      * Get items by column value
      * Move item to group

  ## Templates and examples

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

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

example_workflow:
  {"name":"Monday.com Example Workflow","nodes":[{"parameters":{"authentication":"accessToken","resource":"board","dynamic_property":null},"id":"h8lntqoe1ymnz2ed69rre","name":"Monday.com","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":"board","options":[{"name":"Board","value":"board"},{"name":"Board Column","value":"boardColumn"},{"name":"Board Group","value":"boardGroup"},{"name":"Board Item","value":"boardItem"}]},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...BoardDescription_1.boardOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...BoardDescription_1.boardFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...BoardColumnDescription_1.boardColumnOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...BoardColumnDescription_1.boardColumnFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...BoardGroupDescription_1.boardGroupOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...BoardGroupDescription_1.boardGroupFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...BoardItemDescription_1.boardItemOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...BoardItemDescription_1.boardItemFields"}]


node_type: n8n-nodes-base.MySql
name: MySql
display_name: MySQL
description: Get, add and update data in MySQL
category: input
icon: file:mysql.svg
code_hash: c632d9b472738f3cd1ce6ce0231920d56e6b160054dbd6ff4f5b38505f8003bb
example_parameters: {}
properties_schema: []
package_name: n8n-nodes-base
extracted_at: 2025-06-12 08:58:58
updated_at: 2025-06-12 08:58:58
source_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MySql = void 0;
  const n8n_workflow_1 = require("n8n-workflow");
  const MySqlV1_node_1 = require("./v1/MySqlV1.node");
  const MySqlV2_node_1 = require("./v2/MySqlV2.node");
  class MySql extends n8n_workflow_1.VersionedNodeType {
      constructor() {
          const baseDescription = {
              displayName: 'MySQL',
              name: 'mySql',
              icon: 'file:mysql.svg',
              group: ['input'],
              defaultVersion: 2.2,
              description: 'Get, add and update data in MySQL',
          };
          const nodeVersions = {
              1: new MySqlV1_node_1.MySqlV1(baseDescription),
              2: new MySqlV2_node_1.MySqlV2(baseDescription),
              2.1: new MySqlV2_node_1.MySqlV2(baseDescription),
              2.2: new MySqlV2_node_1.MySqlV2(baseDescription),
          };
          super(nodeVersions, baseDescription);
      }
  }
  exports.MySql = MySql;
  //# sourceMappingURL=MySql.node.js.map

example_workflow:
  {"name":"MySQL Example Workflow","nodes":[{"parameters":{},"id":"e1jxx7n1yf6er3a1bv7926","name":"MySQL","type":"n8n-nodes-base.exampleNode","typeVersion":1,"position":[250,300]}],"connections":{},"active":false,"settings":{},"tags":["example","generated"]}


node_type: n8n-nodes-base.MonicaCrm
name: MonicaCrm
display_name: Monica CRM
description: Consume the Monica CRM API
category: transform
icon: file:monicaCrm.png
code_hash: 0db18b80574c5a1563944176ada3f2416c35261c67a5e76e2b90db7993bcbf90
documentation_url: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.MonicaCrm
documentation_title: Monica CRM node documentation
operations: []
api_methods: []
documentation_examples: []
templates: [{"name":"monica-crm","description":"Templates for monica-crm"}]
related_resources: []
required_scopes: []
parameter_schemas: []
troubleshooting_info: []
example_parameters: {"resource":"activity","dynamic_property":null}
package_name: n8n-nodes-base
version: 1.0
extracted_at: 2025-06-12 08:58:58
updated_at: 2025-06-12 08:58:58
source_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MonicaCrm = void 0;
  const GenericFunctions_1 = require("./GenericFunctions");
  const descriptions_1 = require("./descriptions");
  class MonicaCrm {
      constructor() {
          this.description = {
              displayName: 'Monica CRM',
              name: 'monicaCrm',
              icon: 'file:monicaCrm.png',
              group: ['transform'],
              version: 1,
              subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
              description: 'Consume the Monica CRM API',
              defaults: {
                  name: 'Monica CRM',
              },
              inputs: ['main'],
              outputs: ['main'],
              credentials: [
                  {
                      name: 'monicaCrmApi',
                      required: true,
                  },
              ],
              properties: [
                  {
                      displayName: 'Resource',
                      name: 'resource',
                      type: 'options',
                      noDataExpression: true,
                      options: [
                          {
                              name: 'Activity',
                              value: 'activity',
                          },
                          {
                              name: 'Call',
                              value: 'call',
                          },
                          {
                              name: 'Contact',
                              value: 'contact',
                          },
                          {
                              name: 'Contact Field',
                              value: 'contactField',
                          },
                          {
                              name: 'Contact Tag',
                              value: 'contactTag',
                          },
                          {
                              name: 'Conversation',
                              value: 'conversation',
                          },
                          {
                              name: 'Conversation Message',
                              value: 'conversationMessage',
                          },
                          {
                              name: 'Journal Entry',
                              value: 'journalEntry',
                          },
                          {
                              name: 'Note',
                              value: 'note',
                          },
                          {
                              name: 'Reminder',
                              value: 'reminder',
                          },
                          {
                              name: 'Tag',
                              value: 'tag',
                          },
                          {
                              name: 'Task',
                              value: 'task',
                          },
                      ],
                      default: 'contact',
                  },
                  ...descriptions_1.activityOperations,
                  ...descriptions_1.activityFields,
                  ...descriptions_1.callOperations,
                  ...descriptions_1.callFields,
                  ...descriptions_1.contactOperations,
                  ...descriptions_1.contactFields,
                  ...descriptions_1.contactFieldOperations,
                  ...descriptions_1.contactFieldFields,
                  ...descriptions_1.contactTagOperations,
                  ...descriptions_1.contactTagFields,
                  ...descriptions_1.conversationOperations,
                  ...descriptions_1.conversationFields,
                  ...descriptions_1.conversationMessageOperations,
                  ...descriptions_1.conversationMessageFields,
                  ...descriptions_1.journalEntryOperations,
                  ...descriptions_1.journalEntryFields,
                  ...descriptions_1.noteOperations,
                  ...descriptions_1.noteFields,
                  ...descriptions_1.reminderOperations,
                  ...descriptions_1.reminderFields,
                  ...descriptions_1.tagOperations,
                  ...descriptions_1.tagFields,
                  ...descriptions_1.taskOperations,
                  ...descriptions_1.taskFields,
              ],
          };
          this.methods = {
              loadOptions: {
                  async getActivityTypes() {
                      const responseData = (await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', '/activitytypes'));
                      return (0, GenericFunctions_1.toOptions)(responseData);
                  },
                  async getTagsToAdd() {
                      const responseData = await GenericFunctions_1.monicaCrmApiRequestAllItems.call(this, 'GET', '/tags', {}, {}, { forLoader: true });
                      return responseData.map(({ name }) => ({ value: name, name }));
                  },
                  async getTagsToRemove() {
                      const responseData = await GenericFunctions_1.monicaCrmApiRequestAllItems.call(this, 'GET', '/tags', {}, {}, { forLoader: true });
                      return responseData.map(({ id, name }) => ({ value: id, name }));
                  },
                  async getContactFieldTypes() {
                      const responseData = (await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', '/contactfieldtypes'));
                      return (0, GenericFunctions_1.toOptions)(responseData);
                  },
                  async getGenders() {
                      const responseData = (await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', '/genders'));
                      return (0, GenericFunctions_1.toOptions)(responseData);
                  },
              },
          };
      }
      async execute() {
          const items = this.getInputData();
          const returnData = [];
          const resource = this.getNodeParameter('resource', 0);
          const operation = this.getNodeParameter('operation', 0);
          let responseData;
          for (let i = 0; i < items.length; i++) {
              try {
                  if (resource === 'activity') {
                      if (operation === 'create') {
                          const contacts = this.getNodeParameter('contacts', i);
                          const happenedAt = this.getNodeParameter('happenedAt', i);
                          const body = {
                              activity_type_id: this.getNodeParameter('activityTypeId', i),
                              contacts: contacts.split(','),
                              happened_at: happenedAt.split('T')[0],
                              summary: this.getNodeParameter('summary', i),
                          };
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          if (Object.keys(additionalFields).length) {
                              Object.assign(body, additionalFields);
                          }
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'POST', '/activities', body);
                      }
                      else if (operation === 'delete') {
                          const activityId = this.getNodeParameter('activityId', i);
                          const endpoint = `/activities/${activityId}`;
                          await GenericFunctions_1.monicaCrmApiRequest.call(this, 'DELETE', endpoint);
                          responseData = { success: true };
                      }
                      else if (operation === 'get') {
                          const activityId = this.getNodeParameter('activityId', i);
                          const endpoint = `/activities/${activityId}`;
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', endpoint);
                      }
                      else if (operation === 'getAll') {
                          const endpoint = '/activities';
                          responseData = await GenericFunctions_1.monicaCrmApiRequestAllItems.call(this, 'GET', endpoint);
                      }
                      else if (operation === 'update') {
                          const activityId = this.getNodeParameter('activityId', i);
                          const { data } = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', `/activities/${activityId}`);
                          const body = {
                              activity_type_id: data.activity_type.id,
                              contacts: data.attendees.contacts.map((contact) => contact.id),
                              happened_at: data.happened_at,
                              summary: data.summary,
                          };
                          const updateFields = this.getNodeParameter('updateFields', i);
                          if (Object.keys(updateFields).length) {
                              Object.assign(body, updateFields);
                          }
                          body.happened_at = body.happened_at.split('T')[0];
                          if (typeof body.contacts === 'string') {
                              body.contacts = body.contacts.split(',');
                          }
                          const endpoint = `/activities/${activityId}`;
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'PUT', endpoint, body);
                      }
                  }
                  else if (resource === 'call') {
                      if (operation === 'create') {
                          const body = {
                              called_at: this.getNodeParameter('calledAt', i),
                              contact_id: this.getNodeParameter('contactId', i),
                              content: this.getNodeParameter('content', i),
                          };
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'POST', '/calls', body);
                      }
                      else if (operation === 'delete') {
                          const callId = this.getNodeParameter('callId', i);
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'DELETE', `/calls/${callId}`);
                          responseData = { success: true };
                      }
                      else if (operation === 'get') {
                          const callId = this.getNodeParameter('callId', i);
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', `/calls/${callId}`);
                      }
                      else if (operation === 'getAll') {
                          const endpoint = '/calls';
                          responseData = await GenericFunctions_1.monicaCrmApiRequestAllItems.call(this, 'GET', endpoint);
                      }
                      else if (operation === 'update') {
                          const callId = this.getNodeParameter('callId', i);
                          const { data } = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', `/calls/${callId}`);
                          const body = {
                              called_at: data.called_at,
                          };
                          const updateFields = this.getNodeParameter('updateFields', i);
                          if (Object.keys(updateFields).length) {
                              Object.assign(body, updateFields);
                          }
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'PUT', `/calls/${callId}`, body);
                      }
                  }
                  else if (resource === 'contact') {
                      if (operation === 'create') {
                          const body = {
                              first_name: this.getNodeParameter('firstName', i),
                              gender_id: this.getNodeParameter('genderId', i),
                          };
                          const { isDeceased = false, deceasedDate, birthdate, ...rest } = this.getNodeParameter('additionalFields', i);
                          body.is_birthdate_known = false;
                          body.is_deceased = isDeceased;
                          body.is_deceased_date_known = false;
                          if (birthdate) {
                              body.is_birthdate_known = true;
                              const [day, month, year] = (0, GenericFunctions_1.getDateParts)(birthdate);
                              body.birthdate_day = day;
                              body.birthdate_month = month;
                              body.birthdate_year = year;
                          }
                          if (deceasedDate) {
                              body.is_deceased = true;
                              body.is_deceased_date_known = true;
                              const [day, month, year] = (0, GenericFunctions_1.getDateParts)(deceasedDate);
                              body.deceased_date_day = day;
                              body.deceased_date_month = month;
                              body.deceased_date_year = year;
                          }
                          if (Object.keys(rest).length) {
                              Object.assign(body, rest);
                          }
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'POST', '/contacts', body);
                      }
                      else if (operation === 'delete') {
                          const contactId = this.getNodeParameter('contactId', i);
                          const endpoint = `/contacts/${contactId}`;
                          await GenericFunctions_1.monicaCrmApiRequest.call(this, 'DELETE', endpoint);
                          responseData = { success: true };
                      }
                      else if (operation === 'get') {
                          const contactId = this.getNodeParameter('contactId', i);
                          const endpoint = `/contacts/${contactId}`;
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', endpoint);
                      }
                      else if (operation === 'getAll') {
                          const qs = {};
                          const filters = this.getNodeParameter('filters', i);
                          if (Object.keys(filters).length) {
                              Object.assign(qs, filters);
                          }
                          responseData = await GenericFunctions_1.monicaCrmApiRequestAllItems.call(this, 'GET', '/contacts', {}, qs);
                      }
                      else if (operation === 'update') {
                          const contactId = this.getNodeParameter('contactId', i);
                          const { data } = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', `/contacts/${contactId}`);
                          const body = {
                              first_name: data.first_name,
                          };
                          const { is_deaceased = false, deceased_date, birthdate, ...rest } = this.getNodeParameter('updateFields', i);
                          body.is_birthdate_known = false;
                          body.is_deceased = is_deaceased;
                          body.is_deceased_date_known = false;
                          if (birthdate) {
                              body.is_birthdate_known = true;
                              const [day, month, year] = (0, GenericFunctions_1.getDateParts)(birthdate);
                              body.birthdate_day = day;
                              body.birthdate_month = month;
                              body.birthdate_year = year;
                          }
                          if (deceased_date) {
                              body.is_deceased = true;
                              body.is_deceased_date_known = true;
                              const [day, month, year] = (0, GenericFunctions_1.getDateParts)(deceased_date);
                              body.deceased_date_day = day;
                              body.deceased_date_month = month;
                              body.deceased_date_year = year;
                          }
                          if (Object.keys(rest).length) {
                              Object.assign(body, rest);
                          }
                          const endpoint = `/contacts/${contactId}`;
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'PUT', endpoint, body);
                      }
                  }
                  else if (resource === 'contactField') {
                      if (operation === 'create') {
                          const body = {
                              contact_field_type_id: this.getNodeParameter('contactFieldTypeId', i),
                              contact_id: this.getNodeParameter('contactId', i),
                              data: this.getNodeParameter('data', i),
                          };
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'POST', '/contactfields', body);
                      }
                      else if (operation === 'delete') {
                          const contactFieldId = this.getNodeParameter('contactFieldId', i);
                          const endpoint = `/contactfields/${contactFieldId}`;
                          await GenericFunctions_1.monicaCrmApiRequest.call(this, 'DELETE', endpoint);
                          responseData = { success: true };
                      }
                      else if (operation === 'get') {
                          const contactFieldId = this.getNodeParameter('contactFieldId', i);
                          const endpoint = `/contactfields/${contactFieldId}`;
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', endpoint);
                      }
                      else if (operation === 'getAll') {
                          const contactId = this.getNodeParameter('contactId', i);
                          const endpoint = `/contact/${contactId}/contactfields`;
                          responseData = await GenericFunctions_1.monicaCrmApiRequestAllItems.call(this, 'GET', endpoint);
                      }
                      else if (operation === 'update') {
                          const body = {
                              contact_field_type_id: this.getNodeParameter('contactFieldTypeId', i),
                              contact_id: this.getNodeParameter('contactId', i),
                              data: this.getNodeParameter('data', i),
                          };
                          const contactFieldId = this.getNodeParameter('contactFieldId', i);
                          const endpoint = `/contactfields/${contactFieldId}`;
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'PUT', endpoint, body);
                      }
                  }
                  else if (resource === 'contactTag') {
                      if (operation === 'add') {
                          const body = {
                              tags: this.getNodeParameter('tagsToAdd', i),
                          };
                          const contactId = this.getNodeParameter('contactId', i);
                          const endpoint = `/contacts/${contactId}/setTags`;
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'POST', endpoint, body);
                      }
                      else if (operation === 'remove') {
                          const body = {
                              tags: this.getNodeParameter('tagsToRemove', i),
                          };
                          const contactId = this.getNodeParameter('contactId', i);
                          const endpoint = `/contacts/${contactId}/unsetTag`;
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'POST', endpoint, body);
                      }
                  }
                  else if (resource === 'conversation') {
                      if (operation === 'create') {
                          const body = {
                              contact_field_type_id: this.getNodeParameter('contactFieldTypeId', i),
                              contact_id: this.getNodeParameter('contactId', i),
                              happened_at: this.getNodeParameter('happenedAt', i),
                          };
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'POST', '/conversations', body);
                      }
                      else if (operation === 'delete') {
                          const conversationId = this.getNodeParameter('conversationId', i);
                          const endpoint = `/conversations/${conversationId}`;
                          await GenericFunctions_1.monicaCrmApiRequest.call(this, 'DELETE', endpoint);
                          responseData = { success: true };
                      }
                      else if (operation === 'get') {
                          const conversationId = this.getNodeParameter('conversationId', i);
                          const endpoint = `/conversations/${conversationId}`;
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', endpoint);
                      }
                      else if (operation === 'update') {
                          const body = {
                              contact_field_type_id: this.getNodeParameter('contactFieldTypeId', i),
                              happened_at: this.getNodeParameter('happenedAt', i),
                          };
                          const conversationId = this.getNodeParameter('conversationId', i);
                          const endpoint = `/conversations/${conversationId}`;
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'PUT', endpoint, body);
                      }
                  }
                  else if (resource === 'conversationMessage') {
                      if (operation === 'add') {
                          const conversationId = this.getNodeParameter('conversationId', i);
                          const endpoint = `/conversations/${conversationId}/messages`;
                          const { data } = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', `/conversations/${conversationId}`);
                          const body = {
                              contact_id: data.contact.id,
                              content: this.getNodeParameter('content', i),
                              written_at: this.getNodeParameter('writtenAt', i),
                              written_by_me: this.getNodeParameter('writtenByMe', i),
                          };
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'POST', endpoint, body);
                      }
                      else if (operation === 'update') {
                          const conversationId = this.getNodeParameter('conversationId', i);
                          const messageId = this.getNodeParameter('messageId', i);
                          const endpoint = `/conversations/${conversationId}/messages/${messageId}`;
                          const updateFields = this.getNodeParameter('updateFields', i, {});
                          const { data } = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', `/conversations/${conversationId}`);
                          const message = data.messages.filter((entry) => entry.id === parseInt(messageId, 10))[0];
                          const body = {
                              contact_id: data.contact.id,
                              content: message.content,
                              written_at: message.written_at,
                              written_by_me: message.written_by_me,
                          };
                          if (Object.keys(updateFields).length) {
                              Object.assign(body, updateFields);
                          }
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'PUT', endpoint, body);
                      }
                  }
                  else if (resource === 'journalEntry') {
                      if (operation === 'create') {
                          const body = {
                              title: this.getNodeParameter('title', i),
                              post: this.getNodeParameter('post', i),
                          };
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'POST', '/journal', body);
                      }
                      else if (operation === 'delete') {
                          const journalId = this.getNodeParameter('journalId', i);
                          await GenericFunctions_1.monicaCrmApiRequest.call(this, 'DELETE', `/journal/${journalId}`);
                          responseData = { success: true };
                      }
                      else if (operation === 'get') {
                          const journalId = this.getNodeParameter('journalId', i);
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', `/journal/${journalId}`);
                      }
                      else if (operation === 'getAll') {
                          responseData = await GenericFunctions_1.monicaCrmApiRequestAllItems.call(this, 'GET', '/journal');
                      }
                      else if (operation === 'update') {
                          const journalId = this.getNodeParameter('journalId', i);
                          const { data } = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', `/journal/${journalId}`);
                          const updateFields = this.getNodeParameter('updateFields', i);
                          const body = {
                              post: data.post,
                              title: data.title,
                          };
                          if (Object.keys(updateFields).length) {
                              Object.assign(body, updateFields);
                          }
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'PUT', `/journal/${journalId}`, body);
                      }
                  }
                  else if (resource === 'note') {
                      if (operation === 'create') {
                          const body = {
                              body: this.getNodeParameter('body', i),
                              contact_id: this.getNodeParameter('contactId', i),
                          };
                          body.is_favorited = this.getNodeParameter('additionalFields.isFavorited', i, false);
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'POST', '/notes', body);
                      }
                      else if (operation === 'delete') {
                          const noteId = this.getNodeParameter('noteId', i);
                          await GenericFunctions_1.monicaCrmApiRequest.call(this, 'DELETE', `/notes/${noteId}`);
                          responseData = { success: true };
                      }
                      else if (operation === 'get') {
                          const noteId = this.getNodeParameter('noteId', i);
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', `/notes/${noteId}`);
                      }
                      else if (operation === 'getAll') {
                          const endpoint = '/notes';
                          responseData = await GenericFunctions_1.monicaCrmApiRequestAllItems.call(this, 'GET', endpoint);
                      }
                      else if (operation === 'update') {
                          const noteId = this.getNodeParameter('noteId', i);
                          const updateFields = this.getNodeParameter('updateFields', i);
                          const { data } = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', `/notes/${noteId}`);
                          const body = {
                              body: data.body,
                              contact_id: data.contact.id,
                          };
                          if (Object.keys(updateFields).length) {
                              Object.assign(body, updateFields);
                          }
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'PUT', `/notes/${noteId}`, body);
                      }
                  }
                  else if (resource === 'reminder') {
                      if (operation === 'create') {
                          const initialDate = this.getNodeParameter('initialDate', i);
                          const body = {
                              contact_id: this.getNodeParameter('contactId', i),
                              frequency_type: this.getNodeParameter('frequencyType', i),
                              frequency_number: this.getNodeParameter('frequencyNumber', i, 1),
                              initial_date: initialDate.split('T')[0],
                              title: this.getNodeParameter('title', i),
                          };
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          if (Object.keys(additionalFields).length) {
                              Object.assign(body, additionalFields);
                          }
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'POST', '/reminders', body);
                      }
                      else if (operation === 'delete') {
                          const reminderId = this.getNodeParameter('reminderId', i);
                          const endpoint = `/reminders/${reminderId}`;
                          await GenericFunctions_1.monicaCrmApiRequest.call(this, 'DELETE', endpoint);
                          responseData = { success: true };
                      }
                      else if (operation === 'get') {
                          const reminderId = this.getNodeParameter('reminderId', i);
                          const endpoint = `/reminders/${reminderId}`;
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', endpoint);
                      }
                      else if (operation === 'getAll') {
                          responseData = await GenericFunctions_1.monicaCrmApiRequestAllItems.call(this, 'GET', '/reminders');
                      }
                      else if (operation === 'update') {
                          const reminderId = this.getNodeParameter('reminderId', i);
                          const { data } = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', `/reminders/${reminderId}`);
                          const body = {
                              contact_id: data.contact.id,
                              frequency_type: data.frequency_type,
                              frequency_number: data.frequency_number,
                              initial_date: data.initial_date,
                              title: data.title,
                          };
                          const updateFields = this.getNodeParameter('updateFields', i);
                          if (Object.keys(updateFields).length) {
                              Object.assign(body, updateFields);
                          }
                          body.initial_date = body.initial_date.split('T')[0];
                          const endpoint = `/reminders/${reminderId}`;
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'PUT', endpoint, body);
                      }
                  }
                  else if (resource === 'tag') {
                      if (operation === 'create') {
                          const body = {
                              name: this.getNodeParameter('name', i),
                          };
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'POST', '/tags', body);
                      }
                      else if (operation === 'delete') {
                          const tagId = this.getNodeParameter('tagId', i);
                          await GenericFunctions_1.monicaCrmApiRequest.call(this, 'DELETE', `/tags/${tagId}`);
                          responseData = { success: true };
                      }
                      else if (operation === 'get') {
                          const tagId = this.getNodeParameter('tagId', i);
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', `/tags/${tagId}`);
                      }
                      else if (operation === 'getAll') {
                          responseData = await GenericFunctions_1.monicaCrmApiRequestAllItems.call(this, 'GET', '/tags');
                      }
                      else if (operation === 'update') {
                          const body = {
                              name: this.getNodeParameter('name', i),
                          };
                          const tagId = this.getNodeParameter('tagId', i);
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'PUT', `/tags/${tagId}`, body);
                      }
                  }
                  else if (resource === 'task') {
                      if (operation === 'create') {
                          const body = {
                              contact_id: this.getNodeParameter('contactId', i),
                              title: this.getNodeParameter('title', i),
                          };
                          const additionalFields = this.getNodeParameter('additionalFields', i);
                          if (Object.keys(additionalFields).length) {
                              Object.assign(body, additionalFields);
                          }
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'POST', '/tasks', body);
                      }
                      else if (operation === 'delete') {
                          const taskId = this.getNodeParameter('taskId', i);
                          await GenericFunctions_1.monicaCrmApiRequest.call(this, 'DELETE', `/tasks/${taskId}`);
                          responseData = { success: true };
                      }
                      else if (operation === 'get') {
                          const taskId = this.getNodeParameter('taskId', i);
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', `/tasks/${taskId}`);
                      }
                      else if (operation === 'getAll') {
                          const endpoint = '/tasks';
                          responseData = await GenericFunctions_1.monicaCrmApiRequestAllItems.call(this, 'GET', endpoint);
                      }
                      else if (operation === 'update') {
                          const taskId = this.getNodeParameter('taskId', i);
                          const { data } = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'GET', `/tasks/${taskId}`);
                          const body = {
                              contact_id: data.contact.id,
                              title: data.title,
                              completed: data.completed,
                          };
                          const updateFields = this.getNodeParameter('updateFields', i);
                          if (Object.keys(updateFields).length) {
                              Object.assign(body, updateFields);
                          }
                          responseData = await GenericFunctions_1.monicaCrmApiRequest.call(this, 'PUT', `/tasks/${taskId}`, body);
                      }
                  }
              }
              catch (error) {
                  if (this.continueOnFail()) {
                      const executionErrorData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray({ error: error.message }), { itemData: { item: i } });
                      returnData.push(...executionErrorData);
                      continue;
                  }
                  throw error;
              }
              if (['create', 'get', 'update', 'add'].includes(operation)) {
                  responseData = responseData.data;
              }
              const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
              returnData.push(...executionData);
          }
          return [returnData];
      }
  }
  exports.MonicaCrm = MonicaCrm;
  //# sourceMappingURL=MonicaCrm.node.js.map

credential_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MonicaCrmApi = void 0;
  class MonicaCrmApi {
      constructor() {
          this.name = 'monicaCrmApi';
          this.displayName = 'Monica CRM API';
          this.documentationUrl = 'monicaCrm';
          this.properties = [
              {
                  displayName: 'Environment',
                  name: 'environment',
                  type: 'options',
                  default: 'cloudHosted',
                  options: [
                      {
                          name: 'Cloud-Hosted',
                          value: 'cloudHosted',
                      },
                      {
                          name: 'Self-Hosted',
                          value: 'selfHosted',
                      },
                  ],
              },
              {
                  displayName: 'Self-Hosted Domain',
                  name: 'domain',
                  type: 'string',
                  default: '',
                  placeholder: 'https://www.mydomain.com',
                  displayOptions: {
                      show: {
                          environment: ['selfHosted'],
                      },
                  },
              },
              {
                  displayName: 'API Token',
                  name: 'apiToken',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
              },
          ];
      }
  }
  exports.MonicaCrmApi = MonicaCrmApi;
  //# sourceMappingURL=MonicaCrmApi.credentials.js.map

  // --- Next Credential File ---

  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.MonicaCrmApi = void 0;
  class MonicaCrmApi {
      constructor() {
          this.name = 'monicaCrmApi';
          this.displayName = 'Monica CRM API';
          this.documentationUrl = 'monicaCrm';
          this.properties = [
              {
                  displayName: 'Environment',
                  name: 'environment',
                  type: 'options',
                  default: 'cloudHosted',
                  options: [
                      {
                          name: 'Cloud-Hosted',
                          value: 'cloudHosted',
                      },
                      {
                          name: 'Self-Hosted',
                          value: 'selfHosted',
                      },
                  ],
              },
              {
                  displayName: 'Self-Hosted Domain',
                  name: 'domain',
                  type: 'string',
                  default: '',
                  placeholder: 'https://www.mydomain.com',
                  displayOptions: {
                      show: {
                          environment: ['selfHosted'],
                      },
                  },
              },
              {
                  displayName: 'API Token',
                  name: 'apiToken',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
              },
          ];
      }
  }
  exports.MonicaCrmApi = MonicaCrmApi;
  //# sourceMappingURL=MonicaCrmApi.credentials.js.map

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

  # Monica CRM node

  Use the Monica CRM node to automate work in Monica CRM, and integrate Monica CRM with other applications. n8n has built-in support for a wide range of Monica CRM features, including creating, updating, deleting, and getting activities, calls, contracts, messages, tasks, and notes. 

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

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

  ## Operations

  * Activity
      * Create an activity
      * Delete an activity
      * Retrieve an activity
      * Retrieve all activities
      * Update an activity
  * Call
      * Create a call
      * Delete a call
      * Retrieve a call
      * Retrieve all calls
      * Update a call
  * Contact
      * Create a contact
      * Delete a contact
      * Retrieve a contact
      * Retrieve all contacts
      * Update a contact
  * Contact Field
      * Create a contact field
      * Delete a contact field
      * Retrieve a contact field
      * Update a contact field
  * Contact Tag
      * Add
      * Remove
  * Conversation
      * Create a conversation
      * Delete a conversation
      * Retrieve a conversation
      * Update a conversation
  * Conversation Message
      * Add a message to a conversation
      * Update a message in a conversation
  * Journal Entry
      * Create a journal entry
      * Delete a journal entry
      * Retrieve a journal entry
      * Retrieve all journal entries
      * Update a journal entry
  * Note
      * Create a note
      * Delete a note
      * Retrieve a note
      * Retrieve all notes
      * Update a note
  * Reminder
      * Create a reminder
      * Delete a reminder
      * Retrieve a reminder
      * Retrieve all reminders
      * Update a reminder
  * Tag
      * Create a tag
      * Delete a tag
      * Retrieve a tag
      * Retrieve all tags
      * Update a tag
  * Task
      * Create a task
      * Delete a task
      * Retrieve a task
      * Retrieve all tasks
      * Update a task

  ## Templates and examples

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

example_workflow:
  {"name":"Monica CRM Example Workflow","nodes":[{"parameters":{"resource":"activity","dynamic_property":null},"id":"fk4dtpj6mqv21arjsep19p","name":"Monica CRM","type":"n8n-nodes-base.exampleNode","typeVersion":1,"position":[250,300]}],"connections":{},"active":false,"settings":{},"tags":["example","generated"]}

properties_schema:
  [{"displayName":"Resource","name":"resource","type":"options","default":"contact","options":[{"name":"Activity","value":"activity"},{"name":"Call","value":"call"},{"name":"Contact","value":"contact"},{"name":"Contact Field","value":"contactField"},{"name":"Contact Tag","value":"contactTag"},{"name":"Conversation","value":"conversation"},{"name":"Conversation Message","value":"conversationMessage"},{"name":"Journal Entry","value":"journalEntry"},{"name":"Note","value":"note"},{"name":"Reminder","value":"reminder"},{"name":"Tag","value":"tag"},{"name":"Task","value":"task"}]},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.activityOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.activityFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.callOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.callFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.contactOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.contactFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.contactFieldOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.contactFieldFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.contactTagOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.contactTagFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.conversationOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.conversationFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.conversationMessageOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.conversationMessageFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.journalEntryOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.journalEntryFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.noteOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.noteFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.reminderOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.reminderFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.tagOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.tagFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.taskOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...descriptions_1.taskFields"}]


node_type: n8n-nodes-base.N8n
name: N8n
display_name: n8n
description: Handle events and perform actions on your n8n instance
category: transform
icon: file:n8n.svg
code_hash: 25e366d56d1bd2a332ffffad191bc91b827011483a2ac2e0ca54ae1573799d5f
documentation_url: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.N8n
documentation_title: n8n
operations: []
api_methods: []
documentation_examples: []
templates: [{"name":"n8n","description":"Templates for n8n"}]
related_resources: []
required_scopes: []
parameter_schemas: []
example_parameters: {"resource":"audit","dynamic_property":null}
package_name: n8n-nodes-base
version: 1.0
extracted_at: 2025-06-12 08:58:58
updated_at: 2025-06-12 08:58:58
source_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.N8n = void 0;
  const AuditDescription_1 = require("./AuditDescription");
  const CredentialDescription_1 = require("./CredentialDescription");
  const ExecutionDescription_1 = require("./ExecutionDescription");
  const WorkflowDescription_1 = require("./WorkflowDescription");
  const WorkflowLocator_1 = require("./WorkflowLocator");
  class N8n {
      constructor() {
          this.description = {
              displayName: 'n8n',
              name: 'n8n',
              icon: 'file:n8n.svg',
              group: ['transform'],
              version: 1,
              subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
              description: 'Handle events and perform actions on your n8n instance',
              defaults: {
                  name: 'n8n',
              },
              inputs: ['main'],
              outputs: ['main'],
              credentials: [
                  {
                      name: 'n8nApi',
                      required: true,
                  },
              ],
              requestDefaults: {
                  returnFullResponse: true,
                  baseURL: '={{ $credentials.baseUrl.replace(new RegExp("/$"), "") }}',
                  headers: {
                      Accept: 'application/json',
                      'Content-Type': 'application/json',
                  },
              },
              properties: [
                  {
                      displayName: 'Resource',
                      name: 'resource',
                      type: 'options',
                      noDataExpression: true,
                      options: [
                          {
                              name: 'Audit',
                              value: 'audit',
                          },
                          {
                              name: 'Credential',
                              value: 'credential',
                          },
                          {
                              name: 'Execution',
                              value: 'execution',
                          },
                          {
                              name: 'Workflow',
                              value: 'workflow',
                          },
                      ],
                      default: 'workflow',
                  },
                  ...AuditDescription_1.auditOperations,
                  ...AuditDescription_1.auditFields,
                  ...CredentialDescription_1.credentialOperations,
                  ...CredentialDescription_1.credentialFields,
                  ...ExecutionDescription_1.executionOperations,
                  ...ExecutionDescription_1.executionFields,
                  ...WorkflowDescription_1.workflowOperations,
                  ...WorkflowDescription_1.workflowFields,
              ],
          };
          this.methods = {
              listSearch: {
                  searchWorkflows: WorkflowLocator_1.searchWorkflows,
              },
          };
      }
  }
  exports.N8n = N8n;
  //# sourceMappingURL=N8n.node.js.map

credential_code:
  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.N8nApi = void 0;
  class N8nApi {
      constructor() {
          this.name = 'n8nApi';
          this.displayName = 'n8n API';
          this.documentationUrl = 'https://docs.n8n.io/api/authentication/';
          this.properties = [
              {
                  displayName: 'API Key',
                  name: 'apiKey',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
                  description: 'The API key for the n8n instance',
              },
              {
                  displayName: 'Base URL',
                  name: 'baseUrl',
                  type: 'string',
                  default: '',
                  placeholder: 'https://<name>.app.n8n.cloud/api/v1',
                  description: 'The API URL of the n8n instance',
              },
          ];
          this.authenticate = {
              type: 'generic',
              properties: {
                  headers: {
                      'X-N8N-API-KEY': '={{ $credentials.apiKey }}',
                  },
              },
          };
          this.test = {
              request: {
                  baseURL: '={{ $credentials.baseUrl }}',
                  url: '/workflows?limit=5',
              },
          };
      }
  }
  exports.N8nApi = N8nApi;
  //# sourceMappingURL=N8nApi.credentials.js.map

  // --- Next Credential File ---

  "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.N8nApi = void 0;
  class N8nApi {
      constructor() {
          this.name = 'n8nApi';
          this.displayName = 'n8n API';
          this.documentationUrl = 'https://docs.n8n.io/api/authentication/';
          this.properties = [
              {
                  displayName: 'API Key',
                  name: 'apiKey',
                  type: 'string',
                  typeOptions: { password: true },
                  default: '',
                  description: 'The API key for the n8n instance',
              },
              {
                  displayName: 'Base URL',
                  name: 'baseUrl',
                  type: 'string',
                  default: '',
                  placeholder: 'https://<name>.app.n8n.cloud/api/v1',
                  description: 'The API URL of the n8n instance',
              },
          ];
          this.authenticate = {
              type: 'generic',
              properties: {
                  headers: {
                      'X-N8N-API-KEY': '={{ $credentials.apiKey }}',
                  },
              },
          };
          this.test = {
              request: {
                  baseURL: '={{ $credentials.baseUrl }}',
                  url: '/workflows?limit=5',
              },
          };
      }
  }
  exports.N8nApi = N8nApi;
  //# sourceMappingURL=N8nApi.credentials.js.map

documentation_markdown:
  ---
  #https://www.notion.so/n8n/Frontmatter-432c2b8dff1f43d4b1c8d20075510fe4
  title: n8n
  description: Documentation for the n8n node in n8n, a workflow automation platform. Includes guidance on usage, and links to examples.
  contentType: [integration, reference]
  priority: medium
  ---

  # n8n

  A node to integrate with n8n itself. This node allows you to consume the [n8n API](/api/index.md) in your workflows.

  Refer to the [n8n REST API documentation](/api/index.md) for more information on using the n8n API. Refer to [API endpoint reference](/api/api-reference.md) for working with the API endpoints directly.

  /// note | Credentials
  You can find authentication information for this node in the [API authentication](/api/authentication.md) documentation.
  ///

  /// warning | SSL
  This node doesn't support SSL. If your server requires an SSL connection, use the [HTTP Request node](/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/index.md) to call the [n8n API](/api/index.md).
  The HTTP Request node has options to [provide the SSL certificate](/integrations/builtin/credentials/httprequest.md#provide-an-ssl-certificate).
  ///

  ## Operations

  * Audit
  	* [**Generate** a security audit](#generate-audit)
  * Credential
  	* [**Create** a credential](#create-credential)
  	* [**Delete** a credential](#delete-credential)
  	* [**Get Schema**](#get-credential-schema): Use this operation to get credential data schema for type
  * Execution
  	* [**Get** an execution](#get-execution)
  	* [**Get Many** executions](#get-many-executions)
  	* [**Delete** an execution](#delete-execution)
  * Workflow
  	* [**Activate** a workflow](#activate-deactivate-delete-and-get-workflow)
  	* [**Create** a workflow](#create-workflow)
  	* [**Deactivate** a workflow](#activate-deactivate-delete-and-get-workflow)
  	* [**Delete** a workflow](#activate-deactivate-delete-and-get-workflow)
  	* [**Get** a workflow](#activate-deactivate-delete-and-get-workflow)
  	* [**Get Many** workflows](#get-many-workflows)
  	* [**Update** a workflow](#update-workflow)

  ## Generate audit

  This operation has no parameters. Configure it with these options:

  * **Categories**: Select the risk categories you want the audit to include. Options include:
  	* **Credentials**
  	* **Database**
  	* **Filesystem**
  	* **Instance**
  	* **Nodes**
  * **Days Abandoned Workflow**: Use this option to set the number of days without execution after which a workflow should be considered abandoned. Enter a number of days. The default is `90`.

  ## Create credential

  Configure this operation with these parameters:

  * **Name**: Enter the name of the credential you'd like to create.
  * **Credential Type**: Enter the credential's type. The available types depend on nodes installed on the n8n instance. Some built-in types include `githubApi`, `notionApi`, and `slackApi`.
  * **Data**: Enter a valid JSON object with the required properties for this **Credential Type**. To see the expected format, use the **Get Schema** operation.

  ## Delete credential

  Configure this operation with this parameter:

  * **Credential ID**: Enter the ID of the credential you want to delete.

  ## Get credential schema

  Configure this operation with this parameter:

  * **Credential Type**: Enter the credential's type. The available types depend on nodes installed on the n8n instance. Some built-in types include `githubApi`, `notionApi`, and `slackApi`.

  ## Get execution

  Configure this operation with this parameter:

  * **Execution ID**: Enter the ID of the execution you want to retrieve.

  ### Get execution option

  You can further configure this operation with this **Option**:

  * **Include Execution Details**: Use this control to set whether to include the detailed execution data (turned on) or not (turned off).

  ## Get many executions

  Configure this operation with these parameters:

  * **Return All**: Set whether to return all results (turned on) or whether to limit the results to the entered **Limit** (turned on).
  * **Limit**: Set the number of results to return if the **Return All** control is turned off.

  ### Get many executions filters

  You can further configure this operation with these **Filters**:

  * **Workflow**: Filter the executions by workflow. Options include:
  	* **From list**: Select a workflow to use as a filter.
  	* **By URL**: Enter a workflow URL to use as a filter.
  	* **By ID**: Enter a workflow ID to use as a filter.
  * **Status**: Filter the executions by status. Options include:
  	* **Error**
  	* **Success**
  	* **Waiting**

  ### Get many execution options

  You can further configure this operation with this **Option**:

  * **Include Execution Details**: Use this control to set whether to include the detailed execution data (turned on) or not (turned off).

  ## Delete execution

  Configure this operation with this parameter:

  * **Execution ID**: Enter the ID of the execution you want to delete.

  ## Activate, deactivate, delete, and get workflow

  The **Activate**, **Deactivate**, **Delete**, and **Get** workflow operations all include the same parameter for you to select the **Workflow** you want to perform the operation on. Options include:

  * **From list**: Select the workflow from the list.
  * **By URL**: Enter the URL of the workflow.
  * **By ID**: Enter the ID of the workflow.

  ## Create workflow

  Configure this operation with this parameter:

  * **Workflow Object**: Enter a valid JSON object with the new workflow's details. The object requires these fields:
  	* `name`
  	* `nodes`
  	* `connections`
  	* `settings`

  Refer to the [n8n API | Create a workflow documentation](/api/api-reference.md/#tag/Workflow/paths/~1workflows/post) for more information.

  ## Get many workflows

  Configure this operation with these parameters:

  * **Return All**: Set whether to return all results (turned on) or whether to limit the results to the entered **Limit** (turned on).
  * **Limit**: Set the number of results to return if the **Return All** control is turned off.

  ### Get many workflows filters

  You can further configure this operation with these **Filters**:

  * **Return Only Active Workflows**: Select whether to return only active workflows (turned on) or active and inactive workflows (turned off).
  * **Tags**: Enter a comma-separated list of tags the returned workflows must have.

  ## Update workflow

  Configure this operation with these parameters:

  * **Workflow**: Select the workflow you want to update. Options include:
  	* **From list**: Select the workflow from the list.
  	* **By URL**: Enter the URL of the workflow.
  	* **By ID**: Enter the ID of the workflow.
  * **Workflow Object**: Enter a valid JSON object to update the workflow with. The object requires these fields:
  	* `name`
  	* `nodes`
  	* `connections`
  	* `settings`

  Refer to the [n8n API | Update a workflow documentation](https://docs.n8n.io/api/api-reference/#tag/Workflow/paths/~1workflows~1%7Bid%7D/put) for more information.

  ## Templates and examples

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

workflow_examples:
  [{"name":"agents_vs_chains","workflow":{"name":"Agents vs chains","nodes":[{"parameters":{},"id":"9e1d8f35-e1ba-4600-977d-e54a919c2c62","name":"Chat Trigger","type":"@n8n/n8n-nodes-langchain.chatTrigger","typeVersion":1,"position":[520,420],"webhookId":"84bfdbd0-e2ce-4bfa-b746-985e64a14484"},{"parameters":{"options":{}},"id":"4b89df4b-4f78-4f52-a51d-eeb66a7948e5","name":"OpenAI Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","typeVersion":1,"position":[1020,420],"credentials":{"openAiApi":{"id":"tW3bkXa0SAK0OzvR","name":"OpenAi account Debs"}}},{"parameters":{"options":{}},"id":"a0045df2-d212-4e6a-a2d4-722136dcb8b5","name":"OpenAI Chat Model1","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","typeVersion":1,"position":[980,880],"credentials":{"openAiApi":{"id":"tW3bkXa0SAK0OzvR","name":"OpenAi account Debs"}}},{"parameters":{},"id":"d702f647-1fa7-4b4f-91b1-e0152326ea11","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","typeVersion":1.2,"position":[1280,460]},{"parameters":{},"id":"76cc359a-5ec8-446a-a8e0-9035d18247cb","name":"Wikipedia","type":"@n8n/n8n-nodes-langchain.toolWikipedia","typeVersion":1,"position":[1540,340]},{"parameters":{"options":{}},"id":"01d1785f-f7c4-47d2-97b7-76eeff68002d","name":"AI Agent","type":"@n8n/n8n-nodes-langchain.agent","typeVersion":1.5,"position":[1060,140]},{"parameters":{"messages":{"messageValues":[{"message":"Every time you respond, start your response with the sentence: \"This message came from the chain\"."}]}},"id":"bcdcd704-13f5-4906-b337-7ec4629b9781","name":"Basic LLM Chain","type":"@n8n/n8n-nodes-langchain.chainLlm","typeVersion":1.4,"position":[1040,680]},{"parameters":{"content":"## Try it out\n\nSelect **Chat**, and try out these queries:\n\n- Please show me a Wikipedia article about cats (agent)\n- Please show me a Wikipedia article about cats (chain)\n- What was my last question? (chain)\n- What was my last question? (agent)\n","height":343.8587887368956,"color":4},"id":"f08e231b-739a-4b9d-b738-139b7e3bd60b","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[240,420]},{"parameters":{"content":"**Set your credentials**","height":193,"width":167,"color":2},"id":"5421fd4d-c82f-483a-8238-869b9a10000d","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[980,360]},{"parameters":{"content":"**Set your credentials**","height":193,"width":167,"color":2},"id":"23fac3a8-a220-40a5-8d3d-4a3013b0f1da","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[940,820]},{"parameters":{"content":"**Memory allows the agent to access previous parts of the chat**\n","height":244,"color":5},"id":"08397bde-06e4-4bff-b130-cbc4408a0ecc","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[1200,360]},{"parameters":{"content":"**The agent can use the Wikipedia tool to access articles from Wikipedia**","height":238,"color":5},"id":"a53ff4f2-9d06-4166-9ad6-760cd8fe4a54","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[1460,240]},{"parameters":{"rules":{"values":[{"conditions":{"options":{"caseSensitive":false,"leftValue":"","typeValidation":"strict"},"conditions":[{"leftValue":"={{ $json.chatInput }}","rightValue":"agent","operator":{"type":"string","operation":"contains"}}],"combinator":"and"}},{"conditions":{"options":{"caseSensitive":false,"leftValue":"","typeValidation":"strict"},"conditions":[{"id":"248f4a34-89c1-4d1e-867a-daa024c8635a","leftValue":"={{ $json.chatInput }}","rightValue":"chain","operator":{"type":"string","operation":"contains"}}],"combinator":"and"}}]},"options":{"ignoreCase":true}},"id":"ab2bff8d-e914-421d-9aa3-9d0ad815cea6","name":"Check user input for \"chain\" or \"agent\"","type":"n8n-nodes-base.switch","typeVersion":3,"position":[740,420]},{"parameters":{"content":"## Next steps\n\nLearn more about [Advanced AI in n8n](https://docs.n8n.io/advanced-ai/)"},"id":"f077f8e6-789a-4db1-8402-fb173c296017","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[1560,840]}],"pinData":{},"connections":{"Chat Trigger":{"main":[[{"node":"Check user input for \"chain\" or \"agent\"","type":"main","index":0}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]},"OpenAI Chat Model1":{"ai_languageModel":[[{"node":"Basic LLM Chain","type":"ai_languageModel","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"AI Agent","type":"ai_memory","index":0}]]},"Wikipedia":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"Check user input for \"chain\" or \"agent\"":{"main":[[{"node":"AI Agent","type":"main","index":0}],[{"node":"Basic LLM Chain","type":"main","index":0}]]}},"active":false,"settings":{"executionOrder":"v1"},"versionId":"59784a0f-0601-4456-b48d-9a191e203461","meta":{"templateCredsSetupCompleted":true,"instanceId":"cb484ba7b742928a2048bf8829668bed5b5ad9787579adea888f05980292a4a7"},"id":"qK43vJw6dRZkXo6h","tags":[{"createdAt":"2021-06-25T07:47:07.640Z","updatedAt":"2021-06-25T07:47:07.640Z","id":"1","name":"docs"},{"createdAt":"2023-02-22T12:06:03.372Z","updatedAt":"2023-02-22T12:06:03.372Z","id":"63","name":"createdBy:Debs"}]},"nodeConfigurations":[{"nodeType":"@n8n/n8n-nodes-langchain.chatTrigger","version":1,"parameters":{},"position":[520,420]},{"nodeType":"@n8n/n8n-nodes-langchain.lmChatOpenAi","version":1,"parameters":{"options":{}},"position":[1020,420]},{"nodeType":"@n8n/n8n-nodes-langchain.lmChatOpenAi","version":1,"parameters":{"options":{}},"position":[980,880]},{"nodeType":"@n8n/n8n-nodes-langchain.memoryBufferWindow","version":1.2,"parameters":{},"position":[1280,460]},{"nodeType":"@n8n/n8n-nodes-langchain.toolWikipedia","version":1,"parameters":{},"position":[1540,340]},{"nodeType":"@n8n/n8n-nodes-langchain.agent","version":1.5,"parameters":{"options":{}},"position":[1060,140]},{"nodeType":"@n8n/n8n-nodes-langchain.chainLlm","version":1.4,"parameters":{"messages":{"messageValues":[{"message":"Every time you respond, start your response with the sentence: \"This message came from the chain\"."}]}},"position":[1040,680]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"## Try it out\n\nSelect **Chat**, and try out these queries:\n\n- Please show me a Wikipedia article about cats (agent)\n- Please show me a Wikipedia article about cats (chain)\n- What was my last question? (chain)\n- What was my last question? (agent)\n","height":343.8587887368956,"color":4},"position":[240,420]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Set your credentials**","height":193,"width":167,"color":2},"position":[980,360]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Set your credentials**","height":193,"width":167,"color":2},"position":[940,820]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Memory allows the agent to access previous parts of the chat**\n","height":244,"color":5},"position":[1200,360]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**The agent can use the Wikipedia tool to access articles from Wikipedia**","height":238,"color":5},"position":[1460,240]},{"nodeType":"n8n-nodes-base.switch","version":3,"parameters":{"rules":{"values":[{"conditions":{"options":{"caseSensitive":false,"leftValue":"","typeValidation":"strict"},"conditions":[{"leftValue":"={{ $json.chatInput }}","rightValue":"agent","operator":{"type":"string","operation":"contains"}}],"combinator":"and"}},{"conditions":{"options":{"caseSensitive":false,"leftValue":"","typeValidation":"strict"},"conditions":[{"id":"248f4a34-89c1-4d1e-867a-daa024c8635a","leftValue":"={{ $json.chatInput }}","rightValue":"chain","operator":{"type":"string","operation":"contains"}}],"combinator":"and"}}]},"options":{"ignoreCase":true}},"position":[740,420]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"## Next steps\n\nLearn more about [Advanced AI in n8n](https://docs.n8n.io/advanced-ai/)"},"position":[1560,840]}],"connections":{"Chat Trigger":{"main":[[{"node":"Check user input for \"chain\" or \"agent\"","type":"main","index":0}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]},"OpenAI Chat Model1":{"ai_languageModel":[[{"node":"Basic LLM Chain","type":"ai_languageModel","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"AI Agent","type":"ai_memory","index":0}]]},"Wikipedia":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"Check user input for \"chain\" or \"agent\"":{"main":[[{"node":"AI Agent","type":"main","index":0}],[{"node":"Basic LLM Chain","type":"main","index":0}]]}},"source":"docs/_workflows/advanced-ai/examples/agents_vs_chains.json","description":"Workflow example from docs/_workflows/advanced-ai/examples/agents_vs_chains.json"},{"name":"ask_a_human","workflow":{"name":"Ask a human","nodes":[{"parameters":{},"id":"a60c8572-56c1-4bf3-8352-a6419a475887","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","typeVersion":1.1,"position":[900,760]},{"parameters":{"name":"dont_know_tool","description":"Use this tool if you don't know the answer to the user's question, or if you're not very confident about your answer.","workflowId":"={{ $workflow.id}}","fields":{"values":[{"name":"chatInput","stringValue":"={{ $('Chat Trigger').item.json.chatInput }}"}]}},"id":"b4f2e26c-903b-46b8-bd8b-110fd64de9e4","name":"Not sure?","type":"@n8n/n8n-nodes-langchain.toolWorkflow","typeVersion":1,"position":[1120,760]},{"parameters":{},"id":"951cc691-b422-4ce6-901f-b7feb3afd1ad","name":"Execute Workflow Trigger","type":"n8n-nodes-base.executeWorkflowTrigger","typeVersion":1,"position":[540,1360]},{"parameters":{"content":"### Sub-workflow: Custom tool\nThe agent above can call this workflow. It checks if the user has supplied an email address. If they haven't it prompts them to provide one. If they have, it messages a customer support channel for help.","height":775.3931210698682,"width":1118.3459011229047,"color":7},"id":"194ba9c0-e256-449a-8da7-ac5339123a99","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[500,1020],"typeVersion":1},{"parameters":{"content":"### Main workflow: AI agent using custom tool","height":486.5625,"width":927.5,"color":7},"id":"38c6b363-45a7-4e72-9e40-8c0df3cc480f","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[500,460],"typeVersion":1},{"parameters":{"content":"**This tool calls the sub-workflow below**","height":179.21380662202682,"width":197.45572294791873,"color":5},"id":"0389315b-e48d-4b00-b9a1-899302b1b094","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[1060,700],"typeVersion":1},{"parameters":{"content":"**Set your credentials**","height":213.44323866265472,"width":150,"color":2},"id":"fb11064a-4cf5-4110-9e39-af24a3225164","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[700,680]},{"parameters":{"content":"**Set your credentials and Slack details**","height":250.57252651663197,"width":178.0499248677781,"color":2},"id":"d689021d-0a46-4dff-a01a-0b01ecdd198b","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[1020,1180]},{"parameters":{"content":"## Try it out\n\nSelect **Chat** at the bottom and enter:\n\n_Hi! Please respond to this as if you don't know the answer to my query._","height":214.8397420554627,"width":185.9375,"color":4},"id":"0926cd61-c0b8-4bae-ae65-9afd130d17cd","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[340,520],"typeVersion":1},{"parameters":{"content":"## Next steps\n\nLearn more about [Advanced AI in n8n](https://docs.n8n.io/advanced-ai/)","height":144.50520156238127},"id":"cde69dfe-252e-4a05-8d56-fa79431df5d8","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[1580,1600]},{"parameters":{},"id":"927b775a-47f6-4067-a1a5-5f13dea28e45","name":"Chat Trigger","type":"@n8n/n8n-nodes-langchain.chatTrigger","typeVersion":1,"position":[600,520],"webhookId":"785e0c0c-12e5-4249-9abe-47bb131975cb"},{"parameters":{"jsCode":"response = {\"response\":\"I'm sorry I don't know the answer. Please repeat your question and include your email address so I can request help.\"};\nreturn response;"},"id":"971e7b90-c2d8-4292-9da8-732d7d399f04","name":"Prompt the user to provide an email","type":"n8n-nodes-base.code","typeVersion":2,"position":[1060,1520]},{"parameters":{"jsCode":"response = {\"response\": \"Thank you for getting in touch. I've messaged a human to help.\"}\nreturn response;"},"id":"6f5a21b3-c145-46c8-8e69-660100c4a6fc","name":"Confirm that we've messaged a human","type":"n8n-nodes-base.code","typeVersion":2,"position":[1300,1260]},{"parameters":{"options":{"systemMessage":"Try to answer the user's question. When you can't answer, or you're not confident of the answer, use the appropriate tool. When you use the dont_know_tool, respond with the message from the tool."}},"id":"8b17da5e-e392-4028-91b0-bc02d34e46ed","name":"AI Agent","type":"@n8n/n8n-nodes-langchain.agent","typeVersion":1.2,"position":[820,520]},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict"},"conditions":[{"id":"5e21e7c5-db60-4111-bb17-c289ae0fc159","leftValue":"={{ $('Execute Workflow Trigger').item.json.chatInput }}","rightValue":"/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9_-]+)/gi","operator":{"type":"string","operation":"regex"}}],"combinator":"and"},"options":{}},"id":"990ecd3b-6aa0-4b17-8d01-d606b9164fa8","name":"Check if user has provided email","type":"n8n-nodes-base.if","typeVersion":2,"position":[760,1360]},{"parameters":{"select":"channel","channelId":{"__rl":true,"value":"","mode":"name"},"text":"={{ \"A user had a question the bot couldn't answer. Here's their message: \" + $('Execute Workflow Trigger').item.json.chatInput }}","otherOptions":{}},"id":"d14da0ae-06ca-422b-b5b6-e7759e74c787","name":"Message Slack for help","type":"n8n-nodes-base.slack","typeVersion":2.1,"position":[1060,1260]},{"parameters":{"model":"gpt-4","options":{"temperature":0.2}},"id":"278391c7-6945-495e-a4f1-74fb8fcc3549","name":"GPT4","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","typeVersion":1,"position":[740,740]}],"pinData":{},"connections":{"Simple Memory":{"ai_memory":[[{"node":"AI Agent","type":"ai_memory","index":0}]]},"Not sure?":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"Execute Workflow Trigger":{"main":[[{"node":"Check if user has provided email","type":"main","index":0}]]},"Chat Trigger":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"Check if user has provided email":{"main":[[{"node":"Message Slack for help","type":"main","index":0}],[{"node":"Prompt the user to provide an email","type":"main","index":0}]]},"Message Slack for help":{"main":[[{"node":"Confirm that we've messaged a human","type":"main","index":0}]]},"GPT4":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]}}},"nodeConfigurations":[{"nodeType":"@n8n/n8n-nodes-langchain.memoryBufferWindow","version":1.1,"parameters":{},"position":[900,760]},{"nodeType":"@n8n/n8n-nodes-langchain.toolWorkflow","version":1,"parameters":{"name":"dont_know_tool","description":"Use this tool if you don't know the answer to the user's question, or if you're not very confident about your answer.","workflowId":"={{ $workflow.id}}","fields":{"values":[{"name":"chatInput","stringValue":"={{ $('Chat Trigger').item.json.chatInput }}"}]}},"position":[1120,760]},{"nodeType":"n8n-nodes-base.executeWorkflowTrigger","version":1,"parameters":{},"position":[540,1360]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"### Sub-workflow: Custom tool\nThe agent above can call this workflow. It checks if the user has supplied an email address. If they haven't it prompts them to provide one. If they have, it messages a customer support channel for help.","height":775.3931210698682,"width":1118.3459011229047,"color":7},"position":[500,1020]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"### Main workflow: AI agent using custom tool","height":486.5625,"width":927.5,"color":7},"position":[500,460]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**This tool calls the sub-workflow below**","height":179.21380662202682,"width":197.45572294791873,"color":5},"position":[1060,700]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Set your credentials**","height":213.44323866265472,"width":150,"color":2},"position":[700,680]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Set your credentials and Slack details**","height":250.57252651663197,"width":178.0499248677781,"color":2},"position":[1020,1180]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"## Try it out\n\nSelect **Chat** at the bottom and enter:\n\n_Hi! Please respond to this as if you don't know the answer to my query._","height":214.8397420554627,"width":185.9375,"color":4},"position":[340,520]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"## Next steps\n\nLearn more about [Advanced AI in n8n](https://docs.n8n.io/advanced-ai/)","height":144.50520156238127},"position":[1580,1600]},{"nodeType":"@n8n/n8n-nodes-langchain.chatTrigger","version":1,"parameters":{},"position":[600,520]},{"nodeType":"n8n-nodes-base.code","version":2,"parameters":{"jsCode":"response = {\"response\":\"I'm sorry I don't know the answer. Please repeat your question and include your email address so I can request help.\"};\nreturn response;"},"position":[1060,1520]},{"nodeType":"n8n-nodes-base.code","version":2,"parameters":{"jsCode":"response = {\"response\": \"Thank you for getting in touch. I've messaged a human to help.\"}\nreturn response;"},"position":[1300,1260]},{"nodeType":"@n8n/n8n-nodes-langchain.agent","version":1.2,"parameters":{"options":{"systemMessage":"Try to answer the user's question. When you can't answer, or you're not confident of the answer, use the appropriate tool. When you use the dont_know_tool, respond with the message from the tool."}},"position":[820,520]},{"nodeType":"n8n-nodes-base.if","version":2,"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict"},"conditions":[{"id":"5e21e7c5-db60-4111-bb17-c289ae0fc159","leftValue":"={{ $('Execute Workflow Trigger').item.json.chatInput }}","rightValue":"/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9_-]+)/gi","operator":{"type":"string","operation":"regex"}}],"combinator":"and"},"options":{}},"position":[760,1360]},{"nodeType":"n8n-nodes-base.slack","version":2.1,"parameters":{"select":"channel","channelId":{"__rl":true,"value":"","mode":"name"},"text":"={{ \"A user had a question the bot couldn't answer. Here's their message: \" + $('Execute Workflow Trigger').item.json.chatInput }}","otherOptions":{}},"position":[1060,1260]},{"nodeType":"@n8n/n8n-nodes-langchain.lmChatOpenAi","version":1,"parameters":{"model":"gpt-4","options":{"temperature":0.2}},"position":[740,740]}],"connections":{"Simple Memory":{"ai_memory":[[{"node":"AI Agent","type":"ai_memory","index":0}]]},"Not sure?":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"Execute Workflow Trigger":{"main":[[{"node":"Check if user has provided email","type":"main","index":0}]]},"Chat Trigger":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"Check if user has provided email":{"main":[[{"node":"Message Slack for help","type":"main","index":0}],[{"node":"Prompt the user to provide an email","type":"main","index":0}]]},"Message Slack for help":{"main":[[{"node":"Confirm that we've messaged a human","type":"main","index":0}]]},"GPT4":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]}},"source":"docs/_workflows/advanced-ai/examples/ask_a_human.json"},{"name":"chat_with_google_sheets_docs_version","workflow":{"name":"Chat with Google Sheets (docs version)","nodes":[{"parameters":{},"id":"e96a5e41-f0d6-49c1-977e-ff724a857212","name":"Execute Workflow Trigger","type":"n8n-nodes-base.executeWorkflowTrigger","position":[540,1240],"typeVersion":1},{"parameters":{"content":"### Sub-workflow: Custom tool\nThe agent above can call this workflow. It returns three different types of data from the Google Sheet, which can be used together for more complex queries without returning the whole sheet (which might be too big for GPT to handle).","height":612.0936015224503,"width":1449.2963504228514,"color":7},"id":"67facef0-e9c6-4280-8232-78f654b420d5","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[461.9740563285368,970.616715060075],"typeVersion":1},{"parameters":{"content":"### Main workflow: AI agent using custom tool","height":486.5625,"width":927.5,"color":7},"id":"bc448102-954b-451e-9bf7-bcadbc53bdbc","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[460,460],"typeVersion":1},{"parameters":{"content":"## Try it out\n\nSelect **Chat** at the bottom and enter:\n\n_Which is our biggest customer?_","height":183.85014518022527,"width":185.9375,"color":4},"id":"afb2da2f-8da2-4ee8-bff9-55a99eeecc5c","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[300,540],"typeVersion":1},{"parameters":{},"id":"5d56d128-9a83-45ee-a34c-bc1190d59322","name":"Chat Trigger","type":"@n8n/n8n-nodes-langchain.chatTrigger","position":[600,560],"webhookId":"e3f23177-c7c1-417b-a513-1c1090dda0a2","typeVersion":1},{"parameters":{"authentication":"serviceAccount","documentId":{"__rl":true,"mode":"url","value":"={{ $json.sheetUrl }}"},"sheetName":{"__rl":true,"mode":"url","value":"={{ $json.sheetUrl }}"},"options":{}},"id":"3c0e4b48-a27b-472f-948e-9aa001c49149","name":"Get Google sheet contents","type":"n8n-nodes-base.googleSheets","position":[980,1240],"typeVersion":4.2},{"parameters":{"fields":{"values":[{"name":"sheetUrl"}]},"options":{}},"id":"67f9c172-e70f-4a0f-afd3-513cfeae09db","name":"Set Google Sheet URL","type":"n8n-nodes-base.set","position":[760,1240],"typeVersion":3.2},{"parameters":{"fields":{"values":[{"name":"response","stringValue":"={{ Object.keys($json) }}"}]},"include":"none","options":{}},"id":"d49223eb-2927-4ddd-bd2c-cd439f927341","name":"Get column names","type":"n8n-nodes-base.set","position":[1440,1060],"executeOnce":true,"typeVersion":3.2},{"parameters":{"jsCode":"return {\n  'response': JSON.stringify($input.all().map(x => x.json))\n}"},"id":"37ceba7a-1f0b-4de7-ae4a-d29a18dabaf6","name":"Prepare output","type":"n8n-nodes-base.code","position":[1720,1240],"typeVersion":2},{"parameters":{"name":"list_columns_tool","description":"=### List all column names in customer data\nThis is useful to find out what data is available for each customer. Returns a JSON array containing all the column names.","workflowId":"={{ $workflow.id }}","fields":{"values":[{"name":"operation","stringValue":"column_names"}]}},"id":"94516eb1-89fc-4d3f-8000-d0fa43cd71cd","name":"List columns tool","type":"@n8n/n8n-nodes-langchain.toolWorkflow","position":[940,780],"typeVersion":1},{"parameters":{"name":"get_customer_tool","description":"=### Get all columns for a given customer\nTo use this mode, pass the row number of the customer. Returns a JSON object with all the column names and their values.","workflowId":"={{ $workflow.id }}","fields":{"values":[{"name":"operation","stringValue":"row"}]}},"id":"006745a1-3df7-4de9-9483-c6e133272c55","name":"Get customer tool","type":"@n8n/n8n-nodes-langchain.toolWorkflow","position":[1220,780],"typeVersion":1},{"parameters":{},"id":"c3d20569-1374-4f8d-8779-23b98952d124","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[800,780],"typeVersion":1.1},{"parameters":{"name":"column_values_tool","description":"=### Get the specified column value for all customers\nThis is useful if you want to find out which customers have a certain value for a given column. Returns an array of JSON objects, one per customer. Each JSON object includes the column being requested, plus the row_number column. (The row_number column can be used to request the full customer data in a second step.). To use this mode, pass the name of the column to fetch.\n\nYou may want to call the 'list columns' tool first to find out which columns you could be fetching.","workflowId":"={{ $workflow.id }}","fields":{"values":[{"name":"operation","stringValue":"column_values"}]}},"id":"3a370ae9-eaf8-4e84-948b-848c461ac9eb","name":"Get column values tool","type":"@n8n/n8n-nodes-langchain.toolWorkflow","position":[1080,780],"typeVersion":1},{"parameters":{"text":"={{ $json.chatInput }}","options":{"maxIterations":10}},"id":"8f2a4854-2177-4ac8-9501-fa36cf2a3d73","name":"AI Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[820,560],"typeVersion":1.1},{"parameters":{"content":"**These tools all call the sub-workflow below**","height":179.21380662202682,"width":432.3271051132649,"color":5},"id":"2576563b-a104-4d99-b3c8-b53bff4c740c","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[900,740.8693557231958],"typeVersion":1},{"parameters":{"content":"**Change the URL of the Google Sheet**","height":226.64416053838073,"width":179.99762227826224,"color":2},"id":"5b623d9e-e188-403d-a702-9ece6172a487","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[723,1172],"typeVersion":1},{"parameters":{"model":"gpt-4","options":{"temperature":0}},"id":"2b8c8a67-a4df-4f5c-8c13-3cb2d25d2c5f","name":"GPT4 Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[660,780],"typeVersion":1},{"parameters":{"content":"**Set your credentials**","height":171,"width":150,"color":2},"id":"f39d0c9b-4055-4331-83c8-3dbffb43478e","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[620,720]},{"parameters":{"content":"**Set your credentials**","height":237,"width":176,"color":2},"id":"a8e09ef8-4dc6-4918-9194-047de402a8fa","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[940,1172]},{"parameters":{"content":"## Next steps\n\nLearn more about [Advanced AI in n8n](https://docs.n8n.io/advanced-ai/)","height":126.0084096222716,"width":291.1204551358572},"id":"a391dfb1-f408-4498-99cd-d35a258d6c9a","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[1740,1540]},{"parameters":{"rules":{"values":[{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict"},"conditions":[{"leftValue":"={{ $('Execute Workflow Trigger').item.json.operation }}","rightValue":"column_names","operator":{"type":"string","operation":"equals"}}],"combinator":"and"},"renameOutput":true,"outputKey":"col names"},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict"},"conditions":[{"id":"9fe58592-72e2-4379-9bdb-10da19c8218b","leftValue":"={{ $('Execute Workflow Trigger').item.json.operation }}","rightValue":"column_values","operator":{"type":"string","operation":"equals","name":"filter.operator.equals"}}],"combinator":"and"},"renameOutput":true,"outputKey":"col values"},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict"},"conditions":[{"id":"c1836f93-7874-43a4-98ff-cc487b276600","leftValue":"={{ $('Execute Workflow Trigger').item.json.operation }}","rightValue":"row","operator":{"type":"string","operation":"equals","name":"filter.operator.equals"}}],"combinator":"and"},"renameOutput":true,"outputKey":"rows"}]},"options":{}},"id":"907deea9-26cc-427e-93fc-52ce6b67e5e1","name":"Check operations","type":"n8n-nodes-base.switch","typeVersion":3,"position":[1220,1240]},{"parameters":{"fields":{"values":[{"name":"={{ $('Execute Workflow Trigger').item.json.query }}","stringValue":"={{ $json[$('Execute Workflow Trigger').item.json.query] }}"},{"name":"row_number","stringValue":"={{ $json.row_number }}"}]},"include":"none","options":{}},"id":"f2ebcae6-3cfb-4862-a927-dc66bd24f197","name":"Prepare column data","type":"n8n-nodes-base.set","position":[1440,1240],"typeVersion":3.2},{"parameters":{"conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"bf712098-97e4-42cb-8e08-2ee32d19d3e7","operator":{"type":"number","operation":"equals"},"leftValue":"={{ $json.row_number }}","rightValue":"={{ $('Execute Workflow Trigger').item.json.query }}"}]},"options":{"looseTypeValidation":true}},"id":"f40acb04-ef06-4670-b8b1-86b04f066af8","name":"Filter out other rows","type":"n8n-nodes-base.filter","position":[1440,1420],"typeVersion":2}],"pinData":{},"connections":{"GPT4 Model":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]},"Chat Trigger":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"Get column names":{"main":[[{"node":"Prepare output","type":"main","index":0}]]},"Get customer tool":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"List columns tool":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"Set Google Sheet URL":{"main":[[{"node":"Get Google sheet contents","type":"main","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"AI Agent","type":"ai_memory","index":0}]]},"Get column values tool":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"Execute Workflow Trigger":{"main":[[{"node":"Set Google Sheet URL","type":"main","index":0}]]},"Get Google sheet contents":{"main":[[{"node":"Check operations","type":"main","index":0}]]},"Check operations":{"main":[[{"node":"Get column names","type":"main","index":0}],[{"node":"Prepare column data","type":"main","index":0}],[{"node":"Filter out other rows","type":"main","index":0}]]},"Prepare column data":{"main":[[{"node":"Prepare output","type":"main","index":0}]]},"Filter out other rows":{"main":[[{"node":"Prepare output","type":"main","index":0}]]}}},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.executeWorkflowTrigger","version":1,"parameters":{},"position":[540,1240]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"### Sub-workflow: Custom tool\nThe agent above can call this workflow. It returns three different types of data from the Google Sheet, which can be used together for more complex queries without returning the whole sheet (which might be too big for GPT to handle).","height":612.0936015224503,"width":1449.2963504228514,"color":7},"position":[461.9740563285368,970.616715060075]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"### Main workflow: AI agent using custom tool","height":486.5625,"width":927.5,"color":7},"position":[460,460]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"## Try it out\n\nSelect **Chat** at the bottom and enter:\n\n_Which is our biggest customer?_","height":183.85014518022527,"width":185.9375,"color":4},"position":[300,540]},{"nodeType":"@n8n/n8n-nodes-langchain.chatTrigger","version":1,"parameters":{},"position":[600,560]},{"nodeType":"n8n-nodes-base.googleSheets","version":4.2,"parameters":{"authentication":"serviceAccount","documentId":{"__rl":true,"mode":"url","value":"={{ $json.sheetUrl }}"},"sheetName":{"__rl":true,"mode":"url","value":"={{ $json.sheetUrl }}"},"options":{}},"position":[980,1240]},{"nodeType":"n8n-nodes-base.set","version":3.2,"parameters":{"fields":{"values":[{"name":"sheetUrl"}]},"options":{}},"position":[760,1240]},{"nodeType":"n8n-nodes-base.set","version":3.2,"parameters":{"fields":{"values":[{"name":"response","stringValue":"={{ Object.keys($json) }}"}]},"include":"none","options":{}},"position":[1440,1060]},{"nodeType":"n8n-nodes-base.code","version":2,"parameters":{"jsCode":"return {\n  'response': JSON.stringify($input.all().map(x => x.json))\n}"},"position":[1720,1240]},{"nodeType":"@n8n/n8n-nodes-langchain.toolWorkflow","version":1,"parameters":{"name":"list_columns_tool","description":"=### List all column names in customer data\nThis is useful to find out what data is available for each customer. Returns a JSON array containing all the column names.","workflowId":"={{ $workflow.id }}","fields":{"values":[{"name":"operation","stringValue":"column_names"}]}},"position":[940,780]},{"nodeType":"@n8n/n8n-nodes-langchain.toolWorkflow","version":1,"parameters":{"name":"get_customer_tool","description":"=### Get all columns for a given customer\nTo use this mode, pass the row number of the customer. Returns a JSON object with all the column names and their values.","workflowId":"={{ $workflow.id }}","fields":{"values":[{"name":"operation","stringValue":"row"}]}},"position":[1220,780]},{"nodeType":"@n8n/n8n-nodes-langchain.memoryBufferWindow","version":1.1,"parameters":{},"position":[800,780]},{"nodeType":"@n8n/n8n-nodes-langchain.toolWorkflow","version":1,"parameters":{"name":"column_values_tool","description":"=### Get the specified column value for all customers\nThis is useful if you want to find out which customers have a certain value for a given column. Returns an array of JSON objects, one per customer. Each JSON object includes the column being requested, plus the row_number column. (The row_number column can be used to request the full customer data in a second step.). To use this mode, pass the name of the column to fetch.\n\nYou may want to call the 'list columns' tool first to find out which columns you could be fetching.","workflowId":"={{ $workflow.id }}","fields":{"values":[{"name":"operation","stringValue":"column_values"}]}},"position":[1080,780]},{"nodeType":"@n8n/n8n-nodes-langchain.agent","version":1.1,"parameters":{"text":"={{ $json.chatInput }}","options":{"maxIterations":10}},"position":[820,560]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**These tools all call the sub-workflow below**","height":179.21380662202682,"width":432.3271051132649,"color":5},"position":[900,740.8693557231958]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Change the URL of the Google Sheet**","height":226.64416053838073,"width":179.99762227826224,"color":2},"position":[723,1172]},{"nodeType":"@n8n/n8n-nodes-langchain.lmChatOpenAi","version":1,"parameters":{"model":"gpt-4","options":{"temperature":0}},"position":[660,780]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Set your credentials**","height":171,"width":150,"color":2},"position":[620,720]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Set your credentials**","height":237,"width":176,"color":2},"position":[940,1172]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"## Next steps\n\nLearn more about [Advanced AI in n8n](https://docs.n8n.io/advanced-ai/)","height":126.0084096222716,"width":291.1204551358572},"position":[1740,1540]},{"nodeType":"n8n-nodes-base.switch","version":3,"parameters":{"rules":{"values":[{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict"},"conditions":[{"leftValue":"={{ $('Execute Workflow Trigger').item.json.operation }}","rightValue":"column_names","operator":{"type":"string","operation":"equals"}}],"combinator":"and"},"renameOutput":true,"outputKey":"col names"},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict"},"conditions":[{"id":"9fe58592-72e2-4379-9bdb-10da19c8218b","leftValue":"={{ $('Execute Workflow Trigger').item.json.operation }}","rightValue":"column_values","operator":{"type":"string","operation":"equals","name":"filter.operator.equals"}}],"combinator":"and"},"renameOutput":true,"outputKey":"col values"},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict"},"conditions":[{"id":"c1836f93-7874-43a4-98ff-cc487b276600","leftValue":"={{ $('Execute Workflow Trigger').item.json.operation }}","rightValue":"row","operator":{"type":"string","operation":"equals","name":"filter.operator.equals"}}],"combinator":"and"},"renameOutput":true,"outputKey":"rows"}]},"options":{}},"position":[1220,1240]},{"nodeType":"n8n-nodes-base.set","version":3.2,"parameters":{"fields":{"values":[{"name":"={{ $('Execute Workflow Trigger').item.json.query }}","stringValue":"={{ $json[$('Execute Workflow Trigger').item.json.query] }}"},{"name":"row_number","stringValue":"={{ $json.row_number }}"}]},"include":"none","options":{}},"position":[1440,1240]},{"nodeType":"n8n-nodes-base.filter","version":2,"parameters":{"conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"bf712098-97e4-42cb-8e08-2ee32d19d3e7","operator":{"type":"number","operation":"equals"},"leftValue":"={{ $json.row_number }}","rightValue":"={{ $('Execute Workflow Trigger').item.json.query }}"}]},"options":{"looseTypeValidation":true}},"position":[1440,1420]}],"connections":{"GPT4 Model":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]},"Chat Trigger":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"Get column names":{"main":[[{"node":"Prepare output","type":"main","index":0}]]},"Get customer tool":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"List columns tool":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"Set Google Sheet URL":{"main":[[{"node":"Get Google sheet contents","type":"main","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"AI Agent","type":"ai_memory","index":0}]]},"Get column values tool":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"Execute Workflow Trigger":{"main":[[{"node":"Set Google Sheet URL","type":"main","index":0}]]},"Get Google sheet contents":{"main":[[{"node":"Check operations","type":"main","index":0}]]},"Check operations":{"main":[[{"node":"Get column names","type":"main","index":0}],[{"node":"Prepare column data","type":"main","index":0}],[{"node":"Filter out other rows","type":"main","index":0}]]},"Prepare column data":{"main":[[{"node":"Prepare output","type":"main","index":0}]]},"Filter out other rows":{"main":[[{"node":"Prepare output","type":"main","index":0}]]}},"source":"docs/_workflows/advanced-ai/examples/chat_with_google_sheets_docs_version.json"},{"name":"let_your_ai_call_an_api","workflow":{"name":"Let your AI call an API","nodes":[{"parameters":{},"id":"35ce49a9-eda1-4da5-a6cb-39a39680111b","name":"Execute Workflow Trigger","type":"n8n-nodes-base.executeWorkflowTrigger","position":[520,1140],"typeVersion":1},{"parameters":{"content":"### Sub-workflow: Custom tool\nThe agent above can call this workflow. It calls an example API called \"Bored API\" and returns a string with an activity idea.","height":775.3931210698682,"width":1180.0825159534493,"color":7},"id":"ec6e261b-922f-401c-9392-12ff73488a5f","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[460,960],"typeVersion":1},{"parameters":{"content":"### Main workflow: AI agent using custom tool","height":486.5625,"width":927.5,"color":7},"id":"25780e87-0ae0-4bee-9582-75f98bf66635","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[460,460],"typeVersion":1},{"parameters":{},"id":"f262f04b-964c-47c0-b7dc-a86b82b0184b","name":"Chat Trigger","type":"@n8n/n8n-nodes-langchain.chatTrigger","position":[600,560],"webhookId":"e3f23177-c7c1-417b-a513-1c1090dda0a2","typeVersion":1},{"parameters":{},"id":"29678c05-9a48-41ec-9c5c-af36ee0d7fc6","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[860,780],"typeVersion":1.1},{"parameters":{"content":"**This tool calls the sub-workflow below**","height":179.21380662202682,"width":197.45572294791873,"color":5},"id":"e078f88b-489c-42ea-9544-6bdaeae213a0","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[1020,720],"typeVersion":1},{"parameters":{"content":"**Set your credentials**","height":171,"width":150,"color":2},"id":"1d1d1a4e-0d1d-4094-81c7-e01f2674df0d","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[620,720]},{"parameters":{"content":"**Set your credentials**","height":170.10898979087855,"width":152.85917676941358,"color":2},"id":"8c83d554-bf1f-4b3c-abb9-a6bb76846698","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[880,1540.2624287261167]},{"parameters":{"name":"activity_tool","description":"=Suggest an activity for a person to do. Use this tool if someone is bored, or asking for ideas of things to do.","workflowId":"={{ $workflow.id }}","fields":{"values":[{"name":"chatInput","stringValue":"={{ $('Chat Trigger').item.json.chatInput }}"}]}},"id":"82a3c606-0d7a-4b45-aae7-df35525615f7","name":"Activity tool","type":"@n8n/n8n-nodes-langchain.toolWorkflow","position":[1080,780],"typeVersion":1},{"parameters":{"text":"={{ $json.chatInput }}","options":{"maxIterations":10}},"id":"716dea0d-a987-4cf7-ae4a-bf0f7c7d7da9","name":"AI Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[820,560],"typeVersion":1.1},{"parameters":{},"id":"f469fba8-07ae-4c79-a79c-2c49946d94e2","name":"Auto-fixing Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserAutofixing","typeVersion":1,"position":[920,1380]},{"parameters":{"content":"**Set your credentials**","height":189.79768930311286,"width":150,"color":2},"id":"e6d252d3-d78e-4827-b911-0528c3b80794","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[648.9502850955331,1340]},{"parameters":{"model":"gpt-4","options":{}},"id":"f65054a9-771c-47f8-94cc-4ed766f89d19","name":"GPT4 Model 1","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[660,780],"typeVersion":1},{"parameters":{"model":"gpt-4","options":{}},"id":"94c2a6d8-cab9-48c2-8801-4306f0957f50","name":"GPT4 Model 2","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","typeVersion":1,"position":[700,1420]},{"parameters":{"model":"gpt-4","options":{}},"id":"5f423800-2eaf-43f5-bd59-dc1212cb55ad","name":"GPT4 Model 3","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","typeVersion":1,"position":[920,1600]},{"parameters":{"content":"## Try it out\n\nSelect **Chat** at the bottom and enter:\n\n_Hi! Please suggest something to do. I feel like learning something new._","height":214.8397420554627,"width":185.9375,"color":4},"id":"8ba60ef6-c375-41d9-bf79-1f19f1495adb","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[300,540],"typeVersion":1},{"parameters":{"content":"## Next steps\n\nLearn more about [Advanced AI in n8n](https://docs.n8n.io/advanced-ai/)","height":144.50520156238127},"id":"4bbd5942-4f2a-4a9a-a26c-61f95ad57549","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[1500,1540]},{"parameters":{"jsonSchema":"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"type\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"data\": {\n          \"enum\": [\"education\", \"recreational\",\"social\",\"diy\",\"charity\",\"cooking\",\"relaxation\",\"music\",\"busywork\"]\n        }\n      }\n    },\n    \"participants\": {\n      \"type\": \"number\"\n    }\n  }\n}"},"id":"a50c7858-b0fd-44d6-898d-452ffc5cbd72","name":"Structure as JSON","type":"@n8n/n8n-nodes-langchain.outputParserStructured","typeVersion":1,"position":[1120,1520]},{"parameters":{"url":"http://www.boredapi.com/api/activity/","sendQuery":true,"queryParameters":{"parameters":[{"name":"type","value":"={{ $json.output.type.data }}"},{"name":"participants","value":"={{ $json.output.participants }}"}]},"options":{}},"id":"340c2536-6e79-4af6-9cd0-5cbf6eae1983","name":"Call the API","type":"n8n-nodes-base.httpRequest","typeVersion":4.1,"position":[1120,1140]},{"parameters":{"prompt":"={{ $('Execute Workflow Trigger').item.json.chatInput }}"},"id":"d7d5455c-2e46-4896-853c-6b527e9403e4","name":"Work out activity type and number of people","type":"@n8n/n8n-nodes-langchain.chainLlm","typeVersion":1.3,"position":[740,1140]},{"parameters":{"assignments":{"assignments":[{"id":"e37e64f6-64e7-4fbd-9ea1-e9d3ef99b39c","name":"response","value":"={{ $json.activity }}","type":"string"}]},"options":{}},"id":"83f9ac05-4583-4cc4-bcc8-29ae450c95cb","name":"Set 'response' value","type":"n8n-nodes-base.set","typeVersion":3.3,"position":[1340,1140]}],"pinData":{},"connections":{"Chat Trigger":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"AI Agent","type":"ai_memory","index":0}]]},"Execute Workflow Trigger":{"main":[[{"node":"Work out activity type and number of people","type":"main","index":0}]]},"Activity tool":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"Auto-fixing Output Parser":{"ai_outputParser":[[{"node":"Work out activity type and number of people","type":"ai_outputParser","index":0}]]},"GPT4 Model 1":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]},"GPT4 Model 2":{"ai_languageModel":[[{"node":"Work out activity type and number of people","type":"ai_languageModel","index":0}]]},"GPT4 Model 3":{"ai_languageModel":[[{"node":"Auto-fixing Output Parser","type":"ai_languageModel","index":0}]]},"Structure as JSON":{"ai_outputParser":[[{"node":"Auto-fixing Output Parser","type":"ai_outputParser","index":0}]]},"Call the API":{"main":[[{"node":"Set 'response' value","type":"main","index":0}]]},"Work out activity type and number of people":{"main":[[{"node":"Call the API","type":"main","index":0}]]}}},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.executeWorkflowTrigger","version":1,"parameters":{},"position":[520,1140]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"### Sub-workflow: Custom tool\nThe agent above can call this workflow. It calls an example API called \"Bored API\" and returns a string with an activity idea.","height":775.3931210698682,"width":1180.0825159534493,"color":7},"position":[460,960]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"### Main workflow: AI agent using custom tool","height":486.5625,"width":927.5,"color":7},"position":[460,460]},{"nodeType":"@n8n/n8n-nodes-langchain.chatTrigger","version":1,"parameters":{},"position":[600,560]},{"nodeType":"@n8n/n8n-nodes-langchain.memoryBufferWindow","version":1.1,"parameters":{},"position":[860,780]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**This tool calls the sub-workflow below**","height":179.21380662202682,"width":197.45572294791873,"color":5},"position":[1020,720]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Set your credentials**","height":171,"width":150,"color":2},"position":[620,720]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Set your credentials**","height":170.10898979087855,"width":152.85917676941358,"color":2},"position":[880,1540.2624287261167]},{"nodeType":"@n8n/n8n-nodes-langchain.toolWorkflow","version":1,"parameters":{"name":"activity_tool","description":"=Suggest an activity for a person to do. Use this tool if someone is bored, or asking for ideas of things to do.","workflowId":"={{ $workflow.id }}","fields":{"values":[{"name":"chatInput","stringValue":"={{ $('Chat Trigger').item.json.chatInput }}"}]}},"position":[1080,780]},{"nodeType":"@n8n/n8n-nodes-langchain.agent","version":1.1,"parameters":{"text":"={{ $json.chatInput }}","options":{"maxIterations":10}},"position":[820,560]},{"nodeType":"@n8n/n8n-nodes-langchain.outputParserAutofixing","version":1,"parameters":{},"position":[920,1380]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Set your credentials**","height":189.79768930311286,"width":150,"color":2},"position":[648.9502850955331,1340]},{"nodeType":"@n8n/n8n-nodes-langchain.lmChatOpenAi","version":1,"parameters":{"model":"gpt-4","options":{}},"position":[660,780]},{"nodeType":"@n8n/n8n-nodes-langchain.lmChatOpenAi","version":1,"parameters":{"model":"gpt-4","options":{}},"position":[700,1420]},{"nodeType":"@n8n/n8n-nodes-langchain.lmChatOpenAi","version":1,"parameters":{"model":"gpt-4","options":{}},"position":[920,1600]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"## Try it out\n\nSelect **Chat** at the bottom and enter:\n\n_Hi! Please suggest something to do. I feel like learning something new._","height":214.8397420554627,"width":185.9375,"color":4},"position":[300,540]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"## Next steps\n\nLearn more about [Advanced AI in n8n](https://docs.n8n.io/advanced-ai/)","height":144.50520156238127},"position":[1500,1540]},{"nodeType":"@n8n/n8n-nodes-langchain.outputParserStructured","version":1,"parameters":{"jsonSchema":"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"type\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"data\": {\n          \"enum\": [\"education\", \"recreational\",\"social\",\"diy\",\"charity\",\"cooking\",\"relaxation\",\"music\",\"busywork\"]\n        }\n      }\n    },\n    \"participants\": {\n      \"type\": \"number\"\n    }\n  }\n}"},"position":[1120,1520]},{"nodeType":"n8n-nodes-base.httpRequest","version":4.1,"parameters":{"url":"http://www.boredapi.com/api/activity/","sendQuery":true,"queryParameters":{"parameters":[{"name":"type","value":"={{ $json.output.type.data }}"},{"name":"participants","value":"={{ $json.output.participants }}"}]},"options":{}},"position":[1120,1140]},{"nodeType":"@n8n/n8n-nodes-langchain.chainLlm","version":1.3,"parameters":{"prompt":"={{ $('Execute Workflow Trigger').item.json.chatInput }}"},"position":[740,1140]},{"nodeType":"n8n-nodes-base.set","version":3.3,"parameters":{"assignments":{"assignments":[{"id":"e37e64f6-64e7-4fbd-9ea1-e9d3ef99b39c","name":"response","value":"={{ $json.activity }}","type":"string"}]},"options":{}},"position":[1340,1140]}],"connections":{"Chat Trigger":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"AI Agent","type":"ai_memory","index":0}]]},"Execute Workflow Trigger":{"main":[[{"node":"Work out activity type and number of people","type":"main","index":0}]]},"Activity tool":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"Auto-fixing Output Parser":{"ai_outputParser":[[{"node":"Work out activity type and number of people","type":"ai_outputParser","index":0}]]},"GPT4 Model 1":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]},"GPT4 Model 2":{"ai_languageModel":[[{"node":"Work out activity type and number of people","type":"ai_languageModel","index":0}]]},"GPT4 Model 3":{"ai_languageModel":[[{"node":"Auto-fixing Output Parser","type":"ai_languageModel","index":0}]]},"Structure as JSON":{"ai_outputParser":[[{"node":"Auto-fixing Output Parser","type":"ai_outputParser","index":0}]]},"Call the API":{"main":[[{"node":"Set 'response' value","type":"main","index":0}]]},"Work out activity type and number of people":{"main":[[{"node":"Call the API","type":"main","index":0}]]}},"source":"docs/_workflows/advanced-ai/examples/let_your_ai_call_an_api.json"},{"name":"populate_a_pinecone_vector_database_from_a_website","workflow":{"name":"Populate a Pinecone vector database from a website","nodes":[{"parameters":{"model":"text-embedding-3-large","options":{},"requestOptions":{}},"id":"856f2426-b4b5-4180-a422-d26692844afb","name":"Embeddings OpenAI","type":"@n8n/n8n-nodes-langchain.embeddingsOpenAi","typeVersion":1,"position":[80,1040],"credentials":{"openAiApi":{"id":"tW3bkXa0SAK0OzvR","name":"OpenAi account Debs"}}},{"parameters":{"options":{},"requestOptions":{}},"id":"1e702984-6f79-416e-981a-6728d4b3c233","name":"Default Data Loader","type":"@n8n/n8n-nodes-langchain.documentDefaultDataLoader","typeVersion":1,"position":[260,960]},{"parameters":{"options":{"splitCode":"markdown"},"requestOptions":{}},"id":"2d1f30fd-f251-4389-8f6d-2c950018a91f","name":"Recursive Character Text Splitter","type":"@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter","typeVersion":1,"position":[300,1160]},{"parameters":{"batchSize":10,"options":{}},"id":"4e8a9d4c-6009-4d9b-b603-0438c65ba9df","name":"Loop Over Items","type":"n8n-nodes-base.splitInBatches","typeVersion":3,"position":[-840,1040]},{"parameters":{"model":{"__rl":true,"value":"gpt-4o","mode":"list","cachedResultName":"gpt-4o"},"options":{},"requestOptions":{}},"id":"e7967355-41b4-4bc5-b192-c8bc0699e925","name":"OpenAI Model","type":"@n8n/n8n-nodes-langchain.lmOpenAi","typeVersion":1,"position":[-1320,1680],"credentials":{"openAiApi":{"id":"tW3bkXa0SAK0OzvR","name":"OpenAi account Debs"}}},{"parameters":{"url":"https://n8n-io.github.io/n8n-demo-website/sitemap.xml","options":{}},"id":"5fb88663-f28b-4da2-acd9-1cbb0c5d28e7","name":"Get sitemap","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[-1480,740]},{"parameters":{"options":{"explicitRoot":false,"ignoreAttrs":true}},"id":"0e6287b8-9a65-4af0-8e69-3aae3648fd13","name":"Turn XML sitemap into JSON","type":"n8n-nodes-base.xml","typeVersion":1,"position":[-1260,740]},{"parameters":{"fieldToSplitOut":"url","options":{}},"id":"acd3e717-99f5-4238-aa4d-795caef660b1","name":"Turn the URL array into multiple items","type":"n8n-nodes-base.splitOut","typeVersion":1,"position":[-1040,740]},{"parameters":{},"id":"f3b4ad5e-b261-4b97-9077-3b9259d5b37d","name":"Wait 5 seconds","type":"n8n-nodes-base.wait","typeVersion":1.1,"position":[-320,1060],"webhookId":"f4e7dead-77ad-4216-a5a0-ef95914bf3ab"},{"parameters":{"url":"={{ $json.loc }}","options":{}},"id":"361b2a70-d0c5-4498-8a70-0688710e76e6","name":"Get pages listed in the sitemap","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[-580,1060]},{"parameters":{},"id":"14ddd282-9bf0-459f-9595-5154e16f9cc0","name":"Chat Trigger","type":"@n8n/n8n-nodes-langchain.chatTrigger","typeVersion":1,"position":[-1620,1420],"webhookId":"4b338d3c-b03f-42f2-94c1-9353d0f1fbc2"},{"parameters":{"promptType":"define","text":"={{ $('Chat Trigger').item.json.chatInput }}"},"id":"263585e6-02bb-4940-9bb3-15f32b0f8079","name":"Question and Answer Chain","type":"@n8n/n8n-nodes-langchain.chainRetrievalQa","typeVersion":1.3,"position":[-1280,1420]},{"parameters":{"topK":10,"requestOptions":{}},"id":"91ad53ec-a761-43f6-a6f1-835263222e0c","name":"Vector Store Retriever","type":"@n8n/n8n-nodes-langchain.retrieverVectorStore","typeVersion":1,"position":[-1080,1620]},{"parameters":{"model":"text-embedding-3-large","options":{},"requestOptions":{}},"id":"5c55cb38-be26-405d-bd39-d29e0a33b683","name":"Embeddings OpenAI2","type":"@n8n/n8n-nodes-langchain.embeddingsOpenAi","typeVersion":1,"position":[-780,2040],"credentials":{"openAiApi":{"id":"tW3bkXa0SAK0OzvR","name":"OpenAi account Debs"}}},{"parameters":{"fieldsToAggregate":{"fieldToAggregate":[{"fieldToAggregate":"content"}]},"options":{}},"id":"48dbd7f7-1ca1-41e2-9fd5-e916ea76589b","name":"Aggregate","type":"n8n-nodes-base.aggregate","typeVersion":1,"position":[-100,740]},{"parameters":{"content":"**Aggregate into one item**\n\nThe Pinecone node loops over each input item. This is standard n8n node behavior.\n\nThis means if you want to use the **Clear namespace** setting in the Pinecone node, you need to input a single item.","height":381.66422439067196,"color":5},"id":"5b70d4ae-1889-43d3-b92d-bf73e43236bd","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[-160,520]},{"parameters":{"content":"### Workflow to scrape data and send it to Pinecone","height":878.8927796727229,"width":2382.6739342193496,"color":7},"id":"e9b5d557-51af-48d1-af33-8783f9ca3718","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[-1856.703373323493,480]},{"parameters":{"content":"### Workflow to chat and get answers from the Pinecone vector database","height":825.9872504327399,"width":1181.407211476183,"color":7},"id":"7efa097b-d4f2-49a4-9da5-4fcf6b83be3b","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[-1680,1380]},{"parameters":{"content":"## Try it out \n\n1. Set credentials and choose your Pinecone vector database. See the notes on individual nodes for details.\n2. Select **Execute workflow** to run the main workflow and load data into Pinecone.\n3. Select **Chat** and try asking:\n\n_What is the purpose of the n8n demo website?_","height":326.49681260818465,"color":4},"id":"f21bc32b-a405-4d71-b6c9-7bffbb6faed9","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[-2040,560]},{"parameters":{"content":"**Setup**\n\n1. In Pinecone, create a vector database. Set **Dimensions** to `3072` and **Metric** to `cosine`. You can use the free starter plan.\n2. In the Pinecone node, set your credentials.\n3. Select your Pinecone index.","height":381.3701016273242,"width":304.1011298750183,"color":2},"id":"4be87782-f811-418f-b4b5-9e12c4cf7970","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[140,520]},{"parameters":{"mode":"insert","pineconeIndex":{},"options":{"clearNamespace":true,"pineconeNamespace":"test-web-scraper"}},"id":"94035a97-5a09-493c-aaae-dcba7bbf8526","name":"Pinecone Vector Store","type":"@n8n/n8n-nodes-langchain.vectorStorePinecone","typeVersion":1,"position":[160,740],"credentials":{"pineconeApi":{"id":"lruA9GaKZSEY8dky","name":"Debs Pinecone"}}},{"parameters":{"content":"## Next steps\n\nLearn more about [Advanced AI in n8n](https://docs.n8n.io/advanced-ai/)","width":331.8066536811489},"id":"2be1433b-0488-4c7e-8c10-e771d4dd4686","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[460,1280]},{"parameters":{"content":"**Set your credentials**","height":206.68134932939768,"width":182.42633582707612,"color":2},"id":"fffbb04d-6d61-4dfa-bfd3-46b8c92a36d5","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[20,1000]},{"parameters":{"content":"**Set your credentials**","height":184.89671964234537,"width":173.09006596119673,"color":2},"id":"810ac5e1-d730-47af-9282-64ab0b4fca16","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[-1369.107685156473,1620.2285847094058]},{"parameters":{"content":"**Set your credentials**","height":192.67694453057842,"width":221.3274602682409,"color":2},"id":"2cecc8ac-3c65-4294-8a5d-2842bc07d10a","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[-860,1980]},{"parameters":{"pineconeIndex":{"__rl":true,"value":"debs-test","mode":"list","cachedResultName":"debs-test"},"options":{"pineconeNamespace":"test-web-scraper"}},"id":"e673c46e-0815-4b58-9a8f-2fb86445b578","name":"Pinecone Vector Store2","type":"@n8n/n8n-nodes-langchain.vectorStorePinecone","typeVersion":1,"position":[-980,1840],"credentials":{"pineconeApi":{"id":"lruA9GaKZSEY8dky","name":"Debs Pinecone"}}},{"parameters":{"content":"**Set your credentials**\n\n**Select your Pinecone index***","width":367.59568816702017,"color":2},"id":"ca4499ae-4e27-4848-9654-f7e744c081e7","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[-1080,1760]},{"parameters":{},"id":"b43ddbd1-adfd-4bba-bee5-4b81229e88dd","name":"Start the workflow by clicking \"Execute workflow\"","type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[-1700,740]},{"parameters":{"operation":"extractHtmlContent","extractionValues":{"values":[{"key":"content","cssSelector":".md-content","returnValue":"html"}]},"options":{"trimValues":true,"cleanUpText":true}},"id":"d39624d7-93c0-4452-81b1-ffa04b216ceb","name":"Extract main content","type":"n8n-nodes-base.html","typeVersion":1.2,"position":[-380,740]},{"parameters":{"content":"**Batch the calls to the website**\n\nFor the small demo website in this example, this is not essential. If you want to use this example with a larger website, batching like this helps avoid timeouts. Using the Wait node between batches avoids hitting the website with too many requests too fast.","height":298.48800301054644,"width":316.2462039046831,"color":5},"id":"9825926d-ce6d-429e-9006-6ff5fd1f46ca","name":"Sticky Note10","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[-1220,1020]},{"parameters":{"content":"## How to scrape a different website\n\nThis workflow uses a small example website provided by n8n. To use a different site:\n\n1. Change the sitemap URL in **Get sitemap**.\n2. Update **Extract main content** according to the HTML structure of the website you're scraping.","height":356.06166718347},"id":"7c2e4bde-3900-49b0-9bee-704e34664163","name":"Sticky Note11","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[-2040,960]}],"pinData":{},"connections":{"Embeddings OpenAI":{"ai_embedding":[[{"node":"Pinecone Vector Store","type":"ai_embedding","index":0}]]},"Default Data Loader":{"ai_document":[[{"node":"Pinecone Vector Store","type":"ai_document","index":0}]]},"Recursive Character Text Splitter":{"ai_textSplitter":[[{"node":"Default Data Loader","type":"ai_textSplitter","index":0}]]},"Loop Over Items":{"main":[[{"node":"Extract main content","type":"main","index":0}],[{"node":"Get pages listed in the sitemap","type":"main","index":0}]]},"Get sitemap":{"main":[[{"node":"Turn XML sitemap into JSON","type":"main","index":0}]]},"Turn XML sitemap into JSON":{"main":[[{"node":"Turn the URL array into multiple items","type":"main","index":0}]]},"Turn the URL array into multiple items":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Wait 5 seconds":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Get pages listed in the sitemap":{"main":[[{"node":"Wait 5 seconds","type":"main","index":0}]]},"Chat Trigger":{"main":[[{"node":"Question and Answer Chain","type":"main","index":0}]]},"OpenAI Model":{"ai_languageModel":[[{"node":"Question and Answer Chain","type":"ai_languageModel","index":0}]]},"Vector Store Retriever":{"ai_retriever":[[{"node":"Question and Answer Chain","type":"ai_retriever","index":0}]]},"Embeddings OpenAI2":{"ai_embedding":[[{"node":"Pinecone Vector Store2","type":"ai_embedding","index":0}]]},"Aggregate":{"main":[[{"node":"Pinecone Vector Store","type":"main","index":0}]]},"Pinecone Vector Store2":{"ai_vectorStore":[[{"node":"Vector Store Retriever","type":"ai_vectorStore","index":0}]]},"Start the workflow by clicking \"Execute workflow\"":{"main":[[{"node":"Get sitemap","type":"main","index":0}]]},"Extract main content":{"main":[[{"node":"Aggregate","type":"main","index":0}]]}}},"nodeConfigurations":[{"nodeType":"@n8n/n8n-nodes-langchain.embeddingsOpenAi","version":1,"parameters":{"model":"text-embedding-3-large","options":{},"requestOptions":{}},"position":[80,1040]},{"nodeType":"@n8n/n8n-nodes-langchain.documentDefaultDataLoader","version":1,"parameters":{"options":{},"requestOptions":{}},"position":[260,960]},{"nodeType":"@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter","version":1,"parameters":{"options":{"splitCode":"markdown"},"requestOptions":{}},"position":[300,1160]},{"nodeType":"n8n-nodes-base.splitInBatches","version":3,"parameters":{"batchSize":10,"options":{}},"position":[-840,1040]},{"nodeType":"@n8n/n8n-nodes-langchain.lmOpenAi","version":1,"parameters":{"model":{"__rl":true,"value":"gpt-4o","mode":"list","cachedResultName":"gpt-4o"},"options":{},"requestOptions":{}},"position":[-1320,1680]},{"nodeType":"n8n-nodes-base.httpRequest","version":4.2,"parameters":{"url":"https://n8n-io.github.io/n8n-demo-website/sitemap.xml","options":{}},"position":[-1480,740]},{"nodeType":"n8n-nodes-base.xml","version":1,"parameters":{"options":{"explicitRoot":false,"ignoreAttrs":true}},"position":[-1260,740]},{"nodeType":"n8n-nodes-base.splitOut","version":1,"parameters":{"fieldToSplitOut":"url","options":{}},"position":[-1040,740]},{"nodeType":"n8n-nodes-base.wait","version":1.1,"parameters":{},"position":[-320,1060]},{"nodeType":"n8n-nodes-base.httpRequest","version":4.2,"parameters":{"url":"={{ $json.loc }}","options":{}},"position":[-580,1060]},{"nodeType":"@n8n/n8n-nodes-langchain.chatTrigger","version":1,"parameters":{},"position":[-1620,1420]},{"nodeType":"@n8n/n8n-nodes-langchain.chainRetrievalQa","version":1.3,"parameters":{"promptType":"define","text":"={{ $('Chat Trigger').item.json.chatInput }}"},"position":[-1280,1420]},{"nodeType":"@n8n/n8n-nodes-langchain.retrieverVectorStore","version":1,"parameters":{"topK":10,"requestOptions":{}},"position":[-1080,1620]},{"nodeType":"@n8n/n8n-nodes-langchain.embeddingsOpenAi","version":1,"parameters":{"model":"text-embedding-3-large","options":{},"requestOptions":{}},"position":[-780,2040]},{"nodeType":"n8n-nodes-base.aggregate","version":1,"parameters":{"fieldsToAggregate":{"fieldToAggregate":[{"fieldToAggregate":"content"}]},"options":{}},"position":[-100,740]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Aggregate into one item**\n\nThe Pinecone node loops over each input item. This is standard n8n node behavior.\n\nThis means if you want to use the **Clear namespace** setting in the Pinecone node, you need to input a single item.","height":381.66422439067196,"color":5},"position":[-160,520]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"### Workflow to scrape data and send it to Pinecone","height":878.8927796727229,"width":2382.6739342193496,"color":7},"position":[-1856.703373323493,480]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"### Workflow to chat and get answers from the Pinecone vector database","height":825.9872504327399,"width":1181.407211476183,"color":7},"position":[-1680,1380]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"## Try it out \n\n1. Set credentials and choose your Pinecone vector database. See the notes on individual nodes for details.\n2. Select **Execute workflow** to run the main workflow and load data into Pinecone.\n3. Select **Chat** and try asking:\n\n_What is the purpose of the n8n demo website?_","height":326.49681260818465,"color":4},"position":[-2040,560]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Setup**\n\n1. In Pinecone, create a vector database. Set **Dimensions** to `3072` and **Metric** to `cosine`. You can use the free starter plan.\n2. In the Pinecone node, set your credentials.\n3. Select your Pinecone index.","height":381.3701016273242,"width":304.1011298750183,"color":2},"position":[140,520]},{"nodeType":"@n8n/n8n-nodes-langchain.vectorStorePinecone","version":1,"parameters":{"mode":"insert","pineconeIndex":{},"options":{"clearNamespace":true,"pineconeNamespace":"test-web-scraper"}},"position":[160,740]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"## Next steps\n\nLearn more about [Advanced AI in n8n](https://docs.n8n.io/advanced-ai/)","width":331.8066536811489},"position":[460,1280]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Set your credentials**","height":206.68134932939768,"width":182.42633582707612,"color":2},"position":[20,1000]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Set your credentials**","height":184.89671964234537,"width":173.09006596119673,"color":2},"position":[-1369.107685156473,1620.2285847094058]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Set your credentials**","height":192.67694453057842,"width":221.3274602682409,"color":2},"position":[-860,1980]},{"nodeType":"@n8n/n8n-nodes-langchain.vectorStorePinecone","version":1,"parameters":{"pineconeIndex":{"__rl":true,"value":"debs-test","mode":"list","cachedResultName":"debs-test"},"options":{"pineconeNamespace":"test-web-scraper"}},"position":[-980,1840]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Set your credentials**\n\n**Select your Pinecone index***","width":367.59568816702017,"color":2},"position":[-1080,1760]},{"nodeType":"n8n-nodes-base.manualTrigger","version":1,"parameters":{},"position":[-1700,740]},{"nodeType":"n8n-nodes-base.html","version":1.2,"parameters":{"operation":"extractHtmlContent","extractionValues":{"values":[{"key":"content","cssSelector":".md-content","returnValue":"html"}]},"options":{"trimValues":true,"cleanUpText":true}},"position":[-380,740]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Batch the calls to the website**\n\nFor the small demo website in this example, this is not essential. If you want to use this example with a larger website, batching like this helps avoid timeouts. Using the Wait node between batches avoids hitting the website with too many requests too fast.","height":298.48800301054644,"width":316.2462039046831,"color":5},"position":[-1220,1020]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"## How to scrape a different website\n\nThis workflow uses a small example website provided by n8n. To use a different site:\n\n1. Change the sitemap URL in **Get sitemap**.\n2. Update **Extract main content** according to the HTML structure of the website you're scraping.","height":356.06166718347},"position":[-2040,960]}],"connections":{"Embeddings OpenAI":{"ai_embedding":[[{"node":"Pinecone Vector Store","type":"ai_embedding","index":0}]]},"Default Data Loader":{"ai_document":[[{"node":"Pinecone Vector Store","type":"ai_document","index":0}]]},"Recursive Character Text Splitter":{"ai_textSplitter":[[{"node":"Default Data Loader","type":"ai_textSplitter","index":0}]]},"Loop Over Items":{"main":[[{"node":"Extract main content","type":"main","index":0}],[{"node":"Get pages listed in the sitemap","type":"main","index":0}]]},"Get sitemap":{"main":[[{"node":"Turn XML sitemap into JSON","type":"main","index":0}]]},"Turn XML sitemap into JSON":{"main":[[{"node":"Turn the URL array into multiple items","type":"main","index":0}]]},"Turn the URL array into multiple items":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Wait 5 seconds":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Get pages listed in the sitemap":{"main":[[{"node":"Wait 5 seconds","type":"main","index":0}]]},"Chat Trigger":{"main":[[{"node":"Question and Answer Chain","type":"main","index":0}]]},"OpenAI Model":{"ai_languageModel":[[{"node":"Question and Answer Chain","type":"ai_languageModel","index":0}]]},"Vector Store Retriever":{"ai_retriever":[[{"node":"Question and Answer Chain","type":"ai_retriever","index":0}]]},"Embeddings OpenAI2":{"ai_embedding":[[{"node":"Pinecone Vector Store2","type":"ai_embedding","index":0}]]},"Aggregate":{"main":[[{"node":"Pinecone Vector Store","type":"main","index":0}]]},"Pinecone Vector Store2":{"ai_vectorStore":[[{"node":"Vector Store Retriever","type":"ai_vectorStore","index":0}]]},"Start the workflow by clicking \"Execute workflow\"":{"main":[[{"node":"Get sitemap","type":"main","index":0}]]},"Extract main content":{"main":[[{"node":"Aggregate","type":"main","index":0}]]}},"source":"docs/_workflows/advanced-ai/examples/populate_a_pinecone_vector_database_from_a_website.json"},{"name":"chat_01","workflow":{"name":"AI tutorial","nodes":[{"parameters":{"options":{}},"type":"@n8n/n8n-nodes-langchain.chatTrigger","typeVersion":1.1,"position":[-200,-40],"id":"a2d42e1f-36df-4a6a-a3b4-99a162074d11","name":"When chat message received","webhookId":"97c1a41f-8ef0-4d63-a924-92eb634384d3"}],"pinData":{},"connections":{},"active":false,"settings":{"executionOrder":"v1"},"versionId":"b1641385-c6b0-48a8-8e26-20d1f6bd7fda","meta":{"instanceId":"cb484ba7b742928a2048bf8829668bed5b5ad9787579adea888f05980292a4a7"},"id":"l05TkWXXYbOiuL4o","tags":[]},"nodeConfigurations":[{"nodeType":"@n8n/n8n-nodes-langchain.chatTrigger","version":1.1,"parameters":{"options":{}},"position":[-200,-40]}],"connections":{},"source":"docs/_workflows/advanced-ai/tutorials/chat_01.json","description":"Workflow example from docs/_workflows/advanced-ai/tutorials/chat_01.json"},{"name":"chat_02","workflow":{"name":"AI tutorial","nodes":[{"parameters":{"options":{}},"type":"@n8n/n8n-nodes-langchain.chatTrigger","typeVersion":1.1,"position":[-300,-40],"id":"a2d42e1f-36df-4a6a-a3b4-99a162074d11","name":"When chat message received","webhookId":"97c1a41f-8ef0-4d63-a924-92eb634384d3"},{"parameters":{"options":{}},"type":"@n8n/n8n-nodes-langchain.agent","typeVersion":1.7,"position":[-80,-40],"id":"0f61a10f-668f-42f7-b835-cf3efb60082a","name":"AI Agent"}],"pinData":{},"connections":{"When chat message received":{"main":[[{"node":"AI Agent","type":"main","index":0}]]}},"active":false,"settings":{"executionOrder":"v1"},"versionId":"b1641385-c6b0-48a8-8e26-20d1f6bd7fda","meta":{"instanceId":"cb484ba7b742928a2048bf8829668bed5b5ad9787579adea888f05980292a4a7"},"id":"l05TkWXXYbOiuL4o","tags":[]},"nodeConfigurations":[{"nodeType":"@n8n/n8n-nodes-langchain.chatTrigger","version":1.1,"parameters":{"options":{}},"position":[-300,-40]},{"nodeType":"@n8n/n8n-nodes-langchain.agent","version":1.7,"parameters":{"options":{}},"position":[-80,-40]}],"connections":{"When chat message received":{"main":[[{"node":"AI Agent","type":"main","index":0}]]}},"source":"docs/_workflows/advanced-ai/tutorials/chat_02.json","description":"Workflow example from docs/_workflows/advanced-ai/tutorials/chat_02.json"},{"name":"chat_complete","workflow":{"name":"AI tutorial","nodes":[{"parameters":{"options":{}},"type":"@n8n/n8n-nodes-langchain.chatTrigger","typeVersion":1.1,"position":[-300,-40],"id":"a2d42e1f-36df-4a6a-a3b4-99a162074d11","name":"When chat message received","webhookId":"97c1a41f-8ef0-4d63-a924-92eb634384d3"},{"parameters":{"options":{}},"type":"@n8n/n8n-nodes-langchain.agent","typeVersion":1.7,"position":[-80,-40],"id":"0f61a10f-668f-42f7-b835-cf3efb60082a","name":"AI Agent"},{"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{}},"type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","typeVersion":1.2,"position":[-100,160],"id":"b8129c6d-f201-4378-8f66-ce9a6cfd5f3b","name":"OpenAI Chat Model","credentials":{"openAiApi":{"id":"jiPPcYV9I70iKapN","name":"OpenAi account 37"}}},{"parameters":{},"type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","typeVersion":1.3,"position":[20,180],"id":"afbab05c-1e87-4f7a-9d66-c86f9db1ec64","name":"Simple Memory"}],"pinData":{},"connections":{"When chat message received":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"AI Agent","type":"ai_memory","index":0}]]}},"active":false,"settings":{"executionOrder":"v1"},"versionId":"b1641385-c6b0-48a8-8e26-20d1f6bd7fda","meta":{"templateCredsSetupCompleted":true,"instanceId":"cb484ba7b742928a2048bf8829668bed5b5ad9787579adea888f05980292a4a7"},"id":"l05TkWXXYbOiuL4o","tags":[]},"nodeConfigurations":[{"nodeType":"@n8n/n8n-nodes-langchain.chatTrigger","version":1.1,"parameters":{"options":{}},"position":[-300,-40]},{"nodeType":"@n8n/n8n-nodes-langchain.agent","version":1.7,"parameters":{"options":{}},"position":[-80,-40]},{"nodeType":"@n8n/n8n-nodes-langchain.lmChatOpenAi","version":1.2,"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{}},"position":[-100,160]},{"nodeType":"@n8n/n8n-nodes-langchain.memoryBufferWindow","version":1.3,"parameters":{},"position":[20,180]}],"connections":{"When chat message received":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"AI Agent","type":"ai_memory","index":0}]]}},"source":"docs/_workflows/advanced-ai/tutorials/chat_complete.json","description":"Workflow example from docs/_workflows/advanced-ai/tutorials/chat_complete.json"},{"name":"data-transformation","workflow":{"name":"Data transformation","nodes":[{"parameters":{},"id":"3ada6076-1cfb-4c2d-a421-4fce5466fc2d","name":"When clicking \"Execute Workflow\"","type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[1340,840]},{"parameters":{"jsCode":"return [\n{\n\"user_id\":\n\"0001\",\n\"username\":\n\"nathan\",\n\"date\":\n\"2023-08-10\",\n\"variant\":\n\"control\",\n\"data_exec_success\":\n\"TRUE\"\n},\n{\n\"user_id\":\n\"0002\",\n\"username\":\n\"natalie\",\n\"date\":\n\"2023-08-10\",\n\"variant\":\n\"control\",\n\"data_exec_success\":\n\"TRUE\"\n},\n{\n\"user_id\":\n\"0003\",\n\"username\":\n\"nadia\",\n\"date\":\n\"2023-08-10\",\n\"variant\":\n\"control\",\n\"data_exec_success\":\n\"FALSE\"\n},\n{\n\"user_id\":\n\"naomi\",\n\"username\":\n\"hkhjk\",\n\"date\":\n\"2023-08-10\",\n\"variant\":\n\"control\",\n\"data_exec_success\":\n\"FALSE\"\n},\n{\n\"user_id\":\n\"0005\",\n\"username\":\n\"nolan\",\n\"date\":\n\"2023-08-10\",\n\"variant\":\n\"control\",\n\"data_exec_success\":\n\"FALSE\"\n}\n]"},"id":"08e4d878-01ab-4f01-ab27-84ef5afbf581","name":"Code","type":"n8n-nodes-base.code","typeVersion":2,"position":[1560,840]},{"parameters":{},"id":"57a9330b-9e46-42a6-b432-681e906de93a","name":"Join items","type":"n8n-nodes-base.code","typeVersion":2,"position":[1780,840]}],"pinData":{},"connections":{"When clicking \"Execute Workflow\"":{"main":[[{"node":"Code","type":"main","index":0}]]},"Code":{"main":[[{"node":"Join items","type":"main","index":0}]]}},"active":false,"settings":{"executionOrder":"v1"},"versionId":"d7409102-d3af-4ddf-bead-2df008554458","id":"B4K5I5pN4nqu85ac","meta":{"instanceId":"c5aabef739d71e3d0ceb8b6078a241aaf1b145fa71cbbe36ecfb2c8c3fd64f5f"},"tags":[]},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.manualTrigger","version":1,"parameters":{},"position":[1340,840]},{"nodeType":"n8n-nodes-base.code","version":2,"parameters":{"jsCode":"return [\n{\n\"user_id\":\n\"0001\",\n\"username\":\n\"nathan\",\n\"date\":\n\"2023-08-10\",\n\"variant\":\n\"control\",\n\"data_exec_success\":\n\"TRUE\"\n},\n{\n\"user_id\":\n\"0002\",\n\"username\":\n\"natalie\",\n\"date\":\n\"2023-08-10\",\n\"variant\":\n\"control\",\n\"data_exec_success\":\n\"TRUE\"\n},\n{\n\"user_id\":\n\"0003\",\n\"username\":\n\"nadia\",\n\"date\":\n\"2023-08-10\",\n\"variant\":\n\"control\",\n\"data_exec_success\":\n\"FALSE\"\n},\n{\n\"user_id\":\n\"naomi\",\n\"username\":\n\"hkhjk\",\n\"date\":\n\"2023-08-10\",\n\"variant\":\n\"control\",\n\"data_exec_success\":\n\"FALSE\"\n},\n{\n\"user_id\":\n\"0005\",\n\"username\":\n\"nolan\",\n\"date\":\n\"2023-08-10\",\n\"variant\":\n\"control\",\n\"data_exec_success\":\n\"FALSE\"\n}\n]"},"position":[1560,840]},{"nodeType":"n8n-nodes-base.code","version":2,"parameters":{},"position":[1780,840]}],"connections":{"When clicking \"Execute Workflow\"":{"main":[[{"node":"Code","type":"main","index":0}]]},"Code":{"main":[[{"node":"Join items","type":"main","index":0}]]}},"source":"docs/_workflows/ai-code/data-transformation.json","description":"Workflow example from docs/_workflows/ai-code/data-transformation.json"},{"name":"find-a-piece-of-data","workflow":{"name":"Find a piece of data","nodes":[{"parameters":{},"id":"5319a081-f4f9-44ac-a91e-a57270e6eaa8","name":"When clicking \"Execute Workflow\"","type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[460,460]},{"parameters":{"jsCode":"return [\n{\n\"title\":\n\"\",\n\"phone\":\n\"\",\n\"skype\":\n\"\",\n\"real_name\":\n\"Nathan Berlin\",\n\"email\": \"nathan@example.io\",\n\"real_name_normalized\":\n\"Nathan Berlin\",\n\"display_name\":\n\"Nathan Berlin\",\n\"display_name_normalized\":\n\"Nathan Berlin\",\n\"fields\":\n{\n},\n\"status_text\":\n\"\",\n\"status_emoji\":\n\"\",\n\"status_emoji_display_info\":\n[\n],\n\"status_expiration\":\n0,\n\"avatar_hash\":\n\"0856f5fbbd43\",\n\"image_original\":\n\"https://example.png\",\n\"is_custom_image\":\ntrue,\n\"huddle_state\":\n\"default_unset\",\n\"huddle_state_expiration_ts\":\n0,\n\"first_name\":\n\"Nathan\",\n\"last_name\":\n\"Berlin\",\n\"image_24\":\n\"https://example.png\",\n\"image_32\":\n\"https://example.png\",\n\"image_48\":\n\"https://example.png\",\n\"image_72\":\n\"https://example.png\",\n\"image_192\":\n\"https://example.png\",\n\"image_512\":\n\"https://example.png\",\n\"image_1024\":\n\"https://example.png\",\n\"status_text_canonical\":\n\"\"\n}\n]"},"id":"3ec439bc-7e3f-4ec2-b724-092466efaa18","name":"Mock Slack","type":"n8n-nodes-base.code","typeVersion":2,"position":[680,460]},{"parameters":{"jsCode":"return [\n{\n\"object\":\n\"user\",\n\"id\":\n\"1234\",\n\"name\":\n\"Nathan Berlin\",\n\"avatar_url\":\n\"https://example.jpeg\",\n\"type\":\n\"person\",\n\"person\":\n{\n\"email\":\n\"nathan@example.io\"\n}\n},\n{\n\"object\":\n\"user\",\n\"id\":\n\"5678\",\n\"name\":\n\"Natalie Berlin\",\n\"avatar_url\":\n\"https://example.jpeg\",\n\"type\":\n\"person\",\n\"person\":\n{\n\"email\":\n\"natalie@example.io\"\n}\n}\n]"},"id":"4bb97ec6-c73a-4f01-b935-a94ffbf15d23","name":"Mock Notion","type":"n8n-nodes-base.code","typeVersion":2,"position":[900,460]},{"parameters":{},"id":"330ecf72-cff0-4ada-9b04-b1c99bb0f4de","name":"Code","type":"n8n-nodes-base.code","typeVersion":2,"position":[1120,460]}],"pinData":{},"connections":{"When clicking \"Execute Workflow\"":{"main":[[{"node":"Mock Slack","type":"main","index":0}]]},"Mock Slack":{"main":[[{"node":"Mock Notion","type":"main","index":0}]]},"Mock Notion":{"main":[[{"node":"Code","type":"main","index":0}]]}},"active":false,"settings":{"executionOrder":"v1"},"versionId":"81cabd2b-2854-4afb-b656-90a0cb77fa96","id":"3Brrdjs5aRHo57EX","meta":{"instanceId":"c5aabef739d71e3d0ceb8b6078a241aaf1b145fa71cbbe36ecfb2c8c3fd64f5f"},"tags":[]},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.manualTrigger","version":1,"parameters":{},"position":[460,460]},{"nodeType":"n8n-nodes-base.code","version":2,"parameters":{"jsCode":"return [\n{\n\"title\":\n\"\",\n\"phone\":\n\"\",\n\"skype\":\n\"\",\n\"real_name\":\n\"Nathan Berlin\",\n\"email\": \"nathan@example.io\",\n\"real_name_normalized\":\n\"Nathan Berlin\",\n\"display_name\":\n\"Nathan Berlin\",\n\"display_name_normalized\":\n\"Nathan Berlin\",\n\"fields\":\n{\n},\n\"status_text\":\n\"\",\n\"status_emoji\":\n\"\",\n\"status_emoji_display_info\":\n[\n],\n\"status_expiration\":\n0,\n\"avatar_hash\":\n\"0856f5fbbd43\",\n\"image_original\":\n\"https://example.png\",\n\"is_custom_image\":\ntrue,\n\"huddle_state\":\n\"default_unset\",\n\"huddle_state_expiration_ts\":\n0,\n\"first_name\":\n\"Nathan\",\n\"last_name\":\n\"Berlin\",\n\"image_24\":\n\"https://example.png\",\n\"image_32\":\n\"https://example.png\",\n\"image_48\":\n\"https://example.png\",\n\"image_72\":\n\"https://example.png\",\n\"image_192\":\n\"https://example.png\",\n\"image_512\":\n\"https://example.png\",\n\"image_1024\":\n\"https://example.png\",\n\"status_text_canonical\":\n\"\"\n}\n]"},"position":[680,460]},{"nodeType":"n8n-nodes-base.code","version":2,"parameters":{"jsCode":"return [\n{\n\"object\":\n\"user\",\n\"id\":\n\"1234\",\n\"name\":\n\"Nathan Berlin\",\n\"avatar_url\":\n\"https://example.jpeg\",\n\"type\":\n\"person\",\n\"person\":\n{\n\"email\":\n\"nathan@example.io\"\n}\n},\n{\n\"object\":\n\"user\",\n\"id\":\n\"5678\",\n\"name\":\n\"Natalie Berlin\",\n\"avatar_url\":\n\"https://example.jpeg\",\n\"type\":\n\"person\",\n\"person\":\n{\n\"email\":\n\"natalie@example.io\"\n}\n}\n]"},"position":[900,460]},{"nodeType":"n8n-nodes-base.code","version":2,"parameters":{},"position":[1120,460]}],"connections":{"When clicking \"Execute Workflow\"":{"main":[[{"node":"Mock Slack","type":"main","index":0}]]},"Mock Slack":{"main":[[{"node":"Mock Notion","type":"main","index":0}]]},"Mock Notion":{"main":[[{"node":"Code","type":"main","index":0}]]}},"source":"docs/_workflows/ai-code/find-a-piece-of-data.json","description":"Workflow example from docs/_workflows/ai-code/find-a-piece-of-data.json"},{"name":"reference-incoming-data-explicitly","workflow":{"name":"Reference incoming data explicitly","nodes":[{"parameters":{},"id":"0abbe7f6-f8a0-4f71-8229-f4fd1a3c2683","name":"When clicking \"Execute Workflow\"","type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[620,520]},{"parameters":{"jsCode":"return [\n  {\n   \"id\": 0001,\n   \"personal_info\": {\n    \"first_name\": \"Natalie\",\n    \"surname\": \"Berlin\"\n   },\n   \"work_info\": {\n    \"job_title\": \"Automation engineer\"\n   }\n  },\n  {\n    \"id\": 0002,\n    \"personal_info\": {\n     \"first_name\": \"Nathan\",\n     \"surname\": \"Berlin\"\n    },\n    \"work_info\": {\n     \"job_title\": \"Automation designer\"\n    }\n   }\n]"},"id":"e19f11cd-c868-4aca-b88e-04b4ee6f0187","name":"Mock data","type":"n8n-nodes-base.code","typeVersion":2,"position":[840,520]},{"parameters":{},"id":"ef54d477-0596-441a-98e5-1ab005e9a268","name":"Code","type":"n8n-nodes-base.code","typeVersion":2,"position":[1060,520]}],"pinData":{},"connections":{"When clicking \"Execute Workflow\"":{"main":[[{"node":"Mock data","type":"main","index":0}]]},"Mock data":{"main":[[{"node":"Code","type":"main","index":0}]]}},"active":false,"settings":{"executionOrder":"v1"},"versionId":"4e3a0a21-c993-4851-848b-01bd5c090b6b","id":"EipyYyqKKQm7siq4","meta":{"instanceId":"c5aabef739d71e3d0ceb8b6078a241aaf1b145fa71cbbe36ecfb2c8c3fd64f5f"},"tags":[]},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.manualTrigger","version":1,"parameters":{},"position":[620,520]},{"nodeType":"n8n-nodes-base.code","version":2,"parameters":{"jsCode":"return [\n  {\n   \"id\": 0001,\n   \"personal_info\": {\n    \"first_name\": \"Natalie\",\n    \"surname\": \"Berlin\"\n   },\n   \"work_info\": {\n    \"job_title\": \"Automation engineer\"\n   }\n  },\n  {\n    \"id\": 0002,\n    \"personal_info\": {\n     \"first_name\": \"Nathan\",\n     \"surname\": \"Berlin\"\n    },\n    \"work_info\": {\n     \"job_title\": \"Automation designer\"\n    }\n   }\n]"},"position":[840,520]},{"nodeType":"n8n-nodes-base.code","version":2,"parameters":{},"position":[1060,520]}],"connections":{"When clicking \"Execute Workflow\"":{"main":[[{"node":"Mock data","type":"main","index":0}]]},"Mock data":{"main":[[{"node":"Code","type":"main","index":0}]]}},"source":"docs/_workflows/ai-code/reference-incoming-data-explicitly.json","description":"Workflow example from docs/_workflows/ai-code/reference-incoming-data-explicitly.json"},{"name":"summarize-data","workflow":{"name":"Summarize data and prepare Slack message","nodes":[{"parameters":{},"id":"5d4bd82f-24e9-484e-a17e-c5de889087d9","name":"When clicking \"Execute Workflow\"","type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[860,540]},{"parameters":{},"id":"0d73c3df-300a-4397-8f53-fb0750dbf97f","name":"Summarize","type":"n8n-nodes-base.code","typeVersion":2,"position":[1300,540]},{"parameters":{"jsCode":"return [\n{\n\"id\":\n\"0001\",\n\"name\":\n\"Example feature 1\",\n\"url\": \"example.com\",\n\"property_tags\":\n[\n],\n\"property_type\":\n[\n\"Feature\"\n],\n\"property_votes\":\n2\n},\n{\n\"id\":\n\"0002\",\n\"name\":\n\"Example feature 2\",\n\"url\": \"example.com\",\n\"property_type\":\n[\n\"Feature\"\n],\n\"property_votes\":\n3\n},\n{\n\"id\":\n\"0003\",\n\"name\":\n\"Example feature 3\",\n\"url\": \"example.com\",\n\"property_type\":\n[\n\"Feature\"\n],\n\"property_votes\":\n1\n},\n{\n\"id\":\n\"0004\",\n\"name\":\n\"Example bug 1\",\n\"url\": \"example.com\",\n\"property_type\":\n[\n\"Bug\"\n],\n\"property_votes\":\n0\n},\n{\n\"id\":\n\"0005\",\n\"name\":\n\"Example idea 1\",\n\"url\": \"example.com\",\n\"property_type\":\n[\n\"Idea\"\n],\n\"property_votes\":\n4\n}\n]"},"id":"fda17968-61a5-4c0b-ab83-adb4e0bbf7c5","name":"Mock Ideas","type":"n8n-nodes-base.code","typeVersion":2,"position":[1080,540]}],"pinData":{},"connections":{"When clicking \"Execute Workflow\"":{"main":[[{"node":"Mock Ideas","type":"main","index":0}]]},"Mock Ideas":{"main":[[{"node":"Summarize","type":"main","index":0}]]}},"active":false,"settings":{"executionOrder":"v1"},"versionId":"077fe5dc-2214-4149-9f1b-ef6342e45dec","id":"5IoF8z4YUoSUpBUk","meta":{"instanceId":"c5aabef739d71e3d0ceb8b6078a241aaf1b145fa71cbbe36ecfb2c8c3fd64f5f"},"tags":[]},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.manualTrigger","version":1,"parameters":{},"position":[860,540]},{"nodeType":"n8n-nodes-base.code","version":2,"parameters":{},"position":[1300,540]},{"nodeType":"n8n-nodes-base.code","version":2,"parameters":{"jsCode":"return [\n{\n\"id\":\n\"0001\",\n\"name\":\n\"Example feature 1\",\n\"url\": \"example.com\",\n\"property_tags\":\n[\n],\n\"property_type\":\n[\n\"Feature\"\n],\n\"property_votes\":\n2\n},\n{\n\"id\":\n\"0002\",\n\"name\":\n\"Example feature 2\",\n\"url\": \"example.com\",\n\"property_type\":\n[\n\"Feature\"\n],\n\"property_votes\":\n3\n},\n{\n\"id\":\n\"0003\",\n\"name\":\n\"Example feature 3\",\n\"url\": \"example.com\",\n\"property_type\":\n[\n\"Feature\"\n],\n\"property_votes\":\n1\n},\n{\n\"id\":\n\"0004\",\n\"name\":\n\"Example bug 1\",\n\"url\": \"example.com\",\n\"property_type\":\n[\n\"Bug\"\n],\n\"property_votes\":\n0\n},\n{\n\"id\":\n\"0005\",\n\"name\":\n\"Example idea 1\",\n\"url\": \"example.com\",\n\"property_type\":\n[\n\"Idea\"\n],\n\"property_votes\":\n4\n}\n]"},"position":[1080,540]}],"connections":{"When clicking \"Execute Workflow\"":{"main":[[{"node":"Mock Ideas","type":"main","index":0}]]},"Mock Ideas":{"main":[[{"node":"Summarize","type":"main","index":0}]]}},"source":"docs/_workflows/ai-code/summarize-data.json","description":"Workflow example from docs/_workflows/ai-code/summarize-data.json"},{"name":"chapter-2","workflow":{"nodes":[{"parameters":{},"type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[0,0],"id":"5738d1d8-ae7d-4e04-bca4-885c59e1d9e8","name":"When clicking ‘Execute workflow’"},{"parameters":{"resource":"all","limit":10,"additionalFields":{"keyword":"automation"}},"type":"n8n-nodes-base.hackerNews","typeVersion":1,"position":[220,0],"id":"65e9d0a6-5261-4c7d-8d85-6ff49de04dee","name":"Hacker News","notesInFlow":true,"notes":"Get the 10 latest articles."}],"connections":{"When clicking ‘Execute workflow’":{"main":[[{"node":"Hacker News","type":"main","index":0}]]}},"pinData":{},"meta":{"instanceId":"24789c4d5aa56ca018d140332e7a43fd37dd7af0409453314fff12dc1aeebfa8"}},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.manualTrigger","version":1,"parameters":{},"position":[0,0]},{"nodeType":"n8n-nodes-base.hackerNews","version":1,"parameters":{"resource":"all","limit":10,"additionalFields":{"keyword":"automation"}},"position":[220,0]}],"connections":{"When clicking ‘Execute workflow’":{"main":[[{"node":"Hacker News","type":"main","index":0}]]}},"source":"docs/_workflows/courses/level-one/chapter-2.json","description":"Workflow example from docs/_workflows/courses/level-one/chapter-2.json"},{"name":"chapter-5.1","workflow":{"nodes":[{"parameters":{"url":"https://internal.users.n8n.cloud/webhook/custom-erp","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendHeaders":true,"headerParameters":{"parameters":[{"name":"unique_id","value":"<YOUR_UNIQUE_ID_HERE>"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[340,-680],"id":"ada6becf-c320-41a7-bdca-a842ea3ee769","name":"HTTP Request1","credentials":{"httpHeaderAuth":{"id":"sMuanZ4xGobAurzY","name":"Nathan's ABCorp data warehouse account"}}},{"parameters":{},"type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[140,-680],"id":"ffa1a8ce-1a1e-48c4-8a0d-6af28c0447a5","name":"When clicking ‘Execute workflow’"}],"connections":{"HTTP Request1":{"main":[[]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"HTTP Request1","type":"main","index":0}]]}},"pinData":{},"meta":{"templateCredsSetupCompleted":true,"instanceId":"24789c4d5aa56ca018d140332e7a43fd37dd7af0409453314fff12dc1aeebfa8"}},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.httpRequest","version":4.2,"parameters":{"url":"https://internal.users.n8n.cloud/webhook/custom-erp","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendHeaders":true,"headerParameters":{"parameters":[{"name":"unique_id","value":"<YOUR_UNIQUE_ID_HERE>"}]},"options":{}},"position":[340,-680]},{"nodeType":"n8n-nodes-base.manualTrigger","version":1,"parameters":{},"position":[140,-680]}],"connections":{"HTTP Request1":{"main":[[]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"HTTP Request1","type":"main","index":0}]]}},"source":"docs/_workflows/courses/level-one/chapter-5/chapter-5.1.json","description":"Workflow example from docs/_workflows/courses/level-one/chapter-5/chapter-5.1.json"},{"name":"chapter-5.2","workflow":{"nodes":[{"parameters":{"url":"https://internal.users.n8n.cloud/webhook/custom-erp","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendHeaders":true,"headerParameters":{"parameters":[{"name":"unique_id","value":"<YOUR_UNIQUE_ID_HERE>"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[340,-680],"id":"ada6becf-c320-41a7-bdca-a842ea3ee769","name":"HTTP Request1","credentials":{"httpHeaderAuth":{"id":"sMuanZ4xGobAurzY","name":"Nathan's ABCorp data warehouse account"}}},{"parameters":{"operation":"create","base":{"__rl":true,"value":"app9nOVsRxdypoknP","mode":"list","cachedResultName":"beginner course"},"table":{"__rl":true,"value":"tblo2KuMyn5X4jU0s","mode":"list","cachedResultName":"orders"},"columns":{"mappingMode":"autoMapInputData","value":{},"matchingColumns":[],"schema":[{"id":"orderID","displayName":"orderID","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"customerID","displayName":"customerID","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"employeeName","displayName":"employeeName","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"string","readOnly":false,"removed":false},{"id":"orderPrice","displayName":"orderPrice","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"orderStatus","displayName":"orderStatus","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"string","readOnly":false,"removed":false}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"type":"n8n-nodes-base.airtable","typeVersion":2.1,"position":[560,-680],"id":"5e60ca72-d773-439c-b39a-4b14c54f795b","name":"Airtable1","credentials":{"airtableTokenApi":{"id":"UT32NHUYnp4pn1H3","name":"Airtable Personal Access Token account"}}},{"parameters":{},"type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[140,-680],"id":"ffa1a8ce-1a1e-48c4-8a0d-6af28c0447a5","name":"When clicking ‘Execute workflow’"}],"connections":{"HTTP Request1":{"main":[[{"node":"Airtable1","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"HTTP Request1","type":"main","index":0}]]}},"pinData":{},"meta":{"templateCredsSetupCompleted":true,"instanceId":"24789c4d5aa56ca018d140332e7a43fd37dd7af0409453314fff12dc1aeebfa8"}},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.httpRequest","version":4.2,"parameters":{"url":"https://internal.users.n8n.cloud/webhook/custom-erp","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendHeaders":true,"headerParameters":{"parameters":[{"name":"unique_id","value":"<YOUR_UNIQUE_ID_HERE>"}]},"options":{}},"position":[340,-680]},{"nodeType":"n8n-nodes-base.airtable","version":2.1,"parameters":{"operation":"create","base":{"__rl":true,"value":"app9nOVsRxdypoknP","mode":"list","cachedResultName":"beginner course"},"table":{"__rl":true,"value":"tblo2KuMyn5X4jU0s","mode":"list","cachedResultName":"orders"},"columns":{"mappingMode":"autoMapInputData","value":{},"matchingColumns":[],"schema":[{"id":"orderID","displayName":"orderID","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"customerID","displayName":"customerID","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"employeeName","displayName":"employeeName","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"string","readOnly":false,"removed":false},{"id":"orderPrice","displayName":"orderPrice","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"orderStatus","displayName":"orderStatus","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"string","readOnly":false,"removed":false}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"position":[560,-680]},{"nodeType":"n8n-nodes-base.manualTrigger","version":1,"parameters":{},"position":[140,-680]}],"connections":{"HTTP Request1":{"main":[[{"node":"Airtable1","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"HTTP Request1","type":"main","index":0}]]}},"source":"docs/_workflows/courses/level-one/chapter-5/chapter-5.2.json","description":"Workflow example from docs/_workflows/courses/level-one/chapter-5/chapter-5.2.json"},{"name":"chapter-5.3","workflow":{"nodes":[{"parameters":{"url":"https://internal.users.n8n.cloud/webhook/custom-erp","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendHeaders":true,"headerParameters":{"parameters":[{"name":"unique_id","value":"<YOUR_UNIQUE_ID_HERE>"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[340,-680],"id":"ada6becf-c320-41a7-bdca-a842ea3ee769","name":"HTTP Request1","credentials":{"httpHeaderAuth":{"id":"sMuanZ4xGobAurzY","name":"Nathan's ABCorp data warehouse account"}}},{"parameters":{"operation":"create","base":{"__rl":true,"value":"app9nOVsRxdypoknP","mode":"list","cachedResultName":"beginner course"},"table":{"__rl":true,"value":"tblo2KuMyn5X4jU0s","mode":"list","cachedResultName":"orders"},"columns":{"mappingMode":"autoMapInputData","value":{},"matchingColumns":[],"schema":[{"id":"orderID","displayName":"orderID","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"customerID","displayName":"customerID","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"employeeName","displayName":"employeeName","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"string","readOnly":false,"removed":false},{"id":"orderPrice","displayName":"orderPrice","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"orderStatus","displayName":"orderStatus","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"string","readOnly":false,"removed":false}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"type":"n8n-nodes-base.airtable","typeVersion":2.1,"position":[800,-680],"id":"5e60ca72-d773-439c-b39a-4b14c54f795b","name":"Airtable1","credentials":{"airtableTokenApi":{"id":"UT32NHUYnp4pn1H3","name":"Airtable Personal Access Token account"}}},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"526cb30c-0f90-4f66-8f98-b64ceb2e52f2","leftValue":"={{ $json.orderStatus }}","rightValue":"processing","operator":{"type":"string","operation":"equals"}}],"combinator":"and"},"options":{}},"type":"n8n-nodes-base.if","typeVersion":2.2,"position":[540,-680],"id":"70e4db65-f827-4e4f-8673-b405b7986d6e","name":"If1"},{"parameters":{},"type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[140,-680],"id":"ffa1a8ce-1a1e-48c4-8a0d-6af28c0447a5","name":"When clicking ‘Execute workflow’"}],"connections":{"HTTP Request1":{"main":[[{"node":"If1","type":"main","index":0}]]},"If1":{"main":[[{"node":"Airtable1","type":"main","index":0}],[]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"HTTP Request1","type":"main","index":0}]]}},"pinData":{},"meta":{"templateCredsSetupCompleted":true,"instanceId":"24789c4d5aa56ca018d140332e7a43fd37dd7af0409453314fff12dc1aeebfa8"}},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.httpRequest","version":4.2,"parameters":{"url":"https://internal.users.n8n.cloud/webhook/custom-erp","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendHeaders":true,"headerParameters":{"parameters":[{"name":"unique_id","value":"<YOUR_UNIQUE_ID_HERE>"}]},"options":{}},"position":[340,-680]},{"nodeType":"n8n-nodes-base.airtable","version":2.1,"parameters":{"operation":"create","base":{"__rl":true,"value":"app9nOVsRxdypoknP","mode":"list","cachedResultName":"beginner course"},"table":{"__rl":true,"value":"tblo2KuMyn5X4jU0s","mode":"list","cachedResultName":"orders"},"columns":{"mappingMode":"autoMapInputData","value":{},"matchingColumns":[],"schema":[{"id":"orderID","displayName":"orderID","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"customerID","displayName":"customerID","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"employeeName","displayName":"employeeName","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"string","readOnly":false,"removed":false},{"id":"orderPrice","displayName":"orderPrice","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"orderStatus","displayName":"orderStatus","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"string","readOnly":false,"removed":false}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"position":[800,-680]},{"nodeType":"n8n-nodes-base.if","version":2.2,"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"526cb30c-0f90-4f66-8f98-b64ceb2e52f2","leftValue":"={{ $json.orderStatus }}","rightValue":"processing","operator":{"type":"string","operation":"equals"}}],"combinator":"and"},"options":{}},"position":[540,-680]},{"nodeType":"n8n-nodes-base.manualTrigger","version":1,"parameters":{},"position":[140,-680]}],"connections":{"HTTP Request1":{"main":[[{"node":"If1","type":"main","index":0}]]},"If1":{"main":[[{"node":"Airtable1","type":"main","index":0}],[]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"HTTP Request1","type":"main","index":0}]]}},"source":"docs/_workflows/courses/level-one/chapter-5/chapter-5.3.json","description":"Workflow example from docs/_workflows/courses/level-one/chapter-5/chapter-5.3.json"},{"name":"chapter-5.4","workflow":{"nodes":[{"parameters":{"url":"https://internal.users.n8n.cloud/webhook/custom-erp","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendHeaders":true,"headerParameters":{"parameters":[{"name":"unique_id","value":"<YOUR_UNIQUE_ID_HERE>"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[300,-520],"id":"ada6becf-c320-41a7-bdca-a842ea3ee769","name":"HTTP Request1","credentials":{"httpHeaderAuth":{"id":"sMuanZ4xGobAurzY","name":"Nathan's ABCorp data warehouse account"}}},{"parameters":{"operation":"create","base":{"__rl":true,"value":"app9nOVsRxdypoknP","mode":"list","cachedResultName":"beginner course"},"table":{"__rl":true,"value":"tblTIOsm4BLJD9Tql","mode":"list","cachedResultName":"processingOrders"},"columns":{"mappingMode":"autoMapInputData","value":{},"matchingColumns":[],"schema":[{"id":"orderID","displayName":"orderID","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"employeeName","displayName":"employeeName","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"string","readOnly":false,"removed":false}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"type":"n8n-nodes-base.airtable","typeVersion":2.1,"position":[1020,-600],"id":"5e60ca72-d773-439c-b39a-4b14c54f795b","name":"Airtable1","credentials":{"airtableTokenApi":{"id":"UT32NHUYnp4pn1H3","name":"Airtable Personal Access Token account"}}},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"526cb30c-0f90-4f66-8f98-b64ceb2e52f2","leftValue":"={{ $json.orderStatus }}","rightValue":"processing","operator":{"type":"string","operation":"equals"}}],"combinator":"and"},"options":{}},"type":"n8n-nodes-base.if","typeVersion":2.2,"position":[520,-520],"id":"70e4db65-f827-4e4f-8673-b405b7986d6e","name":"If1"},{"parameters":{"assignments":{"assignments":[{"id":"20d37948-763a-4d7b-b725-e65f3802af03","name":"orderID","value":"={{ $json.orderID }}","type":"number"},{"id":"9df108a7-6b13-42ab-a6dd-9ca582ba8b49","name":"employeeName","value":"={{ $json.employeeName }}","type":"string"}]},"options":{}},"type":"n8n-nodes-base.set","typeVersion":3.4,"position":[800,-600],"id":"a3d3dc53-32f1-4f44-bf95-50bc5450d601","name":"Edit Fields1"},{"parameters":{},"type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[80,-520],"id":"ffa1a8ce-1a1e-48c4-8a0d-6af28c0447a5","name":"When clicking ‘Execute workflow’"}],"connections":{"HTTP Request1":{"main":[[{"node":"If1","type":"main","index":0}]]},"If1":{"main":[[{"node":"Edit Fields1","type":"main","index":0}],[]]},"Edit Fields1":{"main":[[{"node":"Airtable1","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"HTTP Request1","type":"main","index":0}]]}},"pinData":{},"meta":{"templateCredsSetupCompleted":true,"instanceId":"24789c4d5aa56ca018d140332e7a43fd37dd7af0409453314fff12dc1aeebfa8"}},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.httpRequest","version":4.2,"parameters":{"url":"https://internal.users.n8n.cloud/webhook/custom-erp","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendHeaders":true,"headerParameters":{"parameters":[{"name":"unique_id","value":"<YOUR_UNIQUE_ID_HERE>"}]},"options":{}},"position":[300,-520]},{"nodeType":"n8n-nodes-base.airtable","version":2.1,"parameters":{"operation":"create","base":{"__rl":true,"value":"app9nOVsRxdypoknP","mode":"list","cachedResultName":"beginner course"},"table":{"__rl":true,"value":"tblTIOsm4BLJD9Tql","mode":"list","cachedResultName":"processingOrders"},"columns":{"mappingMode":"autoMapInputData","value":{},"matchingColumns":[],"schema":[{"id":"orderID","displayName":"orderID","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"employeeName","displayName":"employeeName","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"string","readOnly":false,"removed":false}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"position":[1020,-600]},{"nodeType":"n8n-nodes-base.if","version":2.2,"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"526cb30c-0f90-4f66-8f98-b64ceb2e52f2","leftValue":"={{ $json.orderStatus }}","rightValue":"processing","operator":{"type":"string","operation":"equals"}}],"combinator":"and"},"options":{}},"position":[520,-520]},{"nodeType":"n8n-nodes-base.set","version":3.4,"parameters":{"assignments":{"assignments":[{"id":"20d37948-763a-4d7b-b725-e65f3802af03","name":"orderID","value":"={{ $json.orderID }}","type":"number"},{"id":"9df108a7-6b13-42ab-a6dd-9ca582ba8b49","name":"employeeName","value":"={{ $json.employeeName }}","type":"string"}]},"options":{}},"position":[800,-600]},{"nodeType":"n8n-nodes-base.manualTrigger","version":1,"parameters":{},"position":[80,-520]}],"connections":{"HTTP Request1":{"main":[[{"node":"If1","type":"main","index":0}]]},"If1":{"main":[[{"node":"Edit Fields1","type":"main","index":0}],[]]},"Edit Fields1":{"main":[[{"node":"Airtable1","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"HTTP Request1","type":"main","index":0}]]}},"source":"docs/_workflows/courses/level-one/chapter-5/chapter-5.4.json","description":"Workflow example from docs/_workflows/courses/level-one/chapter-5/chapter-5.4.json"},{"name":"chapter-5.5","workflow":{"nodes":[{"parameters":{"url":"https://internal.users.n8n.cloud/webhook/custom-erp","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendHeaders":true,"headerParameters":{"parameters":[{"name":"unique_id","value":"<YOUR_UNIQUE_ID_HERE>"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[300,-520],"id":"ada6becf-c320-41a7-bdca-a842ea3ee769","name":"HTTP Request1","credentials":{"httpHeaderAuth":{"id":"sMuanZ4xGobAurzY","name":"Nathan's ABCorp data warehouse account"}}},{"parameters":{"operation":"create","base":{"__rl":true,"value":"app9nOVsRxdypoknP","mode":"list","cachedResultName":"beginner course"},"table":{"__rl":true,"value":"tblTIOsm4BLJD9Tql","mode":"list","cachedResultName":"processingOrders"},"columns":{"mappingMode":"autoMapInputData","value":{},"matchingColumns":[],"schema":[{"id":"orderID","displayName":"orderID","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"employeeName","displayName":"employeeName","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"string","readOnly":false,"removed":false}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"type":"n8n-nodes-base.airtable","typeVersion":2.1,"position":[1020,-600],"id":"5e60ca72-d773-439c-b39a-4b14c54f795b","name":"Airtable1","credentials":{"airtableTokenApi":{"id":"UT32NHUYnp4pn1H3","name":"Airtable Personal Access Token account"}}},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"526cb30c-0f90-4f66-8f98-b64ceb2e52f2","leftValue":"={{ $json.orderStatus }}","rightValue":"processing","operator":{"type":"string","operation":"equals"}}],"combinator":"and"},"options":{}},"type":"n8n-nodes-base.if","typeVersion":2.2,"position":[520,-520],"id":"70e4db65-f827-4e4f-8673-b405b7986d6e","name":"If1"},{"parameters":{"assignments":{"assignments":[{"id":"20d37948-763a-4d7b-b725-e65f3802af03","name":"orderID","value":"={{ $json.orderID }}","type":"number"},{"id":"9df108a7-6b13-42ab-a6dd-9ca582ba8b49","name":"employeeName","value":"={{ $json.employeeName }}","type":"string"}]},"options":{}},"type":"n8n-nodes-base.set","typeVersion":3.4,"position":[800,-600],"id":"a3d3dc53-32f1-4f44-bf95-50bc5450d601","name":"Edit Fields1"},{"parameters":{"jsCode":"let items = $input.all();\nlet totalBooked = items.length;\nlet bookedSum = 0;\n\nfor (let i=0; i < items.length; i++) {\n  bookedSum = bookedSum + items[i].json.orderPrice;\n}\n\nreturn [{ json: {totalBooked, bookedSum} }];"},"type":"n8n-nodes-base.code","typeVersion":2,"position":[760,-420],"id":"d24ea5e9-c9e6-4d06-b6ee-8db1abd42bc0","name":"Code1"},{"parameters":{},"type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[80,-520],"id":"ffa1a8ce-1a1e-48c4-8a0d-6af28c0447a5","name":"When clicking ‘Execute workflow’"}],"connections":{"HTTP Request1":{"main":[[{"node":"If1","type":"main","index":0}]]},"If1":{"main":[[{"node":"Edit Fields1","type":"main","index":0}],[{"node":"Code1","type":"main","index":0}]]},"Edit Fields1":{"main":[[{"node":"Airtable1","type":"main","index":0}]]},"Code1":{"main":[[]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"HTTP Request1","type":"main","index":0}]]}},"pinData":{},"meta":{"templateCredsSetupCompleted":true,"instanceId":"24789c4d5aa56ca018d140332e7a43fd37dd7af0409453314fff12dc1aeebfa8"}},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.httpRequest","version":4.2,"parameters":{"url":"https://internal.users.n8n.cloud/webhook/custom-erp","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendHeaders":true,"headerParameters":{"parameters":[{"name":"unique_id","value":"<YOUR_UNIQUE_ID_HERE>"}]},"options":{}},"position":[300,-520]},{"nodeType":"n8n-nodes-base.airtable","version":2.1,"parameters":{"operation":"create","base":{"__rl":true,"value":"app9nOVsRxdypoknP","mode":"list","cachedResultName":"beginner course"},"table":{"__rl":true,"value":"tblTIOsm4BLJD9Tql","mode":"list","cachedResultName":"processingOrders"},"columns":{"mappingMode":"autoMapInputData","value":{},"matchingColumns":[],"schema":[{"id":"orderID","displayName":"orderID","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"employeeName","displayName":"employeeName","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"string","readOnly":false,"removed":false}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"position":[1020,-600]},{"nodeType":"n8n-nodes-base.if","version":2.2,"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"526cb30c-0f90-4f66-8f98-b64ceb2e52f2","leftValue":"={{ $json.orderStatus }}","rightValue":"processing","operator":{"type":"string","operation":"equals"}}],"combinator":"and"},"options":{}},"position":[520,-520]},{"nodeType":"n8n-nodes-base.set","version":3.4,"parameters":{"assignments":{"assignments":[{"id":"20d37948-763a-4d7b-b725-e65f3802af03","name":"orderID","value":"={{ $json.orderID }}","type":"number"},{"id":"9df108a7-6b13-42ab-a6dd-9ca582ba8b49","name":"employeeName","value":"={{ $json.employeeName }}","type":"string"}]},"options":{}},"position":[800,-600]},{"nodeType":"n8n-nodes-base.code","version":2,"parameters":{"jsCode":"let items = $input.all();\nlet totalBooked = items.length;\nlet bookedSum = 0;\n\nfor (let i=0; i < items.length; i++) {\n  bookedSum = bookedSum + items[i].json.orderPrice;\n}\n\nreturn [{ json: {totalBooked, bookedSum} }];"},"position":[760,-420]},{"nodeType":"n8n-nodes-base.manualTrigger","version":1,"parameters":{},"position":[80,-520]}],"connections":{"HTTP Request1":{"main":[[{"node":"If1","type":"main","index":0}]]},"If1":{"main":[[{"node":"Edit Fields1","type":"main","index":0}],[{"node":"Code1","type":"main","index":0}]]},"Edit Fields1":{"main":[[{"node":"Airtable1","type":"main","index":0}]]},"Code1":{"main":[[]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"HTTP Request1","type":"main","index":0}]]}},"source":"docs/_workflows/courses/level-one/chapter-5/chapter-5.5.json","description":"Workflow example from docs/_workflows/courses/level-one/chapter-5/chapter-5.5.json"},{"name":"chapter-5.6","workflow":{"nodes":[{"parameters":{"url":"https://internal.users.n8n.cloud/webhook/custom-erp","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendHeaders":true,"headerParameters":{"parameters":[{"name":"unique_id","value":"<YOUR_UNIQUE_ID_HERE>"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[300,-520],"id":"ada6becf-c320-41a7-bdca-a842ea3ee769","name":"HTTP Request1","credentials":{"httpHeaderAuth":{"id":"sMuanZ4xGobAurzY","name":"Nathan's ABCorp data warehouse account"}}},{"parameters":{"operation":"create","base":{"__rl":true,"value":"app9nOVsRxdypoknP","mode":"list","cachedResultName":"beginner course"},"table":{"__rl":true,"value":"tblTIOsm4BLJD9Tql","mode":"list","cachedResultName":"processingOrders"},"columns":{"mappingMode":"autoMapInputData","value":{},"matchingColumns":[],"schema":[{"id":"orderID","displayName":"orderID","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"employeeName","displayName":"employeeName","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"string","readOnly":false,"removed":false}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"type":"n8n-nodes-base.airtable","typeVersion":2.1,"position":[1020,-600],"id":"5e60ca72-d773-439c-b39a-4b14c54f795b","name":"Airtable1","credentials":{"airtableTokenApi":{"id":"UT32NHUYnp4pn1H3","name":"Airtable Personal Access Token account"}}},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"526cb30c-0f90-4f66-8f98-b64ceb2e52f2","leftValue":"={{ $json.orderStatus }}","rightValue":"processing","operator":{"type":"string","operation":"equals"}}],"combinator":"and"},"options":{}},"type":"n8n-nodes-base.if","typeVersion":2.2,"position":[520,-520],"id":"70e4db65-f827-4e4f-8673-b405b7986d6e","name":"If1"},{"parameters":{"assignments":{"assignments":[{"id":"20d37948-763a-4d7b-b725-e65f3802af03","name":"orderID","value":"={{ $json.orderID }}","type":"number"},{"id":"9df108a7-6b13-42ab-a6dd-9ca582ba8b49","name":"employeeName","value":"={{ $json.employeeName }}","type":"string"}]},"options":{}},"type":"n8n-nodes-base.set","typeVersion":3.4,"position":[800,-600],"id":"a3d3dc53-32f1-4f44-bf95-50bc5450d601","name":"Edit Fields1"},{"parameters":{"jsCode":"let items = $input.all();\nlet totalBooked = items.length;\nlet bookedSum = 0;\n\nfor (let i=0; i < items.length; i++) {\n  bookedSum = bookedSum + items[i].json.orderPrice;\n}\n\nreturn [{ json: {totalBooked, bookedSum} }];"},"type":"n8n-nodes-base.code","typeVersion":2,"position":[760,-420],"id":"d24ea5e9-c9e6-4d06-b6ee-8db1abd42bc0","name":"Code1"},{"parameters":{"authentication":"webhook","content":"=This week we've {{$json[\"totalBooked\"]}} booked orders with a total value of {{$json[\"bookedSum\"]}}. My Unique ID: {{ $('HTTP Request1').params[\"headerParameters\"][\"parameters\"][0][\"value\"] }}","options":{}},"type":"n8n-nodes-base.discord","typeVersion":2,"position":[1000,-420],"id":"ed380465-c655-4c38-8eb3-2008b9e7869f","name":"Discord1","webhookId":"eff0b651-f0be-4cae-8f18-7d831385be3c","credentials":{"discordWebhookApi":{"id":"lOieo0mIb6h1Wi9R","name":"Discord Webhook account"}}},{"parameters":{},"type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[80,-520],"id":"ffa1a8ce-1a1e-48c4-8a0d-6af28c0447a5","name":"When clicking ‘Execute workflow’"}],"connections":{"HTTP Request1":{"main":[[{"node":"If1","type":"main","index":0}]]},"If1":{"main":[[{"node":"Edit Fields1","type":"main","index":0}],[{"node":"Code1","type":"main","index":0}]]},"Edit Fields1":{"main":[[{"node":"Airtable1","type":"main","index":0}]]},"Code1":{"main":[[{"node":"Discord1","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"HTTP Request1","type":"main","index":0}]]}},"pinData":{},"meta":{"templateCredsSetupCompleted":true,"instanceId":"24789c4d5aa56ca018d140332e7a43fd37dd7af0409453314fff12dc1aeebfa8"}},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.httpRequest","version":4.2,"parameters":{"url":"https://internal.users.n8n.cloud/webhook/custom-erp","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendHeaders":true,"headerParameters":{"parameters":[{"name":"unique_id","value":"<YOUR_UNIQUE_ID_HERE>"}]},"options":{}},"position":[300,-520]},{"nodeType":"n8n-nodes-base.airtable","version":2.1,"parameters":{"operation":"create","base":{"__rl":true,"value":"app9nOVsRxdypoknP","mode":"list","cachedResultName":"beginner course"},"table":{"__rl":true,"value":"tblTIOsm4BLJD9Tql","mode":"list","cachedResultName":"processingOrders"},"columns":{"mappingMode":"autoMapInputData","value":{},"matchingColumns":[],"schema":[{"id":"orderID","displayName":"orderID","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"employeeName","displayName":"employeeName","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"string","readOnly":false,"removed":false}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"position":[1020,-600]},{"nodeType":"n8n-nodes-base.if","version":2.2,"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"526cb30c-0f90-4f66-8f98-b64ceb2e52f2","leftValue":"={{ $json.orderStatus }}","rightValue":"processing","operator":{"type":"string","operation":"equals"}}],"combinator":"and"},"options":{}},"position":[520,-520]},{"nodeType":"n8n-nodes-base.set","version":3.4,"parameters":{"assignments":{"assignments":[{"id":"20d37948-763a-4d7b-b725-e65f3802af03","name":"orderID","value":"={{ $json.orderID }}","type":"number"},{"id":"9df108a7-6b13-42ab-a6dd-9ca582ba8b49","name":"employeeName","value":"={{ $json.employeeName }}","type":"string"}]},"options":{}},"position":[800,-600]},{"nodeType":"n8n-nodes-base.code","version":2,"parameters":{"jsCode":"let items = $input.all();\nlet totalBooked = items.length;\nlet bookedSum = 0;\n\nfor (let i=0; i < items.length; i++) {\n  bookedSum = bookedSum + items[i].json.orderPrice;\n}\n\nreturn [{ json: {totalBooked, bookedSum} }];"},"position":[760,-420]},{"nodeType":"n8n-nodes-base.discord","version":2,"parameters":{"authentication":"webhook","content":"=This week we've {{$json[\"totalBooked\"]}} booked orders with a total value of {{$json[\"bookedSum\"]}}. My Unique ID: {{ $('HTTP Request1').params[\"headerParameters\"][\"parameters\"][0][\"value\"] }}","options":{}},"position":[1000,-420]},{"nodeType":"n8n-nodes-base.manualTrigger","version":1,"parameters":{},"position":[80,-520]}],"connections":{"HTTP Request1":{"main":[[{"node":"If1","type":"main","index":0}]]},"If1":{"main":[[{"node":"Edit Fields1","type":"main","index":0}],[{"node":"Code1","type":"main","index":0}]]},"Edit Fields1":{"main":[[{"node":"Airtable1","type":"main","index":0}]]},"Code1":{"main":[[{"node":"Discord1","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"HTTP Request1","type":"main","index":0}]]}},"source":"docs/_workflows/courses/level-one/chapter-5/chapter-5.6.json","description":"Workflow example from docs/_workflows/courses/level-one/chapter-5/chapter-5.6.json"},{"name":"finished","workflow":{"nodes":[{"parameters":{"url":"https://internal.users.n8n.cloud/webhook/custom-erp","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendHeaders":true,"headerParameters":{"parameters":[{"name":"unique_id","value":"4d259ec5241587a0d2820670fc048f0d"}]},"options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[220,-40],"id":"e1fb70b3-0212-4e78-9976-cb77c69f1a92","name":"HTTP Request","credentials":{"httpHeaderAuth":{"id":"sMuanZ4xGobAurzY","name":"Nathan's ABCorp data warehouse account"}}},{"parameters":{"operation":"create","base":{"__rl":true,"value":"app9nOVsRxdypoknP","mode":"list","cachedResultName":"beginner course"},"table":{"__rl":true,"value":"tblTIOsm4BLJD9Tql","mode":"list","cachedResultName":"processingOrders"},"columns":{"mappingMode":"autoMapInputData","value":{},"matchingColumns":[],"schema":[{"id":"orderID","displayName":"orderID","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"employeeName","displayName":"employeeName","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"string","readOnly":false,"removed":false}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"type":"n8n-nodes-base.airtable","typeVersion":2.1,"position":[880,-140],"id":"5cef2ef7-98a6-4dc6-bc30-667eba06fd7b","name":"Airtable","credentials":{"airtableTokenApi":{"id":"UT32NHUYnp4pn1H3","name":"Airtable Personal Access Token account"}}},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"526cb30c-0f90-4f66-8f98-b64ceb2e52f2","leftValue":"={{ $json.orderStatus }}","rightValue":"processing","operator":{"type":"string","operation":"equals"}}],"combinator":"and"},"options":{}},"type":"n8n-nodes-base.if","typeVersion":2.2,"position":[440,-40],"id":"448b2e3c-569d-42e6-a4b9-57c08b2cac1a","name":"If"},{"parameters":{"assignments":{"assignments":[{"id":"20d37948-763a-4d7b-b725-e65f3802af03","name":"orderID","value":"={{ $json.orderID }}","type":"number"},{"id":"9df108a7-6b13-42ab-a6dd-9ca582ba8b49","name":"employeeName","value":"={{ $json.employeeName }}","type":"string"}]},"options":{}},"type":"n8n-nodes-base.set","typeVersion":3.4,"position":[660,-140],"id":"7e2a8092-fb0f-4260-84e8-d796cf14d309","name":"Edit Fields"},{"parameters":{"jsCode":"let items = $input.all();\nlet totalBooked = items.length;\nlet bookedSum = 0;\n\nfor (let i=0; i < items.length; i++) {\n  bookedSum = bookedSum + items[i].json.orderPrice;\n}\n\nreturn [{ json: {totalBooked, bookedSum} }];"},"type":"n8n-nodes-base.code","typeVersion":2,"position":[660,60],"id":"26ce1d53-794b-4457-9aa8-0ecf9093b838","name":"Code"},{"parameters":{"authentication":"webhook","content":"=This week we've {{$json[\"totalBooked\"]}} booked orders with a total value of {{$json[\"bookedSum\"]}}. My Unique ID: {{ $('HTTP Request').params[\"headerParameters\"][\"parameters\"][0][\"value\"] }}","options":{}},"type":"n8n-nodes-base.discord","typeVersion":2,"position":[880,60],"id":"d8c0b4b6-3bf1-4055-a03f-f0023337777c","name":"Discord","webhookId":"eff0b651-f0be-4cae-8f18-7d831385be3c","credentials":{"discordWebhookApi":{"id":"lOieo0mIb6h1Wi9R","name":"Discord Webhook account"}}},{"parameters":{"rule":{"interval":[{"field":"weeks","triggerAtDay":[1],"triggerAtHour":9}]}},"type":"n8n-nodes-base.scheduleTrigger","typeVersion":1.2,"position":[0,-40],"id":"15f0b179-6a43-483b-a522-2b8ba834b795","name":"Schedule Trigger"}],"connections":{"HTTP Request":{"main":[[{"node":"If","type":"main","index":0}]]},"If":{"main":[[{"node":"Edit Fields","type":"main","index":0}],[{"node":"Code","type":"main","index":0}]]},"Edit Fields":{"main":[[{"node":"Airtable","type":"main","index":0}]]},"Code":{"main":[[{"node":"Discord","type":"main","index":0}]]},"Schedule Trigger":{"main":[[{"node":"HTTP Request","type":"main","index":0}]]}},"pinData":{},"meta":{"templateCredsSetupCompleted":true,"instanceId":"24789c4d5aa56ca018d140332e7a43fd37dd7af0409453314fff12dc1aeebfa8"}},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.httpRequest","version":4.2,"parameters":{"url":"https://internal.users.n8n.cloud/webhook/custom-erp","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendHeaders":true,"headerParameters":{"parameters":[{"name":"unique_id","value":"4d259ec5241587a0d2820670fc048f0d"}]},"options":{}},"position":[220,-40]},{"nodeType":"n8n-nodes-base.airtable","version":2.1,"parameters":{"operation":"create","base":{"__rl":true,"value":"app9nOVsRxdypoknP","mode":"list","cachedResultName":"beginner course"},"table":{"__rl":true,"value":"tblTIOsm4BLJD9Tql","mode":"list","cachedResultName":"processingOrders"},"columns":{"mappingMode":"autoMapInputData","value":{},"matchingColumns":[],"schema":[{"id":"orderID","displayName":"orderID","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"number","readOnly":false,"removed":false},{"id":"employeeName","displayName":"employeeName","required":false,"defaultMatch":false,"canBeUsedToMatch":true,"display":true,"type":"string","readOnly":false,"removed":false}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"position":[880,-140]},{"nodeType":"n8n-nodes-base.if","version":2.2,"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"526cb30c-0f90-4f66-8f98-b64ceb2e52f2","leftValue":"={{ $json.orderStatus }}","rightValue":"processing","operator":{"type":"string","operation":"equals"}}],"combinator":"and"},"options":{}},"position":[440,-40]},{"nodeType":"n8n-nodes-base.set","version":3.4,"parameters":{"assignments":{"assignments":[{"id":"20d37948-763a-4d7b-b725-e65f3802af03","name":"orderID","value":"={{ $json.orderID }}","type":"number"},{"id":"9df108a7-6b13-42ab-a6dd-9ca582ba8b49","name":"employeeName","value":"={{ $json.employeeName }}","type":"string"}]},"options":{}},"position":[660,-140]},{"nodeType":"n8n-nodes-base.code","version":2,"parameters":{"jsCode":"let items = $input.all();\nlet totalBooked = items.length;\nlet bookedSum = 0;\n\nfor (let i=0; i < items.length; i++) {\n  bookedSum = bookedSum + items[i].json.orderPrice;\n}\n\nreturn [{ json: {totalBooked, bookedSum} }];"},"position":[660,60]},{"nodeType":"n8n-nodes-base.discord","version":2,"parameters":{"authentication":"webhook","content":"=This week we've {{$json[\"totalBooked\"]}} booked orders with a total value of {{$json[\"bookedSum\"]}}. My Unique ID: {{ $('HTTP Request').params[\"headerParameters\"][\"parameters\"][0][\"value\"] }}","options":{}},"position":[880,60]},{"nodeType":"n8n-nodes-base.scheduleTrigger","version":1.2,"parameters":{"rule":{"interval":[{"field":"weeks","triggerAtDay":[1],"triggerAtHour":9}]}},"position":[0,-40]}],"connections":{"HTTP Request":{"main":[[{"node":"If","type":"main","index":0}]]},"If":{"main":[[{"node":"Edit Fields","type":"main","index":0}],[{"node":"Code","type":"main","index":0}]]},"Edit Fields":{"main":[[{"node":"Airtable","type":"main","index":0}]]},"Code":{"main":[[{"node":"Discord","type":"main","index":0}]]},"Schedule Trigger":{"main":[[{"node":"HTTP Request","type":"main","index":0}]]}},"source":"docs/_workflows/courses/level-one/finished.json","description":"Workflow example from docs/_workflows/courses/level-one/finished.json"},{"name":"dynamic_credentials_using_expressions","workflow":{"name":"Dynamic credentials using expressions","nodes":[{"parameters":{"path":"da4071f2-7550-4dae-aa48-8bced4291643","formTitle":"Test dynamic credentials","formDescription":"This form is for testing an n8n workflow that demonstrates setting credentials with expressions.","formFields":{"values":[{"fieldLabel":"Enter your NASA API key","requiredField":true}]},"responseMode":"responseNode"},"id":"cc6f2b1e-0ed0-4d22-8a44-d7223ba283b4","name":"n8n Form Trigger","type":"n8n-nodes-base.formTrigger","typeVersion":2,"position":[560,520],"webhookId":"da4071f2-7550-4dae-aa48-8bced4291643"},{"parameters":{"additionalFields":{}},"id":"ef336bae-3d4f-419c-ab5c-b9f0de89f170","name":"NASA","type":"n8n-nodes-base.nasa","typeVersion":1,"position":[900,520],"credentials":{"nasaApi":{"id":"QDDBOZOD6k3ijL5t","name":"NASA account"}}},{"parameters":{"respondWith":"redirect","redirectURL":"={{ $json.url }}","options":{}},"id":"143bcdb6-aca0-4dd8-9204-9777271cd230","name":"Respond to Webhook","type":"n8n-nodes-base.respondToWebhook","typeVersion":1,"position":[1220,520]},{"parameters":{"content":"This workflow shows how to set credentials dynamically using expressions.\n\n\nFirst, set up your NASA credential: \n\n1. Create a new NASA credential.\n1. Hover over **API Key**.\n1. Toggle **Expression** on.\n1. In the **API Key** field, enter `{{ $json[\"Enter your NASA API key\"] }}`.\n\n\nThen, test the workflow:\n\n1. Get an [API key from NASA](https://api.nasa.gov/)\n2. Select **Execute workflow**\n3. Enter your key using the form.\n4. The workflow runs and sends you to the NASA picture of the day.\n\n\nFor more information on expressions, refer to [n8n documentation | Expressions](https://docs.n8n.io/code/expressions/).","height":564,"width":322,"color":4},"id":"0a0dee23-fa16-4f09-b5e0-856f47fb53d0","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[120,140]},{"parameters":{"content":"User submits an API key using the form","height":319},"id":"dd766e32-334d-4e46-9daa-7800b134a3a5","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[500,380]},{"parameters":{"content":"The workflow passes the key to the NASA node. You can reference the value using the expression `$json[\"Enter your NASA API key\"]`. This is also available to the node credential. ","height":319,"color":5},"id":"3d8f02e6-e029-41dc-89ad-0f5cffe09348","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[820,380]},{"parameters":{"content":"The Respond to Webhook node controls the form response (in this example, redirecting the user to an image)","height":319},"id":"096eb6ab-c276-4687-9dc0-50e16a8f709a","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[1140,380]}],"pinData":{},"connections":{"n8n Form Trigger":{"main":[[{"node":"NASA","type":"main","index":0}]]},"NASA":{"main":[[{"node":"Respond to Webhook","type":"main","index":0}]]}}},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.formTrigger","version":2,"parameters":{"path":"da4071f2-7550-4dae-aa48-8bced4291643","formTitle":"Test dynamic credentials","formDescription":"This form is for testing an n8n workflow that demonstrates setting credentials with expressions.","formFields":{"values":[{"fieldLabel":"Enter your NASA API key","requiredField":true}]},"responseMode":"responseNode"},"position":[560,520]},{"nodeType":"n8n-nodes-base.nasa","version":1,"parameters":{"additionalFields":{}},"position":[900,520]},{"nodeType":"n8n-nodes-base.respondToWebhook","version":1,"parameters":{"respondWith":"redirect","redirectURL":"={{ $json.url }}","options":{}},"position":[1220,520]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"This workflow shows how to set credentials dynamically using expressions.\n\n\nFirst, set up your NASA credential: \n\n1. Create a new NASA credential.\n1. Hover over **API Key**.\n1. Toggle **Expression** on.\n1. In the **API Key** field, enter `{{ $json[\"Enter your NASA API key\"] }}`.\n\n\nThen, test the workflow:\n\n1. Get an [API key from NASA](https://api.nasa.gov/)\n2. Select **Execute workflow**\n3. Enter your key using the form.\n4. The workflow runs and sends you to the NASA picture of the day.\n\n\nFor more information on expressions, refer to [n8n documentation | Expressions](https://docs.n8n.io/code/expressions/).","height":564,"width":322,"color":4},"position":[120,140]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"User submits an API key using the form","height":319},"position":[500,380]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"The workflow passes the key to the NASA node. You can reference the value using the expression `$json[\"Enter your NASA API key\"]`. This is also available to the node credential. ","height":319,"color":5},"position":[820,380]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"The Respond to Webhook node controls the form response (in this example, redirecting the user to an image)","height":319},"position":[1140,380]}],"connections":{"n8n Form Trigger":{"main":[[{"node":"NASA","type":"main","index":0}]]},"NASA":{"main":[[{"node":"Respond to Webhook","type":"main","index":0}]]}},"source":"docs/_workflows/credentials/dynamic_credentials_using_expressions.json"},{"name":"get-most-recent-file","workflow":{"meta":{"instanceId":"cb484ba7b742928a2048bf8829668bed5b5ad9787579adea888f05980292a4a7"},"nodes":[{"parameters":{"operation":"download","fileId":{"__rl":true,"value":"={{ $json.id }}","mode":"id"},"options":{}},"id":"45b53bcd-7dcf-4266-8b6e-bfc12008f9e2","name":"Google Drive1","type":"n8n-nodes-base.googleDrive","typeVersion":3,"position":[1500,300]},{"parameters":{},"id":"ba223e7c-4fed-41dd-8c80-2e8fd742629f","name":"When clicking ‘Execute workflow’","type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[620,300]},{"parameters":{"resource":"fileFolder","searchMethod":"query","returnAll":true,"filter":{"whatToSearch":"files"},"options":{"fields":["*"]}},"id":"42799909-16f3-4f0a-9ad9-4dd0375814a0","name":"Google Drive","type":"n8n-nodes-base.googleDrive","typeVersion":3,"position":[840,300]},{"parameters":{"sortFieldsUi":{"sortField":[{"fieldName":"modifiedTime","order":"descending"}]},"options":{}},"id":"bfb8baa6-1b8c-4540-9ad6-b5d7c3f7521b","name":"Sort","type":"n8n-nodes-base.sort","typeVersion":1,"position":[1060,300]},{"parameters":{},"id":"2883d39a-f7d9-4244-bf7d-b06878678ccc","name":"Limit","type":"n8n-nodes-base.limit","typeVersion":1,"position":[1280,300]}],"connections":{"When clicking ‘Execute workflow’":{"main":[[{"node":"Google Drive","type":"main","index":0}]]},"Google Drive":{"main":[[{"node":"Sort","type":"main","index":0}]]},"Sort":{"main":[[{"node":"Limit","type":"main","index":0}]]},"Limit":{"main":[[{"node":"Google Drive1","type":"main","index":0}]]}},"pinData":{}},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.googleDrive","version":3,"parameters":{"operation":"download","fileId":{"__rl":true,"value":"={{ $json.id }}","mode":"id"},"options":{}},"position":[1500,300]},{"nodeType":"n8n-nodes-base.manualTrigger","version":1,"parameters":{},"position":[620,300]},{"nodeType":"n8n-nodes-base.googleDrive","version":3,"parameters":{"resource":"fileFolder","searchMethod":"query","returnAll":true,"filter":{"whatToSearch":"files"},"options":{"fields":["*"]}},"position":[840,300]},{"nodeType":"n8n-nodes-base.sort","version":1,"parameters":{"sortFieldsUi":{"sortField":[{"fieldName":"modifiedTime","order":"descending"}]},"options":{}},"position":[1060,300]},{"nodeType":"n8n-nodes-base.limit","version":1,"parameters":{},"position":[1280,300]}],"connections":{"When clicking ‘Execute workflow’":{"main":[[{"node":"Google Drive","type":"main","index":0}]]},"Google Drive":{"main":[[{"node":"Sort","type":"main","index":0}]]},"Sort":{"main":[[{"node":"Limit","type":"main","index":0}]]},"Limit":{"main":[[{"node":"Google Drive1","type":"main","index":0}]]}},"source":"docs/_workflows/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/get-most-recent-file.json","description":"Workflow example from docs/_workflows/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/get-most-recent-file.json"},{"name":"webhook-example","workflow":{"name":"Extract from file example","nodes":[{"parameters":{"httpMethod":"POST","path":"06696ea7-9dc7-464a-873b-3feb095b0874","options":{"rawBody":true}},"type":"n8n-nodes-base.webhook","typeVersion":2,"position":[-380,-80],"id":"dfbd51af-6050-47c5-a26c-74cba77f65f7","name":"Webhook","webhookId":"06696ea7-9dc7-464a-873b-3feb095b0874"},{"parameters":{"options":{"headerRow":false}},"type":"n8n-nodes-base.extractFromFile","typeVersion":1,"position":[-160,-80],"id":"1b1e4643-8269-402b-83af-dfd90fd6a0b5","name":"Extract from File"}],"pinData":{},"connections":{"Webhook":{"main":[[{"node":"Extract from File","type":"main","index":0}]]}},"active":true,"settings":{"executionOrder":"v1"},"versionId":"dd2bf7f1-692a-41a8-9c2e-7931de57fa13","meta":{"instanceId":"1060f46e51fc7902c377ab29d7cbfb87696ddf6b3c5c27cbbb65c3cb36e21baf"},"id":"9i3iDZf5MpjlJ2sh","tags":[]},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.webhook","version":2,"parameters":{"httpMethod":"POST","path":"06696ea7-9dc7-464a-873b-3feb095b0874","options":{"rawBody":true}},"position":[-380,-80]},{"nodeType":"n8n-nodes-base.extractFromFile","version":1,"parameters":{"options":{"headerRow":false}},"position":[-160,-80]}],"connections":{"Webhook":{"main":[[{"node":"Extract from File","type":"main","index":0}]]}},"source":"docs/_workflows/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/webhook-example.json","description":"Workflow example from docs/_workflows/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/webhook-example.json"},{"name":"multiple-branch-execution","workflow":{"name":"Form that can execute multiple branches","nodes":[{"parameters":{"formTitle":"Form that may execute multiple branches","formDescription":"This form contains multiple branches. Depending on the user's responses, more than one branch may execute sequentially.","formFields":{"values":[{"fieldLabel":"What are your favorite film genres","fieldType":"dropdown","fieldOptions":{"values":[{"option":"Documentary"},{"option":"Action"},{"option":"Romance"},{"option":"Comedy"},{"option":"Drama"}]},"multiselect":true,"requiredField":true}]},"options":{}},"type":"n8n-nodes-base.formTrigger","typeVersion":2.2,"position":[-300,60],"id":"ad3f0e0a-a1e9-4504-8711-508bd29bd745","name":"On form submission","webhookId":"b3e1c86f-ae45-421e-9045-f19873b7a73e"},{"parameters":{"rules":{"values":[{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"e3d995dd-d555-4e7a-b744-a3434ed602ad","leftValue":"={{ $json['What are your favorite film genres'] }}","rightValue":"Documentary","operator":{"type":"array","operation":"contains","rightType":"any"}}],"combinator":"and"},"renameOutput":true,"outputKey":"Documentary"},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"ae94981b-1273-4830-ac2a-991bb25f41d8","leftValue":"={{ $json['What are your favorite film genres'] }}","rightValue":"Action","operator":{"type":"array","operation":"contains","rightType":"any"}}],"combinator":"and"},"renameOutput":true,"outputKey":"Action"},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"b9545089-4054-484d-9e6c-98f4872e7e9e","leftValue":"={{ $json['What are your favorite film genres'] }}","rightValue":"Romance","operator":{"type":"array","operation":"contains","rightType":"any"}}],"combinator":"and"},"renameOutput":true,"outputKey":"Romance"},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"71ae5a41-0927-40e3-a583-e569bcebfd1f","leftValue":"={{ $json['What are your favorite film genres'] }}","rightValue":"Comedy","operator":{"type":"array","operation":"contains","rightType":"any"}}],"combinator":"and"},"renameOutput":true,"outputKey":"Comedy"},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"5bfe5981-203a-457a-bfaa-36846d7b79a8","leftValue":"={{ $json['What are your favorite film genres'] }}","rightValue":"Drama","operator":{"type":"array","operation":"contains","rightType":"any"}}],"combinator":"and"},"renameOutput":true,"outputKey":"Drama"},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"adb1bfc5-08fd-4653-abe0-6f12aedda16a","leftValue":"={{ $json['What are your favorite film genres'] }}","rightValue":1,"operator":{"type":"array","operation":"lengthGt","rightType":"number"}}],"combinator":"and"},"renameOutput":true,"outputKey":"Final page"}]},"options":{"allMatchingOutputs":true}},"type":"n8n-nodes-base.switch","typeVersion":3.2,"position":[100,0],"id":"df96da7b-c7dc-43c6-8941-973842603e0c","name":"Switch"},{"parameters":{"content":"## Form that may execute multiple branches\nThis form contains branching where more than one path may execute, depending on the user's selections.","width":380},"type":"n8n-nodes-base.stickyNote","position":[-160,-260],"typeVersion":1,"id":"c51af5ad-8f6c-4f2a-8974-65c4abc4fcbf","name":"Sticky Note"},{"parameters":{"content":"This Switch node determines which branches will execute.\n\nMultiple conditions may be true, resulting in more than one branch being executed. When this happens, n8n executes the first branch completely before returning to execute the next branch.","height":220,"width":260,"color":5},"type":"n8n-nodes-base.stickyNote","position":[20,320],"typeVersion":1,"id":"eab3ff17-5030-4556-a0c7-2571345e8cdf","name":"Sticky Note1"},{"parameters":{"formFields":{"values":[{"fieldLabel":"What is your favorite documentary?"}]},"options":{}},"type":"n8n-nodes-base.form","typeVersion":1,"position":[700,-500],"id":"dc55c82f-7d4f-4368-8ab5-69a673e92027","name":"Documentary questions","webhookId":"0c72f06e-4cc0-41eb-931c-7bf82bb1927e"},{"parameters":{"formFields":{"values":[{"fieldLabel":"What is your favorite action film?"}]},"options":{}},"type":"n8n-nodes-base.form","typeVersion":1,"position":[700,-280],"id":"3f76b5df-561b-4159-9e14-33a43d8c45a8","name":"Action questions","webhookId":"bea04786-25cc-477e-aaf1-ab68159cbe28"},{"parameters":{"operation":"completion","completionTitle":"Thank you for answering our documentary questions!","options":{}},"type":"n8n-nodes-base.form","typeVersion":1,"position":[920,-500],"id":"16660e2e-a047-45d2-ba54-12d573633ece","name":"Documentary thanks","webhookId":"0238f2c2-8984-4adc-aade-308bb458c16e"},{"parameters":{"operation":"completion","completionTitle":"Thank you for answering our action film questions!","options":{}},"type":"n8n-nodes-base.form","typeVersion":1,"position":[920,-280],"id":"1853276a-3ba6-4315-b772-fbeb0c68a477","name":"Action thanks","webhookId":"2e47b563-bd17-466c-86b7-9237be55d226"},{"parameters":{"formFields":{"values":[{"fieldLabel":"What is your favorite romance film?"}]},"options":{}},"type":"n8n-nodes-base.form","typeVersion":1,"position":[700,-20],"id":"cd7bc8d0-a143-4733-be84-320c88ef241b","name":"Romance questions","webhookId":"3f77a665-fc03-46ba-a58f-6d9bd7099028"},{"parameters":{"operation":"completion","completionTitle":"Thank you for answering our romance film questions!","options":{}},"type":"n8n-nodes-base.form","typeVersion":1,"position":[920,-20],"id":"42d7c8b5-f66f-4b34-821c-0df91bbaa9ea","name":"Romance thanks","webhookId":"eee896c5-d116-4586-972d-3fe02073ed11"},{"parameters":{"formFields":{"values":[{"fieldLabel":"What is your favorite comedy film?"}]},"options":{}},"type":"n8n-nodes-base.form","typeVersion":1,"position":[700,220],"id":"b9422abf-1ad5-44e4-941d-692f72bc2fef","name":"Comedy questions","webhookId":"97b56894-28fb-47d1-b729-754e43f1ac09"},{"parameters":{"operation":"completion","completionTitle":"Thank you for answering our comedy film questions!","options":{}},"type":"n8n-nodes-base.form","typeVersion":1,"position":[920,220],"id":"1db70bda-0752-41b7-a930-b90f6e64b3e7","name":"Comedy thanks","webhookId":"b021494a-5a35-4ade-b7c0-ca43a309268d"},{"parameters":{"formFields":{"values":[{"fieldLabel":"What is your favorite drama film?"}]},"options":{}},"type":"n8n-nodes-base.form","typeVersion":1,"position":[700,480],"id":"2bef931a-12d2-4873-ad19-9bdb0b5fe78f","name":"Drama questions","webhookId":"8d801d97-1103-42ee-a0c1-c1f1153727d9"},{"parameters":{"operation":"completion","completionTitle":"Thank you for answering our drama film questions!","options":{}},"type":"n8n-nodes-base.form","typeVersion":1,"position":[920,480],"id":"1fd7fa2f-d1be-430a-bb98-ded89ad8fca0","name":"Drama thanks","webhookId":"46a782bc-21b2-4fcd-9c52-82a7bb20ec2c"},{"parameters":{"operation":"completion","completionTitle":"Thank you for answering our film questions!","options":{}},"type":"n8n-nodes-base.form","typeVersion":1,"position":[700,720],"id":"7b0aeed0-0e13-4fcb-a3e9-c5ff4d6a77ca","name":"Multi-selection thank you","webhookId":"67fcd1f3-e5a6-4bf6-b17e-37b2a87f4c3d"},{"parameters":{"content":"n8n Form nodes using the **Form Ending** page type are only executed if they are the last node in the execution path.\n\nThese endings specific to a genre are only executed if this is the only valid branch.","height":1400,"width":280,"color":5},"type":"n8n-nodes-base.stickyNote","position":[840,-740],"typeVersion":1,"id":"7bda913a-d75c-4b20-8be6-a767c008a8f6","name":"Sticky Note2"},{"parameters":{"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nThe switch includes this **Form Ending** node whenever more than one branch is executed.\n\nBecause this is the [final branch](https://docs.n8n.io/flow-logic/execution-order/) that will be executed, this is the final display whenever multiple branches are executed.","height":400,"width":300,"color":5},"type":"n8n-nodes-base.stickyNote","position":[740,800],"typeVersion":1,"id":"9c3f93a5-5248-4ba1-99b5-9df6d21416c2","name":"Sticky Note3"}],"pinData":{},"connections":{"On form submission":{"main":[[{"node":"Switch","type":"main","index":0}]]},"Switch":{"main":[[{"node":"Documentary questions","type":"main","index":0}],[{"node":"Action questions","type":"main","index":0}],[{"node":"Romance questions","type":"main","index":0}],[{"node":"Comedy questions","type":"main","index":0}],[{"node":"Drama questions","type":"main","index":0}],[{"node":"Multi-selection thank you","type":"main","index":0}]]},"Documentary questions":{"main":[[{"node":"Documentary thanks","type":"main","index":0}]]},"Action questions":{"main":[[{"node":"Action thanks","type":"main","index":0}]]},"Romance questions":{"main":[[{"node":"Romance thanks","type":"main","index":0}]]},"Comedy questions":{"main":[[{"node":"Comedy thanks","type":"main","index":0}]]},"Drama questions":{"main":[[{"node":"Drama thanks","type":"main","index":0}]]}},"active":false,"settings":{"executionOrder":"v1"},"versionId":"b1d38757-38ea-4ee8-a352-990185b17e31","meta":{"instanceId":"1f94e052868811125a74dc63385a38f60e7a14ab6e00497af83e8b68412ec251"},"id":"kl3goXzWrfrWHpYv","tags":[]},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.formTrigger","version":2.2,"parameters":{"formTitle":"Form that may execute multiple branches","formDescription":"This form contains multiple branches. Depending on the user's responses, more than one branch may execute sequentially.","formFields":{"values":[{"fieldLabel":"What are your favorite film genres","fieldType":"dropdown","fieldOptions":{"values":[{"option":"Documentary"},{"option":"Action"},{"option":"Romance"},{"option":"Comedy"},{"option":"Drama"}]},"multiselect":true,"requiredField":true}]},"options":{}},"position":[-300,60]},{"nodeType":"n8n-nodes-base.switch","version":3.2,"parameters":{"rules":{"values":[{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"e3d995dd-d555-4e7a-b744-a3434ed602ad","leftValue":"={{ $json['What are your favorite film genres'] }}","rightValue":"Documentary","operator":{"type":"array","operation":"contains","rightType":"any"}}],"combinator":"and"},"renameOutput":true,"outputKey":"Documentary"},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"ae94981b-1273-4830-ac2a-991bb25f41d8","leftValue":"={{ $json['What are your favorite film genres'] }}","rightValue":"Action","operator":{"type":"array","operation":"contains","rightType":"any"}}],"combinator":"and"},"renameOutput":true,"outputKey":"Action"},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"b9545089-4054-484d-9e6c-98f4872e7e9e","leftValue":"={{ $json['What are your favorite film genres'] }}","rightValue":"Romance","operator":{"type":"array","operation":"contains","rightType":"any"}}],"combinator":"and"},"renameOutput":true,"outputKey":"Romance"},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"71ae5a41-0927-40e3-a583-e569bcebfd1f","leftValue":"={{ $json['What are your favorite film genres'] }}","rightValue":"Comedy","operator":{"type":"array","operation":"contains","rightType":"any"}}],"combinator":"and"},"renameOutput":true,"outputKey":"Comedy"},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"5bfe5981-203a-457a-bfaa-36846d7b79a8","leftValue":"={{ $json['What are your favorite film genres'] }}","rightValue":"Drama","operator":{"type":"array","operation":"contains","rightType":"any"}}],"combinator":"and"},"renameOutput":true,"outputKey":"Drama"},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"adb1bfc5-08fd-4653-abe0-6f12aedda16a","leftValue":"={{ $json['What are your favorite film genres'] }}","rightValue":1,"operator":{"type":"array","operation":"lengthGt","rightType":"number"}}],"combinator":"and"},"renameOutput":true,"outputKey":"Final page"}]},"options":{"allMatchingOutputs":true}},"position":[100,0]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"## Form that may execute multiple branches\nThis form contains branching where more than one path may execute, depending on the user's selections.","width":380},"position":[-160,-260]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"This Switch node determines which branches will execute.\n\nMultiple conditions may be true, resulting in more than one branch being executed. When this happens, n8n executes the first branch completely before returning to execute the next branch.","height":220,"width":260,"color":5},"position":[20,320]},{"nodeType":"n8n-nodes-base.form","version":1,"parameters":{"formFields":{"values":[{"fieldLabel":"What is your favorite documentary?"}]},"options":{}},"position":[700,-500]},{"nodeType":"n8n-nodes-base.form","version":1,"parameters":{"formFields":{"values":[{"fieldLabel":"What is your favorite action film?"}]},"options":{}},"position":[700,-280]},{"nodeType":"n8n-nodes-base.form","version":1,"parameters":{"operation":"completion","completionTitle":"Thank you for answering our documentary questions!","options":{}},"position":[920,-500]},{"nodeType":"n8n-nodes-base.form","version":1,"parameters":{"operation":"completion","completionTitle":"Thank you for answering our action film questions!","options":{}},"position":[920,-280]},{"nodeType":"n8n-nodes-base.form","version":1,"parameters":{"formFields":{"values":[{"fieldLabel":"What is your favorite romance film?"}]},"options":{}},"position":[700,-20]},{"nodeType":"n8n-nodes-base.form","version":1,"parameters":{"operation":"completion","completionTitle":"Thank you for answering our romance film questions!","options":{}},"position":[920,-20]},{"nodeType":"n8n-nodes-base.form","version":1,"parameters":{"formFields":{"values":[{"fieldLabel":"What is your favorite comedy film?"}]},"options":{}},"position":[700,220]},{"nodeType":"n8n-nodes-base.form","version":1,"parameters":{"operation":"completion","completionTitle":"Thank you for answering our comedy film questions!","options":{}},"position":[920,220]},{"nodeType":"n8n-nodes-base.form","version":1,"parameters":{"formFields":{"values":[{"fieldLabel":"What is your favorite drama film?"}]},"options":{}},"position":[700,480]},{"nodeType":"n8n-nodes-base.form","version":1,"parameters":{"operation":"completion","completionTitle":"Thank you for answering our drama film questions!","options":{}},"position":[920,480]},{"nodeType":"n8n-nodes-base.form","version":1,"parameters":{"operation":"completion","completionTitle":"Thank you for answering our film questions!","options":{}},"position":[700,720]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"n8n Form nodes using the **Form Ending** page type are only executed if they are the last node in the execution path.\n\nThese endings specific to a genre are only executed if this is the only valid branch.","height":1400,"width":280,"color":5},"position":[840,-740]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nThe switch includes this **Form Ending** node whenever more than one branch is executed.\n\nBecause this is the [final branch](https://docs.n8n.io/flow-logic/execution-order/) that will be executed, this is the final display whenever multiple branches are executed.","height":400,"width":300,"color":5},"position":[740,800]}],"connections":{"On form submission":{"main":[[{"node":"Switch","type":"main","index":0}]]},"Switch":{"main":[[{"node":"Documentary questions","type":"main","index":0}],[{"node":"Action questions","type":"main","index":0}],[{"node":"Romance questions","type":"main","index":0}],[{"node":"Comedy questions","type":"main","index":0}],[{"node":"Drama questions","type":"main","index":0}],[{"node":"Multi-selection thank you","type":"main","index":0}]]},"Documentary questions":{"main":[[{"node":"Documentary thanks","type":"main","index":0}]]},"Action questions":{"main":[[{"node":"Action thanks","type":"main","index":0}]]},"Romance questions":{"main":[[{"node":"Romance thanks","type":"main","index":0}]]},"Comedy questions":{"main":[[{"node":"Comedy thanks","type":"main","index":0}]]},"Drama questions":{"main":[[{"node":"Drama thanks","type":"main","index":0}]]}},"source":"docs/_workflows/integrations/builtin/core-nodes/n8n-nodes-base.form/multiple-branch-execution.json","description":"Workflow example from docs/_workflows/integrations/builtin/core-nodes/n8n-nodes-base.form/multiple-branch-execution.json"},{"name":"mutually-exclusive-branching","workflow":{"name":"Form with mutually exclusive branching","nodes":[{"parameters":{"formTitle":"Form with mutually exclusive branching","formDescription":"This form contains branches, but only one branch will ever be executed.","formFields":{"values":[{"fieldLabel":"Would you recommend this site?","fieldType":"dropdown","fieldOptions":{"values":[{"option":"Yes"},{"option":"No"}]},"requiredField":true}]},"options":{}},"type":"n8n-nodes-base.formTrigger","typeVersion":2.2,"position":[0,0],"id":"1adce353-28c9-48b8-8326-c1f41d9311fd","name":"On form submission","webhookId":"d869b846-111d-4f53-96e4-2c4a533d9ed6"},{"parameters":{"rules":{"values":[{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"leftValue":"={{ $json['Would you recommend this site?'] }}","rightValue":"Yes","operator":{"type":"string","operation":"equals"}}],"combinator":"and"},"renameOutput":true,"outputKey":"Yes"},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"1dd9b1f5-6f48-4182-ae04-f47c37e3fa98","leftValue":"={{ $json['Would you recommend this site?'] }}","rightValue":"No","operator":{"type":"string","operation":"equals","name":"filter.operator.equals"}}],"combinator":"and"},"renameOutput":true,"outputKey":"No"}]},"options":{}},"type":"n8n-nodes-base.switch","typeVersion":3.2,"position":[220,0],"id":"c0d3e3f1-76c5-4bac-8382-c3d70a57ee8a","name":"Switch"},{"parameters":{"formFields":{"values":[{"fieldLabel":"What can we do to improve?","fieldType":"textarea"}]},"options":{}},"type":"n8n-nodes-base.form","typeVersion":1,"position":[440,200],"id":"615cf27a-658c-43be-aff9-c5fda8a04c51","name":"If not recommended","webhookId":"3579ba77-7ba2-4a97-8a29-a228aac297d5"},{"parameters":{"operation":"completion","completionTitle":"Thank you for your review!","options":{}},"type":"n8n-nodes-base.form","typeVersion":1,"position":[660,-200],"id":"13423b3f-0380-429d-92bf-460cc8b409a3","name":"Thanks for the review","webhookId":"bce3f77b-3005-4989-bd61-b9c5ff19e59e"},{"parameters":{"operation":"completion","completionTitle":"Thank you for your feedback","options":{}},"type":"n8n-nodes-base.form","typeVersion":1,"position":[660,200],"id":"0848a392-41f2-47e8-be17-124fef3d9a63","name":"Thanks for the feedback","webhookId":"8b1a34e2-aa24-4c12-841c-79f6491cb779"},{"parameters":{"content":"## Form with mutually exclusive branching\nThis form contains a branch where only one of the two paths will execute, depending on your selections.","width":380},"type":"n8n-nodes-base.stickyNote","position":[-160,-260],"typeVersion":1,"id":"57c5e1cd-7dda-4bfb-8bfa-8c9f91110249","name":"Sticky Note"},{"parameters":{"content":"This Switch node determines which branch will execute.\n\nThe switch uses data from a dropdown field with single selection enforced, so only one path will execute.","color":5},"type":"n8n-nodes-base.stickyNote","position":[440,0],"typeVersion":1,"id":"9bde0398-7021-4ec6-b950-d836979c973b","name":"Sticky Note1"},{"parameters":{"formFields":{"values":[{"fieldLabel":"Leave your review below","fieldType":"textarea"}]},"options":{}},"type":"n8n-nodes-base.form","typeVersion":1,"position":[440,-200],"id":"9956a49e-964d-4269-910f-28ad8393548e","name":"If recommended","webhookId":"f8298b40-1f61-465b-b228-30a659075f30"}],"pinData":{},"connections":{"On form submission":{"main":[[{"node":"Switch","type":"main","index":0}]]},"Switch":{"main":[[{"node":"If recommended","type":"main","index":0}],[{"node":"If not recommended","type":"main","index":0}]]},"If not recommended":{"main":[[{"node":"Thanks for the feedback","type":"main","index":0}]]},"If recommended":{"main":[[{"node":"Thanks for the review","type":"main","index":0}]]}},"active":false,"settings":{"executionOrder":"v1"},"versionId":"6797e22c-1b2b-421a-b16d-869f636d0790","meta":{"instanceId":"1f94e052868811125a74dc63385a38f60e7a14ab6e00497af83e8b68412ec251"},"id":"DCotkGqkv0VfT6QT","tags":[]},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.formTrigger","version":2.2,"parameters":{"formTitle":"Form with mutually exclusive branching","formDescription":"This form contains branches, but only one branch will ever be executed.","formFields":{"values":[{"fieldLabel":"Would you recommend this site?","fieldType":"dropdown","fieldOptions":{"values":[{"option":"Yes"},{"option":"No"}]},"requiredField":true}]},"options":{}},"position":[0,0]},{"nodeType":"n8n-nodes-base.switch","version":3.2,"parameters":{"rules":{"values":[{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"leftValue":"={{ $json['Would you recommend this site?'] }}","rightValue":"Yes","operator":{"type":"string","operation":"equals"}}],"combinator":"and"},"renameOutput":true,"outputKey":"Yes"},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"1dd9b1f5-6f48-4182-ae04-f47c37e3fa98","leftValue":"={{ $json['Would you recommend this site?'] }}","rightValue":"No","operator":{"type":"string","operation":"equals","name":"filter.operator.equals"}}],"combinator":"and"},"renameOutput":true,"outputKey":"No"}]},"options":{}},"position":[220,0]},{"nodeType":"n8n-nodes-base.form","version":1,"parameters":{"formFields":{"values":[{"fieldLabel":"What can we do to improve?","fieldType":"textarea"}]},"options":{}},"position":[440,200]},{"nodeType":"n8n-nodes-base.form","version":1,"parameters":{"operation":"completion","completionTitle":"Thank you for your review!","options":{}},"position":[660,-200]},{"nodeType":"n8n-nodes-base.form","version":1,"parameters":{"operation":"completion","completionTitle":"Thank you for your feedback","options":{}},"position":[660,200]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"## Form with mutually exclusive branching\nThis form contains a branch where only one of the two paths will execute, depending on your selections.","width":380},"position":[-160,-260]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"This Switch node determines which branch will execute.\n\nThe switch uses data from a dropdown field with single selection enforced, so only one path will execute.","color":5},"position":[440,0]},{"nodeType":"n8n-nodes-base.form","version":1,"parameters":{"formFields":{"values":[{"fieldLabel":"Leave your review below","fieldType":"textarea"}]},"options":{}},"position":[440,-200]}],"connections":{"On form submission":{"main":[[{"node":"Switch","type":"main","index":0}]]},"Switch":{"main":[[{"node":"If recommended","type":"main","index":0}],[{"node":"If not recommended","type":"main","index":0}]]},"If not recommended":{"main":[[{"node":"Thanks for the feedback","type":"main","index":0}]]},"If recommended":{"main":[[{"node":"Thanks for the review","type":"main","index":0}]]}},"source":"docs/_workflows/integrations/builtin/core-nodes/n8n-nodes-base.form/mutually-exclusive-branching.json","description":"Workflow example from docs/_workflows/integrations/builtin/core-nodes/n8n-nodes-base.form/mutually-exclusive-branching.json"},{"name":"rss-feed-example","workflow":{"nodes":[{"parameters":{},"type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[0,0],"id":"e6e1cfe6-eff1-48bd-b21c-6ba83d4244d9","name":"When clicking ‘Execute workflow’"},{"parameters":{"jsCode":"return [\n\t{\n\t\tjson: {\n\t\t\turl: 'https://medium.com/feed/n8n-io',\n\t\t}\n\t},\n\t{\n\t\tjson: {\n\t\t\turl: 'https://dev.to/feed/n8n',\n\t\t}\n\t}\n];"},"type":"n8n-nodes-base.code","typeVersion":2,"position":[220,0],"id":"137f1128-45b6-4bc4-a9fb-8660baa652a9","name":"Code"},{"parameters":{"options":{}},"type":"n8n-nodes-base.splitInBatches","typeVersion":3,"position":[440,0],"id":"3449a953-49c2-4a36-ba3d-cbc0573f3f6c","name":"Loop Over Items"},{"parameters":{"url":"={{ $json.url }}","options":{}},"type":"n8n-nodes-base.rssFeedRead","typeVersion":1.1,"position":[660,100],"id":"cc2e59d7-0a9b-4640-8052-d8f7f8d8c9fe","name":"RSS Read"}],"connections":{"When clicking ‘Execute workflow’":{"main":[[{"node":"Code","type":"main","index":0}]]},"Code":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Loop Over Items":{"main":[[],[{"node":"RSS Read","type":"main","index":0}]]},"RSS Read":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]}},"pinData":{},"meta":{"instanceId":"cb484ba7b742928a2048bf8829668bed5b5ad9787579adea888f05980292a4a7"}},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.manualTrigger","version":1,"parameters":{},"position":[0,0]},{"nodeType":"n8n-nodes-base.code","version":2,"parameters":{"jsCode":"return [\n\t{\n\t\tjson: {\n\t\t\turl: 'https://medium.com/feed/n8n-io',\n\t\t}\n\t},\n\t{\n\t\tjson: {\n\t\t\turl: 'https://dev.to/feed/n8n',\n\t\t}\n\t}\n];"},"position":[220,0]},{"nodeType":"n8n-nodes-base.splitInBatches","version":3,"parameters":{"options":{}},"position":[440,0]},{"nodeType":"n8n-nodes-base.rssFeedRead","version":1.1,"parameters":{"url":"={{ $json.url }}","options":{}},"position":[660,100]}],"connections":{"When clicking ‘Execute workflow’":{"main":[[{"node":"Code","type":"main","index":0}]]},"Code":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Loop Over Items":{"main":[[],[{"node":"RSS Read","type":"main","index":0}]]},"RSS Read":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]}},"source":"docs/_workflows/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/rss-feed-example.json","description":"Workflow example from docs/_workflows/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/rss-feed-example.json"},{"name":"tutorial","workflow":{"name":"Tutorial-workflow","nodes":[{"parameters":{"rule":{"interval":[{"field":"weeks","triggerAtDay":[1],"triggerAtHour":9}]}},"type":"n8n-nodes-base.scheduleTrigger","typeVersion":1.2,"position":[-680,100],"id":"ef14445c-2f5f-4c78-96c8-66732feb7a8f","name":"Schedule Trigger"},{"parameters":{"resource":"donkiSolarFlare","additionalFields":{"startDate":"={{ $today.minus(7, 'days') }}"}},"type":"n8n-nodes-base.nasa","typeVersion":1,"position":[-460,100],"id":"52c58b93-c780-4aff-a216-d67b28195a45","name":"NASA","credentials":{"nasaApi":{"id":"sSVnxV9AcBmBOYn8","name":"NASA account"}}},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"2f469c8e-12b3-4ee5-95fc-ff81508d0b43","leftValue":"={{ $json.classType }}","rightValue":"C","operator":{"type":"string","operation":"contains"}}],"combinator":"and"},"options":{}},"type":"n8n-nodes-base.if","typeVersion":2.2,"position":[-240,100],"id":"b54e3289-9ebb-451f-8bac-87edeeeced13","name":"If"},{"parameters":{"resource":"request","operation":"send","binId":"1741914338605-0907339996192","binContent":"=There was a solar flare of class {{$json[\"classType\"]}}","requestOptions":{}},"type":"n8n-nodes-base.postBin","typeVersion":1,"position":[-20,0],"id":"a8b602b6-17b1-4274-8d33-73344b6bb8fb","name":"PostBin(true)"},{"parameters":{"resource":"request","operation":"send","binId":"1741914338605-0907339996192","binContent":"=There was a solar flare of class {{$json[\"classType\"]}}","requestOptions":{}},"type":"n8n-nodes-base.postBin","typeVersion":1,"position":[-20,200],"id":"09c2c7a4-c229-430d-a5b0-8d7491515d9f","name":"PostBin(false)"},{"parameters":{"content":"## Setup required\n\nYou need to create a NASA account and create credentials, and create a bin with Postbin and enter the ID - see [the documentation](https://docs.n8n.io/try-it-out/longer-introduction/)","height":120,"width":600},"type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[-720,-60],"id":"08e0b8f9-c90e-4c9c-a663-01aca805b9be","name":"Sticky Note"}],"pinData":{},"connections":{"Schedule Trigger":{"main":[[{"node":"NASA","type":"main","index":0}]]},"NASA":{"main":[[{"node":"If","type":"main","index":0}]]},"If":{"main":[[{"node":"PostBin(true)","type":"main","index":0}],[{"node":"PostBin(false)","type":"main","index":0}]]}},"active":false,"settings":{"executionOrder":"v1"},"versionId":"37de4877-e4f6-4b9a-b6f0-9b7e7aea0163","meta":{"templateCredsSetupCompleted":true,"instanceId":"cb484ba7b742928a2048bf8829668bed5b5ad9787579adea888f05980292a4a7"},"id":"DPzMzTIyDrYohiw4","tags":[{"createdAt":"2021-06-25T07:47:07.640Z","updatedAt":"2021-06-25T07:47:07.640Z","id":"1","name":"docs"}]},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.scheduleTrigger","version":1.2,"parameters":{"rule":{"interval":[{"field":"weeks","triggerAtDay":[1],"triggerAtHour":9}]}},"position":[-680,100]},{"nodeType":"n8n-nodes-base.nasa","version":1,"parameters":{"resource":"donkiSolarFlare","additionalFields":{"startDate":"={{ $today.minus(7, 'days') }}"}},"position":[-460,100]},{"nodeType":"n8n-nodes-base.if","version":2.2,"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"2f469c8e-12b3-4ee5-95fc-ff81508d0b43","leftValue":"={{ $json.classType }}","rightValue":"C","operator":{"type":"string","operation":"contains"}}],"combinator":"and"},"options":{}},"position":[-240,100]},{"nodeType":"n8n-nodes-base.postBin","version":1,"parameters":{"resource":"request","operation":"send","binId":"1741914338605-0907339996192","binContent":"=There was a solar flare of class {{$json[\"classType\"]}}","requestOptions":{}},"position":[-20,0]},{"nodeType":"n8n-nodes-base.postBin","version":1,"parameters":{"resource":"request","operation":"send","binId":"1741914338605-0907339996192","binContent":"=There was a solar flare of class {{$json[\"classType\"]}}","requestOptions":{}},"position":[-20,200]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"## Setup required\n\nYou need to create a NASA account and create credentials, and create a bin with Postbin and enter the ID - see [the documentation](https://docs.n8n.io/try-it-out/longer-introduction/)","height":120,"width":600},"position":[-720,-60]}],"connections":{"Schedule Trigger":{"main":[[{"node":"NASA","type":"main","index":0}]]},"NASA":{"main":[[{"node":"If","type":"main","index":0}]]},"If":{"main":[[{"node":"PostBin(true)","type":"main","index":0}],[{"node":"PostBin(false)","type":"main","index":0}]]}},"source":"docs/_workflows/try-it-out/quickstart/tutorial.json","description":"Workflow example from docs/_workflows/try-it-out/quickstart/tutorial.json"},{"name":"very-quick-quickstart-workflow","workflow":{"nodes":[{"parameters":{"operation":"getAllPeople","returnAll":true},"id":"ed1fd9cd-cc4f-4e0e-ba73-9f842db382c3","name":"Customer Datastore","type":"n8n-nodes-base.n8nTrainingCustomerDatastore","position":[540,280],"typeVersion":1},{"parameters":{"content":"**Get fake sample data**","height":300,"width":220},"id":"5ddf393f-62b8-4240-adf8-f9a8f539df4b","name":"Note1","type":"n8n-nodes-base.stickyNote","position":[480,180],"typeVersion":1},{"parameters":{"content":"**Extract data and prepare it for use in the next node**","height":300,"width":220},"id":"6ad194ea-9821-40eb-ae2c-f50cc030300b","name":"Note2","type":"n8n-nodes-base.stickyNote","position":[760,180],"typeVersion":1},{"parameters":{},"id":"5af4b83b-31b6-4c29-aa55-3449f3851e2a","name":"When clicking \"Test Workflow\"","type":"n8n-nodes-base.manualTrigger","position":[300,280],"typeVersion":1},{"parameters":{"assignments":{"assignments":[{"id":"df041e3c-fc09-4ba2-8e6b-37f2c6a02526","name":"customer_id","type":"string","value":"={{ $json.id }}"},{"id":"bf288953-4fef-4f55-a45f-c223714919c0","name":"customer_name","type":"string","value":"={{ $json.name }}"},{"id":"1cff0b21-6740-4697-9d2c-9bcb045af0be","name":"customer_description","type":"string","value":"={{ $json.notes }}"}]},"options":{}},"id":"5dcd5776-5137-4f97-8b76-9f38e1d9ff9e","name":"Edit Fields1","type":"n8n-nodes-base.set","position":[820,280],"typeVersion":3.3},{"parameters":{"customerId":"={{ $json.customer_id }}","message":"=Hi {{ $json.customer_name }}. Your description is: {{  $json.customer_description }}"},"type":"n8n-nodes-base.n8nTrainingCustomerMessenger","typeVersion":1,"position":[1040,280],"id":"a726dcfd-f491-440f-ad64-6ba17472352f","name":"Customer Messenger (n8n training)"}],"connections":{"Customer Datastore":{"main":[[{"node":"Edit Fields1","type":"main","index":0}]]},"When clicking \"Test Workflow\"":{"main":[[{"node":"Customer Datastore","type":"main","index":0}]]},"Edit Fields1":{"main":[[{"node":"Customer Messenger (n8n training)","type":"main","index":0}]]}},"pinData":{},"meta":{"instanceId":"cb484ba7b742928a2048bf8829668bed5b5ad9787579adea888f05980292a4a7"}},"nodeConfigurations":[{"nodeType":"n8n-nodes-base.n8nTrainingCustomerDatastore","version":1,"parameters":{"operation":"getAllPeople","returnAll":true},"position":[540,280]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Get fake sample data**","height":300,"width":220},"position":[480,180]},{"nodeType":"n8n-nodes-base.stickyNote","version":1,"parameters":{"content":"**Extract data and prepare it for use in the next node**","height":300,"width":220},"position":[760,180]},{"nodeType":"n8n-nodes-base.manualTrigger","version":1,"parameters":{},"position":[300,280]},{"nodeType":"n8n-nodes-base.set","version":3.3,"parameters":{"assignments":{"assignments":[{"id":"df041e3c-fc09-4ba2-8e6b-37f2c6a02526","name":"customer_id","type":"string","value":"={{ $json.id }}"},{"id":"bf288953-4fef-4f55-a45f-c223714919c0","name":"customer_name","type":"string","value":"={{ $json.name }}"},{"id":"1cff0b21-6740-4697-9d2c-9bcb045af0be","name":"customer_description","type":"string","value":"={{ $json.notes }}"}]},"options":{}},"position":[820,280]},{"nodeType":"n8n-nodes-base.n8nTrainingCustomerMessenger","version":1,"parameters":{"customerId":"={{ $json.customer_id }}","message":"=Hi {{ $json.customer_name }}. Your description is: {{  $json.customer_description }}"},"position":[1040,280]}],"connections":{"Customer Datastore":{"main":[[{"node":"Edit Fields1","type":"main","index":0}]]},"When clicking \"Test Workflow\"":{"main":[[{"node":"Customer Datastore","type":"main","index":0}]]},"Edit Fields1":{"main":[[{"node":"Customer Messenger (n8n training)","type":"main","index":0}]]}},"source":"docs/_workflows/try-it-out/quickstart/very-quick-quickstart-workflow.json","description":"Workflow example from docs/_workflows/try-it-out/quickstart/very-quick-quickstart-workflow.json"}]

troubleshooting_info:
  [{"issue":"Generate audit","solution":"This operation has no parameters. Configure it with these options:"},{"issue":"Create credential","solution":"Configure this operation with these parameters:"},{"issue":"Delete credential","solution":"Configure this operation with this parameter:"},{"issue":"Get credential schema","solution":"Configure this operation with this parameter:"},{"issue":"Get execution","solution":"Configure this operation with this parameter:"},{"issue":"Get execution option","solution":"You can further configure this operation with this **Option**:"},{"issue":"Get many executions","solution":"Configure this operation with these parameters:"},{"issue":"Get many executions filters","solution":"You can further configure this operation with these **Filters**:"},{"issue":"Get many execution options","solution":"You can further configure this operation with this **Option**:"},{"issue":"Delete execution","solution":"Configure this operation with this parameter:"},{"issue":"Activate, deactivate, delete, and get workflow","solution":"The **Activate**, **Deactivate**, **Delete**, and **Get** workflow operations all include the same parameter for you to select the **Workflow** you want to perform the operation on. Options include:"},{"issue":"Create workflow","solution":"Configure this operation with this parameter:"},{"issue":"Get many workflows","solution":"Configure this operation with these parameters:"},{"issue":"Get many workflows filters","solution":"You can further configure this operation with these **Filters**:"},{"issue":"Update workflow","solution":"Configure this operation with these parameters:"}]

node_connections:
  [{"fromNode":"Chat Trigger","toNode":"Check user input for \"chain\" or \"agent\"","connectionType":"main"},{"fromNode":"OpenAI Chat Model","toNode":"AI Agent","connectionType":"ai_languageModel"},{"fromNode":"OpenAI Chat Model1","toNode":"Basic LLM Chain","connectionType":"ai_languageModel"},{"fromNode":"Simple Memory","toNode":"AI Agent","connectionType":"ai_memory"},{"fromNode":"Wikipedia","toNode":"AI Agent","connectionType":"ai_tool"},{"fromNode":"Check user input for \"chain\" or \"agent\"","toNode":"AI Agent","connectionType":"main"},{"fromNode":"Check user input for \"chain\" or \"agent\"","toNode":"Basic LLM Chain","connectionType":"main"},{"fromNode":"Not sure?","toNode":"AI Agent","connectionType":"ai_tool"},{"fromNode":"Execute Workflow Trigger","toNode":"Check if user has provided email","connectionType":"main"},{"fromNode":"Chat Trigger","toNode":"AI Agent","connectionType":"main"},{"fromNode":"Check if user has provided email","toNode":"Message Slack for help","connectionType":"main"},{"fromNode":"Check if user has provided email","toNode":"Prompt the user to provide an email","connectionType":"main"},{"fromNode":"Message Slack for help","toNode":"Confirm that we've messaged a human","connectionType":"main"},{"fromNode":"GPT4","toNode":"AI Agent","connectionType":"ai_languageModel"},{"fromNode":"GPT4 Model","toNode":"AI Agent","connectionType":"ai_languageModel"},{"fromNode":"Get column names","toNode":"Prepare output","connectionType":"main"},{"fromNode":"Get customer tool","toNode":"AI Agent","connectionType":"ai_tool"},{"fromNode":"List columns tool","toNode":"AI Agent","connectionType":"ai_tool"},{"fromNode":"Set Google Sheet URL","toNode":"Get Google sheet contents","connectionType":"main"},{"fromNode":"Get column values tool","toNode":"AI Agent","connectionType":"ai_tool"},{"fromNode":"Execute Workflow Trigger","toNode":"Set Google Sheet URL","connectionType":"main"},{"fromNode":"Get Google sheet contents","toNode":"Check operations","connectionType":"main"},{"fromNode":"Check operations","toNode":"Get column names","connectionType":"main"},{"fromNode":"Check operations","toNode":"Prepare column data","connectionType":"main"},{"fromNode":"Check operations","toNode":"Filter out other rows","connectionType":"main"},{"fromNode":"Prepare column data","toNode":"Prepare output","connectionType":"main"},{"fromNode":"Filter out other rows","toNode":"Prepare output","connectionType":"main"},{"fromNode":"Execute Workflow Trigger","toNode":"Work out activity type and number of people","connectionType":"main"},{"fromNode":"Activity tool","toNode":"AI Agent","connectionType":"ai_tool"},{"fromNode":"Auto-fixing Output Parser","toNode":"Work out activity type and number of people","connectionType":"ai_outputParser"},{"fromNode":"GPT4 Model 1","toNode":"AI Agent","connectionType":"ai_languageModel"},{"fromNode":"GPT4 Model 2","toNode":"Work out activity type and number of people","connectionType":"ai_languageModel"},{"fromNode":"GPT4 Model 3","toNode":"Auto-fixing Output Parser","connectionType":"ai_languageModel"},{"fromNode":"Structure as JSON","toNode":"Auto-fixing Output Parser","connectionType":"ai_outputParser"},{"fromNode":"Call the API","toNode":"Set 'response' value","connectionType":"main"},{"fromNode":"Work out activity type and number of people","toNode":"Call the API","connectionType":"main"},{"fromNode":"Embeddings OpenAI","toNode":"Pinecone Vector Store","connectionType":"ai_embedding"},{"fromNode":"Default Data Loader","toNode":"Pinecone Vector Store","connectionType":"ai_document"},{"fromNode":"Recursive Character Text Splitter","toNode":"Default Data Loader","connectionType":"ai_textSplitter"},{"fromNode":"Loop Over Items","toNode":"Extract main content","connectionType":"main"},{"fromNode":"Loop Over Items","toNode":"Get pages listed in the sitemap","connectionType":"main"},{"fromNode":"Get sitemap","toNode":"Turn XML sitemap into JSON","connectionType":"main"},{"fromNode":"Turn XML sitemap into JSON","toNode":"Turn the URL array into multiple items","connectionType":"main"},{"fromNode":"Turn the URL array into multiple items","toNode":"Loop Over Items","connectionType":"main"},{"fromNode":"Wait 5 seconds","toNode":"Loop Over Items","connectionType":"main"},{"fromNode":"Get pages listed in the sitemap","toNode":"Wait 5 seconds","connectionType":"main"},{"fromNode":"Chat Trigger","toNode":"Question and Answer Chain","connectionType":"main"},{"fromNode":"OpenAI Model","toNode":"Question and Answer Chain","connectionType":"ai_languageModel"},{"fromNode":"Vector Store Retriever","toNode":"Question and Answer Chain","connectionType":"ai_retriever"},{"fromNode":"Embeddings OpenAI2","toNode":"Pinecone Vector Store2","connectionType":"ai_embedding"},{"fromNode":"Aggregate","toNode":"Pinecone Vector Store","connectionType":"main"},{"fromNode":"Pinecone Vector Store2","toNode":"Vector Store Retriever","connectionType":"ai_vectorStore"},{"fromNode":"Start the workflow by clicking \"Execute workflow\"","toNode":"Get sitemap","connectionType":"main"},{"fromNode":"Extract main content","toNode":"Aggregate","connectionType":"main"},{"fromNode":"When chat message received","toNode":"AI Agent","connectionType":"main"},{"fromNode":"When clicking \"Execute Workflow\"","toNode":"Code","connectionType":"main"},{"fromNode":"Code","toNode":"Join items","connectionType":"main"},{"fromNode":"When clicking \"Execute Workflow\"","toNode":"Mock Slack","connectionType":"main"},{"fromNode":"Mock Slack","toNode":"Mock Notion","connectionType":"main"},{"fromNode":"Mock Notion","toNode":"Code","connectionType":"main"},{"fromNode":"When clicking \"Execute Workflow\"","toNode":"Mock data","connectionType":"main"},{"fromNode":"Mock data","toNode":"Code","connectionType":"main"},{"fromNode":"When clicking \"Execute Workflow\"","toNode":"Mock Ideas","connectionType":"main"},{"fromNode":"Mock Ideas","toNode":"Summarize","connectionType":"main"},{"fromNode":"When clicking ‘Execute workflow’","toNode":"Hacker News","connectionType":"main"},{"fromNode":"When clicking ‘Execute workflow’","toNode":"HTTP Request1","connectionType":"main"},{"fromNode":"HTTP Request1","toNode":"Airtable1","connectionType":"main"},{"fromNode":"HTTP Request1","toNode":"If1","connectionType":"main"},{"fromNode":"If1","toNode":"Airtable1","connectionType":"main"},{"fromNode":"If1","toNode":"Edit Fields1","connectionType":"main"},{"fromNode":"Edit Fields1","toNode":"Airtable1","connectionType":"main"},{"fromNode":"If1","toNode":"Code1","connectionType":"main"},{"fromNode":"Code1","toNode":"Discord1","connectionType":"main"},{"fromNode":"HTTP Request","toNode":"If","connectionType":"main"},{"fromNode":"If","toNode":"Edit Fields","connectionType":"main"},{"fromNode":"If","toNode":"Code","connectionType":"main"},{"fromNode":"Edit Fields","toNode":"Airtable","connectionType":"main"},{"fromNode":"Code","toNode":"Discord","connectionType":"main"},{"fromNode":"Schedule Trigger","toNode":"HTTP Request","connectionType":"main"},{"fromNode":"n8n Form Trigger","toNode":"NASA","connectionType":"main"},{"fromNode":"NASA","toNode":"Respond to Webhook","connectionType":"main"},{"fromNode":"When clicking ‘Execute workflow’","toNode":"Google Drive","connectionType":"main"},{"fromNode":"Google Drive","toNode":"Sort","connectionType":"main"},{"fromNode":"Sort","toNode":"Limit","connectionType":"main"},{"fromNode":"Limit","toNode":"Google Drive1","connectionType":"main"},{"fromNode":"Webhook","toNode":"Extract from File","connectionType":"main"},{"fromNode":"On form submission","toNode":"Switch","connectionType":"main"},{"fromNode":"Switch","toNode":"Documentary questions","connectionType":"main"},{"fromNode":"Switch","toNode":"Action questions","connectionType":"main"},{"fromNode":"Switch","toNode":"Romance questions","connectionType":"main"},{"fromNode":"Switch","toNode":"Comedy questions","connectionType":"main"},{"fromNode":"Switch","toNode":"Drama questions","connectionType":"main"},{"fromNode":"Switch","toNode":"Multi-selection thank you","connectionType":"main"},{"fromNode":"Documentary questions","toNode":"Documentary thanks","connectionType":"main"},{"fromNode":"Action questions","toNode":"Action thanks","connectionType":"main"},{"fromNode":"Romance questions","toNode":"Romance thanks","connectionType":"main"},{"fromNode":"Comedy questions","toNode":"Comedy thanks","connectionType":"main"},{"fromNode":"Drama questions","toNode":"Drama thanks","connectionType":"main"},{"fromNode":"Switch","toNode":"If recommended","connectionType":"main"},{"fromNode":"Switch","toNode":"If not recommended","connectionType":"main"},{"fromNode":"If not recommended","toNode":"Thanks for the feedback","connectionType":"main"},{"fromNode":"If recommended","toNode":"Thanks for the review","connectionType":"main"},{"fromNode":"When clicking ‘Execute workflow’","toNode":"Code","connectionType":"main"},{"fromNode":"Code","toNode":"Loop Over Items","connectionType":"main"},{"fromNode":"Loop Over Items","toNode":"RSS Read","connectionType":"main"},{"fromNode":"RSS Read","toNode":"Loop Over Items","connectionType":"main"},{"fromNode":"Schedule Trigger","toNode":"NASA","connectionType":"main"},{"fromNode":"NASA","toNode":"If","connectionType":"main"},{"fromNode":"If","toNode":"PostBin(true)","connectionType":"main"},{"fromNode":"If","toNode":"PostBin(false)","connectionType":"main"},{"fromNode":"Customer Datastore","toNode":"Edit Fields1","connectionType":"main"},{"fromNode":"When clicking \"Test Workflow\"","toNode":"Customer Datastore","connectionType":"main"},{"fromNode":"Edit Fields1","toNode":"Customer Messenger (n8n training)","connectionType":"main"}]

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

properties_schema:
  [{"displayName":"Resource","name":"resource","type":"options","default":"workflow","options":[{"name":"Audit","value":"audit"},{"name":"Credential","value":"credential"},{"name":"Execution","value":"execution"},{"name":"Workflow","value":"workflow"}]},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...AuditDescription_1.auditOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...AuditDescription_1.auditFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...CredentialDescription_1.credentialOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...CredentialDescription_1.credentialFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...ExecutionDescription_1.executionOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...ExecutionDescription_1.executionFields"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...WorkflowDescription_1.workflowOperations"},{"name":"dynamic_property","type":"unknown","displayName":"Dynamic Property","_source":"...WorkflowDescription_1.workflowFields"}]


