@n8n-as-code/skills 0.16.9-next.27de896 → 0.16.9-next.5314481

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-02-28T15:23:27.356Z",
2
+ "generatedAt": "2026-02-28T18:57:14.562Z",
3
3
  "version": "1.0.0",
4
4
  "sourceUrl": "https://docs.n8n.io/llms.txt",
5
5
  "totalPages": 1249,
@@ -10179,7 +10179,7 @@
10179
10179
  "nodeName": null,
10180
10180
  "nodeType": null,
10181
10181
  "content": {
10182
- "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",
10182
+ "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",
10183
10183
  "excerpt": "# Expression Reference These are some commonly used expressions. A more exhaustive list appears below. | Category | Expression | Description...",
10184
10184
  "sections": [
10185
10185
  {
@@ -10216,7 +10216,7 @@
10216
10216
  "codeExamples": 0,
10217
10217
  "complexity": "intermediate",
10218
10218
  "readingTime": "22 min",
10219
- "contentLength": 45286,
10219
+ "contentLength": 45288,
10220
10220
  "relatedPages": []
10221
10221
  },
10222
10222
  "searchIndex": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-02-28T15:23:29.162Z",
2
+ "generatedAt": "2026-02-28T18:57:16.374Z",
3
3
  "version": "2.0.0",
4
4
  "statistics": {
5
5
  "totalEntries": 1786,
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-02-28T15:23:26.348Z",
2
+ "generatedAt": "2026-02-28T18:57:13.565Z",
3
3
  "sourceFileCount": 644,
4
4
  "scanDirectories": [
5
5
  "/home/runner/work/n8n-as-code/n8n-as-code/.n8n-cache/packages/nodes-base/dist/nodes",
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-02-28T15:23:27.817Z",
2
+ "generatedAt": "2026-02-28T18:57:15.023Z",
3
3
  "sourceData": {
4
4
  "nodesIndexFile": "/home/runner/work/n8n-as-code/n8n-as-code/packages/skills/src/assets/n8n-nodes-index.json",
5
5
  "docsMetadataFile": "/home/runner/work/n8n-as-code/n8n-as-code/packages/skills/src/assets/n8n-docs-cache/metadata.json",
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-02-28T15:23:30.506Z",
2
+ "generatedAt": "2026-02-28T18:57:17.985Z",
3
3
  "repository": "https://github.com/nusquama/n8nworkflows.xyz.git",
4
4
  "totalWorkflows": 7702,
5
5
  "workflows": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@n8n-as-code/skills",
3
- "version": "0.16.9-next.27de896",
3
+ "version": "0.16.9-next.5314481",
4
4
  "description": "AI Agent skills library for n8nac (internal — use npx n8nac skills)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-02-28T15:23:26.642Z",
2
+ "generatedAt": "2026-02-28T18:57:13.889Z",
3
3
  "sourceUrl": "https://docs.n8n.io/llms.txt",
4
4
  "totalPages": 1249,
5
5
  "errors": 0,
@@ -3062,7 +3062,7 @@
3062
3062
  "workflowdata"
3063
3063
  ],
3064
3064
  "useCases": [],
3065
- "contentLength": 45286,
3065
+ "contentLength": 45288,
3066
3066
  "filePath": "pages/data/page-0112.md"
3067
3067
  },
3068
3068
  "page-0113": {
@@ -548,7 +548,7 @@ See also `slice()` and `append()`.
548
548
 
549
549
  - [*`Number`*.**`toDateTime(format?)`**](number/#numbertodatetime)
550
550
 
551
- 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 workflows settings).
551
+ 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).
552
552
 
553
553
  - [*`Number`*.**`toLocaleString(locales?, options?)`**](number/#numbertolocalestring)
554
554
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-02-28T15:23:27.356Z",
2
+ "generatedAt": "2026-02-28T18:57:14.562Z",
3
3
  "version": "1.0.0",
4
4
  "sourceUrl": "https://docs.n8n.io/llms.txt",
5
5
  "totalPages": 1249,
@@ -10179,7 +10179,7 @@
10179
10179
  "nodeName": null,
10180
10180
  "nodeType": null,
10181
10181
  "content": {
10182
- "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",
10182
+ "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",
10183
10183
  "excerpt": "# Expression Reference These are some commonly used expressions. A more exhaustive list appears below. | Category | Expression | Description...",
10184
10184
  "sections": [
10185
10185
  {
@@ -10216,7 +10216,7 @@
10216
10216
  "codeExamples": 0,
10217
10217
  "complexity": "intermediate",
10218
10218
  "readingTime": "22 min",
10219
- "contentLength": 45286,
10219
+ "contentLength": 45288,
10220
10220
  "relatedPages": []
10221
10221
  },
10222
10222
  "searchIndex": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-02-28T15:23:29.162Z",
2
+ "generatedAt": "2026-02-28T18:57:16.374Z",
3
3
  "version": "2.0.0",
4
4
  "statistics": {
5
5
  "totalEntries": 1786,
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-02-28T15:23:26.348Z",
2
+ "generatedAt": "2026-02-28T18:57:13.565Z",
3
3
  "sourceFileCount": 644,
4
4
  "scanDirectories": [
5
5
  "/home/runner/work/n8n-as-code/n8n-as-code/.n8n-cache/packages/nodes-base/dist/nodes",
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-02-28T15:23:27.817Z",
2
+ "generatedAt": "2026-02-28T18:57:15.023Z",
3
3
  "sourceData": {
4
4
  "nodesIndexFile": "/home/runner/work/n8n-as-code/n8n-as-code/packages/skills/src/assets/n8n-nodes-index.json",
5
5
  "docsMetadataFile": "/home/runner/work/n8n-as-code/n8n-as-code/packages/skills/src/assets/n8n-docs-cache/metadata.json",
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-02-28T15:23:30.506Z",
2
+ "generatedAt": "2026-02-28T18:57:17.985Z",
3
3
  "repository": "https://github.com/nusquama/n8nworkflows.xyz.git",
4
4
  "totalWorkflows": 7702,
5
5
  "workflows": [