@n8n-as-code/skills 1.1.2-next.2 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-03-13T14:23:08.293Z",
2
+ "generatedAt": "2026-03-13T14:30:54.720Z",
3
3
  "version": "1.0.0",
4
4
  "sourceUrl": "https://docs.n8n.io/llms.txt",
5
5
  "totalPages": 1251,
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "withNodeNames": 470,
23
23
  "withUseCases": 38,
24
- "withCodeExamples": 175
24
+ "withCodeExamples": 174
25
25
  },
26
26
  "categories": {
27
27
  "other": {
@@ -775,6 +775,7 @@
775
775
  "page-0212",
776
776
  "page-0213",
777
777
  "page-0214",
778
+ "page-0215",
778
779
  "page-0216",
779
780
  "page-0217",
780
781
  "page-0218",
@@ -783,8 +784,7 @@
783
784
  "page-0221",
784
785
  "page-0222",
785
786
  "page-0223",
786
- "page-0224",
787
- "page-0225"
787
+ "page-0224"
788
788
  ]
789
789
  },
790
790
  "integrations": {
@@ -10218,7 +10218,7 @@
10218
10218
  "nodeName": null,
10219
10219
  "nodeType": null,
10220
10220
  "content": {
10221
- "markdown": "# Expression Reference\n\nThese are some commonly used expressions. A more exhaustive list appears below.\n\n| Category | Expression | Description |\n| ------------------------------ | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Access current input item data | `$json` | JSON data of the current item |\n| | `$json.fieldName` | Field of the current item |\n| | `$binary` | Binary data of current item |\n| Access previous node data | `$(\"NodeName\").first()` | First item in a node |\n| | `$(\"NodeName\").item` | Linked item of a node. See [Item linking](../data-mapping/data-item-linking/) for more information. |\n| | `$(\"NodeName\").all()` | All items of a node |\n| | `$(\"NodeName\").last()` | Last item of a node |\n| Date/Time | `$now` | Current date and time |\n| | `$today` | Today's date |\n| | `$now.toFormat(\"yyyy-MM-dd\")` | Format current date as a string |\n| Conditionals | `$if(condition, \"true\", \"false\")` | Helper function that returns a value when a condition is true or false |\n| | `condition ? true : false` | Ternary operator: returns one value if a condition is true, another if false |\n| | `$ifEmpty(value, defaultValue)` | Helper function takes two parameters and tests the first to check if it's empty, then returns either the parameter (if not empty) or the second parameter (if the first is empty). The first parameter is empty if it's `undefined`, `null`, an empty string `''`, an array where `value.length` returns `false` , or an object where `Object.keys(value).length` returns `false` |\n| String Methods | `text.toUpperCase()` | Convert to uppercase |\n| | `text.toLowerCase()` | Convert to lowercase |\n| | `text.includes(\"foo\")` | Check if text contains search term |\n| | `text.extractEmail()` | Extract email from text |\n| Array Methods | `array.length` | Get array length |\n| | `array.join(\", \")` | Join array elements using a comma a separator |\n| | `array.filter(x => x <= 20)` | Filter items of array based on the filtering condition |\n| | `array.map(x => x.id)` | Transform items of an array |\n\nBrowse the tables below to find methods by the data type on which they act. Click a method name to read detailed documentation for it.\n\n## Array\n\n- [*`Array`*.**`append(elem1, elem2?, ..., elemN?)`**](array/#arrayappend)\n\n Adds new elements to the end of the array. Similar to `push()`, but returns the modified array. Consider using spread syntax instead (see examples).\n\n- [*`Array`*.**`average()`**](array/#arrayaverage)\n\n Returns the average of the numbers in the array. Throws an error if there are any non-numbers.\n\n- [*`Array`*.**`chunk(length)`**](array/#arraychunk)\n\n Splits the array into an array of sub-arrays, each with the given length\n\n- [*`Array`*.**`compact()`**](array/#arraycompact)\n\n Removes any empty values from the array. `null`, `\"\"` and `undefined` count as empty.\n\n- [*`Array`*.**`concat(array2, array3?, ... arrayN?)`**](array/#arrayconcat)\n\n Joins one or more arrays onto the end of the base array\n\n- [*`Array`*.**`difference(otherArray)`**](array/#arraydifference)\n\n Compares two arrays. Returns all elements in the base array that aren't present in `otherArray`.\n\n- [*`Array`*.**`filter(function(element, index?, array?), thisValue?)`**](array/#arrayfilter)\n\n Returns an array with only the elements satisfying a condition. The condition is a function that returns `true` or `false`.\n\n- [*`Array`*.**`find(function(element, index?, array?), thisValue?)`**](array/#arrayfind)\n\n Returns the first element from the array that satisfies the provided condition. The condition is a function that returns `true` or `false`. Returns `undefined` if no matches are found.\n\nIf you need all matching elements, use `filter()`.\n\n- [*`Array`*.**`first()`**](array/#arrayfirst)\n\n Returns the first element of the array\n\n- [*`Array`*.**`includes(element, start?)`**](array/#arrayincludes)\n\n Returns `true` if the array contains the specified element\n\n- [*`Array`*.**`indexOf(element, start?)`**](array/#arrayindexof)\n\n Returns the position of the first matching element in the array, or -1 if the element isn’t found. Positions start at 0.\n\n- [*`Array`*.**`intersection(otherArray)`**](array/#arrayintersection)\n\n Compares two arrays. Returns all elements in the base array that are also present in the other array.\n\n- [*`Array`*.**`isEmpty()`**](array/#arrayisempty)\n\n Returns `true` if the array has no elements or is `null`\n\n- [*`Array`*.**`isNotEmpty()`**](array/#arrayisnotempty)\n\n Returns `true` if the array has at least one element\n\n- [*`Array`*.**`join(separator?)`**](array/#arrayjoin)\n\n Merges all elements of the array into a single string, with an optional separator between each element.\n\nThe opposite of `split()`.\n\n- [*`Array`*.**`last()`**](array/#arraylast)\n\n Returns the last element of the array\n\n- [*`Array`*.**`length`**](array/#arraylength)\n\n The number of elements in the array\n\n- [*`Array`*.**`map(function(element, index?, array?), thisValue?)`**](array/#arraymap)\n\n Creates a new array by applying a function to each element of the original array\n\n- [*`Array`*.**`max()`**](array/#arraymax)\n\n Returns the largest number in the array. Throws an error if there are any non-numbers.\n\n- [*`Array`*.**`min()`**](array/#arraymin)\n\n Returns the smallest number in the array. Throws an error if there are any non-numbers.\n\n- [*`Array`*.**`pluck(fieldName1?, fieldName2?, …)`**](array/#arraypluck)\n\n Returns an array containing the values of the given field(s) in each Object of the array. Ignores any array elements that aren’t Objects or don’t have a key matching the field name(s) provided.\n\n- [*`Array`*.**`randomItem()`**](array/#arrayrandomitem)\n\n Returns a randomly-chosen element from the array\n\n- [*`Array`*.**`reduce(function(prevResult, currentElem, currentIndex?, array?), initResult)`**](array/#arrayreduce)\n\n Reduces an array to a single value by applying a function to each element. The function combines the current element with the result of reducing the previous elements, producing a new result.\n\n- [*`Array`*.**`removeDuplicates(keys?)`**](array/#arrayremoveduplicates)\n\n Removes any re-occurring elements from the array\n\n- [*`Array`*.**`renameKeys(from, to)`**](array/#arrayrenamekeys)\n\n Changes all matching keys (field names) of any Objects in the array. Rename more than one key by adding extra arguments, i.e. `from1, to1, from2, to2, ...`.\n\n- [*`Array`*.**`reverse()`**](array/#arrayreverse)\n\n Reverses the order of the elements in the array\n\n- [*`Array`*.**`slice(start, end)`**](array/#arrayslice)\n\n Returns a portion of the array, from the `start` index up to (but not including) the `end` index. Indexes start at 0.\n\n- [*`Array`*.**`smartJoin(keyField, nameField)`**](array/#arraysmartjoin)\n\n Creates a single Object from an array of Objects. Each Object in the array provides one field for the returned Object. Each Object in the array must contain a field with the key name and a field with the value.\n\n- [*`Array`*.**`sort(compareFunction(a, b)?)`**](array/#arraysort)\n\n Reorders the elements of the array. For sorting strings alphabetically, no parameter is required. For sorting numbers or Objects, see examples.\n\n- [*`Array`*.**`sum()`**](array/#arraysum)\n\n Returns the total of all the numbers in the array. Throws an error if there are any non-numbers.\n\n- [*`Array`*.**`toJsonString()`**](array/#arraytojsonstring)\n\n Converts the array to a JSON string. The same as JavaScript’s `JSON.stringify()`.\n\n- [*`Array`*.**`toSpliced(start, deleteCount, elem1, ....., elemN)`**](array/#arraytospliced)\n\n Adds and/or removes array elements at a given position.\n\nSee also `slice()` and `append()`.\n\n- [*`Array`*.**`toString()`**](array/#arraytostring)\n\n Converts the array to a string, with values separated by commas. To use a different separator, use `join()` instead.\n\n- [*`Array`*.**`union(otherArray)`**](array/#arrayunion)\n\n Concatenates two arrays and then removes any duplicates\n\n- [*`Array`*.**`unique()`**](array/#arrayunique)\n\n Removes any duplicate elements from the array\n\n## BinaryFile\n\n- [`binaryFile`.**`directory`**](binaryfile/#binaryfiledirectory)\n\n The path to the directory that the file is stored in. Useful for distinguishing between files with the same name in different directories. Not set if n8n is configured to store files in its database.\n\n- [`binaryFile`.**`fileExtension`**](binaryfile/#binaryfilefileextension)\n\n The suffix attached to the filename (e.g. `txt`)\n\n- [`binaryFile`.**`fileName`**](binaryfile/#binaryfilefilename)\n\n The name of the file, including extension\n\n- [`binaryFile`.**`fileSize`**](binaryfile/#binaryfilefilesize)\n\n A string representing the size of the file\n\n- [`binaryFile`.**`fileType`**](binaryfile/#binaryfilefiletype)\n\n A string representing the type of the file, e.g. `image`. Corresponds to the first part of the MIME type.\n\n- [`binaryFile`.**`id`**](binaryfile/#binaryfileid)\n\n The unique ID of the file. Used to identify the file when it is stored on disk or in a storage service such as S3.\n\n- [`binaryFile`.**`mimeType`**](binaryfile/#binaryfilemimetype)\n\n A string representing the format of the file’s contents, e.g. `image/jpeg`\n\n## Boolean\n\n- [*`Boolean`*.**`isEmpty()`**](boolean/#booleanisempty)\n\n Returns `false` for all booleans. Returns `true` for `null`.\n\n- [*`Boolean`*.**`toNumber()`**](boolean/#booleantonumber)\n\n Converts `true` to 1 and `false` to 0\n\n- [*`Boolean`*.**`toString()`**](boolean/#booleantostring)\n\n Converts `true` to the string ‘true’ and `false` to the string ‘false’\n\n## CustomData\n\n- [`$execution.customData`.**`get(key)`**](customdata/#executioncustomdataget)\n\n Returns the custom execution data stored under the given key. [More info](/workflows/executions/custom-executions-data/)\n\n- [`$execution.customData`.**`getAll()`**](customdata/#executioncustomdatagetall)\n\n Returns all the key-value pairs of custom data that have been set in the current execution. [More info](/workflows/executions/custom-executions-data/)\n\n- [`$execution.customData`.**`set(key, value)`**](customdata/#executioncustomdataset)\n\n Stores custom execution data under the key specified. Use this to easily filter executions by this data. [More info](/workflows/executions/custom-executions-data/)\n\n- [`$execution.customData`.**`setAll(obj)`**](customdata/#executioncustomdatasetall)\n\n Sets multiple key-value pairs of custom data for the execution. Use this to easily filter executions by this data. [More info](/workflows/executions/custom-executions-data/)\n\n## Date\n\n- [*`Date`*.**`toDateTime()`**](date/#datetodatetime)\n\n Converts a JavaScript Date to a Luxon DateTime. The DateTime contains the same information, but is easier to manipulate.\n\n## DateTime\n\n- [*`DateTime`*.**`day`**](datetime/#datetimeday)\n\n The day of the month (1-31)\n\n- [*`DateTime`*.**`diffTo(otherDateTime, unit)`**](datetime/#datetimediffto)\n\n Returns the difference between two DateTimes, in the given unit(s)\n\n- [*`DateTime`*.**`diffToNow(unit)`**](datetime/#datetimedifftonow)\n\n Returns the difference between the current moment and the DateTime, in the given unit(s). For a textual representation, use `toRelative()` instead.\n\n- [*`DateTime`*.**`endOf(unit, opts)`**](datetime/#datetimeendof)\n\n Rounds the DateTime up to the end of one of its units, e.g. the end of the month\n\n- [*`DateTime`*.**`equals(other)`**](datetime/#datetimeequals)\n\n Returns `true` if the two DateTimes represent exactly the same moment and are in the same time zone. For a less strict comparison, use `hasSame()`.\n\n- [*`DateTime`*.**`extract(unit?)`**](datetime/#datetimeextract)\n\n Extracts a part of the date or time, e.g. the month, as a number. To extract textual names instead, see `format()`.\n\n- [*`DateTime`*.**`format(fmt)`**](datetime/#datetimeformat)\n\n Converts the DateTime to a string, using the format specified. [Formatting guide](https://moment.github.io/luxon/#/formatting?id=table-of-tokens). For common formats, `toLocaleString()` may be easier.\n\n- [*`DateTime`*.**`hasSame(otherDateTime, unit)`**](datetime/#datetimehassame)\n\n Returns `true` if the two DateTimes are the same, down to the unit specified. Time zones are ignored (only local times are compared), so use `toUTC()` first if needed.\n\n- [*`DateTime`*.**`hour`**](datetime/#datetimehour)\n\n The hour of the day (0-23)\n\n- [*`DateTime`*.**`isBetween(date1, date2)`**](datetime/#datetimeisbetween)\n\n Returns `true` if the DateTime lies between the two moments specified\n\n- [*`DateTime`*.**`isInDST`**](datetime/#datetimeisindst)\n\n Whether the DateTime is in daylight saving time\n\n- [*`DateTime`*.**`locale`**](datetime/#datetimelocale)\n\n The locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime.\n\n- [*`DateTime`*.**`millisecond`**](datetime/#datetimemillisecond)\n\n The millisecond of the second (0-999)\n\n- [*`DateTime`*.**`minus(n, unit?)`**](datetime/#datetimeminus)\n\n Subtracts a given period of time from the DateTime\n\n- [*`DateTime`*.**`minute`**](datetime/#datetimeminute)\n\n The minute of the hour (0-59)\n\n- [*`DateTime`*.**`month`**](datetime/#datetimemonth)\n\n The month (1-12)\n\n- [*`DateTime`*.**`monthLong`**](datetime/#datetimemonthlong)\n\n The textual long month name, e.g. 'October'. Defaults to the system's locale if no locale has been specified.\n\n- [*`DateTime`*.**`monthShort`**](datetime/#datetimemonthshort)\n\n The textual abbreviated month name, e.g. 'Oct'. Defaults to the system's locale if no locale has been specified.\n\n- [*`DateTime`*.**`plus(n, unit?)`**](datetime/#datetimeplus)\n\n Adds a given period of time to the DateTime\n\n- [*`DateTime`*.**`quarter`**](datetime/#datetimequarter)\n\n The quarter of the year (1-4)\n\n- [*`DateTime`*.**`second`**](datetime/#datetimesecond)\n\n The second of the minute (0-59)\n\n- [*`DateTime`*.**`set(values)`**](datetime/#datetimeset)\n\n Assigns new values to specified units of the DateTime. To round a DateTime, see also `startOf()` and `endOf()`.\n\n- [*`DateTime`*.**`setLocale(locale)`**](datetime/#datetimesetlocale)\n\n Sets the locale, which determines the language and formatting for the DateTime. Useful when generating a textual representation of the DateTime, e.g. with `format()` or `toLocaleString()`.\n\n- [*`DateTime`*.**`setZone(zone, opts)`**](datetime/#datetimesetzone)\n\n Converts the DateTime to the given time zone. The DateTime still represents the same moment unless specified in the options. See also `toLocal()` and `toUTC()`.\n\n- [*`DateTime`*.**`startOf(unit, opts)`**](datetime/#datetimestartof)\n\n Rounds the DateTime down to the beginning of one of its units, e.g. the start of the month\n\n- [*`DateTime`*.**`toISO(opts)`**](datetime/#datetimetoiso)\n\n Returns an ISO 8601-compliant string representation of the DateTime\n\n- [*`DateTime`*.**`toLocal()`**](datetime/#datetimetolocal)\n\n Converts a DateTime to the workflow’s local time zone. The DateTime still represents the same moment unless specified in the parameters. The workflow’s time zone can be set in the workflow settings.\n\n- [*`DateTime`*.**`toLocaleString(formatOpts)`**](datetime/#datetimetolocalestring)\n\n Returns a localised string representing the DateTime, i.e. in the language and format corresponding to its locale. Defaults to the system's locale if none specified.\n\n- [*`DateTime`*.**`toMillis()`**](datetime/#datetimetomillis)\n\n Returns a Unix timestamp in milliseconds (the number elapsed since 1st Jan 1970)\n\n- [*`DateTime`*.**`toRelative(options)`**](datetime/#datetimetorelative)\n\n Returns a textual representation of the time relative to now, e.g. ‘in two days’. Rounds down by default.\n\n- [*`DateTime`*.**`toSeconds()`**](datetime/#datetimetoseconds)\n\n Returns a Unix timestamp in seconds (the number elapsed since 1st Jan 1970)\n\n- [*`DateTime`*.**`toString()`**](datetime/#datetimetostring)\n\n Returns a string representation of the DateTime. Similar to `toISO()`. For more formatting options, see `format()` or `toLocaleString()`.\n\n- [*`DateTime`*.**`toUTC(offset, opts)`**](datetime/#datetimetoutc)\n\n Converts a DateTime to the UTC time zone. The DateTime still represents the same moment unless specified in the parameters. Use `setZone()` to convert to other zones.\n\n- [*`DateTime`*.**`weekday`**](datetime/#datetimeweekday)\n\n The day of the week. 1 is Monday and 7 is Sunday.\n\n- [*`DateTime`*.**`weekdayLong`**](datetime/#datetimeweekdaylong)\n\n The textual long weekday name, e.g. 'Wednesday'. Defaults to the system's locale if no locale has been specified.\n\n- [*`DateTime`*.**`weekdayShort`**](datetime/#datetimeweekdayshort)\n\n The textual abbreviated weekday name, e.g. 'Wed'. Defaults to the system's locale if no locale has been specified.\n\n- [*`DateTime`*.**`weekNumber`**](datetime/#datetimeweeknumber)\n\n The week number of the year (1-52ish)\n\n- [*`DateTime`*.**`year`**](datetime/#datetimeyear)\n\n The year\n\n- [*`DateTime`*.**`zone`**](datetime/#datetimezone)\n\n The time zone associated with the DateTime\n\n## ExecData\n\n- [`$exec`.**`customData`**](execdata/#execcustomdata)\n\n Set and get custom execution data (e.g. to filter executions by). You can also do this with the ‘Execution Data’ node. [More info](/workflows/executions/custom-executions-data/)\n\n- [`$exec`.**`id`**](execdata/#execid)\n\n The ID of the current workflow execution\n\n- [`$exec`.**`mode`**](execdata/#execmode)\n\n Can be one of 3 values: either `test` (meaning the execution was triggered by clicking a button in n8n) or `production` (meaning the execution was triggered automatically). When running workflow tests, `evaluation` is used.\n\n- [`$exec`.**`resumeFormUrl`**](execdata/#execresumeformurl)\n\n The URL to access a form generated by the [’Wait’ node](/integrations/builtin/core-nodes/n8n-nodes-base.wait/).\n\n- [`$exec`.**`resumeUrl`**](execdata/#execresumeurl)\n\n The webhook URL to call to resume a workflow waiting at a [’Wait’ node](/integrations/builtin/core-nodes/n8n-nodes-base.wait/).\n\n## HTTPResponse\n\n- [`$response`.**`body`**](httpresponse/#responsebody)\n\n The body of the response object from the last HTTP call. Only available in the ‘HTTP Request’ node\n\n- [`$response`.**`headers`**](httpresponse/#responseheaders)\n\n The headers returned by the last HTTP call. Only available in the ‘HTTP Request’ node.\n\n- [`$response`.**`statusCode`**](httpresponse/#responsestatuscode)\n\n The HTTP status code returned by the last HTTP call. Only available in the ‘HTTP Request’ node.\n\n- [`$response`.**`statusMessage`**](httpresponse/#responsestatusmessage)\n\n An optional message regarding the request status. Only available in the ‘HTTP Request’ node.\n\n## Item\n\n- [`$item`.**`binary`**](item/#itembinary)\n\n Returns any binary data the item contains\n\n- [`$item`.**`json`**](item/#itemjson)\n\n Returns the JSON data the item contains. [More info](/data/data-structure/)\n\n## NodeInputData\n\n- [`$input`.**`all(branchIndex?, runIndex?)`**](nodeinputdata/#inputall)\n\n Returns an array of the current node’s input items\n\n- [`$input`.**`first(branchIndex?, runIndex?)`**](nodeinputdata/#inputfirst)\n\n Returns the current node’s first input item\n\n- [`$input`.**`item`**](nodeinputdata/#inputitem)\n\n Returns the input item currently being processed\n\n- [`$input`.**`last(branchIndex?, runIndex?)`**](nodeinputdata/#inputlast)\n\n Returns the current node’s last input item\n\n- [`$input`.**`params`**](nodeinputdata/#inputparams)\n\n The configuration settings of the current node. These are the parameters you fill out within the node when configuring it (e.g. its operation).\n\n## NodeOutputData\n\n- [`$()`.**`all(branchIndex?, runIndex?)`**](nodeoutputdata/#all)\n\n Returns an array of the node’s output items\n\n- [`$()`.**`first(branchIndex?, runIndex?)`**](nodeoutputdata/#first)\n\n Returns the first item output by the node\n\n- [`$()`.**`isExecuted`**](nodeoutputdata/#isexecuted)\n\n Is `true` if the node has executed, `false` otherwise\n\n- [`$()`.**`item`**](nodeoutputdata/#item)\n\n Returns the matching item, i.e. the one used to produce the current item in the current node. [More info](/data/data-mapping/data-item-linking/)\n\n- [`$()`.**`itemMatching(currentItemIndex?)`**](nodeoutputdata/#itemmatching)\n\n Returns the matching item, i.e. the one used to produce the item in the current node at the specified index. [More info](/data/data-mapping/data-item-linking/)\n\n- [`$()`.**`last(branchIndex?, runIndex?)`**](nodeoutputdata/#last)\n\n Returns the last item output by the node\n\n- [`$()`.**`params`**](nodeoutputdata/#params)\n\n The configuration settings of the given node. These are the parameters you fill out within the node’s UI (e.g. its operation).\n\n## Number\n\n- [*`Number`*.**`abs()`**](number/#numberabs)\n\n Returns the number’s absolute value, i.e. removes any minus sign\n\n- [*`Number`*.**`ceil()`**](number/#numberceil)\n\n Rounds the number up to the next whole number\n\n- [*`Number`*.**`floor()`**](number/#numberfloor)\n\n Rounds the number down to the nearest whole number\n\n- [*`Number`*.**`format(locale?, options?)`**](number/#numberformat)\n\n Returns a formatted string representing the number. Useful for formatting for a specific language or currency. The same as [`Intl.NumberFormat()`](%E2%80%9Dhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat%E2%80%9D).\n\n- [*`Number`*.**`isEmpty()`**](number/#numberisempty)\n\n Returns `false` for all numbers. Returns `true` for `null`.\n\n- [*`Number`*.**`isEven()`**](number/#numberiseven)\n\n Returns `true` if the number is even. Throws an error if the number isn’t a whole number.\n\n- [*`Number`*.**`isInteger()`**](number/#numberisinteger)\n\n Returns `true` if the number is a whole number\n\n- [*`Number`*.**`isOdd()`**](number/#numberisodd)\n\n Returns `true` if the number is odd. Throws an error if the number isn’t a whole number.\n\n- [*`Number`*.**`round(decimalPlaces?)`**](number/#numberround)\n\n Returns the number rounded to the nearest whole number (or specified number of decimal places)\n\n- [*`Number`*.**`toBoolean()`**](number/#numbertoboolean)\n\n Converts the number to a boolean value. `0` becomes `false`; everything else becomes `true`.\n\n- [*`Number`*.**`toDateTime(format?)`**](number/#numbertodatetime)\n\n Converts a numerical timestamp into a DateTime. The format of the timestamp must be specified if it’s not in milliseconds. Uses the time zone in n8n (or in the workflow’s settings).\n\n- [*`Number`*.**`toLocaleString(locales?, options?)`**](number/#numbertolocalestring)\n\n Returns a localised string representing the number, i.e. in the language and format corresponding to its locale. Defaults to the system's locale if none specified.\n\n- [*`Number`*.**`toString(radix?)`**](number/#numbertostring)\n\n Converts the number to a simple textual representation. For more formatting options, see `toLocaleString()`.\n\n## Object\n\n- [*`Object`*.**`compact()`**](object/#objectcompact)\n\n Removes all fields that have empty values, i.e. are `null` or `\"\"`\n\n- [*`Object`*.**`hasField(name)`**](object/#objecthasfield)\n\n Returns `true` if there is a field called `name`. Only checks top-level keys. Comparison is case-sensitive.\n\n- [*`Object`*.**`isEmpty()`**](object/#objectisempty)\n\n Returns `true` if the Object has no keys (fields) set or is `null`\n\n- [*`Object`*.**`isNotEmpty()`**](object/#objectisnotempty)\n\n Returns `true` if the Object has at least one key (field) set\n\n- [*`Object`*.**`keepFieldsContaining(value)`**](object/#objectkeepfieldscontaining)\n\n Removes any fields whose values don’t at least partly match the given `value`. Comparison is case-sensitive. Fields that aren’t strings will always be removed.\n\n- [*`Object`*.**`keys()`**](object/#objectkeys)\n\n Returns an array with all the field names (keys) the object contains. The same as JavaScript’s `Object.keys(obj)`.\n\n- [*`Object`*.**`merge(otherObject)`**](object/#objectmerge)\n\n Merges the two Objects into a single one. If a key (field name) exists in both Objects, the value from the first (base) Object is used.\n\n- [*`Object`*.**`removeField(key)`**](object/#objectremovefield)\n\n Removes a field from the Object. The same as JavaScript’s `delete`.\n\n- [*`Object`*.**`removeFieldsContaining(value)`**](object/#objectremovefieldscontaining)\n\n Removes keys (fields) whose values at least partly match the given `value`. Comparison is case-sensitive. Fields that aren’t strings are always kept.\n\n- [*`Object`*.**`toJsonString()`**](object/#objecttojsonstring)\n\n Converts the Object to a JSON string. Similar to JavaScript’s `JSON.stringify()`.\n\n- [*`Object`*.**`urlEncode()`**](object/#objecturlencode)\n\n Generates a URL parameter string from the Object’s keys and values. Only top-level keys are supported.\n\n- [*`Object`*.**`values()`**](object/#objectvalues)\n\n Returns an array with all the values of the fields the Object contains. The same as JavaScript’s `Object.values(obj)`.\n\n## PrevNodeData\n\n- [**`name`**](prevnodedata/#name)\n\n The name of the node that the current input came from.\n\nAlways uses the current node’s first input connector if there is more than one (e.g. in the ‘Merge’ node).\n\n- [**`outputIndex`**](prevnodedata/#outputindex)\n\n The index of the output connector that the current input came from. Use this when the previous node had multiple outputs (such as an ‘If’ or ‘Switch’ node).\n\nAlways uses the current node’s first input connector if there is more than one (e.g. in the ‘Merge’ node).\n\n- [**`runIndex`**](prevnodedata/#runindex)\n\n The run of the previous node that generated the current input.\n\nAlways uses the current node’s first input connector if there is more than one (e.g. in the ‘Merge’ node).\n\n## Root\n\n- [**`$(nodeName)`**](root/)\n\n Returns the data of the specified node\n\n- [**`$binary`**](root/#binary)\n\n Returns any binary input data to the current node, for the current item. Shorthand for `$input.item.binary`.\n\n- [**`$execution`**](root/#execution)\n\n Retrieve or set metadata for the current execution\n\n- [**`$fromAI(key, description?, type?, defaultValue?)`**](root/#fromai)\n\n Use when a large language model should provide the value of a node parameter. Consider providing a description for better results.\n\n- [**`$if(condition, valueIfTrue, valueIfFalse)`**](root/#if)\n\n Returns one of two values depending on the `condition`. Similar to the `?` operator in JavaScript.\n\n- [**`$ifEmpty(value, valueIfEmpty)`**](root/#ifempty)\n\n Returns the first parameter if it isn’t empty, otherwise returns the second parameter. The following count as empty: `””`, `[]`, `{}`, `null`, `undefined`\n\n- [**`$input`**](root/#input)\n\n The input data of the current node\n\n- [**`$itemIndex`**](root/#itemindex)\n\n The position of the item currently being processed in the list of input items\n\n- [**`$jmespath(obj, expression)`**](root/#jmespath)\n\n Extracts data from an object (or array of objects) using a [JMESPath](%E2%80%9D/code/cookbook/jmespath/%E2%80%9D) expression. Useful for querying complex, nested objects. Returns `undefined` if the expression is invalid.\n\n- [**`$json`**](root/#json)\n\n Returns the JSON input data to the current node, for the current item. Shorthand for `$input.item.json`. [More info](/data/data-structure/)\n\n- [**`$max(num1, num2, …, numN)`**](root/#max)\n\n Returns the highest of the given numbers\n\n- [**`$min(num1, num2, …, numN)`**](root/#min)\n\n Returns the lowest of the given numbers\n\n- [**`$nodeVersion`**](root/#nodeversion)\n\n The version of the current node (as displayed at the bottom of the nodes’s settings pane)\n\n- [**`$now`**](root/#now)\n\n A DateTime representing the current moment.\n\nUses the workflow’s time zone (which can be changed in the workflow settings).\n\n- [**`$pageCount`**](root/#pagecount)\n\n The number of results pages the node has fetched. Only available in the ‘HTTP Request’ node.\n\n- [**`$parameter`**](root/#parameter)\n\n The configuration settings of the current node. These are the parameters you fill out within the node’s UI (e.g. its operation).\n\n- [**`$prevNode`**](root/#prevnode)\n\n Information about the node that the current input came from.\n\nWhen in a ‘Merge’ node, always uses the first input connector.\n\n- [**`$request`**](root/#request)\n\n The request object sent during the last run of the node. Only available in the ‘HTTP Request’ node.\n\n- [**`$response`**](root/#response)\n\n The response returned by the last HTTP call. Only available in the ‘HTTP Request’ node.\n\n- [**`$runIndex`**](root/#runindex)\n\n The index of the current run of the current node execution. Starts at 0.\n\n- [**`$secrets`**](root/#secrets)\n\n The secrets from an [external secrets vault](/external-secrets/), if configured. Secret values are never displayed to the user. Only available in credential fields.\n\n- [**`$today`**](root/#today)\n\n A DateTime representing midnight at the start of the current day.\n\nUses the instance’s time zone (unless overridden in the workflow’s settings).\n\n- [**`$vars`**](root/#vars)\n\n The [variables](/code/variables/) available to the workflow\n\n- [**`$workflow`**](root/#workflow)\n\n Information about the current workflow\n\n## String\n\n- [*`String`*.**`base64Encode()`**](string/#stringbase64decode)\n\n Converts plain text to a base64-encoded string\n\n- [*`String`*.**`base64Encode()`**](string/#stringbase64encode)\n\n Converts a base64-encoded string to plain text\n\n- [*`String`*.**`concat(string1, string2?, ..., stringN?)`**](string/#stringconcat)\n\n Joins one or more strings onto the end of the base string. Alternatively, use the `+` operator (see examples).\n\n- [*`String`*.**`extractDomain()`**](string/#stringextractdomain)\n\n If the string is an email address or URL, returns its domain (or `undefined` if nothing found).\n\nIf the string also contains other content, try using `extractEmail()` or `extractUrl()` first.\n\n- [*`String`*.**`extractEmail()`**](string/#stringextractemail)\n\n Extracts the first email found in the string. Returns `undefined` if none is found.\n\n- [*`String`*.**`extractUrl()`**](string/#stringextracturl)\n\n Extracts the first URL found in the string. Returns `undefined` if none is found. Only recognizes full URLs, e.g. those starting with `http`.\n\n- [*`String`*.**`extractUrlPath()`**](string/#stringextracturlpath)\n\n Returns the part of a URL after the domain, or `undefined` if no URL found.\n\nIf the string also contains other content, try using `extractUrl()` first.\n\n- [*`String`*.**`hash(algo?)`**](string/#stringhash)\n\n Returns the string hashed with the given algorithm. Defaults to md5 if not specified.\n\n- [*`String`*.**`includes(searchString, start?)`**](string/#stringincludes)\n\n Returns `true` if the string contains the `searchString`. Case-sensitive.\n\n- [*`String`*.**`indexOf(searchString, start?)`**](string/#stringindexof)\n\n Returns the index (position) of the first occurrence of `searchString` within the base string, or -1 if not found. Case-sensitive.\n\n- [*`String`*.**`isDomain()`**](string/#stringisdomain)\n\n Returns `true` if the string is a domain\n\n- [*`String`*.**`isEmail()`**](string/#stringisemail)\n\n Returns `true` if the string is an email\n\n- [*`String`*.**`isEmpty()`**](string/#stringisempty)\n\n Returns `true` if the string has no characters or is `null`\n\n- [*`String`*.**`isNotEmpty()`**](string/#stringisnotempty)\n\n Returns `true` if the string has at least one character\n\n- [*`String`*.**`isNumeric()`**](string/#stringisnumeric)\n\n Returns `true` if the string represents a number\n\n- [*`String`*.**`isUrl()`**](string/#stringisurl)\n\n Returns `true` if the string is a valid URL\n\n- [*`String`*.**`length`**](string/#stringlength)\n\n The number of characters in the string\n\n- [*`String`*.**`match(regexp)`**](string/#stringmatch)\n\n Matches the string against a [regular expression](%E2%80%9Dhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions%E2%80%9D). Returns an array containing the first match, or all matches if the `g` flag is set in the regular expression. Returns `null` if no matches are found.\n\nFor checking whether text is present, consider `includes()` instead.\n\n- [*`String`*.**`parseJson()`**](string/#stringparsejson)\n\n Returns the JavaScript Object or value represented by the string, or `undefined` if the string isn’t valid JSON. Single-quoted JSON is not supported.\n\n- [*`String`*.**`quote(mark?)`**](string/#stringquote)\n\n Wraps a string in quotation marks, and escapes any quotation marks already in the string. Useful when constructing JSON, SQL, etc.\n\n- [*`String`*.**`removeMarkdown()`**](string/#stringremovemarkdown)\n\n Removes any Markdown formatting from the string. Also removes HTML tags.\n\n- [*`String`*.**`removeTags()`**](string/#stringremovetags)\n\n Removes tags, such as HTML or XML, from the string\n\n- [*`String`*.**`replace(pattern, replacement)`**](string/#stringreplace)\n\n Returns a string with the first occurrence of `pattern` replaced by `replacement`.\n\nTo replace all occurrences, use `replaceAll()` instead.\n\n- [*`String`*.**`replaceAll(pattern, replacement)`**](string/#stringreplaceall)\n\n Returns a string with all occurrences of `pattern` replaced by `replacement`\n\n- [*`String`*.**`replaceSpecialChars()`**](string/#stringreplacespecialchars)\n\n Replaces special characters in the string with the closest ASCII character\n\n- [*`String`*.**`search(regexp)`**](string/#stringsearch)\n\n Returns the index (position) of the first occurrence of a pattern within the string, or -1 if not found. The pattern is specified using a [regular expression](%E2%80%9Dhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions%E2%80%9D). To use text instead, see `indexOf()`.\n\n- [*`String`*.**`slice(start, end?)`**](string/#stringslice)\n\n Extracts a fragment of the string at the given position. For more advanced extraction, see `match()`.\n\n- [*`String`*.**`split(separator?, limit?)`**](string/#stringsplit)\n\n Splits the string into an array of substrings. Each split is made at the `separator`, and the separator isn’t included in the output.\n\nThe opposite of using `join()` on an array.\n\n- [*`String`*.**`startsWith(searchString, start?)`**](string/#stringstartswith)\n\n Returns `true` if the string starts with `searchString`. Case-sensitive.\n\n- [*`String`*.**`substring(start, end?)`**](string/#stringsubstring)\n\n Extracts a fragment of the string at the given position. For more advanced extraction, see `match()`.\n\n- [*`String`*.**`toBoolean()`**](string/#stringtoboolean)\n\n Converts the string to a boolean value. `0`, `false` and `no` resolve to `false`, everything else to `true`. Case-insensitive.\n\n- [*`String`*.**`toDateTime()`**](string/#stringtodatetime)\n\n Converts the string to a DateTime. Useful for further transformation. Supported formats for the string are ISO 8601, HTTP, RFC2822, SQL and Unix timestamp in milliseconds.\n\nTo parse other formats, use [`DateTime.fromFormat()`](%E2%80%9Dhttps://moment.github.io/luxon/api-docs/index.html#datetimefromformat%E2%80%9D).\n\n- [*`String`*.**`toJsonString()`**](string/#stringtojsonstring)\n\n Prepares the string to be inserted into a JSON object. Escapes any quotes and special characters (e.g. new lines), and wraps the string in quotes.\n\nThe same as JavaScript’s `JSON.stringify()`.\n\n- [*`String`*.**`toLowerCase()`**](string/#stringtolowercase)\n\n Converts all letters in the string to lower case\n\n- [*`String`*.**`toNumber()`**](string/#stringtonumber)\n\n Converts a string representing a number to a number. Throws an error if the string doesn’t start with a valid number.\n\n- [*`String`*.**`toSentenceCase()`**](string/#stringtosentencecase)\n\n Changes the capitalization of the string to sentence case. The first letter of each sentence is capitalized and all others are lowercased.\n\n- [*`String`*.**`toSnakeCase()`**](string/#stringtosnakecase)\n\n Changes the format of the string to snake case. Spaces and dashes are replaced by `_`, symbols are removed and all letters are lowercased.\n\n- [*`String`*.**`toTitleCase()`**](string/#stringtotitlecase)\n\n Changes the capitalization of the string to title case. The first letter of each word is capitalized and the others left unchanged. Short prepositions and conjunctions aren’t capitalized (e.g. ‘a’, ‘the’).\n\n- [*`String`*.**`toUpperCase()`**](string/#stringtouppercase)\n\n Converts all letters in the string to upper case (capitals)\n\n- [*`String`*.**`trim()`**](string/#stringtrim)\n\n Removes whitespace from both ends of the string. Whitespace includes new lines, tabs, spaces, etc.\n\n- [*`String`*.**`urlDecode(allChars?)`**](string/#stringurldecode)\n\n Decodes a URL-encoded string. Replaces any character codes in the form of `%XX` with their corresponding characters.\n\n- [*`String`*.**`urlEncode(allChars?)`**](string/#stringurlencode)\n\n Encodes the string so that it can be used in a URL. Spaces and special characters are replaced with codes of the form `%XX`.\n\n## WorkflowData\n\n- [`$workflow`.**`active`**](workflowdata/#workflowactive)\n\n Whether the workflow is active\n\n- [`$workflow`.**`id`**](workflowdata/#workflowid)\n\n The workflow ID. Can also be found in the workflow’s URL.\n\n- [`$workflow`.**`name`**](workflowdata/#workflowname)\n\n The name of the workflow, as shown at the top of the editor\n",
10221
+ "markdown": "# Expression Reference\n\nThese are some commonly used expressions. A more exhaustive list appears below.\n\n| Category | Expression | Description |\n| ------------------------------ | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Access current input item data | `$json` | JSON data of the current item |\n| | `$json.fieldName` | Field of the current item |\n| | `$binary` | Binary data of current item |\n| Access previous node data | `$(\"NodeName\").first()` | First item in a node |\n| | `$(\"NodeName\").item` | Linked item of a node. See [Item linking](../data-mapping/data-item-linking/) for more information. |\n| | `$(\"NodeName\").all()` | All items of a node |\n| | `$(\"NodeName\").last()` | Last item of a node |\n| Date/Time | `$now` | Current date and time |\n| | `$today` | Today's date |\n| | `$now.toFormat(\"yyyy-MM-dd\")` | Format current date as a string |\n| Conditionals | `$if(condition, \"true\", \"false\")` | Helper function that returns a value when a condition is true or false |\n| | `condition ? true : false` | Ternary operator: returns one value if a condition is true, another if false |\n| | `$ifEmpty(value, defaultValue)` | Helper function takes two parameters and tests the first to check if it's empty, then returns either the parameter (if not empty) or the second parameter (if the first is empty). The first parameter is empty if it's `undefined`, `null`, an empty string `''`, an array where `value.length` returns `false` , or an object where `Object.keys(value).length` returns `false` |\n| String Methods | `text.toUpperCase()` | Convert to uppercase |\n| | `text.toLowerCase()` | Convert to lowercase |\n| | `text.includes(\"foo\")` | Check if text contains search term |\n| | `text.extractEmail()` | Extract email from text |\n| Array Methods | `array.length` | Get array length |\n| | `array.join(\", \")` | Join array elements using a comma a separator |\n| | `array.filter(x => x <= 20)` | Filter items of array based on the filtering condition |\n| | `array.map(x => x.id)` | Transform items of an array |\n\nBrowse the tables below to find methods by the data type on which they act. Click a method name to read detailed documentation for it.\n\n## Array\n\n- [*`Array`*.**`append(elem1, elem2?, ..., elemN?)`**](array/#arrayappend)\n\n Adds new elements to the end of the array. Similar to `push()`, but returns the modified array. Consider using spread syntax instead (see examples).\n\n- [*`Array`*.**`average()`**](array/#arrayaverage)\n\n Returns the average of the numbers in the array. Throws an error if there are any non-numbers.\n\n- [*`Array`*.**`chunk(length)`**](array/#arraychunk)\n\n Splits the array into an array of sub-arrays, each with the given length\n\n- [*`Array`*.**`compact()`**](array/#arraycompact)\n\n Removes any empty values from the array. `null`, `\"\"` and `undefined` count as empty.\n\n- [*`Array`*.**`concat(array2, array3?, ... arrayN?)`**](array/#arrayconcat)\n\n Joins one or more arrays onto the end of the base array\n\n- [*`Array`*.**`difference(otherArray)`**](array/#arraydifference)\n\n Compares two arrays. Returns all elements in the base array that aren't present in `otherArray`.\n\n- [*`Array`*.**`filter(function(element, index?, array?), thisValue?)`**](array/#arrayfilter)\n\n Returns an array with only the elements satisfying a condition. The condition is a function that returns `true` or `false`.\n\n- [*`Array`*.**`find(function(element, index?, array?), thisValue?)`**](array/#arrayfind)\n\n Returns the first element from the array that satisfies the provided condition. The condition is a function that returns `true` or `false`. Returns `undefined` if no matches are found.\n\nIf you need all matching elements, use `filter()`.\n\n- [*`Array`*.**`first()`**](array/#arrayfirst)\n\n Returns the first element of the array\n\n- [*`Array`*.**`includes(element, start?)`**](array/#arrayincludes)\n\n Returns `true` if the array contains the specified element\n\n- [*`Array`*.**`indexOf(element, start?)`**](array/#arrayindexof)\n\n Returns the position of the first matching element in the array, or -1 if the element isn’t found. Positions start at 0.\n\n- [*`Array`*.**`intersection(otherArray)`**](array/#arrayintersection)\n\n Compares two arrays. Returns all elements in the base array that are also present in the other array.\n\n- [*`Array`*.**`isEmpty()`**](array/#arrayisempty)\n\n Returns `true` if the array has no elements or is `null`\n\n- [*`Array`*.**`isNotEmpty()`**](array/#arrayisnotempty)\n\n Returns `true` if the array has at least one element\n\n- [*`Array`*.**`join(separator?)`**](array/#arrayjoin)\n\n Merges all elements of the array into a single string, with an optional separator between each element.\n\nThe opposite of `split()`.\n\n- [*`Array`*.**`last()`**](array/#arraylast)\n\n Returns the last element of the array\n\n- [*`Array`*.**`length`**](array/#arraylength)\n\n The number of elements in the array\n\n- [*`Array`*.**`map(function(element, index?, array?), thisValue?)`**](array/#arraymap)\n\n Creates a new array by applying a function to each element of the original array\n\n- [*`Array`*.**`max()`**](array/#arraymax)\n\n Returns the largest number in the array. Throws an error if there are any non-numbers.\n\n- [*`Array`*.**`min()`**](array/#arraymin)\n\n Returns the smallest number in the array. Throws an error if there are any non-numbers.\n\n- [*`Array`*.**`pluck(fieldName1?, fieldName2?, …)`**](array/#arraypluck)\n\n Returns an array containing the values of the given field(s) in each Object of the array. Ignores any array elements that aren’t Objects or don’t have a key matching the field name(s) provided.\n\n- [*`Array`*.**`randomItem()`**](array/#arrayrandomitem)\n\n Returns a randomly-chosen element from the array\n\n- [*`Array`*.**`reduce(function(prevResult, currentElem, currentIndex?, array?), initResult)`**](array/#arrayreduce)\n\n Reduces an array to a single value by applying a function to each element. The function combines the current element with the result of reducing the previous elements, producing a new result.\n\n- [*`Array`*.**`removeDuplicates(keys?)`**](array/#arrayremoveduplicates)\n\n Removes any re-occurring elements from the array\n\n- [*`Array`*.**`renameKeys(from, to)`**](array/#arrayrenamekeys)\n\n Changes all matching keys (field names) of any Objects in the array. Rename more than one key by adding extra arguments, i.e. `from1, to1, from2, to2, ...`.\n\n- [*`Array`*.**`reverse()`**](array/#arrayreverse)\n\n Reverses the order of the elements in the array\n\n- [*`Array`*.**`slice(start, end)`**](array/#arrayslice)\n\n Returns a portion of the array, from the `start` index up to (but not including) the `end` index. Indexes start at 0.\n\n- [*`Array`*.**`smartJoin(keyField, nameField)`**](array/#arraysmartjoin)\n\n Creates a single Object from an array of Objects. Each Object in the array provides one field for the returned Object. Each Object in the array must contain a field with the key name and a field with the value.\n\n- [*`Array`*.**`sort(compareFunction(a, b)?)`**](array/#arraysort)\n\n Reorders the elements of the array. For sorting strings alphabetically, no parameter is required. For sorting numbers or Objects, see examples.\n\n- [*`Array`*.**`sum()`**](array/#arraysum)\n\n Returns the total of all the numbers in the array. Throws an error if there are any non-numbers.\n\n- [*`Array`*.**`toJsonString()`**](array/#arraytojsonstring)\n\n Converts the array to a JSON string. The same as JavaScript’s `JSON.stringify()`.\n\n- [*`Array`*.**`toSpliced(start, deleteCount, elem1, ....., elemN)`**](array/#arraytospliced)\n\n Adds and/or removes array elements at a given position.\n\nSee also `slice()` and `append()`.\n\n- [*`Array`*.**`toString()`**](array/#arraytostring)\n\n Converts the array to a string, with values separated by commas. To use a different separator, use `join()` instead.\n\n- [*`Array`*.**`union(otherArray)`**](array/#arrayunion)\n\n Concatenates two arrays and then removes any duplicates\n\n- [*`Array`*.**`unique()`**](array/#arrayunique)\n\n Removes any duplicate elements from the array\n\n## BinaryFile\n\n- [`binaryFile`.**`directory`**](binaryfile/#binaryfiledirectory)\n\n The path to the directory that the file is stored in. Useful for distinguishing between files with the same name in different directories. Not set if n8n is configured to store files in its database.\n\n- [`binaryFile`.**`fileExtension`**](binaryfile/#binaryfilefileextension)\n\n The suffix attached to the filename (e.g. `txt`)\n\n- [`binaryFile`.**`fileName`**](binaryfile/#binaryfilefilename)\n\n The name of the file, including extension\n\n- [`binaryFile`.**`fileSize`**](binaryfile/#binaryfilefilesize)\n\n A string representing the size of the file\n\n- [`binaryFile`.**`fileType`**](binaryfile/#binaryfilefiletype)\n\n A string representing the type of the file, e.g. `image`. Corresponds to the first part of the MIME type.\n\n- [`binaryFile`.**`id`**](binaryfile/#binaryfileid)\n\n The unique ID of the file. Used to identify the file when it is stored on disk or in a storage service such as S3.\n\n- [`binaryFile`.**`mimeType`**](binaryfile/#binaryfilemimetype)\n\n A string representing the format of the file’s contents, e.g. `image/jpeg`\n\n## Boolean\n\n- [*`Boolean`*.**`isEmpty()`**](boolean/#booleanisempty)\n\n Returns `false` for all booleans. Returns `true` for `null`.\n\n- [*`Boolean`*.**`toNumber()`**](boolean/#booleantonumber)\n\n Converts `true` to 1 and `false` to 0\n\n- [*`Boolean`*.**`toString()`**](boolean/#booleantostring)\n\n Converts `true` to the string ‘true’ and `false` to the string ‘false’\n\n## CustomData\n\n- [`$execution.customData`.**`get(key)`**](customdata/#executioncustomdataget)\n\n Returns the custom execution data stored under the given key. [More info](/workflows/executions/custom-executions-data/)\n\n- [`$execution.customData`.**`getAll()`**](customdata/#executioncustomdatagetall)\n\n Returns all the key-value pairs of custom data that have been set in the current execution. [More info](/workflows/executions/custom-executions-data/)\n\n- [`$execution.customData`.**`set(key, value)`**](customdata/#executioncustomdataset)\n\n Stores custom execution data under the key specified. Use this to easily filter executions by this data. [More info](/workflows/executions/custom-executions-data/)\n\n- [`$execution.customData`.**`setAll(obj)`**](customdata/#executioncustomdatasetall)\n\n Sets multiple key-value pairs of custom data for the execution. Use this to easily filter executions by this data. [More info](/workflows/executions/custom-executions-data/)\n\n## Date\n\n- [*`Date`*.**`toDateTime()`**](date/#datetodatetime)\n\n Converts a JavaScript Date to a Luxon DateTime. The DateTime contains the same information, but is easier to manipulate.\n\n## DateTime\n\n- [*`DateTime`*.**`day`**](datetime/#datetimeday)\n\n The day of the month (1-31)\n\n- [*`DateTime`*.**`diffTo(otherDateTime, unit)`**](datetime/#datetimediffto)\n\n Returns the difference between two DateTimes, in the given unit(s)\n\n- [*`DateTime`*.**`diffToNow(unit)`**](datetime/#datetimedifftonow)\n\n Returns the difference between the current moment and the DateTime, in the given unit(s). For a textual representation, use `toRelative()` instead.\n\n- [*`DateTime`*.**`endOf(unit, opts)`**](datetime/#datetimeendof)\n\n Rounds the DateTime up to the end of one of its units, e.g. the end of the month\n\n- [*`DateTime`*.**`equals(other)`**](datetime/#datetimeequals)\n\n Returns `true` if the two DateTimes represent exactly the same moment and are in the same time zone. For a less strict comparison, use `hasSame()`.\n\n- [*`DateTime`*.**`extract(unit?)`**](datetime/#datetimeextract)\n\n Extracts a part of the date or time, e.g. the month, as a number. To extract textual names instead, see `format()`.\n\n- [*`DateTime`*.**`format(fmt)`**](datetime/#datetimeformat)\n\n Converts the DateTime to a string, using the format specified. [Formatting guide](https://moment.github.io/luxon/#/formatting?id=table-of-tokens). For common formats, `toLocaleString()` may be easier.\n\n- [*`DateTime`*.**`hasSame(otherDateTime, unit)`**](datetime/#datetimehassame)\n\n Returns `true` if the two DateTimes are the same, down to the unit specified. Time zones are ignored (only local times are compared), so use `toUTC()` first if needed.\n\n- [*`DateTime`*.**`hour`**](datetime/#datetimehour)\n\n The hour of the day (0-23)\n\n- [*`DateTime`*.**`isBetween(date1, date2)`**](datetime/#datetimeisbetween)\n\n Returns `true` if the DateTime lies between the two moments specified\n\n- [*`DateTime`*.**`isInDST`**](datetime/#datetimeisindst)\n\n Whether the DateTime is in daylight saving time\n\n- [*`DateTime`*.**`locale`**](datetime/#datetimelocale)\n\n The locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime.\n\n- [*`DateTime`*.**`millisecond`**](datetime/#datetimemillisecond)\n\n The millisecond of the second (0-999)\n\n- [*`DateTime`*.**`minus(n, unit?)`**](datetime/#datetimeminus)\n\n Subtracts a given period of time from the DateTime\n\n- [*`DateTime`*.**`minute`**](datetime/#datetimeminute)\n\n The minute of the hour (0-59)\n\n- [*`DateTime`*.**`month`**](datetime/#datetimemonth)\n\n The month (1-12)\n\n- [*`DateTime`*.**`monthLong`**](datetime/#datetimemonthlong)\n\n The textual long month name, e.g. 'October'. Defaults to the system's locale if no locale has been specified.\n\n- [*`DateTime`*.**`monthShort`**](datetime/#datetimemonthshort)\n\n The textual abbreviated month name, e.g. 'Oct'. Defaults to the system's locale if no locale has been specified.\n\n- [*`DateTime`*.**`plus(n, unit?)`**](datetime/#datetimeplus)\n\n Adds a given period of time to the DateTime\n\n- [*`DateTime`*.**`quarter`**](datetime/#datetimequarter)\n\n The quarter of the year (1-4)\n\n- [*`DateTime`*.**`second`**](datetime/#datetimesecond)\n\n The second of the minute (0-59)\n\n- [*`DateTime`*.**`set(values)`**](datetime/#datetimeset)\n\n Assigns new values to specified units of the DateTime. To round a DateTime, see also `startOf()` and `endOf()`.\n\n- [*`DateTime`*.**`setLocale(locale)`**](datetime/#datetimesetlocale)\n\n Sets the locale, which determines the language and formatting for the DateTime. Useful when generating a textual representation of the DateTime, e.g. with `format()` or `toLocaleString()`.\n\n- [*`DateTime`*.**`setZone(zone, opts)`**](datetime/#datetimesetzone)\n\n Converts the DateTime to the given time zone. The DateTime still represents the same moment unless specified in the options. See also `toLocal()` and `toUTC()`.\n\n- [*`DateTime`*.**`startOf(unit, opts)`**](datetime/#datetimestartof)\n\n Rounds the DateTime down to the beginning of one of its units, e.g. the start of the month\n\n- [*`DateTime`*.**`toISO(opts)`**](datetime/#datetimetoiso)\n\n Returns an ISO 8601-compliant string representation of the DateTime\n\n- [*`DateTime`*.**`toLocal()`**](datetime/#datetimetolocal)\n\n Converts a DateTime to the workflow’s local time zone. The DateTime still represents the same moment unless specified in the parameters. The workflow’s time zone can be set in the workflow settings.\n\n- [*`DateTime`*.**`toLocaleString(formatOpts)`**](datetime/#datetimetolocalestring)\n\n Returns a localised string representing the DateTime, i.e. in the language and format corresponding to its locale. Defaults to the system's locale if none specified.\n\n- [*`DateTime`*.**`toMillis()`**](datetime/#datetimetomillis)\n\n Returns a Unix timestamp in milliseconds (the number elapsed since 1st Jan 1970)\n\n- [*`DateTime`*.**`toRelative(options)`**](datetime/#datetimetorelative)\n\n Returns a textual representation of the time relative to now, e.g. ‘in two days’. Rounds down by default.\n\n- [*`DateTime`*.**`toSeconds()`**](datetime/#datetimetoseconds)\n\n Returns a Unix timestamp in seconds (the number elapsed since 1st Jan 1970)\n\n- [*`DateTime`*.**`toString()`**](datetime/#datetimetostring)\n\n Returns a string representation of the DateTime. Similar to `toISO()`. For more formatting options, see `format()` or `toLocaleString()`.\n\n- [*`DateTime`*.**`toUTC(offset, opts)`**](datetime/#datetimetoutc)\n\n Converts a DateTime to the UTC time zone. The DateTime still represents the same moment unless specified in the parameters. Use `setZone()` to convert to other zones.\n\n- [*`DateTime`*.**`weekday`**](datetime/#datetimeweekday)\n\n The day of the week. 1 is Monday and 7 is Sunday.\n\n- [*`DateTime`*.**`weekdayLong`**](datetime/#datetimeweekdaylong)\n\n The textual long weekday name, e.g. 'Wednesday'. Defaults to the system's locale if no locale has been specified.\n\n- [*`DateTime`*.**`weekdayShort`**](datetime/#datetimeweekdayshort)\n\n The textual abbreviated weekday name, e.g. 'Wed'. Defaults to the system's locale if no locale has been specified.\n\n- [*`DateTime`*.**`weekNumber`**](datetime/#datetimeweeknumber)\n\n The week number of the year (1-52ish)\n\n- [*`DateTime`*.**`year`**](datetime/#datetimeyear)\n\n The year\n\n- [*`DateTime`*.**`zone`**](datetime/#datetimezone)\n\n The time zone associated with the DateTime\n\n## ExecData\n\n- [`$exec`.**`customData`**](execdata/#execcustomdata)\n\n Set and get custom execution data (e.g. to filter executions by). You can also do this with the ‘Execution Data’ node. [More info](/workflows/executions/custom-executions-data/)\n\n- [`$exec`.**`id`**](execdata/#execid)\n\n The ID of the current workflow execution\n\n- [`$exec`.**`mode`**](execdata/#execmode)\n\n Can be one of 3 values: either `test` (meaning the execution was triggered by clicking a button in n8n) or `production` (meaning the execution was triggered automatically). When running workflow tests, `evaluation` is used.\n\n- [`$exec`.**`resumeFormUrl`**](execdata/#execresumeformurl)\n\n The URL to access a form generated by the [’Wait’ node](/integrations/builtin/core-nodes/n8n-nodes-base.wait/).\n\n- [`$exec`.**`resumeUrl`**](execdata/#execresumeurl)\n\n The webhook URL to call to resume a workflow waiting at a [’Wait’ node](/integrations/builtin/core-nodes/n8n-nodes-base.wait/).\n\n## HTTPResponse\n\n- [`$response`.**`body`**](httpresponse/#responsebody)\n\n The body of the response object from the last HTTP call. Only available in the ‘HTTP Request’ node\n\n- [`$response`.**`headers`**](httpresponse/#responseheaders)\n\n The headers returned by the last HTTP call. Only available in the ‘HTTP Request’ node.\n\n- [`$response`.**`statusCode`**](httpresponse/#responsestatuscode)\n\n The HTTP status code returned by the last HTTP call. Only available in the ‘HTTP Request’ node.\n\n- [`$response`.**`statusMessage`**](httpresponse/#responsestatusmessage)\n\n An optional message regarding the request status. Only available in the ‘HTTP Request’ node.\n\n## Item\n\n- [`$item`.**`binary`**](item/#itembinary)\n\n Returns any binary data the item contains\n\n- [`$item`.**`json`**](item/#itemjson)\n\n Returns the JSON data the item contains. [More info](/data/data-structure/)\n\n## NodeInputData\n\n- [`$input`.**`all(branchIndex?, runIndex?)`**](nodeinputdata/#inputall)\n\n Returns an array of the current node’s input items\n\n- [`$input`.**`first(branchIndex?, runIndex?)`**](nodeinputdata/#inputfirst)\n\n Returns the current node’s first input item\n\n- [`$input`.**`item`**](nodeinputdata/#inputitem)\n\n Returns the input item currently being processed\n\n- [`$input`.**`last(branchIndex?, runIndex?)`**](nodeinputdata/#inputlast)\n\n Returns the current node’s last input item\n\n- [`$input`.**`params`**](nodeinputdata/#inputparams)\n\n The configuration settings of the current node. These are the parameters you fill out within the node when configuring it (e.g. its operation).\n\n## NodeOutputData\n\n- [`$()`.**`all(branchIndex?, runIndex?)`**](nodeoutputdata/#all)\n\n Returns an array of the node’s output items\n\n- [`$()`.**`first(branchIndex?, runIndex?)`**](nodeoutputdata/#first)\n\n Returns the first item output by the node\n\n- [`$()`.**`isExecuted`**](nodeoutputdata/#isexecuted)\n\n Is `true` if the node has executed, `false` otherwise\n\n- [`$()`.**`item`**](nodeoutputdata/#item)\n\n Returns the matching item, i.e. the one used to produce the current item in the current node. [More info](/data/data-mapping/data-item-linking/)\n\n- [`$()`.**`itemMatching(currentItemIndex?)`**](nodeoutputdata/#itemmatching)\n\n Returns the matching item, i.e. the one used to produce the item in the current node at the specified index. [More info](/data/data-mapping/data-item-linking/)\n\n- [`$()`.**`last(branchIndex?, runIndex?)`**](nodeoutputdata/#last)\n\n Returns the last item output by the node\n\n- [`$()`.**`params`**](nodeoutputdata/#params)\n\n The configuration settings of the given node. These are the parameters you fill out within the node’s UI (e.g. its operation).\n\n## Number\n\n- [*`Number`*.**`abs()`**](number/#numberabs)\n\n Returns the number’s absolute value, i.e. removes any minus sign\n\n- [*`Number`*.**`ceil()`**](number/#numberceil)\n\n Rounds the number up to the next whole number\n\n- [*`Number`*.**`floor()`**](number/#numberfloor)\n\n Rounds the number down to the nearest whole number\n\n- [*`Number`*.**`format(locale?, options?)`**](number/#numberformat)\n\n Returns a formatted string representing the number. Useful for formatting for a specific language or currency. The same as [`Intl.NumberFormat()`](%E2%80%9Dhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat%E2%80%9D).\n\n- [*`Number`*.**`isEmpty()`**](number/#numberisempty)\n\n Returns `false` for all numbers. Returns `true` for `null`.\n\n- [*`Number`*.**`isEven()`**](number/#numberiseven)\n\n Returns `true` if the number is even. Throws an error if the number isn’t a whole number.\n\n- [*`Number`*.**`isInteger()`**](number/#numberisinteger)\n\n Returns `true` if the number is a whole number\n\n- [*`Number`*.**`isOdd()`**](number/#numberisodd)\n\n Returns `true` if the number is odd. Throws an error if the number isn’t a whole number.\n\n- [*`Number`*.**`round(decimalPlaces?)`**](number/#numberround)\n\n Returns the number rounded to the nearest whole number (or specified number of decimal places)\n\n- [*`Number`*.**`toBoolean()`**](number/#numbertoboolean)\n\n Converts the number to a boolean value. `0` becomes `false`; everything else becomes `true`.\n\n- [*`Number`*.**`toDateTime(format?)`**](number/#numbertodatetime)\n\n Converts a numerical timestamp into a DateTime. The format of the timestamp must be specified if it’s not in milliseconds. Uses the time zone in n8n (or in the workflow���s settings).\n\n- [*`Number`*.**`toLocaleString(locales?, options?)`**](number/#numbertolocalestring)\n\n Returns a localised string representing the number, i.e. in the language and format corresponding to its locale. Defaults to the system's locale if none specified.\n\n- [*`Number`*.**`toString(radix?)`**](number/#numbertostring)\n\n Converts the number to a simple textual representation. For more formatting options, see `toLocaleString()`.\n\n## Object\n\n- [*`Object`*.**`compact()`**](object/#objectcompact)\n\n Removes all fields that have empty values, i.e. are `null` or `\"\"`\n\n- [*`Object`*.**`hasField(name)`**](object/#objecthasfield)\n\n Returns `true` if there is a field called `name`. Only checks top-level keys. Comparison is case-sensitive.\n\n- [*`Object`*.**`isEmpty()`**](object/#objectisempty)\n\n Returns `true` if the Object has no keys (fields) set or is `null`\n\n- [*`Object`*.**`isNotEmpty()`**](object/#objectisnotempty)\n\n Returns `true` if the Object has at least one key (field) set\n\n- [*`Object`*.**`keepFieldsContaining(value)`**](object/#objectkeepfieldscontaining)\n\n Removes any fields whose values don’t at least partly match the given `value`. Comparison is case-sensitive. Fields that aren’t strings will always be removed.\n\n- [*`Object`*.**`keys()`**](object/#objectkeys)\n\n Returns an array with all the field names (keys) the object contains. The same as JavaScript’s `Object.keys(obj)`.\n\n- [*`Object`*.**`merge(otherObject)`**](object/#objectmerge)\n\n Merges the two Objects into a single one. If a key (field name) exists in both Objects, the value from the first (base) Object is used.\n\n- [*`Object`*.**`removeField(key)`**](object/#objectremovefield)\n\n Removes a field from the Object. The same as JavaScript’s `delete`.\n\n- [*`Object`*.**`removeFieldsContaining(value)`**](object/#objectremovefieldscontaining)\n\n Removes keys (fields) whose values at least partly match the given `value`. Comparison is case-sensitive. Fields that aren’t strings are always kept.\n\n- [*`Object`*.**`toJsonString()`**](object/#objecttojsonstring)\n\n Converts the Object to a JSON string. Similar to JavaScript’s `JSON.stringify()`.\n\n- [*`Object`*.**`urlEncode()`**](object/#objecturlencode)\n\n Generates a URL parameter string from the Object’s keys and values. Only top-level keys are supported.\n\n- [*`Object`*.**`values()`**](object/#objectvalues)\n\n Returns an array with all the values of the fields the Object contains. The same as JavaScript’s `Object.values(obj)`.\n\n## PrevNodeData\n\n- [**`name`**](prevnodedata/#name)\n\n The name of the node that the current input came from.\n\nAlways uses the current node’s first input connector if there is more than one (e.g. in the ‘Merge’ node).\n\n- [**`outputIndex`**](prevnodedata/#outputindex)\n\n The index of the output connector that the current input came from. Use this when the previous node had multiple outputs (such as an ‘If’ or ‘Switch’ node).\n\nAlways uses the current node’s first input connector if there is more than one (e.g. in the ‘Merge’ node).\n\n- [**`runIndex`**](prevnodedata/#runindex)\n\n The run of the previous node that generated the current input.\n\nAlways uses the current node’s first input connector if there is more than one (e.g. in the ‘Merge’ node).\n\n## Root\n\n- [**`$(nodeName)`**](root/)\n\n Returns the data of the specified node\n\n- [**`$binary`**](root/#binary)\n\n Returns any binary input data to the current node, for the current item. Shorthand for `$input.item.binary`.\n\n- [**`$execution`**](root/#execution)\n\n Retrieve or set metadata for the current execution\n\n- [**`$fromAI(key, description?, type?, defaultValue?)`**](root/#fromai)\n\n Use when a large language model should provide the value of a node parameter. Consider providing a description for better results.\n\n- [**`$if(condition, valueIfTrue, valueIfFalse)`**](root/#if)\n\n Returns one of two values depending on the `condition`. Similar to the `?` operator in JavaScript.\n\n- [**`$ifEmpty(value, valueIfEmpty)`**](root/#ifempty)\n\n Returns the first parameter if it isn’t empty, otherwise returns the second parameter. The following count as empty: `””`, `[]`, `{}`, `null`, `undefined`\n\n- [**`$input`**](root/#input)\n\n The input data of the current node\n\n- [**`$itemIndex`**](root/#itemindex)\n\n The position of the item currently being processed in the list of input items\n\n- [**`$jmespath(obj, expression)`**](root/#jmespath)\n\n Extracts data from an object (or array of objects) using a [JMESPath](%E2%80%9D/code/cookbook/jmespath/%E2%80%9D) expression. Useful for querying complex, nested objects. Returns `undefined` if the expression is invalid.\n\n- [**`$json`**](root/#json)\n\n Returns the JSON input data to the current node, for the current item. Shorthand for `$input.item.json`. [More info](/data/data-structure/)\n\n- [**`$max(num1, num2, …, numN)`**](root/#max)\n\n Returns the highest of the given numbers\n\n- [**`$min(num1, num2, …, numN)`**](root/#min)\n\n Returns the lowest of the given numbers\n\n- [**`$nodeVersion`**](root/#nodeversion)\n\n The version of the current node (as displayed at the bottom of the nodes’s settings pane)\n\n- [**`$now`**](root/#now)\n\n A DateTime representing the current moment.\n\nUses the workflow’s time zone (which can be changed in the workflow settings).\n\n- [**`$pageCount`**](root/#pagecount)\n\n The number of results pages the node has fetched. Only available in the ‘HTTP Request’ node.\n\n- [**`$parameter`**](root/#parameter)\n\n The configuration settings of the current node. These are the parameters you fill out within the node’s UI (e.g. its operation).\n\n- [**`$prevNode`**](root/#prevnode)\n\n Information about the node that the current input came from.\n\nWhen in a ‘Merge’ node, always uses the first input connector.\n\n- [**`$request`**](root/#request)\n\n The request object sent during the last run of the node. Only available in the ‘HTTP Request’ node.\n\n- [**`$response`**](root/#response)\n\n The response returned by the last HTTP call. Only available in the ‘HTTP Request’ node.\n\n- [**`$runIndex`**](root/#runindex)\n\n The index of the current run of the current node execution. Starts at 0.\n\n- [**`$secrets`**](root/#secrets)\n\n The secrets from an [external secrets vault](/external-secrets/), if configured. Secret values are never displayed to the user. Only available in credential fields.\n\n- [**`$today`**](root/#today)\n\n A DateTime representing midnight at the start of the current day.\n\nUses the instance’s time zone (unless overridden in the workflow’s settings).\n\n- [**`$vars`**](root/#vars)\n\n The [variables](/code/variables/) available to the workflow\n\n- [**`$workflow`**](root/#workflow)\n\n Information about the current workflow\n\n## String\n\n- [*`String`*.**`base64Encode()`**](string/#stringbase64decode)\n\n Converts plain text to a base64-encoded string\n\n- [*`String`*.**`base64Encode()`**](string/#stringbase64encode)\n\n Converts a base64-encoded string to plain text\n\n- [*`String`*.**`concat(string1, string2?, ..., stringN?)`**](string/#stringconcat)\n\n Joins one or more strings onto the end of the base string. Alternatively, use the `+` operator (see examples).\n\n- [*`String`*.**`extractDomain()`**](string/#stringextractdomain)\n\n If the string is an email address or URL, returns its domain (or `undefined` if nothing found).\n\nIf the string also contains other content, try using `extractEmail()` or `extractUrl()` first.\n\n- [*`String`*.**`extractEmail()`**](string/#stringextractemail)\n\n Extracts the first email found in the string. Returns `undefined` if none is found.\n\n- [*`String`*.**`extractUrl()`**](string/#stringextracturl)\n\n Extracts the first URL found in the string. Returns `undefined` if none is found. Only recognizes full URLs, e.g. those starting with `http`.\n\n- [*`String`*.**`extractUrlPath()`**](string/#stringextracturlpath)\n\n Returns the part of a URL after the domain, or `undefined` if no URL found.\n\nIf the string also contains other content, try using `extractUrl()` first.\n\n- [*`String`*.**`hash(algo?)`**](string/#stringhash)\n\n Returns the string hashed with the given algorithm. Defaults to md5 if not specified.\n\n- [*`String`*.**`includes(searchString, start?)`**](string/#stringincludes)\n\n Returns `true` if the string contains the `searchString`. Case-sensitive.\n\n- [*`String`*.**`indexOf(searchString, start?)`**](string/#stringindexof)\n\n Returns the index (position) of the first occurrence of `searchString` within the base string, or -1 if not found. Case-sensitive.\n\n- [*`String`*.**`isDomain()`**](string/#stringisdomain)\n\n Returns `true` if the string is a domain\n\n- [*`String`*.**`isEmail()`**](string/#stringisemail)\n\n Returns `true` if the string is an email\n\n- [*`String`*.**`isEmpty()`**](string/#stringisempty)\n\n Returns `true` if the string has no characters or is `null`\n\n- [*`String`*.**`isNotEmpty()`**](string/#stringisnotempty)\n\n Returns `true` if the string has at least one character\n\n- [*`String`*.**`isNumeric()`**](string/#stringisnumeric)\n\n Returns `true` if the string represents a number\n\n- [*`String`*.**`isUrl()`**](string/#stringisurl)\n\n Returns `true` if the string is a valid URL\n\n- [*`String`*.**`length`**](string/#stringlength)\n\n The number of characters in the string\n\n- [*`String`*.**`match(regexp)`**](string/#stringmatch)\n\n Matches the string against a [regular expression](%E2%80%9Dhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions%E2%80%9D). Returns an array containing the first match, or all matches if the `g` flag is set in the regular expression. Returns `null` if no matches are found.\n\nFor checking whether text is present, consider `includes()` instead.\n\n- [*`String`*.**`parseJson()`**](string/#stringparsejson)\n\n Returns the JavaScript Object or value represented by the string, or `undefined` if the string isn’t valid JSON. Single-quoted JSON is not supported.\n\n- [*`String`*.**`quote(mark?)`**](string/#stringquote)\n\n Wraps a string in quotation marks, and escapes any quotation marks already in the string. Useful when constructing JSON, SQL, etc.\n\n- [*`String`*.**`removeMarkdown()`**](string/#stringremovemarkdown)\n\n Removes any Markdown formatting from the string. Also removes HTML tags.\n\n- [*`String`*.**`removeTags()`**](string/#stringremovetags)\n\n Removes tags, such as HTML or XML, from the string\n\n- [*`String`*.**`replace(pattern, replacement)`**](string/#stringreplace)\n\n Returns a string with the first occurrence of `pattern` replaced by `replacement`.\n\nTo replace all occurrences, use `replaceAll()` instead.\n\n- [*`String`*.**`replaceAll(pattern, replacement)`**](string/#stringreplaceall)\n\n Returns a string with all occurrences of `pattern` replaced by `replacement`\n\n- [*`String`*.**`replaceSpecialChars()`**](string/#stringreplacespecialchars)\n\n Replaces special characters in the string with the closest ASCII character\n\n- [*`String`*.**`search(regexp)`**](string/#stringsearch)\n\n Returns the index (position) of the first occurrence of a pattern within the string, or -1 if not found. The pattern is specified using a [regular expression](%E2%80%9Dhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions%E2%80%9D). To use text instead, see `indexOf()`.\n\n- [*`String`*.**`slice(start, end?)`**](string/#stringslice)\n\n Extracts a fragment of the string at the given position. For more advanced extraction, see `match()`.\n\n- [*`String`*.**`split(separator?, limit?)`**](string/#stringsplit)\n\n Splits the string into an array of substrings. Each split is made at the `separator`, and the separator isn’t included in the output.\n\nThe opposite of using `join()` on an array.\n\n- [*`String`*.**`startsWith(searchString, start?)`**](string/#stringstartswith)\n\n Returns `true` if the string starts with `searchString`. Case-sensitive.\n\n- [*`String`*.**`substring(start, end?)`**](string/#stringsubstring)\n\n Extracts a fragment of the string at the given position. For more advanced extraction, see `match()`.\n\n- [*`String`*.**`toBoolean()`**](string/#stringtoboolean)\n\n Converts the string to a boolean value. `0`, `false` and `no` resolve to `false`, everything else to `true`. Case-insensitive.\n\n- [*`String`*.**`toDateTime()`**](string/#stringtodatetime)\n\n Converts the string to a DateTime. Useful for further transformation. Supported formats for the string are ISO 8601, HTTP, RFC2822, SQL and Unix timestamp in milliseconds.\n\nTo parse other formats, use [`DateTime.fromFormat()`](%E2%80%9Dhttps://moment.github.io/luxon/api-docs/index.html#datetimefromformat%E2%80%9D).\n\n- [*`String`*.**`toJsonString()`**](string/#stringtojsonstring)\n\n Prepares the string to be inserted into a JSON object. Escapes any quotes and special characters (e.g. new lines), and wraps the string in quotes.\n\nThe same as JavaScript’s `JSON.stringify()`.\n\n- [*`String`*.**`toLowerCase()`**](string/#stringtolowercase)\n\n Converts all letters in the string to lower case\n\n- [*`String`*.**`toNumber()`**](string/#stringtonumber)\n\n Converts a string representing a number to a number. Throws an error if the string doesn’t start with a valid number.\n\n- [*`String`*.**`toSentenceCase()`**](string/#stringtosentencecase)\n\n Changes the capitalization of the string to sentence case. The first letter of each sentence is capitalized and all others are lowercased.\n\n- [*`String`*.**`toSnakeCase()`**](string/#stringtosnakecase)\n\n Changes the format of the string to snake case. Spaces and dashes are replaced by `_`, symbols are removed and all letters are lowercased.\n\n- [*`String`*.**`toTitleCase()`**](string/#stringtotitlecase)\n\n Changes the capitalization of the string to title case. The first letter of each word is capitalized and the others left unchanged. Short prepositions and conjunctions aren’t capitalized (e.g. ‘a’, ‘the’).\n\n- [*`String`*.**`toUpperCase()`**](string/#stringtouppercase)\n\n Converts all letters in the string to upper case (capitals)\n\n- [*`String`*.**`trim()`**](string/#stringtrim)\n\n Removes whitespace from both ends of the string. Whitespace includes new lines, tabs, spaces, etc.\n\n- [*`String`*.**`urlDecode(allChars?)`**](string/#stringurldecode)\n\n Decodes a URL-encoded string. Replaces any character codes in the form of `%XX` with their corresponding characters.\n\n- [*`String`*.**`urlEncode(allChars?)`**](string/#stringurlencode)\n\n Encodes the string so that it can be used in a URL. Spaces and special characters are replaced with codes of the form `%XX`.\n\n## WorkflowData\n\n- [`$workflow`.**`active`**](workflowdata/#workflowactive)\n\n Whether the workflow is active\n\n- [`$workflow`.**`id`**](workflowdata/#workflowid)\n\n The workflow ID. Can also be found in the workflow’s URL.\n\n- [`$workflow`.**`name`**](workflowdata/#workflowname)\n\n The name of the workflow, as shown at the top of the editor\n",
10222
10222
  "excerpt": "# Expression Reference These are some commonly used expressions. A more exhaustive list appears below. | Category | Expression | Description...",
10223
10223
  "sections": [
10224
10224
  {
@@ -10255,7 +10255,7 @@
10255
10255
  "codeExamples": 0,
10256
10256
  "complexity": "intermediate",
10257
10257
  "readingTime": "22 min",
10258
- "contentLength": 45286,
10258
+ "contentLength": 45288,
10259
10259
  "relatedPages": []
10260
10260
  },
10261
10261
  "searchIndex": {
@@ -12538,6 +12538,63 @@
12538
12538
  },
12539
12539
  {
12540
12540
  "id": "page-0140",
12541
+ "title": "Flow logic",
12542
+ "url": "https://docs.n8n.io/flow-logic/index.md",
12543
+ "urlPath": "flow-logic/index.md",
12544
+ "category": "flow-logic",
12545
+ "subcategory": null,
12546
+ "nodeName": null,
12547
+ "nodeType": null,
12548
+ "content": {
12549
+ "markdown": "# Flow logic\n\nn8n allows you to represent complex logic in your workflows.\n\nThis section covers:\n\n- [Splitting with conditionals](/flow-logic/splitting/)\n- [Merging data](/flow-logic/merging/)\n- [Looping](/flow-logic/looping/)\n- [Waiting](/flow-logic/waiting/)\n- [Sub-workflows](/flow-logic/subworkflows/)\n- [Error handling](/flow-logic/error-handling/)\n- [Execution order in multi-branch workflows](/flow-logic/execution-order/)\n\n## Related sections\n\nYou need some understanding of [Data](../data/) in n8n, including [Data structure](../data/data-structure/) and [Data flow within nodes](../data/data-structure/#how-data-flows-within-nodes).\n\nWhen building your logic, you'll use n8n's [Core nodes](../integrations/builtin/core-nodes/), including:\n\n- Splitting: [IF](../integrations/builtin/core-nodes/n8n-nodes-base.if/) and [Switch](../integrations/builtin/core-nodes/n8n-nodes-base.switch/).\n- Merging: [Merge](../integrations/builtin/core-nodes/n8n-nodes-base.merge/), [Compare Datasets](../integrations/builtin/core-nodes/n8n-nodes-base.comparedatasets/), and [Code](../integrations/builtin/core-nodes/n8n-nodes-base.code/).\n- Looping: [IF](../integrations/builtin/core-nodes/n8n-nodes-base.if/) and [Loop Over Items](../integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/).\n- Waiting: [Wait](../integrations/builtin/core-nodes/n8n-nodes-base.wait/).\n- Creating sub-workflows: [Execute Workflow](../integrations/builtin/core-nodes/n8n-nodes-base.executeworkflow/) and [Execute Workflow Trigger](../integrations/builtin/core-nodes/n8n-nodes-base.executeworkflowtrigger/).\n- Error handling: [Stop And Error](../integrations/builtin/core-nodes/n8n-nodes-base.stopanderror/) and [Error Trigger](../integrations/builtin/core-nodes/n8n-nodes-base.errortrigger/).\n",
12550
+ "excerpt": "# Flow logic n8n allows you to represent complex logic in your workflows. This section covers: - [Splitting with conditionals](/flow-logic/splitting/) - [Merging data](/flow-logic/merging/) - [Looping](/flow-logic/looping/) - [Waiting](/flow-logic/waiting/) - [Sub-workflows](/flow-logic/subworkflows/) - [Error handling](/flow-logic/error-handling/) - [Execution order in multi-branch workflows](/flow-logic/execution-order/) ## Related sections You need some understanding of [Data](../data/)...",
12551
+ "sections": [
12552
+ {
12553
+ "title": "Flow logic",
12554
+ "level": 1,
12555
+ "content": "n8n allows you to represent complex logic in your workflows.\n\nThis section covers:\n\n- [Splitting with conditionals](/flow-logic/splitting/)\n- [Merging data](/flow-logic/merging/)\n- [Looping](/flow-logic/looping/)\n- [Waiting](/flow-logic/waiting/)\n- [Sub-workflows](/flow-logic/subworkflows/)\n- [Error handling](/flow-logic/error-handling/)\n- [Execution order in multi-branch workflows](/flow-logic/execution-order/)"
12556
+ }
12557
+ ]
12558
+ },
12559
+ "metadata": {
12560
+ "keywords": [
12561
+ "flow",
12562
+ "logic",
12563
+ "related",
12564
+ "sections"
12565
+ ],
12566
+ "useCases": [],
12567
+ "operations": [],
12568
+ "codeExamples": 0,
12569
+ "complexity": "beginner",
12570
+ "readingTime": "1 min",
12571
+ "contentLength": 1774,
12572
+ "relatedPages": []
12573
+ },
12574
+ "searchIndex": {
12575
+ "fullText": "flow logic # flow logic\n\nn8n allows you to represent complex logic in your workflows.\n\nthis section covers:\n\n- [splitting with conditionals](/flow-logic/splitting/)\n- [merging data](/flow-logic/merging/)\n- [looping](/flow-logic/looping/)\n- [waiting](/flow-logic/waiting/)\n- [sub-workflows](/flow-logic/subworkflows/)\n- [error handling](/flow-logic/error-handling/)\n- [execution order in multi-branch workflows](/flow-logic/execution-order/)\n\n## related sections\n\nyou need some understanding of [data](../data/) in n8n, including [data structure](../data/data-structure/) and [data flow within nodes](../data/data-structure/#how-data-flows-within-nodes).\n\nwhen building your logic, you'll use n8n's [core nodes](../integrations/builtin/core-nodes/), including:\n\n- splitting: [if](../integrations/builtin/core-nodes/n8n-nodes-base.if/) and [switch](../integrations/builtin/core-nodes/n8n-nodes-base.switch/).\n- merging: [merge](../integrations/builtin/core-nodes/n8n-nodes-base.merge/), [compare datasets](../integrations/builtin/core-nodes/n8n-nodes-base.comparedatasets/), and [code](../integrations/builtin/core-nodes/n8n-nodes-base.code/).\n- looping: [if](../integrations/builtin/core-nodes/n8n-nodes-base.if/) and [loop over items](../integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/).\n- waiting: [wait](../integrations/builtin/core-nodes/n8n-nodes-base.wait/).\n- creating sub-workflows: [execute workflow](../integrations/builtin/core-nodes/n8n-nodes-base.executeworkflow/) and [execute workflow trigger](../integrations/builtin/core-nodes/n8n-nodes-base.executeworkflowtrigger/).\n- error handling: [stop and error](../integrations/builtin/core-nodes/n8n-nodes-base.stopanderror/) and [error trigger](../integrations/builtin/core-nodes/n8n-nodes-base.errortrigger/).\n flow logic",
12576
+ "importantTerms": [
12577
+ "nodes",
12578
+ "core",
12579
+ "integrations",
12580
+ "builtin",
12581
+ "logic",
12582
+ "base",
12583
+ "flow",
12584
+ "data",
12585
+ "error",
12586
+ "workflows",
12587
+ "splitting",
12588
+ "merging",
12589
+ "looping",
12590
+ "waiting",
12591
+ "handling",
12592
+ "structure"
12593
+ ]
12594
+ }
12595
+ },
12596
+ {
12597
+ "id": "page-0141",
12541
12598
  "title": "Error handling",
12542
12599
  "url": "https://docs.n8n.io/flow-logic/error-handling/index.md",
12543
12600
  "urlPath": "flow-logic/error-handling/index.md",
@@ -12620,7 +12677,7 @@
12620
12677
  }
12621
12678
  },
12622
12679
  {
12623
- "id": "page-0141",
12680
+ "id": "page-0142",
12624
12681
  "title": "Execution order in multi-branch workflows",
12625
12682
  "url": "https://docs.n8n.io/flow-logic/execution-order/index.md",
12626
12683
  "urlPath": "flow-logic/execution-order/index.md",
@@ -12671,7 +12728,7 @@
12671
12728
  }
12672
12729
  },
12673
12730
  {
12674
- "id": "page-0142",
12731
+ "id": "page-0143",
12675
12732
  "title": "Looping",
12676
12733
  "url": "https://docs.n8n.io/flow-logic/looping/index.md",
12677
12734
  "urlPath": "flow-logic/looping/index.md",
@@ -12763,7 +12820,7 @@
12763
12820
  }
12764
12821
  },
12765
12822
  {
12766
- "id": "page-0143",
12823
+ "id": "page-0144",
12767
12824
  "title": "Merging data",
12768
12825
  "url": "https://docs.n8n.io/flow-logic/merging/index.md",
12769
12826
  "urlPath": "flow-logic/merging/index.md",
@@ -12842,7 +12899,7 @@
12842
12899
  }
12843
12900
  },
12844
12901
  {
12845
- "id": "page-0144",
12902
+ "id": "page-0145",
12846
12903
  "title": "Splitting with conditionals",
12847
12904
  "url": "https://docs.n8n.io/flow-logic/splitting/index.md",
12848
12905
  "urlPath": "flow-logic/splitting/index.md",
@@ -12895,7 +12952,7 @@
12895
12952
  }
12896
12953
  },
12897
12954
  {
12898
- "id": "page-0145",
12955
+ "id": "page-0146",
12899
12956
  "title": "Sub-workflows",
12900
12957
  "url": "https://docs.n8n.io/flow-logic/subworkflows/index.md",
12901
12958
  "urlPath": "flow-logic/subworkflows/index.md",
@@ -12984,7 +13041,7 @@
12984
13041
  }
12985
13042
  },
12986
13043
  {
12987
- "id": "page-0146",
13044
+ "id": "page-0147",
12988
13045
  "title": "Waiting",
12989
13046
  "url": "https://docs.n8n.io/flow-logic/waiting/index.md",
12990
13047
  "urlPath": "flow-logic/waiting/index.md",
@@ -13026,63 +13083,6 @@
13026
13083
  ]
13027
13084
  }
13028
13085
  },
13029
- {
13030
- "id": "page-0147",
13031
- "title": "Flow logic",
13032
- "url": "https://docs.n8n.io/flow-logic/index.md",
13033
- "urlPath": "flow-logic/index.md",
13034
- "category": "flow-logic",
13035
- "subcategory": null,
13036
- "nodeName": null,
13037
- "nodeType": null,
13038
- "content": {
13039
- "markdown": "# Flow logic\n\nn8n allows you to represent complex logic in your workflows.\n\nThis section covers:\n\n- [Splitting with conditionals](/flow-logic/splitting/)\n- [Merging data](/flow-logic/merging/)\n- [Looping](/flow-logic/looping/)\n- [Waiting](/flow-logic/waiting/)\n- [Sub-workflows](/flow-logic/subworkflows/)\n- [Error handling](/flow-logic/error-handling/)\n- [Execution order in multi-branch workflows](/flow-logic/execution-order/)\n\n## Related sections\n\nYou need some understanding of [Data](../data/) in n8n, including [Data structure](../data/data-structure/) and [Data flow within nodes](../data/data-structure/#how-data-flows-within-nodes).\n\nWhen building your logic, you'll use n8n's [Core nodes](../integrations/builtin/core-nodes/), including:\n\n- Splitting: [IF](../integrations/builtin/core-nodes/n8n-nodes-base.if/) and [Switch](../integrations/builtin/core-nodes/n8n-nodes-base.switch/).\n- Merging: [Merge](../integrations/builtin/core-nodes/n8n-nodes-base.merge/), [Compare Datasets](../integrations/builtin/core-nodes/n8n-nodes-base.comparedatasets/), and [Code](../integrations/builtin/core-nodes/n8n-nodes-base.code/).\n- Looping: [IF](../integrations/builtin/core-nodes/n8n-nodes-base.if/) and [Loop Over Items](../integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/).\n- Waiting: [Wait](../integrations/builtin/core-nodes/n8n-nodes-base.wait/).\n- Creating sub-workflows: [Execute Workflow](../integrations/builtin/core-nodes/n8n-nodes-base.executeworkflow/) and [Execute Workflow Trigger](../integrations/builtin/core-nodes/n8n-nodes-base.executeworkflowtrigger/).\n- Error handling: [Stop And Error](../integrations/builtin/core-nodes/n8n-nodes-base.stopanderror/) and [Error Trigger](../integrations/builtin/core-nodes/n8n-nodes-base.errortrigger/).\n",
13040
- "excerpt": "# Flow logic n8n allows you to represent complex logic in your workflows. This section covers: - [Splitting with conditionals](/flow-logic/splitting/) - [Merging data](/flow-logic/merging/) - [Looping](/flow-logic/looping/) - [Waiting](/flow-logic/waiting/) - [Sub-workflows](/flow-logic/subworkflows/) - [Error handling](/flow-logic/error-handling/) - [Execution order in multi-branch workflows](/flow-logic/execution-order/) ## Related sections You need some understanding of [Data](../data/)...",
13041
- "sections": [
13042
- {
13043
- "title": "Flow logic",
13044
- "level": 1,
13045
- "content": "n8n allows you to represent complex logic in your workflows.\n\nThis section covers:\n\n- [Splitting with conditionals](/flow-logic/splitting/)\n- [Merging data](/flow-logic/merging/)\n- [Looping](/flow-logic/looping/)\n- [Waiting](/flow-logic/waiting/)\n- [Sub-workflows](/flow-logic/subworkflows/)\n- [Error handling](/flow-logic/error-handling/)\n- [Execution order in multi-branch workflows](/flow-logic/execution-order/)"
13046
- }
13047
- ]
13048
- },
13049
- "metadata": {
13050
- "keywords": [
13051
- "flow",
13052
- "logic",
13053
- "related",
13054
- "sections"
13055
- ],
13056
- "useCases": [],
13057
- "operations": [],
13058
- "codeExamples": 0,
13059
- "complexity": "beginner",
13060
- "readingTime": "1 min",
13061
- "contentLength": 1774,
13062
- "relatedPages": []
13063
- },
13064
- "searchIndex": {
13065
- "fullText": "flow logic # flow logic\n\nn8n allows you to represent complex logic in your workflows.\n\nthis section covers:\n\n- [splitting with conditionals](/flow-logic/splitting/)\n- [merging data](/flow-logic/merging/)\n- [looping](/flow-logic/looping/)\n- [waiting](/flow-logic/waiting/)\n- [sub-workflows](/flow-logic/subworkflows/)\n- [error handling](/flow-logic/error-handling/)\n- [execution order in multi-branch workflows](/flow-logic/execution-order/)\n\n## related sections\n\nyou need some understanding of [data](../data/) in n8n, including [data structure](../data/data-structure/) and [data flow within nodes](../data/data-structure/#how-data-flows-within-nodes).\n\nwhen building your logic, you'll use n8n's [core nodes](../integrations/builtin/core-nodes/), including:\n\n- splitting: [if](../integrations/builtin/core-nodes/n8n-nodes-base.if/) and [switch](../integrations/builtin/core-nodes/n8n-nodes-base.switch/).\n- merging: [merge](../integrations/builtin/core-nodes/n8n-nodes-base.merge/), [compare datasets](../integrations/builtin/core-nodes/n8n-nodes-base.comparedatasets/), and [code](../integrations/builtin/core-nodes/n8n-nodes-base.code/).\n- looping: [if](../integrations/builtin/core-nodes/n8n-nodes-base.if/) and [loop over items](../integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/).\n- waiting: [wait](../integrations/builtin/core-nodes/n8n-nodes-base.wait/).\n- creating sub-workflows: [execute workflow](../integrations/builtin/core-nodes/n8n-nodes-base.executeworkflow/) and [execute workflow trigger](../integrations/builtin/core-nodes/n8n-nodes-base.executeworkflowtrigger/).\n- error handling: [stop and error](../integrations/builtin/core-nodes/n8n-nodes-base.stopanderror/) and [error trigger](../integrations/builtin/core-nodes/n8n-nodes-base.errortrigger/).\n flow logic",
13066
- "importantTerms": [
13067
- "nodes",
13068
- "core",
13069
- "integrations",
13070
- "builtin",
13071
- "logic",
13072
- "base",
13073
- "flow",
13074
- "data",
13075
- "error",
13076
- "workflows",
13077
- "splitting",
13078
- "merging",
13079
- "looping",
13080
- "waiting",
13081
- "handling",
13082
- "structure"
13083
- ]
13084
- }
13085
- },
13086
13086
  {
13087
13087
  "id": "page-0148",
13088
13088
  "title": "Contributing",
@@ -18141,13 +18141,13 @@
18141
18141
  "nodeName": null,
18142
18142
  "nodeType": null,
18143
18143
  "content": {
18144
- "markdown": "# Queue mode\n\nYou can run n8n in different modes depending on your needs. The queue mode provides the best scalability.\n\nBinary data storage\n\nn8n doesn't support queue mode with binary data storage in filesystem. If your workflows need to persist binary data in queue mode, you can use [S3 external storage](../external-storage/).\n\n## How it works\n\nWhen running in queue mode, you have multiple n8n instances set up, with one main instance receiving workflow information (such as triggers) and the worker instances performing the executions.\n\nEach worker is its own Node.js instance, running in `main` mode, but able to handle multiple simultaneous workflow executions due to their high IOPS (input-output operations per second).\n\nBy using worker instances and running in queue mode, you can scale n8n up (by adding workers) and down (by removing workers) as needed to handle the workload.\n\nThis is the process flow:\n\n1. The main n8n instance handles timers and webhook calls, generating (but not running) a workflow execution.\n1. It passes the execution ID to a message broker, [Redis](#start-redis), which maintains the queue of pending executions and allows the next available worker to pick them up.\n1. A worker in the pool picks up message from Redis.\n1. The worker uses the execution ID to get workflow information from the database.\n1. After completing the workflow execution, the worker:\n - Writes the results to the database.\n - Posts to Redis, saying that the execution has finished.\n1. Redis notifies the main instance.\n\n## Configuring workers\n\nWorkers are n8n instances that do the actual work. They receive information from the main n8n process about the workflows that have to get executed, execute the workflows, and update the status after each execution is complete.\n\n### Set encryption key\n\nn8n automatically generates an encryption key upon first startup. You can also provide your own custom key using [environment variable](../../configuration/environment-variables/) if desired.\n\nThe encryption key of the main n8n instance must be shared with all worker and webhooks processor nodes to ensure these worker nodes are able to access credentials stored in the database.\n\nSet the encryption key for each worker node in a [configuration file](../../configuration/configuration-methods/) or by setting the corresponding environment variable:\n\n```\nexport N8N_ENCRYPTION_KEY=<main_instance_encryption_key>\n```\n\n### Set executions mode\n\nDatabase considerations\n\nn8n recommends using Postgres 13+. Running n8n with execution mode set to `queue` with an SQLite database isn't recommended.\n\nSet the environment variable `EXECUTIONS_MODE` to `queue` on the main instance and any workers using the following command.\n\n```\nexport EXECUTIONS_MODE=queue\n```\n\nAlternatively, you can set `executions.mode` to `queue` in the [configuration file](../../configuration/environment-variables/).\n\n### Start Redis\n\nRunning Redis on a separate machine\n\nYou can run Redis on a separate machine, just make sure that it's accessible by the n8n instance.\n\nTo run Redis in a Docker container, follow the instructions below:\n\nRun the following command to start a Redis instance:\n\n```\ndocker run --name some-redis -p 6379:6379 -d redis\n```\n\nBy default, Redis runs on `localhost` on port `6379` with no password. Based on your Redis configuration, set the following configurations for the main n8n process. These will allow n8n to interact with Redis.\n\n| Using configuration file | Using environment variables | Description |\n| --------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- |\n| `queue.bull.redis.host:localhost` | `QUEUE_BULL_REDIS_HOST=localhost` | By default, Redis runs on `localhost`. |\n| `queue.bull.redis.port:6379` | `QUEUE_BULL_REDIS_PORT=6379` | The default port is `6379`. If Redis is running on a different port, configure the value. |\n\nYou can also set the following optional configurations:\n\n| Using configuration file | Using environment variables | Description |\n| ------------------------------------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- |\n| `queue.bull.redis.username:USERNAME` | `QUEUE_BULL_REDIS_USERNAME` | By default, Redis doesn't require a username. If you're using a specific user, configure it variable. |\n| `queue.bull.redis.password:PASSWORD` | `QUEUE_BULL_REDIS_PASSWORD` | By default, Redis doesn't require a password. If you're using a password, configure it variable. |\n| `queue.bull.redis.db:0` | `QUEUE_BULL_REDIS_DB` | The default value is `0`. If you change this value, update the configuration. |\n| `queue.bull.redis.timeoutThreshold:10000ms` | `QUEUE_BULL_REDIS_TIMEOUT_THRESHOLD` | Tells n8n how long it should wait if Redis is unavailable before exiting. The default value is `10000` (ms). |\n| `queue.bull.gracefulShutdownTimeout:30` | `N8N_GRACEFUL_SHUTDOWN_TIMEOUT` | A graceful shutdown timeout for workers to finish executing jobs before terminating the process. The default value is `30` seconds. |\n\nNow you can start your n8n instance and it will connect to your Redis instance.\n\n### Start workers\n\nYou will need to start worker processes to allow n8n to execute workflows. If you want to host workers on a separate machine, install n8n on the machine and make sure that it's connected to your Redis instance and the n8n database.\n\nStart worker processes by running the following command from the root directory:\n\n```\n./packages/cli/bin/n8n worker\n```\n\nIf you're using Docker, use the following command:\n\n```\ndocker run --name n8n-queue -p 5679:5678 docker.n8n.io/n8nio/n8n worker\n```\n\nYou can set up multiple worker processes. Make sure that all the worker processes have access to Redis and the n8n database.\n\n#### Worker server\n\nEach worker process runs a server that exposes optional endpoints:\n\n- `/healthz`: returns whether the worker is up, if you enable the `QUEUE_HEALTH_CHECK_ACTIVE` environment variable\n- `/healthz/readiness`: returns whether worker's DB and Redis connections are ready, if you enable the `QUEUE_HEALTH_CHECK_ACTIVE` environment variable\n- [credentials overwrite endpoint](../../../embed/configuration/#credential-overwrites)\n- [`/metrics`](../../configuration/configuration-examples/prometheus/)\n\nCustomizing health check endpoints\n\nYou can customize the health check endpoint path using the [`N8N_ENDPOINT_HEALTH`](../../configuration/environment-variables/endpoints/) environment variable.\n\n#### View running workers\n\nFeature availability\n\n- Available on Self-hosted Enterprise plans.\n- If you want access to this feature on Cloud Enterprise, [contact n8n](https://n8n-community.typeform.com/to/y9X2YuGa).\n\nYou can view running workers and their performance metrics in n8n by selecting **Settings** > **Workers**.\n\n## Running n8n with queues\n\nWhen running n8n with queues, all the production workflow executions get processed by worker processes. For webhooks, this means the HTTP request is received by the main/webhook process, but the actual workflow execution is passed to a worker, which can add some overhead and latency.\n\nRedis acts as the message broker, and the database persists data, so access to both is required. Running a distributed system with this setup over SQLite isn't supported.\n\nMigrate data\n\nIf you want to migrate data from one database to another, you can use the Export and Import commands. Refer to the [CLI commands for n8n](../../cli-commands/#export-workflows-and-credentials) documentation to learn how to use these commands.\n\n## Webhook processors\n\nKeep in mind\n\nWebhook processes rely on Redis and need the `EXECUTIONS_MODE` environment variable set too. Follow the [configure the workers](#configuring-workers) section above to setup webhook processor nodes.\n\nWebhook processors are another layer of scaling in n8n. Configuring the webhook processor is optional, and allows you to scale the incoming webhook requests.\n\nThis method allows n8n to process a huge number of parallel requests. All you have to do is add more webhook processes and workers accordingly. The webhook process will listen to requests on the same port (default: `5678`). Run these processes in containers or separate machines, and have a load balancing system to route requests accordingly.\n\nn8n doesn't recommend adding the main process to the load balancer pool. If you add the main process to the pool, it will receive requests and possibly a heavy load. This will result in degraded performance for editing, viewing, and interacting with the n8n UI.\n\nYou can start the webhook processor by executing the following command from the root directory:\n\n```\n./packages/cli/bin/n8n webhook\n```\n\nIf you're using Docker, use the following command:\n\n```\ndocker run --name n8n-queue -p 5679:5678 -e \"EXECUTIONS_MODE=queue\" docker.n8n.io/n8nio/n8n webhook\n```\n\n### Configure webhook URL\n\nTo configure your webhook URL, execute the following command on the machine running the main n8n instance:\n\n```\nexport WEBHOOK_URL=https://your-webhook-url.com\n```\n\nYou can also set this value in the configuration file.\n\n### Configure load balancer\n\nWhen using multiple webhook processes you will need a load balancer to route requests. If you are using the same domain name for your n8n instance and the webhooks, you can set up your load balancer to route requests as follows:\n\n- Redirect any request that matches `/webhook/*` to the webhook servers pool\n- All other paths (the n8n internal API, the static files for the editor, etc.) should get routed to the main process\n\n**Note:** The default URL for manual workflow executions is `/webhook-test/*`. Make sure that these URLs route to your main process.\n\nYou can change this path in the configuration file `endpoints.webhook` or using the `N8N_ENDPOINT_WEBHOOK` environment variable. If you change these, update your load balancer accordingly.\n\n### Disable webhook processing in the main process (optional)\n\nYou have webhook processors to execute the workflows. You can disable the webhook processing in the main process. This will make sure to execute all webhook executions in the webhook processors. In the configuration file set `endpoints.disableProductionWebhooksOnMainProcess` to `true` so that n8n doesn't process webhook requests on the main process.\n\nAlternatively, you can use the following command:\n\n```\nexport N8N_DISABLE_PRODUCTION_MAIN_PROCESS=true\n```\n\nWhen disabling the webhook process in the main process, run the main process and don't add it to the load balancer's webhook pool.\n\n## Configure worker concurrency\n\nYou can define the number of jobs a worker can run in parallel by using the `concurrency` flag. It defaults to `10`. To change it:\n\n```\nn8n worker --concurrency=5\n```\n\n## Concurrency and scaling recommendations\n\nn8n recommends setting concurrency to 5 or higher for your worker instances. Setting low concurrency values with a large numbers of workers can exhaust your database's connection pool, leading to processing delays and failures.\n\n## Multi-main setup\n\nFeature availability\n\n- Available on Self-hosted Enterprise plans.\n\nIn queue mode you can run more than one `main` process for high availability.\n\nIn a single-mode setup, the `main` process does two sets of tasks:\n\n- **regular tasks**, such as running the API, serving the UI, and listening for webhooks, and\n- **at-most-once tasks**, such as running non-HTTP triggers (timers, pollers, and persistent connections like RabbitMQ and IMAP), and pruning executions and binary data.\n\nIn a multi-main setup, there are two kinds of `main` processes:\n\n- **followers**, which run **regular tasks**, and\n- the **leader**, which runs **both regular and at-most-once tasks**.\n\n### Leader designation\n\nIn a multi-main setup, all main instances handle the leadership process transparently to users. In case the current leader becomes unavailable, for example because it crashed or its event loop became too busy, other followers can take over. If the previous leader becomes responsive again, it becomes a follower.\n\n### Configuring multi-main setup\n\nTo deploy n8n in multi-main setup, ensure:\n\n- All `main` processes are running in queue mode and are connected to Postgres and Redis.\n- All `main` and `worker` processes are running the same version of n8n.\n- All `main` processes have set the environment variable `N8N_MULTI_MAIN_SETUP_ENABLED` to `true`.\n- All `main` processes are running behind a load balancer with session persistence (sticky sessions) enabled.\n\nIf needed, you can adjust the leader key options:\n\n| Using configuration file | Using environment variables | Description |\n| --------------------------- | --------------------------------------- | ------------------------------------------------------------- |\n| `multiMainSetup.ttl:10` | `N8N_MULTI_MAIN_SETUP_KEY_TTL=10` | Time to live (in seconds) for leader key in multi-main setup. |\n| `multiMainSetup.interval:3` | `N8N_MULTI_MAIN_SETUP_CHECK_INTERVAL=3` | Interval (in seconds) for leader check in multi-main setup. |\n",
18145
- "excerpt": "# Queue mode You can run n8n in different modes depending on your needs. The queue mode provides the best scalability. Binary data storage n8n doesn't support queue mode with binary data storage in filesystem. If your workflows need to persist binary data in queue mode, you can use [S3 external storage](../external-storage/). ## How it works When running in queue mode, you have multiple n8n instances set up, with one main instance receiving workflow information (such as triggers) and the wo...",
18144
+ "markdown": "# Performance and benchmarking\n\nn8n can handle up to 220 workflow executions per second on a single instance, with the ability to scale up further by adding more instances.\n\nThis document outlines n8n's performance benchmarking. It describes the factors that affect performance, and includes two example benchmarks.\n\n## Performance factors\n\nThe performance of n8n depends on factors including:\n\n- The workflow type\n- The resources available to n8n\n- How you configure n8n's scaling options\n\n## Run your own benchmarking\n\nTo get an accurate estimate for your use case, run n8n's [benchmarking framework](https://github.com/n8n-io/n8n/tree/master/packages/%40n8n/benchmark). The repository contains more information about the benchmarking.\n\n## Example: Single instance performance\n\nThis test measures how response time increases as requests per second increase. It looks at the response time when calling the Webhook Trigger node.\n\nSetup:\n\n- Hardware: ECS c5a.large instance (4GB RAM)\n- n8n setup: Single n8n instance (running in main mode, with Postgres database)\n- Workflow: Webhook Trigger node, Edit Fields node\n\nThis graph shows the percentage of requests to the Webhook Trigger node getting a response within 100 seconds, and how that varies with load. Under higher loads n8n usually still processes the data, but takes over 100s to respond.\n\n## Example: Multi-instance performance\n\nThis test measures how response time increases as requests per second increase. It looks at the response time when calling the Webhook Trigger node.\n\nSetup:\n\n- Hardware: seven ECS c5a.4xlarge instances (8GB RAM each)\n- n8n setup: two webhook instances, four worker instances, one database instance (MySQL), one main instance running n8n and Redis\n- Workflow: Webhook Trigger node, Edit Fields node\n- Multi-instance setups use [Queue mode](../queue-mode/)\n\nThis graph shows the percentage of requests to the Webhook Trigger node getting a response within 100 seconds, and how that varies with load. Under higher loads n8n usually still processes the data, but takes over 100s to respond.\n",
18145
+ "excerpt": "# Performance and benchmarking n8n can handle up to 220 workflow executions per second on a single instance, with the ability to scale up further by adding more instances. This document outlines n8n's performance benchmarking. It describes the factors that affect performance, and includes two example benchmarks. ## Performance factors The performance of n8n depends on factors including: - The workflow type - The resources available to n8n - How you configure n8n's scaling options ## Run yo...",
18146
18146
  "sections": [
18147
18147
  {
18148
- "title": "Queue mode",
18148
+ "title": "Performance and benchmarking",
18149
18149
  "level": 1,
18150
- "content": "You can run n8n in different modes depending on your needs. The queue mode provides the best scalability.\n\nBinary data storage\n\nn8n doesn't support queue mode with binary data storage in filesystem. If your workflows need to persist binary data in queue mode, you can use [S3 external storage](../external-storage/)."
18150
+ "content": "n8n can handle up to 220 workflow executions per second on a single instance, with the ability to scale up further by adding more instances.\n\nThis document outlines n8n's performance benchmarking. It describes the factors that affect performance, and includes two example benchmarks."
18151
18151
  }
18152
18152
  ]
18153
18153
  },
@@ -18167,6 +18167,95 @@
18167
18167
  "Multi-instance performance"
18168
18168
  ],
18169
18169
  "operations": [],
18170
+ "codeExamples": 0,
18171
+ "complexity": "beginner",
18172
+ "readingTime": "2 min",
18173
+ "contentLength": 2074,
18174
+ "relatedPages": []
18175
+ },
18176
+ "searchIndex": {
18177
+ "fullText": "performance and benchmarking # performance and benchmarking\n\nn8n can handle up to 220 workflow executions per second on a single instance, with the ability to scale up further by adding more instances.\n\nthis document outlines n8n's performance benchmarking. it describes the factors that affect performance, and includes two example benchmarks.\n\n## performance factors\n\nthe performance of n8n depends on factors including:\n\n- the workflow type\n- the resources available to n8n\n- how you configure n8n's scaling options\n\n## run your own benchmarking\n\nto get an accurate estimate for your use case, run n8n's [benchmarking framework](https://github.com/n8n-io/n8n/tree/master/packages/%40n8n/benchmark). the repository contains more information about the benchmarking.\n\n## example: single instance performance\n\nthis test measures how response time increases as requests per second increase. it looks at the response time when calling the webhook trigger node.\n\nsetup:\n\n- hardware: ecs c5a.large instance (4gb ram)\n- n8n setup: single n8n instance (running in main mode, with postgres database)\n- workflow: webhook trigger node, edit fields node\n\nthis graph shows the percentage of requests to the webhook trigger node getting a response within 100 seconds, and how that varies with load. under higher loads n8n usually still processes the data, but takes over 100s to respond.\n\n## example: multi-instance performance\n\nthis test measures how response time increases as requests per second increase. it looks at the response time when calling the webhook trigger node.\n\nsetup:\n\n- hardware: seven ecs c5a.4xlarge instances (8gb ram each)\n- n8n setup: two webhook instances, four worker instances, one database instance (mysql), one main instance running n8n and redis\n- workflow: webhook trigger node, edit fields node\n- multi-instance setups use [queue mode](../queue-mode/)\n\nthis graph shows the percentage of requests to the webhook trigger node getting a response within 100 seconds, and how that varies with load. under higher loads n8n usually still processes the data, but takes over 100s to respond.\n performance and benchmarking",
18178
+ "importantTerms": [
18179
+ "performance",
18180
+ "instance",
18181
+ "node",
18182
+ "benchmarking",
18183
+ "webhook",
18184
+ "response",
18185
+ "trigger",
18186
+ "this",
18187
+ "workflow",
18188
+ "with",
18189
+ "instances",
18190
+ "time",
18191
+ "requests",
18192
+ "setup",
18193
+ "second",
18194
+ "single",
18195
+ "factors",
18196
+ "that",
18197
+ "example",
18198
+ "mode"
18199
+ ]
18200
+ }
18201
+ },
18202
+ {
18203
+ "id": "page-0215",
18204
+ "title": "Configuring queue mode",
18205
+ "url": "https://docs.n8n.io/hosting/scaling/queue-mode/index.md",
18206
+ "urlPath": "hosting/scaling/queue-mode/index.md",
18207
+ "category": "hosting",
18208
+ "subcategory": null,
18209
+ "nodeName": null,
18210
+ "nodeType": null,
18211
+ "content": {
18212
+ "markdown": "# Queue mode\n\nYou can run n8n in different modes depending on your needs. The queue mode provides the best scalability.\n\nBinary data storage\n\nn8n doesn't support queue mode with binary data storage in filesystem. If your workflows need to persist binary data in queue mode, you can use [S3 external storage](../external-storage/).\n\n## How it works\n\nWhen running in queue mode, you have multiple n8n instances set up, with one main instance receiving workflow information (such as triggers) and the worker instances performing the executions.\n\nEach worker is its own Node.js instance, running in `main` mode, but able to handle multiple simultaneous workflow executions due to their high IOPS (input-output operations per second).\n\nBy using worker instances and running in queue mode, you can scale n8n up (by adding workers) and down (by removing workers) as needed to handle the workload.\n\nThis is the process flow:\n\n1. The main n8n instance handles timers and webhook calls, generating (but not running) a workflow execution.\n1. It passes the execution ID to a message broker, [Redis](#start-redis), which maintains the queue of pending executions and allows the next available worker to pick them up.\n1. A worker in the pool picks up message from Redis.\n1. The worker uses the execution ID to get workflow information from the database.\n1. After completing the workflow execution, the worker:\n - Writes the results to the database.\n - Posts to Redis, saying that the execution has finished.\n1. Redis notifies the main instance.\n\n## Configuring workers\n\nWorkers are n8n instances that do the actual work. They receive information from the main n8n process about the workflows that have to get executed, execute the workflows, and update the status after each execution is complete.\n\n### Set encryption key\n\nn8n automatically generates an encryption key upon first startup. You can also provide your own custom key using [environment variable](../../configuration/environment-variables/) if desired.\n\nThe encryption key of the main n8n instance must be shared with all worker and webhooks processor nodes to ensure these worker nodes are able to access credentials stored in the database.\n\nSet the encryption key for each worker node in a [configuration file](../../configuration/configuration-methods/) or by setting the corresponding environment variable:\n\n```\nexport N8N_ENCRYPTION_KEY=<main_instance_encryption_key>\n```\n\n### Set executions mode\n\nDatabase considerations\n\nn8n recommends using Postgres 13+. Running n8n with execution mode set to `queue` with an SQLite database isn't recommended.\n\nSet the environment variable `EXECUTIONS_MODE` to `queue` on the main instance and any workers using the following command.\n\n```\nexport EXECUTIONS_MODE=queue\n```\n\nAlternatively, you can set `executions.mode` to `queue` in the [configuration file](../../configuration/environment-variables/).\n\n### Start Redis\n\nRunning Redis on a separate machine\n\nYou can run Redis on a separate machine, just make sure that it's accessible by the n8n instance.\n\nTo run Redis in a Docker container, follow the instructions below:\n\nRun the following command to start a Redis instance:\n\n```\ndocker run --name some-redis -p 6379:6379 -d redis\n```\n\nBy default, Redis runs on `localhost` on port `6379` with no password. Based on your Redis configuration, set the following configurations for the main n8n process. These will allow n8n to interact with Redis.\n\n| Using configuration file | Using environment variables | Description |\n| --------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- |\n| `queue.bull.redis.host:localhost` | `QUEUE_BULL_REDIS_HOST=localhost` | By default, Redis runs on `localhost`. |\n| `queue.bull.redis.port:6379` | `QUEUE_BULL_REDIS_PORT=6379` | The default port is `6379`. If Redis is running on a different port, configure the value. |\n\nYou can also set the following optional configurations:\n\n| Using configuration file | Using environment variables | Description |\n| ------------------------------------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- |\n| `queue.bull.redis.username:USERNAME` | `QUEUE_BULL_REDIS_USERNAME` | By default, Redis doesn't require a username. If you're using a specific user, configure it variable. |\n| `queue.bull.redis.password:PASSWORD` | `QUEUE_BULL_REDIS_PASSWORD` | By default, Redis doesn't require a password. If you're using a password, configure it variable. |\n| `queue.bull.redis.db:0` | `QUEUE_BULL_REDIS_DB` | The default value is `0`. If you change this value, update the configuration. |\n| `queue.bull.redis.timeoutThreshold:10000ms` | `QUEUE_BULL_REDIS_TIMEOUT_THRESHOLD` | Tells n8n how long it should wait if Redis is unavailable before exiting. The default value is `10000` (ms). |\n| `queue.bull.gracefulShutdownTimeout:30` | `N8N_GRACEFUL_SHUTDOWN_TIMEOUT` | A graceful shutdown timeout for workers to finish executing jobs before terminating the process. The default value is `30` seconds. |\n\nNow you can start your n8n instance and it will connect to your Redis instance.\n\n### Start workers\n\nYou will need to start worker processes to allow n8n to execute workflows. If you want to host workers on a separate machine, install n8n on the machine and make sure that it's connected to your Redis instance and the n8n database.\n\nStart worker processes by running the following command from the root directory:\n\n```\n./packages/cli/bin/n8n worker\n```\n\nIf you're using Docker, use the following command:\n\n```\ndocker run --name n8n-queue -p 5679:5678 docker.n8n.io/n8nio/n8n worker\n```\n\nYou can set up multiple worker processes. Make sure that all the worker processes have access to Redis and the n8n database.\n\n#### Worker server\n\nEach worker process runs a server that exposes optional endpoints:\n\n- `/healthz`: returns whether the worker is up, if you enable the `QUEUE_HEALTH_CHECK_ACTIVE` environment variable\n- `/healthz/readiness`: returns whether worker's DB and Redis connections are ready, if you enable the `QUEUE_HEALTH_CHECK_ACTIVE` environment variable\n- [credentials overwrite endpoint](../../../embed/configuration/#credential-overwrites)\n- [`/metrics`](../../configuration/configuration-examples/prometheus/)\n\nCustomizing health check endpoints\n\nYou can customize the health check endpoint path using the [`N8N_ENDPOINT_HEALTH`](../../configuration/environment-variables/endpoints/) environment variable.\n\n#### View running workers\n\nFeature availability\n\n- Available on Self-hosted Enterprise plans.\n- If you want access to this feature on Cloud Enterprise, [contact n8n](https://n8n-community.typeform.com/to/y9X2YuGa).\n\nYou can view running workers and their performance metrics in n8n by selecting **Settings** > **Workers**.\n\n## Running n8n with queues\n\nWhen running n8n with queues, all the production workflow executions get processed by worker processes. For webhooks, this means the HTTP request is received by the main/webhook process, but the actual workflow execution is passed to a worker, which can add some overhead and latency.\n\nRedis acts as the message broker, and the database persists data, so access to both is required. Running a distributed system with this setup over SQLite isn't supported.\n\nMigrate data\n\nIf you want to migrate data from one database to another, you can use the Export and Import commands. Refer to the [CLI commands for n8n](../../cli-commands/#export-workflows-and-credentials) documentation to learn how to use these commands.\n\n## Webhook processors\n\nKeep in mind\n\nWebhook processes rely on Redis and need the `EXECUTIONS_MODE` environment variable set too. Follow the [configure the workers](#configuring-workers) section above to setup webhook processor nodes.\n\nWebhook processors are another layer of scaling in n8n. Configuring the webhook processor is optional, and allows you to scale the incoming webhook requests.\n\nThis method allows n8n to process a huge number of parallel requests. All you have to do is add more webhook processes and workers accordingly. The webhook process will listen to requests on the same port (default: `5678`). Run these processes in containers or separate machines, and have a load balancing system to route requests accordingly.\n\nn8n doesn't recommend adding the main process to the load balancer pool. If you add the main process to the pool, it will receive requests and possibly a heavy load. This will result in degraded performance for editing, viewing, and interacting with the n8n UI.\n\nYou can start the webhook processor by executing the following command from the root directory:\n\n```\n./packages/cli/bin/n8n webhook\n```\n\nIf you're using Docker, use the following command:\n\n```\ndocker run --name n8n-queue -p 5679:5678 -e \"EXECUTIONS_MODE=queue\" docker.n8n.io/n8nio/n8n webhook\n```\n\n### Configure webhook URL\n\nTo configure your webhook URL, execute the following command on the machine running the main n8n instance:\n\n```\nexport WEBHOOK_URL=https://your-webhook-url.com\n```\n\nYou can also set this value in the configuration file.\n\n### Configure load balancer\n\nWhen using multiple webhook processes you will need a load balancer to route requests. If you are using the same domain name for your n8n instance and the webhooks, you can set up your load balancer to route requests as follows:\n\n- Redirect any request that matches `/webhook/*` to the webhook servers pool\n- All other paths (the n8n internal API, the static files for the editor, etc.) should get routed to the main process\n\n**Note:** The default URL for manual workflow executions is `/webhook-test/*`. Make sure that these URLs route to your main process.\n\nYou can change this path in the configuration file `endpoints.webhook` or using the `N8N_ENDPOINT_WEBHOOK` environment variable. If you change these, update your load balancer accordingly.\n\n### Disable webhook processing in the main process (optional)\n\nYou have webhook processors to execute the workflows. You can disable the webhook processing in the main process. This will make sure to execute all webhook executions in the webhook processors. In the configuration file set `endpoints.disableProductionWebhooksOnMainProcess` to `true` so that n8n doesn't process webhook requests on the main process.\n\nAlternatively, you can use the following command:\n\n```\nexport N8N_DISABLE_PRODUCTION_MAIN_PROCESS=true\n```\n\nWhen disabling the webhook process in the main process, run the main process and don't add it to the load balancer's webhook pool.\n\n## Configure worker concurrency\n\nYou can define the number of jobs a worker can run in parallel by using the `concurrency` flag. It defaults to `10`. To change it:\n\n```\nn8n worker --concurrency=5\n```\n\n## Concurrency and scaling recommendations\n\nn8n recommends setting concurrency to 5 or higher for your worker instances. Setting low concurrency values with a large numbers of workers can exhaust your database's connection pool, leading to processing delays and failures.\n\n## Multi-main setup\n\nFeature availability\n\n- Available on Self-hosted Enterprise plans.\n\nIn queue mode you can run more than one `main` process for high availability.\n\nIn a single-mode setup, the `main` process does two sets of tasks:\n\n- **regular tasks**, such as running the API, serving the UI, and listening for webhooks, and\n- **at-most-once tasks**, such as running non-HTTP triggers (timers, pollers, and persistent connections like RabbitMQ and IMAP), and pruning executions and binary data.\n\nIn a multi-main setup, there are two kinds of `main` processes:\n\n- **followers**, which run **regular tasks**, and\n- the **leader**, which runs **both regular and at-most-once tasks**.\n\n### Leader designation\n\nIn a multi-main setup, all main instances handle the leadership process transparently to users. In case the current leader becomes unavailable, for example because it crashed or its event loop became too busy, other followers can take over. If the previous leader becomes responsive again, it becomes a follower.\n\n### Configuring multi-main setup\n\nTo deploy n8n in multi-main setup, ensure:\n\n- All `main` processes are running in queue mode and are connected to Postgres and Redis.\n- All `main` and `worker` processes are running the same version of n8n.\n- All `main` processes have set the environment variable `N8N_MULTI_MAIN_SETUP_ENABLED` to `true`.\n- All `main` processes are running behind a load balancer with session persistence (sticky sessions) enabled.\n\nIf needed, you can adjust the leader key options:\n\n| Using configuration file | Using environment variables | Description |\n| --------------------------- | --------------------------------------- | ------------------------------------------------------------- |\n| `multiMainSetup.ttl:10` | `N8N_MULTI_MAIN_SETUP_KEY_TTL=10` | Time to live (in seconds) for leader key in multi-main setup. |\n| `multiMainSetup.interval:3` | `N8N_MULTI_MAIN_SETUP_CHECK_INTERVAL=3` | Interval (in seconds) for leader check in multi-main setup. |\n",
18213
+ "excerpt": "# Queue mode You can run n8n in different modes depending on your needs. The queue mode provides the best scalability. Binary data storage n8n doesn't support queue mode with binary data storage in filesystem. If your workflows need to persist binary data in queue mode, you can use [S3 external storage](../external-storage/). ## How it works When running in queue mode, you have multiple n8n instances set up, with one main instance receiving workflow information (such as triggers) and the wo...",
18214
+ "sections": [
18215
+ {
18216
+ "title": "Queue mode",
18217
+ "level": 1,
18218
+ "content": "You can run n8n in different modes depending on your needs. The queue mode provides the best scalability.\n\nBinary data storage\n\nn8n doesn't support queue mode with binary data storage in filesystem. If your workflows need to persist binary data in queue mode, you can use [S3 external storage](../external-storage/)."
18219
+ }
18220
+ ]
18221
+ },
18222
+ "metadata": {
18223
+ "keywords": [
18224
+ "configuring",
18225
+ "queue",
18226
+ "mode",
18227
+ "works",
18228
+ "workers",
18229
+ "encryption",
18230
+ "executions",
18231
+ "start",
18232
+ "redis",
18233
+ "worker",
18234
+ "server",
18235
+ "view",
18236
+ "running",
18237
+ "with",
18238
+ "queues",
18239
+ "webhook",
18240
+ "processors",
18241
+ "configure",
18242
+ "load",
18243
+ "balancer",
18244
+ "disable",
18245
+ "processing",
18246
+ "main",
18247
+ "process",
18248
+ "(optional)",
18249
+ "concurrency",
18250
+ "scaling",
18251
+ "recommendations",
18252
+ "multi",
18253
+ "setup",
18254
+ "leader",
18255
+ "designation"
18256
+ ],
18257
+ "useCases": [],
18258
+ "operations": [],
18170
18259
  "codeExamples": 10,
18171
18260
  "complexity": "intermediate",
18172
18261
  "readingTime": "10 min",
@@ -18174,7 +18263,7 @@
18174
18263
  "relatedPages": []
18175
18264
  },
18176
18265
  "searchIndex": {
18177
- "fullText": "performance and benchmarking # queue mode\n\nyou can run n8n in different modes depending on your needs. the queue mode provides the best scalability.\n\nbinary data storage\n\nn8n doesn't support queue mode with binary data storage in filesystem. if your workflows need to persist binary data in queue mode, you can use [s3 external storage](../external-storage/).\n\n## how it works\n\nwhen running in queue mode, you have multiple n8n instances set up, with one main instance receiving workflow information (such as triggers) and the worker instances performing the executions.\n\neach worker is its own node.js instance, running in `main` mode, but able to handle multiple simultaneous workflow executions due to their high iops (input-output operations per second).\n\nby using worker instances and running in queue mode, you can scale n8n up (by adding workers) and down (by removing workers) as needed to handle the workload.\n\nthis is the process flow:\n\n1. the main n8n instance handles timers and webhook calls, generating (but not running) a workflow execution.\n1. it passes the execution id to a message broker, [redis](#start-redis), which maintains the queue of pending executions and allows the next available worker to pick them up.\n1. a worker in the pool picks up message from redis.\n1. the worker uses the execution id to get workflow information from the database.\n1. after completing the workflow execution, the worker:\n - writes the results to the database.\n - posts to redis, saying that the execution has finished.\n1. redis notifies the main instance.\n\n## configuring workers\n\nworkers are n8n instances that do the actual work. they receive information from the main n8n process about the workflows that have to get executed, execute the workflows, and update the status after each execution is complete.\n\n### set encryption key\n\nn8n automatically generates an encryption key upon first startup. you can also provide your own custom key using [environment variable](../../configuration/environment-variables/) if desired.\n\nthe encryption key of the main n8n instance must be shared with all worker and webhooks processor nodes to ensure these worker nodes are able to access credentials stored in the database.\n\nset the encryption key for each worker node in a [configuration file](../../configuration/configuration-methods/) or by setting the corresponding environment variable:\n\n```\nexport n8n_encryption_key=<main_instance_encryption_key>\n```\n\n### set executions mode\n\ndatabase considerations\n\nn8n recommends using postgres 13+. running n8n with execution mode set to `queue` with an sqlite database isn't recommended.\n\nset the environment variable `executions_mode` to `queue` on the main instance and any workers using the following command.\n\n```\nexport executions_mode=queue\n```\n\nalternatively, you can set `executions.mode` to `queue` in the [configuration file](../../configuration/environment-variables/).\n\n### start redis\n\nrunning redis on a separate machine\n\nyou can run redis on a separate machine, just make sure that it's accessible by the n8n instance.\n\nto run redis in a docker container, follow the instructions below:\n\nrun the following command to start a redis instance:\n\n```\ndocker run --name some-redis -p 6379:6379 -d redis\n```\n\nby default, redis runs on `localhost` on port `6379` with no password. based on your redis configuration, set the following configurations for the main n8n process. these will allow n8n to interact with redis.\n\n| using configuration file | using environment variables | description |\n| --------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- |\n| `queue.bull.redis.host:localhost` | `queue_bull_redis_host=localhost` | by default, redis runs on `localhost`. |\n| `queue.bull.redis.port:6379` | `queue_bull_redis_port=6379` | the default port is `6379`. if redis is running on a different port, configure the value. |\n\nyou can also set the following optional configurations:\n\n| using configuration file | using environment variables | description |\n| ------------------------------------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- |\n| `queue.bull.redis.username:username` | `queue_bull_redis_username` | by default, redis doesn't require a username. if you're using a specific user, configure it variable. |\n| `queue.bull.redis.password:password` | `queue_bull_redis_password` | by default, redis doesn't require a password. if you're using a password, configure it variable. |\n| `queue.bull.redis.db:0` | `queue_bull_redis_db` | the default value is `0`. if you change this value, update the configuration. |\n| `queue.bull.redis.timeoutthreshold:10000ms` | `queue_bull_redis_timeout_threshold` | tells n8n how long it should wait if redis is unavailable before exiting. the default value is `10000` (ms). |\n| `queue.bull.gracefulshutdowntimeout:30` | `n8n_graceful_shutdown_timeout` | a graceful shutdown timeout for workers to finish executing jobs before terminating the process. the default value is `30` seconds. |\n\nnow you can start your n8n instance and it will connect to your redis instance.\n\n### start workers\n\nyou will need to start worker processes to allow n8n to execute workflows. if you want to host workers on a separate machine, install n8n on the machine and make sure that it's connected to your redis instance and the n8n database.\n\nstart worker processes by running the following command from the root directory:\n\n```\n./packages/cli/bin/n8n worker\n```\n\nif you're using docker, use the following command:\n\n```\ndocker run --name n8n-queue -p 5679:5678 docker.n8n.io/n8nio/n8n worker\n```\n\nyou can set up multiple worker processes. make sure that all the worker processes have access to redis and the n8n database.\n\n#### worker server\n\neach worker process runs a server that exposes optional endpoints:\n\n- `/healthz`: returns whether the worker is up, if you enable the `queue_health_check_active` environment variable\n- `/healthz/readiness`: returns whether worker's db and redis connections are ready, if you enable the `queue_health_check_active` environment variable\n- [credentials overwrite endpoint](../../../embed/configuration/#credential-overwrites)\n- [`/metrics`](../../configuration/configuration-examples/prometheus/)\n\ncustomizing health check endpoints\n\nyou can customize the health check endpoint path using the [`n8n_endpoint_health`](../../configuration/environment-variables/endpoints/) environment variable.\n\n#### view running workers\n\nfeature availability\n\n- available on self-hosted enterprise plans.\n- if you want access to this feature on cloud enterprise, [contact n8n](https://n8n-community.typeform.com/to/y9x2yuga).\n\nyou can view running workers and their performance metrics in n8n by selecting **settings** > **workers**.\n\n## running n8n with queues\n\nwhen running n8n with queues, all the production workflow executions get processed by worker processes. for webhooks, this means the http request is received by the main/webhook process, but the actual workflow execution is passed to a worker, which can add some overhead and latency.\n\nredis acts as the message broker, and the database persists data, so access to both is required. running a distributed system with this setup over sqlite isn't supported.\n\nmigrate data\n\nif you want to migrate data from one database to another, you can use the export and import commands. refer to the [cli commands for n8n](../../cli-commands/#export-workflows-and-credentials) documentation to learn how to use these commands.\n\n## webhook processors\n\nkeep in mind\n\nwebhook processes rely on redis and need the `executions_mode` environment variable set too. follow the [configure the workers](#configuring-workers) section above to setup webhook processor nodes.\n\nwebhook processors are another layer of scaling in n8n. configuring the webhook processor is optional, and allows you to scale the incoming webhook requests.\n\nthis method allows n8n to process a huge number of parallel requests. all you have to do is add more webhook processes and workers accordingly. the webhook process will listen to requests on the same port (default: `5678`). run these processes in containers or separate machines, and have a load balancing system to route requests accordingly.\n\nn8n doesn't recommend adding the main process to the load balancer pool. if you add the main process to the pool, it will receive requests and possibly a heavy load. this will result in degraded performance for editing, viewing, and interacting with the n8n ui.\n\nyou can start the webhook processor by executing the following command from the root directory:\n\n```\n./packages/cli/bin/n8n webhook\n```\n\nif you're using docker, use the following command:\n\n```\ndocker run --name n8n-queue -p 5679:5678 -e \"executions_mode=queue\" docker.n8n.io/n8nio/n8n webhook\n```\n\n### configure webhook url\n\nto configure your webhook url, execute the following command on the machine running the main n8n instance:\n\n```\nexport webhook_url=https://your-webhook-url.com\n```\n\nyou can also set this value in the configuration file.\n\n### configure load balancer\n\nwhen using multiple webhook processes you will need a load balancer to route requests. if you are using the same domain name for your n8n instance and the webhooks, you can set up your l",
18266
+ "fullText": "configuring queue mode # queue mode\n\nyou can run n8n in different modes depending on your needs. the queue mode provides the best scalability.\n\nbinary data storage\n\nn8n doesn't support queue mode with binary data storage in filesystem. if your workflows need to persist binary data in queue mode, you can use [s3 external storage](../external-storage/).\n\n## how it works\n\nwhen running in queue mode, you have multiple n8n instances set up, with one main instance receiving workflow information (such as triggers) and the worker instances performing the executions.\n\neach worker is its own node.js instance, running in `main` mode, but able to handle multiple simultaneous workflow executions due to their high iops (input-output operations per second).\n\nby using worker instances and running in queue mode, you can scale n8n up (by adding workers) and down (by removing workers) as needed to handle the workload.\n\nthis is the process flow:\n\n1. the main n8n instance handles timers and webhook calls, generating (but not running) a workflow execution.\n1. it passes the execution id to a message broker, [redis](#start-redis), which maintains the queue of pending executions and allows the next available worker to pick them up.\n1. a worker in the pool picks up message from redis.\n1. the worker uses the execution id to get workflow information from the database.\n1. after completing the workflow execution, the worker:\n - writes the results to the database.\n - posts to redis, saying that the execution has finished.\n1. redis notifies the main instance.\n\n## configuring workers\n\nworkers are n8n instances that do the actual work. they receive information from the main n8n process about the workflows that have to get executed, execute the workflows, and update the status after each execution is complete.\n\n### set encryption key\n\nn8n automatically generates an encryption key upon first startup. you can also provide your own custom key using [environment variable](../../configuration/environment-variables/) if desired.\n\nthe encryption key of the main n8n instance must be shared with all worker and webhooks processor nodes to ensure these worker nodes are able to access credentials stored in the database.\n\nset the encryption key for each worker node in a [configuration file](../../configuration/configuration-methods/) or by setting the corresponding environment variable:\n\n```\nexport n8n_encryption_key=<main_instance_encryption_key>\n```\n\n### set executions mode\n\ndatabase considerations\n\nn8n recommends using postgres 13+. running n8n with execution mode set to `queue` with an sqlite database isn't recommended.\n\nset the environment variable `executions_mode` to `queue` on the main instance and any workers using the following command.\n\n```\nexport executions_mode=queue\n```\n\nalternatively, you can set `executions.mode` to `queue` in the [configuration file](../../configuration/environment-variables/).\n\n### start redis\n\nrunning redis on a separate machine\n\nyou can run redis on a separate machine, just make sure that it's accessible by the n8n instance.\n\nto run redis in a docker container, follow the instructions below:\n\nrun the following command to start a redis instance:\n\n```\ndocker run --name some-redis -p 6379:6379 -d redis\n```\n\nby default, redis runs on `localhost` on port `6379` with no password. based on your redis configuration, set the following configurations for the main n8n process. these will allow n8n to interact with redis.\n\n| using configuration file | using environment variables | description |\n| --------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- |\n| `queue.bull.redis.host:localhost` | `queue_bull_redis_host=localhost` | by default, redis runs on `localhost`. |\n| `queue.bull.redis.port:6379` | `queue_bull_redis_port=6379` | the default port is `6379`. if redis is running on a different port, configure the value. |\n\nyou can also set the following optional configurations:\n\n| using configuration file | using environment variables | description |\n| ------------------------------------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- |\n| `queue.bull.redis.username:username` | `queue_bull_redis_username` | by default, redis doesn't require a username. if you're using a specific user, configure it variable. |\n| `queue.bull.redis.password:password` | `queue_bull_redis_password` | by default, redis doesn't require a password. if you're using a password, configure it variable. |\n| `queue.bull.redis.db:0` | `queue_bull_redis_db` | the default value is `0`. if you change this value, update the configuration. |\n| `queue.bull.redis.timeoutthreshold:10000ms` | `queue_bull_redis_timeout_threshold` | tells n8n how long it should wait if redis is unavailable before exiting. the default value is `10000` (ms). |\n| `queue.bull.gracefulshutdowntimeout:30` | `n8n_graceful_shutdown_timeout` | a graceful shutdown timeout for workers to finish executing jobs before terminating the process. the default value is `30` seconds. |\n\nnow you can start your n8n instance and it will connect to your redis instance.\n\n### start workers\n\nyou will need to start worker processes to allow n8n to execute workflows. if you want to host workers on a separate machine, install n8n on the machine and make sure that it's connected to your redis instance and the n8n database.\n\nstart worker processes by running the following command from the root directory:\n\n```\n./packages/cli/bin/n8n worker\n```\n\nif you're using docker, use the following command:\n\n```\ndocker run --name n8n-queue -p 5679:5678 docker.n8n.io/n8nio/n8n worker\n```\n\nyou can set up multiple worker processes. make sure that all the worker processes have access to redis and the n8n database.\n\n#### worker server\n\neach worker process runs a server that exposes optional endpoints:\n\n- `/healthz`: returns whether the worker is up, if you enable the `queue_health_check_active` environment variable\n- `/healthz/readiness`: returns whether worker's db and redis connections are ready, if you enable the `queue_health_check_active` environment variable\n- [credentials overwrite endpoint](../../../embed/configuration/#credential-overwrites)\n- [`/metrics`](../../configuration/configuration-examples/prometheus/)\n\ncustomizing health check endpoints\n\nyou can customize the health check endpoint path using the [`n8n_endpoint_health`](../../configuration/environment-variables/endpoints/) environment variable.\n\n#### view running workers\n\nfeature availability\n\n- available on self-hosted enterprise plans.\n- if you want access to this feature on cloud enterprise, [contact n8n](https://n8n-community.typeform.com/to/y9x2yuga).\n\nyou can view running workers and their performance metrics in n8n by selecting **settings** > **workers**.\n\n## running n8n with queues\n\nwhen running n8n with queues, all the production workflow executions get processed by worker processes. for webhooks, this means the http request is received by the main/webhook process, but the actual workflow execution is passed to a worker, which can add some overhead and latency.\n\nredis acts as the message broker, and the database persists data, so access to both is required. running a distributed system with this setup over sqlite isn't supported.\n\nmigrate data\n\nif you want to migrate data from one database to another, you can use the export and import commands. refer to the [cli commands for n8n](../../cli-commands/#export-workflows-and-credentials) documentation to learn how to use these commands.\n\n## webhook processors\n\nkeep in mind\n\nwebhook processes rely on redis and need the `executions_mode` environment variable set too. follow the [configure the workers](#configuring-workers) section above to setup webhook processor nodes.\n\nwebhook processors are another layer of scaling in n8n. configuring the webhook processor is optional, and allows you to scale the incoming webhook requests.\n\nthis method allows n8n to process a huge number of parallel requests. all you have to do is add more webhook processes and workers accordingly. the webhook process will listen to requests on the same port (default: `5678`). run these processes in containers or separate machines, and have a load balancing system to route requests accordingly.\n\nn8n doesn't recommend adding the main process to the load balancer pool. if you add the main process to the pool, it will receive requests and possibly a heavy load. this will result in degraded performance for editing, viewing, and interacting with the n8n ui.\n\nyou can start the webhook processor by executing the following command from the root directory:\n\n```\n./packages/cli/bin/n8n webhook\n```\n\nif you're using docker, use the following command:\n\n```\ndocker run --name n8n-queue -p 5679:5678 -e \"executions_mode=queue\" docker.n8n.io/n8nio/n8n webhook\n```\n\n### configure webhook url\n\nto configure your webhook url, execute the following command on the machine running the main n8n instance:\n\n```\nexport webhook_url=https://your-webhook-url.com\n```\n\nyou can also set this value in the configuration file.\n\n### configure load balancer\n\nwhen using multiple webhook processes you will need a load balancer to route requests. if you are using the same domain name for your n8n instance and the webhooks, you can set up your load ba",
18178
18267
  "importantTerms": [
18179
18268
  "main",
18180
18269
  "redis",
@@ -18185,10 +18274,10 @@
18185
18274
  "running",
18186
18275
  "using",
18187
18276
  "configuration",
18277
+ "mode",
18188
18278
  "your",
18189
18279
  "workers",
18190
18280
  "environment",
18191
- "mode",
18192
18281
  "processes",
18193
18282
  "with",
18194
18283
  "instance",
@@ -18225,7 +18314,7 @@
18225
18314
  "export",
18226
18315
  "value",
18227
18316
  "concurrency",
18228
- "doesn"
18317
+ "configuring"
18229
18318
  ]
18230
18319
  }
18231
18320
  },
@@ -18681,69 +18770,6 @@
18681
18770
  },
18682
18771
  {
18683
18772
  "id": "page-0224",
18684
- "title": "Opt out of data collection",
18685
- "url": "https://docs.n8n.io/hosting/securing/telemetry-opt-out/index.md",
18686
- "urlPath": "hosting/securing/telemetry-opt-out/index.md",
18687
- "category": "hosting",
18688
- "subcategory": null,
18689
- "nodeName": null,
18690
- "nodeType": null,
18691
- "content": {
18692
- "markdown": "# Data collection\n\nn8n collects some anonymous data from self-hosted n8n installations. Use the instructions below to opt out of data telemetry collection.\n\n## Collected data\n\nRefer to [Privacy | Data collection in self-hosted n8n](../../../privacy-security/privacy/#data-collection-in-self-hosted-n8n) for details on the data n8n collects.\n\n## How collection works\n\nYour n8n instance sends most data to n8n as the events that generate it occur. Workflow execution counts and an instance pulse are sent periodically (every 6 hours). These data types mostly fall into n8n telemetry collection.\n\n## Opting out of data collection\n\nn8n enables telemetry collection by default. To disable it, configure the following environment variables.\n\n### Opt out of telemetry events\n\nTo opt out of telemetry events, set the `N8N_DIAGNOSTICS_ENABLED` environment variable to false, for example:\n\n```\nexport N8N_DIAGNOSTICS_ENABLED=false\n```\n\n### Opt out of checking for new versions of n8n\n\nTo opt out of checking for new versions of n8n, set the `N8N_VERSION_NOTIFICATIONS_ENABLED` environment variable to false, for example:\n\n```\nexport N8N_VERSION_NOTIFICATIONS_ENABLED=false\n```\n\n## Disable all connection to n8n servers\n\nIf you want to fully prevent all communication with n8n's servers, refer to [Isolate n8n](../../configuration/configuration-examples/isolation/).\n\n## Related resources\n\nRefer to [Deployment environment variables](../../configuration/environment-variables/deployment/) for more information on these environment variables.\n\nRefer to [Configuration](../../configuration/configuration-methods/) for more information on setting environment variables.\n",
18693
- "excerpt": "# Data collection n8n collects some anonymous data from self-hosted n8n installations. Use the instructions below to opt out of data telemetry collection. ## Collected data Refer to [Privacy | Data collection in self-hosted n8n](../../../privacy-security/privacy/#data-collection-in-self-hosted-n8n) for details on the data n8n collects. ## How collection works Your n8n instance sends most data to n8n as the events that generate it occur. Workflow execution counts and an instance pulse are se...",
18694
- "sections": [
18695
- {
18696
- "title": "Data collection",
18697
- "level": 1,
18698
- "content": "n8n collects some anonymous data from self-hosted n8n installations. Use the instructions below to opt out of data telemetry collection."
18699
- }
18700
- ]
18701
- },
18702
- "metadata": {
18703
- "keywords": [
18704
- "data",
18705
- "collection",
18706
- "collected",
18707
- "works",
18708
- "opting",
18709
- "telemetry",
18710
- "events",
18711
- "checking",
18712
- "versions",
18713
- "disable",
18714
- "connection",
18715
- "servers",
18716
- "related",
18717
- "resources"
18718
- ],
18719
- "useCases": [],
18720
- "operations": [],
18721
- "codeExamples": 2,
18722
- "complexity": "beginner",
18723
- "readingTime": "2 min",
18724
- "contentLength": 1656,
18725
- "relatedPages": []
18726
- },
18727
- "searchIndex": {
18728
- "fullText": "opt out of data collection # data collection\n\nn8n collects some anonymous data from self-hosted n8n installations. use the instructions below to opt out of data telemetry collection.\n\n## collected data\n\nrefer to [privacy | data collection in self-hosted n8n](../../../privacy-security/privacy/#data-collection-in-self-hosted-n8n) for details on the data n8n collects.\n\n## how collection works\n\nyour n8n instance sends most data to n8n as the events that generate it occur. workflow execution counts and an instance pulse are sent periodically (every 6 hours). these data types mostly fall into n8n telemetry collection.\n\n## opting out of data collection\n\nn8n enables telemetry collection by default. to disable it, configure the following environment variables.\n\n### opt out of telemetry events\n\nto opt out of telemetry events, set the `n8n_diagnostics_enabled` environment variable to false, for example:\n\n```\nexport n8n_diagnostics_enabled=false\n```\n\n### opt out of checking for new versions of n8n\n\nto opt out of checking for new versions of n8n, set the `n8n_version_notifications_enabled` environment variable to false, for example:\n\n```\nexport n8n_version_notifications_enabled=false\n```\n\n## disable all connection to n8n servers\n\nif you want to fully prevent all communication with n8n's servers, refer to [isolate n8n](../../configuration/configuration-examples/isolation/).\n\n## related resources\n\nrefer to [deployment environment variables](../../configuration/environment-variables/deployment/) for more information on these environment variables.\n\nrefer to [configuration](../../configuration/configuration-methods/) for more information on setting environment variables.\n data collection",
18729
- "importantTerms": [
18730
- "data",
18731
- "collection",
18732
- "environment",
18733
- "configuration",
18734
- "telemetry",
18735
- "variables",
18736
- "refer",
18737
- "false",
18738
- "self",
18739
- "hosted",
18740
- "privacy",
18741
- "events"
18742
- ]
18743
- }
18744
- },
18745
- {
18746
- "id": "page-0225",
18747
18773
  "title": "AI Starter Kit",
18748
18774
  "url": "https://docs.n8n.io/hosting/starter-kits/ai-starter-kit/index.md",
18749
18775
  "urlPath": "hosting/starter-kits/ai-starter-kit/index.md",
@@ -18752,7 +18778,7 @@
18752
18778
  "nodeName": null,
18753
18779
  "nodeType": null,
18754
18780
  "content": {
18755
- "markdown": "# Self-hosted AI Starter Kit\n\nThe Self-hosted AI Starter Kit is an open, docker compose template that bootstraps a fully featured Local AI and Low Code development environment.\n\nCurated by [n8n](https://github.com/n8n-io), it combines the self-hosted n8n platform with a list of compatible AI products and components to get you started building self-hosted AI workflows.\n\n## What’s included\n\n✅ [**Self-hosted n8n**](../../): Low-code platform with over 400 integrations and advanced AI components.\n\n✅ [**Ollama**](https://ollama.com/): Cross-platform LLM platform to install and run the latest local LLMs.\n\n✅ [**Qdrant**](https://qdrant.tech/): Open-source, high performance vector store with a comprehensive API.\n\n✅ [**PostgreSQL**](https://www.postgresql.org/): The workhorse of the Data Engineering world, handles large amounts of data safely.\n\n## What you can build\n\n⭐️ [AI Agents](../../../glossary/#ai-agent) that can schedule appointments\n\n⭐️ Summaries of company PDFs without leaking data\n\n⭐️ Smarter Slackbots for company communications and IT-ops\n\n⭐️ Private, low-cost analyses of financial documents\n\n## Get the kit\n\nHead to [the GitHub repository](https://github.com/n8n-io/self-hosted-ai-starter-kit) to clone the repo and get started!\n\nFor testing only\n\nn8n designed this kit to help you get started with self-hosted AI workflows. While it’s not fully optimized for production environments, it combines robust components that work well together for proof-of-concept projects. Customize it to meet your needs. Secure and harden it before using in production.\n",
18781
+ "markdown": "# Self-hosted AI Starter Kit\n\nThe Self-hosted AI Starter Kit is an open, docker compose template that bootstraps a fully featured Local AI and Low Code development environment.\n\nCurated by [n8n](https://github.com/n8n-io), it combines the self-hosted n8n platform with a list of compatible AI products and components to get you started building self-hosted AI workflows.\n\n## What’s included\n\n✅ [**Self-hosted n8n**](../../): Low-code platform with over 400 integrations and advanced AI components.\n\n✅ [**Ollama**](https://ollama.com/): Cross-platform LLM platform to install and run the latest local LLMs.\n\n✅ [**Qdrant**](https://qdrant.tech/): Open-source, high performance vector store with a comprehensive API.\n\n✅ [**PostgreSQL**](https://www.postgresql.org/): The workhorse of the Data Engineering world, handles large amounts of data safely.\n\n## What you can build\n\n⭐️ [AI Agents](../../../glossary/#ai-agent) that can schedule appointments\n\n⭐️ Summaries of company PDFs without leaking data\n\n⭐️ Smarter Slackbots for company communications and IT-ops\n\n⭐️ Private, low-cost analyses of financial documents\n\n## Get the kit\n\nHead to [the GitHub repository](https://github.com/n8n-io/self-hosted-ai-starter-kit) to clone the repo and get started!\n\nFor testing only\n\nn8n designed this kit to help you get started with self-hosted AI workflows. While it’s not fully optimized for production environments, it combines robust components that work well together for proof-of-concept projects. Customize it to meet your needs. Secure and harden it before using in production.\n for more information on setting environment variables.\n",
18756
18782
  "excerpt": "# Self-hosted AI Starter Kit The Self-hosted AI Starter Kit is an open, docker compose template that bootstraps a fully featured Local AI and Low Code development environment. Curated by [n8n](https://github.com/n8n-io), it combines the self-hosted n8n platform with a list of compatible AI products and components to get you started building self-hosted AI workflows. ## What’s included ✅ [**Self-hosted n8n**](../../): Low-code platform with over 400 integrations and advanced AI components. ✅...",
18757
18783
  "sections": [
18758
18784
  {
@@ -18777,11 +18803,11 @@
18777
18803
  "codeExamples": 0,
18778
18804
  "complexity": "beginner",
18779
18805
  "readingTime": "2 min",
18780
- "contentLength": 1572,
18806
+ "contentLength": 1628,
18781
18807
  "relatedPages": []
18782
18808
  },
18783
18809
  "searchIndex": {
18784
- "fullText": "ai starter kit # self-hosted ai starter kit\n\nthe self-hosted ai starter kit is an open, docker compose template that bootstraps a fully featured local ai and low code development environment.\n\ncurated by [n8n](https://github.com/n8n-io), it combines the self-hosted n8n platform with a list of compatible ai products and components to get you started building self-hosted ai workflows.\n\n## what’s included\n\n✅ [**self-hosted n8n**](../../): low-code platform with over 400 integrations and advanced ai components.\n\n✅ [**ollama**](https://ollama.com/): cross-platform llm platform to install and run the latest local llms.\n\n✅ [**qdrant**](https://qdrant.tech/): open-source, high performance vector store with a comprehensive api.\n\n✅ [**postgresql**](https://www.postgresql.org/): the workhorse of the data engineering world, handles large amounts of data safely.\n\n## what you can build\n\n⭐️ [ai agents](../../../glossary/#ai-agent) that can schedule appointments\n\n⭐️ summaries of company pdfs without leaking data\n\n⭐️ smarter slackbots for company communications and it-ops\n\n⭐️ private, low-cost analyses of financial documents\n\n## get the kit\n\nhead to [the github repository](https://github.com/n8n-io/self-hosted-ai-starter-kit) to clone the repo and get started!\n\nfor testing only\n\nn8n designed this kit to help you get started with self-hosted ai workflows. while it’s not fully optimized for production environments, it combines robust components that work well together for proof-of-concept projects. customize it to meet your needs. secure and harden it before using in production.\n self-hosted ai starter kit",
18810
+ "fullText": "ai starter kit # self-hosted ai starter kit\n\nthe self-hosted ai starter kit is an open, docker compose template that bootstraps a fully featured local ai and low code development environment.\n\ncurated by [n8n](https://github.com/n8n-io), it combines the self-hosted n8n platform with a list of compatible ai products and components to get you started building self-hosted ai workflows.\n\n## what’s included\n\n✅ [**self-hosted n8n**](../../): low-code platform with over 400 integrations and advanced ai components.\n\n✅ [**ollama**](https://ollama.com/): cross-platform llm platform to install and run the latest local llms.\n\n✅ [**qdrant**](https://qdrant.tech/): open-source, high performance vector store with a comprehensive api.\n\n✅ [**postgresql**](https://www.postgresql.org/): the workhorse of the data engineering world, handles large amounts of data safely.\n\n## what you can build\n\n⭐️ [ai agents](../../../glossary/#ai-agent) that can schedule appointments\n\n⭐️ summaries of company pdfs without leaking data\n\n⭐️ smarter slackbots for company communications and it-ops\n\n⭐️ private, low-cost analyses of financial documents\n\n## get the kit\n\nhead to [the github repository](https://github.com/n8n-io/self-hosted-ai-starter-kit) to clone the repo and get started!\n\nfor testing only\n\nn8n designed this kit to help you get started with self-hosted ai workflows. while it’s not fully optimized for production environments, it combines robust components that work well together for proof-of-concept projects. customize it to meet your needs. secure and harden it before using in production.\n for more information on setting environment variables.\n self-hosted ai starter kit",
18785
18811
  "importantTerms": [
18786
18812
  "self",
18787
18813
  "hosted",
@@ -79939,6 +79965,69 @@
79939
79965
  },
79940
79966
  {
79941
79967
  "id": "page-1100",
79968
+ "title": "TheHive 5 Trigger",
79969
+ "url": "https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.thehive5trigger/index.md",
79970
+ "urlPath": "integrations/builtin/trigger-nodes/n8n-nodes-base.thehive5trigger/index.md",
79971
+ "category": "trigger-nodes",
79972
+ "subcategory": null,
79973
+ "nodeName": "thehive5trigger",
79974
+ "nodeType": "n8n-nodes-base.thehive5trigger",
79975
+ "content": {
79976
+ "markdown": "# TheHive 5 Trigger node\n\nUse the TheHive 5 Trigger node to respond to events in [TheHive](https://strangebee.com/thehive/) and integrate TheHive with other applications. n8n has built-in support for a wide range of TheHive events, including alerts, cases, comments, pages, and tasks.\n\nOn this page, you'll find a list of events the TheHive5 Trigger node can respond to and links to more resources.\n\nTheHive and TheHive 5\n\nn8n provides two nodes for TheHive. Use this node (TheHive 5 Trigger) if you want to use TheHive's version 5 API. If you want to use version 3 or 4, use [TheHive Trigger](../n8n-nodes-base.thehivetrigger/).\n\nExamples and templates\n\nFor usage examples and templates to help you get started, refer to n8n's [TheHive 5 Trigger integrations](https://n8n.io/integrations/thehive-5-trigger/) page.\n\n## Events\n\n- Alert\n - Created\n - Deleted\n - Updated\n- Case\n - Created\n - Deleted\n - Updated\n- Comment\n - Created\n - Deleted\n - Updated\n- Observable\n - Created\n - Deleted\n - Updated\n- Page\n - Created\n - Deleted\n - Updated\n- Task\n - Created\n - Deleted\n - Updated\n- Task log\n - Created\n - Deleted\n - Updated\n\n## Related resources\n\nn8n provides an app node for TheHive 5. You can find the node docs [here](../../app-nodes/n8n-nodes-base.thehive5/).\n\nRefer to TheHive's [documentation](https://docs.strangebee.com/) for more information about the service.\n\n## Configure a webhook in TheHive\n\nTo configure the webhook for your TheHive instance:\n\n1. Copy the testing and production webhook URLs from TheHive Trigger node.\n\n1. Add the following lines to the `application.conf` file. This is TheHive configuration file:\n\n ```\n notification.webhook.endpoints = [\n \t{\n \t\tname: TESTING_WEBHOOK_NAME\n \t\turl: TESTING_WEBHOOK_URL\n \t\tversion: 1\n \t\twsConfig: {}\n \t\tincludedTheHiveOrganisations: [\"ORGANIZATION_NAME\"]\n \t\texcludedTheHiveOrganisations: []\n \t},\n \t{\n \t\tname: PRODUCTION_WEBHOOK_NAME\n \t\turl: PRODUCTION_WEBHOOK_URL\n \t\tversion: 1\n \t\twsConfig: {}\n \t\tincludedTheHiveOrganisations: [\"ORGANIZATION_NAME\"]\n \t\texcludedTheHiveOrganisations: []\n \t}\n ]\n ```\n\n1. Replace `TESTING_WEBHOOK_URL` and `PRODUCTION_WEBHOOK_URL` with the URLs you copied in the previous step.\n\n1. Replace `TESTING_WEBHOOK_NAME` and `PRODUCTION_WEBHOOK_NAME` with your preferred endpoint names.\n\n1. Replace `ORGANIZATION_NAME` with your organization name.\n\n1. Execute the following cURL command to enable notifications:\n\n ```\n curl -XPUT -uTHEHIVE_USERNAME:THEHIVE_PASSWORD -H 'Content-type: application/json' THEHIVE_URL/api/config/organisation/notification -d '\n {\n \t\"value\": [\n \t\t{\n \t\t\"delegate\": false,\n \t\t\"trigger\": { \"name\": \"AnyEvent\"},\n \t\t\"notifier\": { \"name\": \"webhook\", \"endpoint\": \"TESTING_WEBHOOK_NAME\" }\n \t\t},\n \t\t{\n \t\t\"delegate\": false,\n \t\t\"trigger\": { \"name\": \"AnyEvent\"},\n \t\t\"notifier\": { \"name\": \"webhook\", \"endpoint\": \"PRODUCTION_WEBHOOK_NAME\" }\n \t\t}\n \t]\n }'\n ```\n",
79977
+ "excerpt": "# TheHive 5 Trigger node Use the TheHive 5 Trigger node to respond to events in [TheHive](https://strangebee.com/thehive/) and integrate TheHive with other applications. n8n has built-in support for a wide range of TheHive events, including alerts, cases, comments, pages, and tasks. On this page, you'll find a list of events the TheHive5 Trigger node can respond to and links to more resources. TheHive and TheHive 5 n8n provides two nodes for TheHive. Use this node (TheHive 5 Trigger) if you...",
79978
+ "sections": [
79979
+ {
79980
+ "title": "TheHive 5 Trigger node",
79981
+ "level": 1,
79982
+ "content": "Use the TheHive 5 Trigger node to respond to events in [TheHive](https://strangebee.com/thehive/) and integrate TheHive with other applications. n8n has built-in support for a wide range of TheHive events, including alerts, cases, comments, pages, and tasks.\n\nOn this page, you'll find a list of events the TheHive5 Trigger node can respond to and links to more resources.\n\nTheHive and TheHive 5\n\nn8n provides two nodes for TheHive. Use this node (TheHive 5 Trigger) if you want to use TheHive's version 5 API. If you want to use version 3 or 4, use [TheHive Trigger](../n8n-nodes-base.thehivetrigger/).\n\nExamples and templates\n\nFor usage examples and templates to help you get started, refer to n8n's [TheHive 5 Trigger integrations](https://n8n.io/integrations/thehive-5-trigger/) page."
79983
+ }
79984
+ ]
79985
+ },
79986
+ "metadata": {
79987
+ "keywords": [
79988
+ "thehive",
79989
+ "trigger",
79990
+ "node",
79991
+ "events",
79992
+ "related",
79993
+ "resources",
79994
+ "configure",
79995
+ "webhook"
79996
+ ],
79997
+ "useCases": [],
79998
+ "operations": [],
79999
+ "codeExamples": 2,
80000
+ "complexity": "beginner",
80001
+ "readingTime": "2 min",
80002
+ "contentLength": 2950,
80003
+ "relatedPages": []
80004
+ },
80005
+ "searchIndex": {
80006
+ "fullText": "thehive 5 trigger # thehive 5 trigger node\n\nuse the thehive 5 trigger node to respond to events in [thehive](https://strangebee.com/thehive/) and integrate thehive with other applications. n8n has built-in support for a wide range of thehive events, including alerts, cases, comments, pages, and tasks.\n\non this page, you'll find a list of events the thehive5 trigger node can respond to and links to more resources.\n\nthehive and thehive 5\n\nn8n provides two nodes for thehive. use this node (thehive 5 trigger) if you want to use thehive's version 5 api. if you want to use version 3 or 4, use [thehive trigger](../n8n-nodes-base.thehivetrigger/).\n\nexamples and templates\n\nfor usage examples and templates to help you get started, refer to n8n's [thehive 5 trigger integrations](https://n8n.io/integrations/thehive-5-trigger/) page.\n\n## events\n\n- alert\n - created\n - deleted\n - updated\n- case\n - created\n - deleted\n - updated\n- comment\n - created\n - deleted\n - updated\n- observable\n - created\n - deleted\n - updated\n- page\n - created\n - deleted\n - updated\n- task\n - created\n - deleted\n - updated\n- task log\n - created\n - deleted\n - updated\n\n## related resources\n\nn8n provides an app node for thehive 5. you can find the node docs [here](../../app-nodes/n8n-nodes-base.thehive5/).\n\nrefer to thehive's [documentation](https://docs.strangebee.com/) for more information about the service.\n\n## configure a webhook in thehive\n\nto configure the webhook for your thehive instance:\n\n1. copy the testing and production webhook urls from thehive trigger node.\n\n1. add the following lines to the `application.conf` file. this is thehive configuration file:\n\n ```\n notification.webhook.endpoints = [\n \t{\n \t\tname: testing_webhook_name\n \t\turl: testing_webhook_url\n \t\tversion: 1\n \t\twsconfig: {}\n \t\tincludedthehiveorganisations: [\"organization_name\"]\n \t\texcludedthehiveorganisations: []\n \t},\n \t{\n \t\tname: production_webhook_name\n \t\turl: production_webhook_url\n \t\tversion: 1\n \t\twsconfig: {}\n \t\tincludedthehiveorganisations: [\"organization_name\"]\n \t\texcludedthehiveorganisations: []\n \t}\n ]\n ```\n\n1. replace `testing_webhook_url` and `production_webhook_url` with the urls you copied in the previous step.\n\n1. replace `testing_webhook_name` and `production_webhook_name` with your preferred endpoint names.\n\n1. replace `organization_name` with your organization name.\n\n1. execute the following curl command to enable notifications:\n\n ```\n curl -xput -uthehive_username:thehive_password -h 'content-type: application/json' thehive_url/api/config/organisation/notification -d '\n {\n \t\"value\": [\n \t\t{\n \t\t\"delegate\": false,\n \t\t\"trigger\": { \"name\": \"anyevent\"},\n \t\t\"notifier\": { \"name\": \"webhook\", \"endpoint\": \"testing_webhook_name\" }\n \t\t},\n \t\t{\n \t\t\"delegate\": false,\n \t\t\"trigger\": { \"name\": \"anyevent\"},\n \t\t\"notifier\": { \"name\": \"webhook\", \"endpoint\": \"production_webhook_name\" }\n \t\t}\n \t]\n }'\n ```\n thehive 5 trigger node",
80007
+ "importantTerms": [
80008
+ "thehive",
80009
+ "trigger",
80010
+ "node",
80011
+ "created",
80012
+ "deleted",
80013
+ "updated",
80014
+ "name",
80015
+ "webhook",
80016
+ "events",
80017
+ "with",
80018
+ "nodes",
80019
+ "version",
80020
+ "https",
80021
+ "this",
80022
+ "page",
80023
+ "your",
80024
+ "replace",
80025
+ "endpoint"
80026
+ ]
80027
+ }
80028
+ },
80029
+ {
80030
+ "id": "page-1101",
79942
80031
  "title": "TheHive Trigger",
79943
80032
  "url": "https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.thehivetrigger/index.md",
79944
80033
  "urlPath": "integrations/builtin/trigger-nodes/n8n-nodes-base.thehivetrigger/index.md",
@@ -80001,7 +80090,7 @@
80001
80090
  }
80002
80091
  },
80003
80092
  {
80004
- "id": "page-1101",
80093
+ "id": "page-1102",
80005
80094
  "title": "Toggl Trigger",
80006
80095
  "url": "https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.toggltrigger/index.md",
80007
80096
  "urlPath": "integrations/builtin/trigger-nodes/n8n-nodes-base.toggltrigger/index.md",
@@ -80044,7 +80133,7 @@
80044
80133
  }
80045
80134
  },
80046
80135
  {
80047
- "id": "page-1102",
80136
+ "id": "page-1103",
80048
80137
  "title": "Trello Trigger",
80049
80138
  "url": "https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.trellotrigger/index.md",
80050
80139
  "urlPath": "integrations/builtin/trigger-nodes/n8n-nodes-base.trellotrigger/index.md",
@@ -80091,7 +80180,7 @@
80091
80180
  }
80092
80181
  },
80093
80182
  {
80094
- "id": "page-1103",
80183
+ "id": "page-1104",
80095
80184
  "title": "Twilio Trigger",
80096
80185
  "url": "https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.twiliotrigger/index.md",
80097
80186
  "urlPath": "integrations/builtin/trigger-nodes/n8n-nodes-base.twiliotrigger/index.md",
@@ -80142,7 +80231,7 @@
80142
80231
  }
80143
80232
  },
80144
80233
  {
80145
- "id": "page-1104",
80234
+ "id": "page-1105",
80146
80235
  "title": "Typeform Trigger",
80147
80236
  "url": "https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.typeformtrigger/index.md",
80148
80237
  "urlPath": "integrations/builtin/trigger-nodes/n8n-nodes-base.typeformtrigger/index.md",
@@ -80186,7 +80275,7 @@
80186
80275
  }
80187
80276
  },
80188
80277
  {
80189
- "id": "page-1105",
80278
+ "id": "page-1106",
80190
80279
  "title": "Venafi TLS Protect Cloud Trigger",
80191
80280
  "url": "https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.venafitlsprotectcloudtrigger/index.md",
80192
80281
  "urlPath": "integrations/builtin/trigger-nodes/n8n-nodes-base.venafitlsprotectcloudtrigger/index.md",
@@ -80234,7 +80323,7 @@
80234
80323
  }
80235
80324
  },
80236
80325
  {
80237
- "id": "page-1106",
80326
+ "id": "page-1107",
80238
80327
  "title": "Webflow Trigger",
80239
80328
  "url": "https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.webflowtrigger/index.md",
80240
80329
  "urlPath": "integrations/builtin/trigger-nodes/n8n-nodes-base.webflowtrigger/index.md",
@@ -80276,69 +80365,6 @@
80276
80365
  ]
80277
80366
  }
80278
80367
  },
80279
- {
80280
- "id": "page-1107",
80281
- "title": "TheHive 5 Trigger",
80282
- "url": "https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.thehive5trigger/index.md",
80283
- "urlPath": "integrations/builtin/trigger-nodes/n8n-nodes-base.thehive5trigger/index.md",
80284
- "category": "trigger-nodes",
80285
- "subcategory": null,
80286
- "nodeName": "thehive5trigger",
80287
- "nodeType": "n8n-nodes-base.thehive5trigger",
80288
- "content": {
80289
- "markdown": "# TheHive 5 Trigger node\n\nUse the TheHive 5 Trigger node to respond to events in [TheHive](https://strangebee.com/thehive/) and integrate TheHive with other applications. n8n has built-in support for a wide range of TheHive events, including alerts, cases, comments, pages, and tasks.\n\nOn this page, you'll find a list of events the TheHive5 Trigger node can respond to and links to more resources.\n\nTheHive and TheHive 5\n\nn8n provides two nodes for TheHive. Use this node (TheHive 5 Trigger) if you want to use TheHive's version 5 API. If you want to use version 3 or 4, use [TheHive Trigger](../n8n-nodes-base.thehivetrigger/).\n\nExamples and templates\n\nFor usage examples and templates to help you get started, refer to n8n's [TheHive 5 Trigger integrations](https://n8n.io/integrations/thehive-5-trigger/) page.\n\n## Events\n\n- Alert\n - Created\n - Deleted\n - Updated\n- Case\n - Created\n - Deleted\n - Updated\n- Comment\n - Created\n - Deleted\n - Updated\n- Observable\n - Created\n - Deleted\n - Updated\n- Page\n - Created\n - Deleted\n - Updated\n- Task\n - Created\n - Deleted\n - Updated\n- Task log\n - Created\n - Deleted\n - Updated\n\n## Related resources\n\nn8n provides an app node for TheHive 5. You can find the node docs [here](../../app-nodes/n8n-nodes-base.thehive5/).\n\nRefer to TheHive's [documentation](https://docs.strangebee.com/) for more information about the service.\n\n## Configure a webhook in TheHive\n\nTo configure the webhook for your TheHive instance:\n\n1. Copy the testing and production webhook URLs from TheHive Trigger node.\n\n1. Add the following lines to the `application.conf` file. This is TheHive configuration file:\n\n ```\n notification.webhook.endpoints = [\n \t{\n \t\tname: TESTING_WEBHOOK_NAME\n \t\turl: TESTING_WEBHOOK_URL\n \t\tversion: 1\n \t\twsConfig: {}\n \t\tincludedTheHiveOrganisations: [\"ORGANIZATION_NAME\"]\n \t\texcludedTheHiveOrganisations: []\n \t},\n \t{\n \t\tname: PRODUCTION_WEBHOOK_NAME\n \t\turl: PRODUCTION_WEBHOOK_URL\n \t\tversion: 1\n \t\twsConfig: {}\n \t\tincludedTheHiveOrganisations: [\"ORGANIZATION_NAME\"]\n \t\texcludedTheHiveOrganisations: []\n \t}\n ]\n ```\n\n1. Replace `TESTING_WEBHOOK_URL` and `PRODUCTION_WEBHOOK_URL` with the URLs you copied in the previous step.\n\n1. Replace `TESTING_WEBHOOK_NAME` and `PRODUCTION_WEBHOOK_NAME` with your preferred endpoint names.\n\n1. Replace `ORGANIZATION_NAME` with your organization name.\n\n1. Execute the following cURL command to enable notifications:\n\n ```\n curl -XPUT -uTHEHIVE_USERNAME:THEHIVE_PASSWORD -H 'Content-type: application/json' THEHIVE_URL/api/config/organisation/notification -d '\n {\n \t\"value\": [\n \t\t{\n \t\t\"delegate\": false,\n \t\t\"trigger\": { \"name\": \"AnyEvent\"},\n \t\t\"notifier\": { \"name\": \"webhook\", \"endpoint\": \"TESTING_WEBHOOK_NAME\" }\n \t\t},\n \t\t{\n \t\t\"delegate\": false,\n \t\t\"trigger\": { \"name\": \"AnyEvent\"},\n \t\t\"notifier\": { \"name\": \"webhook\", \"endpoint\": \"PRODUCTION_WEBHOOK_NAME\" }\n \t\t}\n \t]\n }'\n ```\n",
80290
- "excerpt": "# TheHive 5 Trigger node Use the TheHive 5 Trigger node to respond to events in [TheHive](https://strangebee.com/thehive/) and integrate TheHive with other applications. n8n has built-in support for a wide range of TheHive events, including alerts, cases, comments, pages, and tasks. On this page, you'll find a list of events the TheHive5 Trigger node can respond to and links to more resources. TheHive and TheHive 5 n8n provides two nodes for TheHive. Use this node (TheHive 5 Trigger) if you...",
80291
- "sections": [
80292
- {
80293
- "title": "TheHive 5 Trigger node",
80294
- "level": 1,
80295
- "content": "Use the TheHive 5 Trigger node to respond to events in [TheHive](https://strangebee.com/thehive/) and integrate TheHive with other applications. n8n has built-in support for a wide range of TheHive events, including alerts, cases, comments, pages, and tasks.\n\nOn this page, you'll find a list of events the TheHive5 Trigger node can respond to and links to more resources.\n\nTheHive and TheHive 5\n\nn8n provides two nodes for TheHive. Use this node (TheHive 5 Trigger) if you want to use TheHive's version 5 API. If you want to use version 3 or 4, use [TheHive Trigger](../n8n-nodes-base.thehivetrigger/).\n\nExamples and templates\n\nFor usage examples and templates to help you get started, refer to n8n's [TheHive 5 Trigger integrations](https://n8n.io/integrations/thehive-5-trigger/) page."
80296
- }
80297
- ]
80298
- },
80299
- "metadata": {
80300
- "keywords": [
80301
- "thehive",
80302
- "trigger",
80303
- "node",
80304
- "events",
80305
- "related",
80306
- "resources",
80307
- "configure",
80308
- "webhook"
80309
- ],
80310
- "useCases": [],
80311
- "operations": [],
80312
- "codeExamples": 2,
80313
- "complexity": "beginner",
80314
- "readingTime": "2 min",
80315
- "contentLength": 2950,
80316
- "relatedPages": []
80317
- },
80318
- "searchIndex": {
80319
- "fullText": "thehive 5 trigger # thehive 5 trigger node\n\nuse the thehive 5 trigger node to respond to events in [thehive](https://strangebee.com/thehive/) and integrate thehive with other applications. n8n has built-in support for a wide range of thehive events, including alerts, cases, comments, pages, and tasks.\n\non this page, you'll find a list of events the thehive5 trigger node can respond to and links to more resources.\n\nthehive and thehive 5\n\nn8n provides two nodes for thehive. use this node (thehive 5 trigger) if you want to use thehive's version 5 api. if you want to use version 3 or 4, use [thehive trigger](../n8n-nodes-base.thehivetrigger/).\n\nexamples and templates\n\nfor usage examples and templates to help you get started, refer to n8n's [thehive 5 trigger integrations](https://n8n.io/integrations/thehive-5-trigger/) page.\n\n## events\n\n- alert\n - created\n - deleted\n - updated\n- case\n - created\n - deleted\n - updated\n- comment\n - created\n - deleted\n - updated\n- observable\n - created\n - deleted\n - updated\n- page\n - created\n - deleted\n - updated\n- task\n - created\n - deleted\n - updated\n- task log\n - created\n - deleted\n - updated\n\n## related resources\n\nn8n provides an app node for thehive 5. you can find the node docs [here](../../app-nodes/n8n-nodes-base.thehive5/).\n\nrefer to thehive's [documentation](https://docs.strangebee.com/) for more information about the service.\n\n## configure a webhook in thehive\n\nto configure the webhook for your thehive instance:\n\n1. copy the testing and production webhook urls from thehive trigger node.\n\n1. add the following lines to the `application.conf` file. this is thehive configuration file:\n\n ```\n notification.webhook.endpoints = [\n \t{\n \t\tname: testing_webhook_name\n \t\turl: testing_webhook_url\n \t\tversion: 1\n \t\twsconfig: {}\n \t\tincludedthehiveorganisations: [\"organization_name\"]\n \t\texcludedthehiveorganisations: []\n \t},\n \t{\n \t\tname: production_webhook_name\n \t\turl: production_webhook_url\n \t\tversion: 1\n \t\twsconfig: {}\n \t\tincludedthehiveorganisations: [\"organization_name\"]\n \t\texcludedthehiveorganisations: []\n \t}\n ]\n ```\n\n1. replace `testing_webhook_url` and `production_webhook_url` with the urls you copied in the previous step.\n\n1. replace `testing_webhook_name` and `production_webhook_name` with your preferred endpoint names.\n\n1. replace `organization_name` with your organization name.\n\n1. execute the following curl command to enable notifications:\n\n ```\n curl -xput -uthehive_username:thehive_password -h 'content-type: application/json' thehive_url/api/config/organisation/notification -d '\n {\n \t\"value\": [\n \t\t{\n \t\t\"delegate\": false,\n \t\t\"trigger\": { \"name\": \"anyevent\"},\n \t\t\"notifier\": { \"name\": \"webhook\", \"endpoint\": \"testing_webhook_name\" }\n \t\t},\n \t\t{\n \t\t\"delegate\": false,\n \t\t\"trigger\": { \"name\": \"anyevent\"},\n \t\t\"notifier\": { \"name\": \"webhook\", \"endpoint\": \"production_webhook_name\" }\n \t\t}\n \t]\n }'\n ```\n thehive 5 trigger node",
80320
- "importantTerms": [
80321
- "thehive",
80322
- "trigger",
80323
- "node",
80324
- "created",
80325
- "deleted",
80326
- "updated",
80327
- "name",
80328
- "webhook",
80329
- "events",
80330
- "with",
80331
- "nodes",
80332
- "version",
80333
- "https",
80334
- "this",
80335
- "page",
80336
- "your",
80337
- "replace",
80338
- "endpoint"
80339
- ]
80340
- }
80341
- },
80342
80368
  {
80343
80369
  "id": "page-1108",
80344
80370
  "title": "WhatsApp Trigger",
@@ -90944,6 +90970,7 @@
90944
90970
  "page-0200",
90945
90971
  "page-0201",
90946
90972
  "page-0205",
90973
+ "page-0215",
90947
90974
  "page-0710"
90948
90975
  ],
90949
90976
  "about": [
@@ -91075,8 +91102,8 @@
91075
91102
  "page-0106",
91076
91103
  "page-0108",
91077
91104
  "page-0111",
91078
- "page-0142",
91079
91105
  "page-0143",
91106
+ "page-0144",
91080
91107
  "page-0148",
91081
91108
  "page-0166",
91082
91109
  "page-0210",
@@ -91669,8 +91696,8 @@
91669
91696
  "page-0007",
91670
91697
  "page-0060",
91671
91698
  "page-0096",
91672
- "page-0140",
91673
91699
  "page-0141",
91700
+ "page-0142",
91674
91701
  "page-0153",
91675
91702
  "page-0210",
91676
91703
  "page-0650",
@@ -91686,7 +91713,7 @@
91686
91713
  ],
91687
91714
  "order": [
91688
91715
  "page-0002",
91689
- "page-0141",
91716
+ "page-0142",
91690
91717
  "page-1235"
91691
91718
  ],
91692
91719
  "deprecations": [
@@ -91709,9 +91736,10 @@
91709
91736
  "page-0084",
91710
91737
  "page-0096",
91711
91738
  "page-0097",
91712
- "page-0143",
91739
+ "page-0144",
91713
91740
  "page-0178",
91714
91741
  "page-0210",
91742
+ "page-0215",
91715
91743
  "page-0667",
91716
91744
  "page-0703",
91717
91745
  "page-1195",
@@ -91725,6 +91753,7 @@
91725
91753
  ],
91726
91754
  "process": [
91727
91755
  "page-0002",
91756
+ "page-0215",
91728
91757
  "page-0707",
91729
91758
  "page-0847"
91730
91759
  ],
@@ -91742,6 +91771,7 @@
91742
91771
  "page-0202",
91743
91772
  "page-0208",
91744
91773
  "page-0209",
91774
+ "page-0215",
91745
91775
  "page-0218",
91746
91776
  "page-0544",
91747
91777
  "page-0545",
@@ -91865,8 +91895,8 @@
91865
91895
  "page-0096",
91866
91896
  "page-0136",
91867
91897
  "page-0139",
91868
- "page-0140",
91869
- "page-0145",
91898
+ "page-0141",
91899
+ "page-0146",
91870
91900
  "page-0148",
91871
91901
  "page-0151",
91872
91902
  "page-0153",
@@ -92038,9 +92068,9 @@
92038
92068
  "page-0101",
92039
92069
  "page-0106",
92040
92070
  "page-0130",
92041
- "page-0142",
92042
92071
  "page-0143",
92043
92072
  "page-0144",
92073
+ "page-0145",
92044
92074
  "page-0151",
92045
92075
  "page-0153",
92046
92076
  "page-0162",
@@ -92152,9 +92182,9 @@
92152
92182
  "page-0107",
92153
92183
  "page-0130",
92154
92184
  "page-0135",
92155
- "page-0140",
92156
- "page-0143",
92157
- "page-0145",
92185
+ "page-0141",
92186
+ "page-0144",
92187
+ "page-0146",
92158
92188
  "page-0153",
92159
92189
  "page-0155",
92160
92190
  "page-0173",
@@ -92163,7 +92193,6 @@
92163
92193
  "page-0208",
92164
92194
  "page-0210",
92165
92195
  "page-0211",
92166
- "page-0224",
92167
92196
  "page-0281",
92168
92197
  "page-0416",
92169
92198
  "page-0453",
@@ -92248,6 +92277,7 @@
92248
92277
  "page-0100",
92249
92278
  "page-0153",
92250
92279
  "page-0170",
92280
+ "page-0215",
92251
92281
  "page-0672",
92252
92282
  "page-0686",
92253
92283
  "page-0692",
@@ -92260,7 +92290,7 @@
92260
92290
  "page-1042",
92261
92291
  "page-1095",
92262
92292
  "page-1100",
92263
- "page-1107",
92293
+ "page-1101",
92264
92294
  "page-1134",
92265
92295
  "page-1195"
92266
92296
  ],
@@ -92467,7 +92497,7 @@
92467
92497
  "page-0100",
92468
92498
  "page-0110",
92469
92499
  "page-0132",
92470
- "page-0143",
92500
+ "page-0144",
92471
92501
  "page-0201",
92472
92502
  "page-0487",
92473
92503
  "page-0491",
@@ -92500,7 +92530,7 @@
92500
92530
  ],
92501
92531
  "waiting": [
92502
92532
  "page-0003",
92503
- "page-0146",
92533
+ "page-0147",
92504
92534
  "page-0167",
92505
92535
  "page-0313",
92506
92536
  "page-0373",
@@ -92548,9 +92578,9 @@
92548
92578
  "page-0109",
92549
92579
  "page-0130",
92550
92580
  "page-0139",
92551
- "page-0141",
92552
- "page-0144",
92581
+ "page-0142",
92553
92582
  "page-0145",
92583
+ "page-0146",
92554
92584
  "page-0151",
92555
92585
  "page-0153",
92556
92586
  "page-0193",
@@ -92894,8 +92924,8 @@
92894
92924
  "page-0007",
92895
92925
  "page-0139",
92896
92926
  "page-0151",
92927
+ "page-0215",
92897
92928
  "page-0217",
92898
- "page-0224",
92899
92929
  "page-0637",
92900
92930
  "page-0679",
92901
92931
  "page-0683",
@@ -93401,11 +93431,13 @@
93401
93431
  "page-0167",
93402
93432
  "page-0186",
93403
93433
  "page-0209",
93434
+ "page-0215",
93404
93435
  "page-1185",
93405
93436
  "page-1195"
93406
93437
  ],
93407
93438
  "worker": [
93408
- "page-0003"
93439
+ "page-0003",
93440
+ "page-0215"
93409
93441
  ],
93410
93442
  "stalled": [
93411
93443
  "page-0003"
@@ -93751,7 +93783,6 @@
93751
93783
  ],
93752
93784
  "versions": [
93753
93785
  "page-0004",
93754
- "page-0224",
93755
93786
  "page-1195",
93756
93787
  "page-1233",
93757
93788
  "page-1234"
@@ -94226,8 +94257,8 @@
94226
94257
  "page-0100",
94227
94258
  "page-0134",
94228
94259
  "page-0136",
94229
- "page-0140",
94230
- "page-0142",
94260
+ "page-0141",
94261
+ "page-0143",
94231
94262
  "page-0194",
94232
94263
  "page-0227",
94233
94264
  "page-0327",
@@ -94576,12 +94607,13 @@
94576
94607
  "page-0130",
94577
94608
  "page-0131",
94578
94609
  "page-0132",
94579
- "page-0144",
94610
+ "page-0145",
94580
94611
  "page-0149",
94581
94612
  "page-0170",
94582
94613
  "page-0194",
94583
94614
  "page-0195",
94584
94615
  "page-0201",
94616
+ "page-0215",
94585
94617
  "page-0236",
94586
94618
  "page-0427",
94587
94619
  "page-0515",
@@ -94946,7 +94978,7 @@
94946
94978
  "page-0626",
94947
94979
  "page-0627",
94948
94980
  "page-0628",
94949
- "page-1102",
94981
+ "page-1103",
94950
94982
  "page-1195"
94951
94983
  ],
94952
94984
  "(llm)": [
@@ -95231,6 +95263,7 @@
95231
95263
  "page-0203",
95232
95264
  "page-0204",
95233
95265
  "page-0205",
95266
+ "page-0215",
95234
95267
  "page-0218",
95235
95268
  "page-0790",
95236
95269
  "page-0804",
@@ -95239,7 +95272,7 @@
95239
95272
  "page-1018",
95240
95273
  "page-1089",
95241
95274
  "page-1100",
95242
- "page-1107",
95275
+ "page-1101",
95243
95276
  "page-1197",
95244
95277
  "page-1198",
95245
95278
  "page-1237"
@@ -95256,7 +95289,6 @@
95256
95289
  "collection": [
95257
95290
  "page-0007",
95258
95291
  "page-0131",
95259
- "page-0224",
95260
95292
  "page-0546",
95261
95293
  "page-0548",
95262
95294
  "page-1159",
@@ -95482,7 +95514,7 @@
95482
95514
  "page-0196",
95483
95515
  "page-0207",
95484
95516
  "page-0209",
95485
- "page-0225",
95517
+ "page-0224",
95486
95518
  "page-0543",
95487
95519
  "page-0547",
95488
95520
  "page-0548",
@@ -95516,7 +95548,7 @@
95516
95548
  "page-0022",
95517
95549
  "page-0148",
95518
95550
  "page-0157",
95519
- "page-0225",
95551
+ "page-0224",
95520
95552
  "page-0653",
95521
95553
  "page-0654",
95522
95554
  "page-0709",
@@ -95593,6 +95625,7 @@
95593
95625
  "page-0018",
95594
95626
  "page-0197",
95595
95627
  "page-0205",
95628
+ "page-0215",
95596
95629
  "page-0510",
95597
95630
  "page-0692",
95598
95631
  "page-0728",
@@ -95619,7 +95652,6 @@
95619
95652
  "events": [
95620
95653
  "page-0011",
95621
95654
  "page-0013",
95622
- "page-0224",
95623
95655
  "page-1029",
95624
95656
  "page-1030",
95625
95657
  "page-1031",
@@ -95659,8 +95691,8 @@
95659
95691
  "page-1095",
95660
95692
  "page-1096",
95661
95693
  "page-1100",
95662
- "page-1103",
95663
- "page-1107",
95694
+ "page-1101",
95695
+ "page-1104",
95664
95696
  "page-1108",
95665
95697
  "page-1109",
95666
95698
  "page-1110",
@@ -95828,7 +95860,7 @@
95828
95860
  "page-0013",
95829
95861
  "page-0027",
95830
95862
  "page-0131",
95831
- "page-0143",
95863
+ "page-0144",
95832
95864
  "page-0637",
95833
95865
  "page-0653",
95834
95866
  "page-0699",
@@ -95953,7 +95985,7 @@
95953
95985
  "loop": [
95954
95986
  "page-0013",
95955
95987
  "page-0021",
95956
- "page-0142",
95988
+ "page-0143",
95957
95989
  "page-0229",
95958
95990
  "page-0678"
95959
95991
  ],
@@ -95979,7 +96011,7 @@
95979
96011
  "page-0085",
95980
96012
  "page-0098",
95981
96013
  "page-0149",
95982
- "page-0225",
96014
+ "page-0224",
95983
96015
  "page-0231",
95984
96016
  "page-0232",
95985
96017
  "page-0233",
@@ -96596,8 +96628,8 @@
96596
96628
  "page-0131",
96597
96629
  "page-0132",
96598
96630
  "page-0136",
96599
- "page-0140",
96600
- "page-0145",
96631
+ "page-0141",
96632
+ "page-0146",
96601
96633
  "page-0198",
96602
96634
  "page-0199",
96603
96635
  "page-0200",
@@ -96726,6 +96758,7 @@
96726
96758
  "main": [
96727
96759
  "page-0015",
96728
96760
  "page-0186",
96761
+ "page-0215",
96729
96762
  "page-1146",
96730
96763
  "page-1149",
96731
96764
  "page-1194"
@@ -96740,7 +96773,7 @@
96740
96773
  "page-0018",
96741
96774
  "page-0028",
96742
96775
  "page-0132",
96743
- "page-0145",
96776
+ "page-0146",
96744
96777
  "page-0641",
96745
96778
  "page-0648",
96746
96779
  "page-0649",
@@ -96802,11 +96835,10 @@
96802
96835
  "page-0058",
96803
96836
  "page-0063",
96804
96837
  "page-0067",
96805
- "page-0147",
96838
+ "page-0140",
96806
96839
  "page-0212",
96807
96840
  "page-0216",
96808
96841
  "page-0217",
96809
- "page-0224",
96810
96842
  "page-0233",
96811
96843
  "page-0236",
96812
96844
  "page-0241",
@@ -97303,8 +97335,8 @@
97303
97335
  "page-1092",
97304
97336
  "page-1095",
97305
97337
  "page-1100",
97306
- "page-1103",
97307
- "page-1107",
97338
+ "page-1101",
97339
+ "page-1104",
97308
97340
  "page-1108",
97309
97341
  "page-1111",
97310
97342
  "page-1114",
@@ -97336,7 +97368,6 @@
97336
97368
  "page-0203",
97337
97369
  "page-0216",
97338
97370
  "page-0217",
97339
- "page-0224",
97340
97371
  "page-0233",
97341
97372
  "page-0236",
97342
97373
  "page-0241",
@@ -97834,8 +97865,8 @@
97834
97865
  "page-1092",
97835
97866
  "page-1095",
97836
97867
  "page-1100",
97837
- "page-1103",
97838
- "page-1107",
97868
+ "page-1101",
97869
+ "page-1104",
97839
97870
  "page-1108",
97840
97871
  "page-1111",
97841
97872
  "page-1114",
@@ -98344,7 +98375,7 @@
98344
98375
  "page-1017",
98345
98376
  "page-1018",
98346
98377
  "page-1019",
98347
- "page-1105",
98378
+ "page-1106",
98348
98379
  "page-1138",
98349
98380
  "page-1181",
98350
98381
  "page-1182",
@@ -98370,7 +98401,7 @@
98370
98401
  "page-0196",
98371
98402
  "page-0207",
98372
98403
  "page-0209",
98373
- "page-0225",
98404
+ "page-0224",
98374
98405
  "page-0543",
98375
98406
  "page-0547",
98376
98407
  "page-0548",
@@ -98617,7 +98648,7 @@
98617
98648
  ],
98618
98649
  "executing": [
98619
98650
  "page-0018",
98620
- "page-0142"
98651
+ "page-0143"
98621
98652
  ],
98622
98653
  "through": [
98623
98654
  "page-0018",
@@ -99187,7 +99218,7 @@
99187
99218
  "handling": [
99188
99219
  "page-0019",
99189
99220
  "page-0064",
99190
- "page-0140",
99221
+ "page-0141",
99191
99222
  "page-0229",
99192
99223
  "page-0666",
99193
99224
  "page-1130",
@@ -99216,7 +99247,7 @@
99216
99247
  "creating": [
99217
99248
  "page-0020",
99218
99249
  "page-0086",
99219
- "page-0142",
99250
+ "page-0143",
99220
99251
  "page-1144",
99221
99252
  "page-1147"
99222
99253
  ],
@@ -99292,7 +99323,7 @@
99292
99323
  "page-0025",
99293
99324
  "page-0095",
99294
99325
  "page-0157",
99295
- "page-0224",
99326
+ "page-0215",
99296
99327
  "page-0692",
99297
99328
  "page-1052",
99298
99329
  "page-1095",
@@ -99590,7 +99621,7 @@
99590
99621
  "splitting": [
99591
99622
  "page-0023",
99592
99623
  "page-0088",
99593
- "page-0144"
99624
+ "page-0145"
99594
99625
  ],
99595
99626
  "case?": [
99596
99627
  "page-0023"
@@ -99659,6 +99690,7 @@
99659
99690
  ],
99660
99691
  "view": [
99661
99692
  "page-0025",
99693
+ "page-0215",
99662
99694
  "page-1194",
99663
99695
  "page-1195",
99664
99696
  "page-1204",
@@ -99852,7 +99884,7 @@
99852
99884
  "page-0029",
99853
99885
  "page-0046",
99854
99886
  "page-0136",
99855
- "page-0145",
99887
+ "page-0146",
99856
99888
  "page-0622",
99857
99889
  "page-0648",
99858
99890
  "page-0649",
@@ -100445,7 +100477,7 @@
100445
100477
  "page-0694",
100446
100478
  "page-0787",
100447
100479
  "page-1038",
100448
- "page-1102",
100480
+ "page-1103",
100449
100481
  "page-1241"
100450
100482
  ],
100451
100483
  "piece": [
@@ -101404,7 +101436,7 @@
101404
101436
  "page-0107",
101405
101437
  "page-0109",
101406
101438
  "page-0110",
101407
- "page-0142",
101439
+ "page-0143",
101408
101440
  "page-0229",
101409
101441
  "page-0662",
101410
101442
  "page-0666",
@@ -101920,6 +101952,7 @@
101920
101952
  "processing": [
101921
101953
  "page-0080",
101922
101954
  "page-0087",
101955
+ "page-0215",
101923
101956
  "page-0541",
101924
101957
  "page-0624",
101925
101958
  "page-0626",
@@ -102021,7 +102054,7 @@
102021
102054
  "different": [
102022
102055
  "page-0087",
102023
102056
  "page-0093",
102024
- "page-0143",
102057
+ "page-0144",
102025
102058
  "page-0666",
102026
102059
  "page-0678"
102027
102060
  ],
@@ -102054,20 +102087,20 @@
102054
102087
  "merging": [
102055
102088
  "page-0088",
102056
102089
  "page-0092",
102057
- "page-0143",
102090
+ "page-0144",
102058
102091
  "page-0666",
102059
102092
  "page-1214"
102060
102093
  ],
102061
102094
  "merge": [
102062
102095
  "page-0088",
102063
- "page-0143",
102096
+ "page-0144",
102064
102097
  "page-0659",
102065
102098
  "page-0666",
102066
102099
  "page-1206"
102067
102100
  ],
102068
102101
  "looping": [
102069
102102
  "page-0088",
102070
- "page-0142"
102103
+ "page-0143"
102071
102104
  ],
102072
102105
  "batches": [
102073
102106
  "page-0088"
@@ -102077,7 +102110,6 @@
102077
102110
  ],
102078
102111
  "checking": [
102079
102112
  "page-0089",
102080
- "page-0224",
102081
102113
  "page-1157",
102082
102114
  "page-1234"
102083
102115
  ],
@@ -102099,7 +102131,7 @@
102099
102131
  ],
102100
102132
  "exceptions": [
102101
102133
  "page-0089",
102102
- "page-0142",
102134
+ "page-0143",
102103
102135
  "page-1174",
102104
102136
  "page-1176"
102105
102137
  ],
@@ -103585,8 +103617,21 @@
103585
103617
  "page-0516",
103586
103618
  "page-1240"
103587
103619
  ],
103588
- "error": [
103620
+ "flow": [
103621
+ "page-0140",
103622
+ "page-0299",
103623
+ "page-0796",
103624
+ "page-1054"
103625
+ ],
103626
+ "logic": [
103589
103627
  "page-0140",
103628
+ "page-1209"
103629
+ ],
103630
+ "sections": [
103631
+ "page-0140"
103632
+ ],
103633
+ "error": [
103634
+ "page-0141",
103590
103635
  "page-0363",
103591
103636
  "page-0491",
103592
103637
  "page-0500",
@@ -103608,29 +103653,30 @@
103608
103653
  "page-1235"
103609
103654
  ],
103610
103655
  "cause": [
103611
- "page-0140",
103656
+ "page-0141",
103612
103657
  "page-1206"
103613
103658
  ],
103614
103659
  "failure": [
103615
- "page-0140"
103660
+ "page-0141"
103616
103661
  ],
103617
103662
  "stop": [
103618
- "page-0140",
103663
+ "page-0141",
103619
103664
  "page-0194",
103620
103665
  "page-0200",
103621
103666
  "page-0205",
103622
103667
  "page-0682"
103623
103668
  ],
103624
103669
  "multi": [
103625
- "page-0141",
103670
+ "page-0142",
103626
103671
  "page-0186",
103627
103672
  "page-0214",
103673
+ "page-0215",
103628
103674
  "page-0643",
103629
103675
  "page-0695",
103630
103676
  "page-1159"
103631
103677
  ],
103632
103678
  "branch": [
103633
- "page-0141",
103679
+ "page-0142",
103634
103680
  "page-0656",
103635
103681
  "page-0659",
103636
103682
  "page-0666",
@@ -103639,71 +103685,58 @@
103639
103685
  "page-1205"
103640
103686
  ],
103641
103687
  "loops": [
103642
- "page-0142"
103688
+ "page-0143"
103643
103689
  ],
103644
103690
  "once": [
103645
- "page-0142",
103691
+ "page-0143",
103646
103692
  "page-0699"
103647
103693
  ],
103648
103694
  "until": [
103649
- "page-0142"
103695
+ "page-0143"
103650
103696
  ],
103651
103697
  "condition": [
103652
- "page-0142"
103698
+ "page-0143"
103653
103699
  ],
103654
103700
  "processed": [
103655
- "page-0142",
103701
+ "page-0143",
103656
103702
  "page-0167",
103657
103703
  "page-0678",
103658
103704
  "page-0703"
103659
103705
  ],
103660
103706
  "streams": [
103661
- "page-0143",
103707
+ "page-0144",
103662
103708
  "page-0666"
103663
103709
  ],
103664
103710
  "compare,": [
103665
- "page-0143"
103711
+ "page-0144"
103666
103712
  ],
103667
103713
  "merge,": [
103668
- "page-0143"
103714
+ "page-0144"
103669
103715
  ],
103670
103716
  "split": [
103671
- "page-0143",
103717
+ "page-0144",
103672
103718
  "page-0679",
103673
103719
  "page-0683"
103674
103720
  ],
103675
103721
  "again": [
103676
- "page-0143"
103722
+ "page-0144"
103677
103723
  ],
103678
103724
  "conditionals": [
103679
- "page-0144"
103725
+ "page-0145"
103680
103726
  ],
103681
103727
  "conditional": [
103682
- "page-0144"
103728
+ "page-0145"
103683
103729
  ],
103684
103730
  "passes": [
103685
- "page-0145",
103731
+ "page-0146",
103686
103732
  "page-0648",
103687
103733
  "page-0649"
103688
103734
  ],
103689
103735
  "conversion": [
103690
- "page-0145",
103736
+ "page-0146",
103691
103737
  "page-0676",
103692
103738
  "page-1238"
103693
103739
  ],
103694
- "flow": [
103695
- "page-0147",
103696
- "page-0299",
103697
- "page-0796",
103698
- "page-1054"
103699
- ],
103700
- "logic": [
103701
- "page-0147",
103702
- "page-1209"
103703
- ],
103704
- "sections": [
103705
- "page-0147"
103706
- ],
103707
103740
  "contributing": [
103708
103741
  "page-0148"
103709
103742
  ],
@@ -103777,6 +103810,7 @@
103777
103810
  ],
103778
103811
  "running": [
103779
103812
  "page-0151",
103813
+ "page-0215",
103780
103814
  "page-0510",
103781
103815
  "page-0517",
103782
103816
  "page-0616",
@@ -104047,6 +104081,7 @@
104047
104081
  "configuring": [
104048
104082
  "page-0157",
104049
104083
  "page-0204",
104084
+ "page-0215",
104050
104085
  "page-0692",
104051
104086
  "page-0737",
104052
104087
  "page-1228"
@@ -104087,6 +104122,7 @@
104087
104122
  "page-0205",
104088
104123
  "page-0206",
104089
104124
  "page-0211",
104125
+ "page-0215",
104090
104126
  "page-0506",
104091
104127
  "page-0656",
104092
104128
  "page-0728",
@@ -104178,7 +104214,8 @@
104178
104214
  "page-0523"
104179
104215
  ],
104180
104216
  "encryption": [
104181
- "page-0163"
104217
+ "page-0163",
104218
+ "page-0215"
104182
104219
  ],
104183
104220
  "timeout": [
104184
104221
  "page-0164",
@@ -104215,7 +104252,8 @@
104215
104252
  ],
104216
104253
  "scaling": [
104217
104254
  "page-0167",
104218
- "page-0213"
104255
+ "page-0213",
104256
+ "page-0215"
104219
104257
  ],
104220
104258
  "jobs": [
104221
104259
  "page-0167"
@@ -104229,6 +104267,7 @@
104229
104267
  ],
104230
104268
  "workers": [
104231
104269
  "page-0167",
104270
+ "page-0215",
104232
104271
  "page-1195"
104233
104272
  ],
104234
104273
  "gauge": [
@@ -104804,7 +104843,8 @@
104804
104843
  "page-1198"
104805
104844
  ],
104806
104845
  "(optional)": [
104807
- "page-0202"
104846
+ "page-0202",
104847
+ "page-0215"
104808
104848
  ],
104809
104849
  "workspace": [
104810
104850
  "page-0202",
@@ -104914,6 +104954,7 @@
104914
104954
  ],
104915
104955
  "concurrency": [
104916
104956
  "page-0209",
104957
+ "page-0215",
104917
104958
  "page-1185"
104918
104959
  ],
104919
104960
  "reduce": [
@@ -105008,6 +105049,43 @@
105008
105049
  "factors": [
105009
105050
  "page-0214"
105010
105051
  ],
105052
+ "redis": [
105053
+ "page-0215",
105054
+ "page-0423",
105055
+ "page-0551",
105056
+ "page-0597",
105057
+ "page-0929",
105058
+ "page-1091",
105059
+ "page-1194"
105060
+ ],
105061
+ "queues": [
105062
+ "page-0215"
105063
+ ],
105064
+ "processors": [
105065
+ "page-0215",
105066
+ "page-1192"
105067
+ ],
105068
+ "load": [
105069
+ "page-0215",
105070
+ "page-0245",
105071
+ "page-0471",
105072
+ "page-0710",
105073
+ "page-1194",
105074
+ "page-1247",
105075
+ "page-1249"
105076
+ ],
105077
+ "balancer": [
105078
+ "page-0215"
105079
+ ],
105080
+ "recommendations": [
105081
+ "page-0215"
105082
+ ],
105083
+ "leader": [
105084
+ "page-0215"
105085
+ ],
105086
+ "designation": [
105087
+ "page-0215"
105088
+ ],
105011
105089
  "blocking": [
105012
105090
  "page-0216"
105013
105091
  ],
@@ -105080,46 +105158,8 @@
105080
105158
  "(sso)": [
105081
105159
  "page-0223"
105082
105160
  ],
105083
- "collected": [
105084
- "page-0224"
105085
- ],
105086
- "opting": [
105087
- "page-0224",
105088
- "page-1192"
105089
- ],
105090
- "telemetry": [
105091
- "page-0224",
105092
- "page-1192"
105093
- ],
105094
- "connection": [
105095
- "page-0224",
105096
- "page-0543",
105097
- "page-0689",
105098
- "page-0722",
105099
- "page-0729",
105100
- "page-0766",
105101
- "page-0794",
105102
- "page-0868",
105103
- "page-0877",
105104
- "page-0880",
105105
- "page-0882",
105106
- "page-0899",
105107
- "page-0911",
105108
- "page-0921",
105109
- "page-0924",
105110
- "page-0929",
105111
- "page-0933",
105112
- "page-0970",
105113
- "page-0993",
105114
- "page-0999",
105115
- "page-1022",
105116
- "page-1243"
105117
- ],
105118
- "servers": [
105119
- "page-0224"
105120
- ],
105121
105161
  "starter": [
105122
- "page-0225",
105162
+ "page-0224",
105123
105163
  "page-0543",
105124
105164
  "page-0547",
105125
105165
  "page-0548",
@@ -105129,10 +105169,10 @@
105129
105169
  "page-0627"
105130
105170
  ],
105131
105171
  "what’s": [
105132
- "page-0225"
105172
+ "page-0224"
105133
105173
  ],
105134
105174
  "included": [
105135
- "page-0225",
105175
+ "page-0224",
105136
105176
  "page-0561"
105137
105177
  ],
105138
105178
  "integrations": [
@@ -105804,14 +105844,6 @@
105804
105844
  "page-0785",
105805
105845
  "page-1194"
105806
105846
  ],
105807
- "load": [
105808
- "page-0245",
105809
- "page-0471",
105810
- "page-0710",
105811
- "page-1194",
105812
- "page-1247",
105813
- "page-1249"
105814
- ],
105815
105847
  "balancing": [
105816
105848
  "page-0245",
105817
105849
  "page-1194"
@@ -106617,14 +106649,6 @@
106617
106649
  "page-0422",
106618
106650
  "page-0928"
106619
106651
  ],
106620
- "redis": [
106621
- "page-0423",
106622
- "page-0551",
106623
- "page-0597",
106624
- "page-0929",
106625
- "page-1091",
106626
- "page-1194"
106627
- ],
106628
106652
  "rocket": [
106629
106653
  "page-0424",
106630
106654
  "page-0930"
@@ -106742,7 +106766,7 @@
106742
106766
  "page-0968",
106743
106767
  "page-0969",
106744
106768
  "page-1100",
106745
- "page-1107",
106769
+ "page-1101",
106746
106770
  "page-1195"
106747
106771
  ],
106748
106772
  "timescaledb": [
@@ -106760,7 +106784,7 @@
106760
106784
  "trello": [
106761
106785
  "page-0456",
106762
106786
  "page-0976",
106763
- "page-1102"
106787
+ "page-1103"
106764
106788
  ],
106765
106789
  "twake": [
106766
106790
  "page-0457",
@@ -106769,7 +106793,7 @@
106769
106793
  "twilio": [
106770
106794
  "page-0458",
106771
106795
  "page-0978",
106772
- "page-1103",
106796
+ "page-1104",
106773
106797
  "page-1195"
106774
106798
  ],
106775
106799
  "twist": [
@@ -106826,7 +106850,7 @@
106826
106850
  "page-0467",
106827
106851
  "page-0987",
106828
106852
  "page-0988",
106829
- "page-1105",
106853
+ "page-1106",
106830
106854
  "page-1194"
106831
106855
  ],
106832
106856
  "protect": [
@@ -106834,7 +106858,7 @@
106834
106858
  "page-0467",
106835
106859
  "page-0987",
106836
106860
  "page-0988",
106837
- "page-1105",
106861
+ "page-1106",
106838
106862
  "page-1194"
106839
106863
  ],
106840
106864
  "datacenter": [
@@ -106852,7 +106876,7 @@
106852
106876
  "webflow": [
106853
106877
  "page-0470",
106854
106878
  "page-0994",
106855
- "page-1106"
106879
+ "page-1107"
106856
106880
  ],
106857
106881
  "wekan": [
106858
106882
  "page-0471",
@@ -107676,6 +107700,29 @@
107676
107700
  "page-0543",
107677
107701
  "page-0685"
107678
107702
  ],
107703
+ "connection": [
107704
+ "page-0543",
107705
+ "page-0689",
107706
+ "page-0722",
107707
+ "page-0729",
107708
+ "page-0766",
107709
+ "page-0794",
107710
+ "page-0868",
107711
+ "page-0877",
107712
+ "page-0880",
107713
+ "page-0882",
107714
+ "page-0899",
107715
+ "page-0911",
107716
+ "page-0921",
107717
+ "page-0924",
107718
+ "page-0929",
107719
+ "page-0933",
107720
+ "page-0970",
107721
+ "page-0993",
107722
+ "page-0999",
107723
+ "page-1022",
107724
+ "page-1243"
107725
+ ],
107679
107726
  "chroma": [
107680
107727
  "page-0544",
107681
107728
  "page-0748"
@@ -109061,7 +109108,7 @@
109061
109108
  ],
109062
109109
  "toggl": [
109063
109110
  "page-0972",
109064
- "page-1101"
109111
+ "page-1102"
109065
109112
  ],
109066
109113
  "trellix": [
109067
109114
  "page-0975"
@@ -109071,7 +109118,7 @@
109071
109118
  ],
109072
109119
  "typeform": [
109073
109120
  "page-0981",
109074
- "page-1104"
109121
+ "page-1105"
109075
109122
  ],
109076
109123
  "oidc": [
109077
109124
  "page-0989",
@@ -109704,15 +109751,18 @@
109704
109751
  "submitting": [
109705
109752
  "page-1192"
109706
109753
  ],
109707
- "processors": [
109708
- "page-1192"
109709
- ],
109710
109754
  "collects": [
109711
109755
  "page-1192"
109712
109756
  ],
109713
109757
  "collect": [
109714
109758
  "page-1192"
109715
109759
  ],
109760
+ "opting": [
109761
+ "page-1192"
109762
+ ],
109763
+ "telemetry": [
109764
+ "page-1192"
109765
+ ],
109716
109766
  "uses": [
109717
109767
  "page-1192"
109718
109768
  ],
@@ -110936,6 +110986,7 @@
110936
110986
  "page-0212",
110937
110987
  "page-0213",
110938
110988
  "page-0214",
110989
+ "page-0215",
110939
110990
  "page-0216",
110940
110991
  "page-0217",
110941
110992
  "page-0218",
@@ -110944,8 +110995,7 @@
110944
110995
  "page-0221",
110945
110996
  "page-0222",
110946
110997
  "page-0223",
110947
- "page-0224",
110948
- "page-0225"
110998
+ "page-0224"
110949
110999
  ],
110950
111000
  "integrations": [
110951
111001
  "page-0230",
@@ -112726,28 +112776,28 @@
112726
112776
  "taigatrigger": [
112727
112777
  "page-1099"
112728
112778
  ],
112729
- "thehivetrigger": [
112779
+ "thehive5trigger": [
112730
112780
  "page-1100"
112731
112781
  ],
112732
- "toggltrigger": [
112782
+ "thehivetrigger": [
112733
112783
  "page-1101"
112734
112784
  ],
112735
- "trellotrigger": [
112785
+ "toggltrigger": [
112736
112786
  "page-1102"
112737
112787
  ],
112738
- "twiliotrigger": [
112788
+ "trellotrigger": [
112739
112789
  "page-1103"
112740
112790
  ],
112741
- "typeformtrigger": [
112791
+ "twiliotrigger": [
112742
112792
  "page-1104"
112743
112793
  ],
112744
- "venafitlsprotectcloudtrigger": [
112794
+ "typeformtrigger": [
112745
112795
  "page-1105"
112746
112796
  ],
112747
- "webflowtrigger": [
112797
+ "venafitlsprotectcloudtrigger": [
112748
112798
  "page-1106"
112749
112799
  ],
112750
- "thehive5trigger": [
112800
+ "webflowtrigger": [
112751
112801
  "page-1107"
112752
112802
  ],
112753
112803
  "whatsapptrigger": [