{
  "generatedAt": "2026-07-21T15:19:45.289Z",
  "totals": {
    "catalogEntries": 353,
    "dtsCovered": 352,
    "dtsMissingFlat": 1,
    "dtsMissingNested": 11,
    "dtsMissingTotal": 12
  },
  "dtsMissing": [
    {
      "id": "Platform.Request.GetUserLanguages",
      "category": "Platform.Request",
      "name": "GetUserLanguages",
      "syntax": "Platform.Request.GetUserLanguages()"
    }
  ],
  "nestedDtsMissing": [
    {
      "id": "List.Subscribers.Add",
      "iface": "ListInstance",
      "propPath": "Subscribers",
      "syntax": "<ListInstance>.Subscribers.Add(properties)"
    },
    {
      "id": "List.Subscribers.Retrieve",
      "iface": "ListInstance",
      "propPath": "Subscribers",
      "syntax": "<ListInstance>.Subscribers.Retrieve([filter])"
    },
    {
      "id": "List.Subscribers.Unsubscribe",
      "iface": "ListInstance",
      "propPath": "Subscribers",
      "syntax": "<ListInstance>.Subscribers.Unsubscribe(emailAddress)"
    },
    {
      "id": "List.Subscribers.Update",
      "iface": "ListInstance",
      "propPath": "Subscribers",
      "syntax": "<ListInstance>.Subscribers.Update(emailAddress, status)"
    },
    {
      "id": "List.Subscribers.Upsert",
      "iface": "ListInstance",
      "propPath": "Subscribers",
      "syntax": "<ListInstance>.Subscribers.Upsert(emailAddress, attributes)"
    },
    {
      "id": "List.Subscribers.Tracking.Retrieve",
      "iface": "ListInstance",
      "propPath": "Subscribers.Tracking",
      "syntax": "<ListInstance>.Subscribers.Tracking.Retrieve(filter)"
    },
    {
      "id": "Subscriber.Attributes.Retrieve",
      "iface": "SubscriberInstance",
      "propPath": "Attributes",
      "syntax": "<SubscriberInstance>.Attributes.Retrieve()"
    },
    {
      "id": "Subscriber.Lists.Retrieve",
      "iface": "SubscriberInstance",
      "propPath": "Lists",
      "syntax": "<SubscriberInstance>.Lists.Retrieve()"
    },
    {
      "id": "TriggeredSend.Tracking.Retrieve",
      "iface": "TriggeredSendInstance",
      "propPath": "Tracking",
      "syntax": "<TriggeredSendInstance>.Tracking.Retrieve([filter])"
    },
    {
      "id": "TriggeredSend.Tracking.Clicks.Retrieve",
      "iface": "TriggeredSendInstance",
      "propPath": "Tracking.Clicks",
      "syntax": "<TriggeredSendInstance>.Tracking.Clicks.Retrieve(filter)"
    },
    {
      "id": "TriggeredSend.Tracking.TotalByInterval.Retrieve",
      "iface": "TriggeredSendInstance",
      "propPath": "Tracking.TotalByInterval",
      "syntax": "<TriggeredSendInstance>.Tracking.TotalByInterval.Retrieve(type, startDate, endDate, groupBy)"
    }
  ],
  "guideOnly": [
    {
      "id": "RegExp (constructor)",
      "source": "ssjs.guide/language/regular-expressions.md",
      "note": "new RegExp() — native constructor, not in ECMASCRIPT_BUILTINS",
      "inSsjsData": false
    },
    {
      "id": "RegExp.test",
      "source": "ssjs.guide/language/regular-expressions.md",
      "note": "Instance method documented in guide",
      "inSsjsData": true
    },
    {
      "id": "RegExp.exec",
      "source": "ssjs.guide/language/regular-expressions.md",
      "note": "Instance method documented in guide",
      "inSsjsData": true
    },
    {
      "id": "RegExp.match (via String)",
      "source": "ssjs.guide/language/regular-expressions.md",
      "note": "String.match documented with RegExp",
      "inSsjsData": true
    },
    {
      "id": "Date (constructor)",
      "source": "ssjs.guide/engine-limitations/known-bugs.md",
      "note": "Listed as safe for new operator",
      "inSsjsData": false
    },
    {
      "id": "Object (constructor)",
      "source": "ssjs.guide/engine-limitations/known-bugs.md",
      "note": "Listed as safe for new operator",
      "inSsjsData": false
    },
    {
      "id": "Array (constructor)",
      "source": "ssjs.guide/engine-limitations/known-bugs.md",
      "note": "Listed as safe for new operator",
      "inSsjsData": false
    },
    {
      "id": "RegExp API (constructor + prototype methods)",
      "source": "ssjs.guide/language/regular-expressions.md",
      "note": "Documented in guide; ECMASCRIPT_BUILTINS has no RegExp owner group; d.ts has no interface RegExp or declare function RegExp",
      "inSsjsData": true
    }
  ],
  "categories": {
    "Platform": [
      {
        "id": "Platform.Load",
        "category": "Platform",
        "entry": {
          "name": "Load",
          "minArgs": 2,
          "maxArgs": 2,
          "description": "Loads a platform library. Must be called before using Core library objects.",
          "params": [
            {
              "name": "libraryName",
              "description": "Library to load (e.g. \"core\")",
              "type": "string"
            },
            {
              "name": "version",
              "description": "Library version (e.g. \"1.1.5\")",
              "type": "string"
            }
          ],
          "returnType": "void",
          "isConfirmed": true,
          "officialDocsNote": "Runtime-verified (CloudPage): Platform.Load(\"core\", \"1.1.5\") succeeds and enables bare-name Core aliases (e.g. `Variable`, `Attribute`, `DataExtension`). The `Platform.*` objects (Request, Response, Variable, Recipient) are already available WITHOUT calling Platform.Load.",
          "syntax": "Platform.Load(libraryName, version)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar de = DataExtension.Init(\"MyDE\");\nvar rows = de.Rows.Retrieve();"
        },
        "callExpr": "Platform.Load(\"libraryName\", \"version\")",
        "isProperty": false
      }
    ],
    "Platform.Function": [
      {
        "id": "Platform.Function.Lookup",
        "category": "Platform.Function",
        "entry": {
          "name": "Lookup",
          "ampscriptEquivalent": "Lookup",
          "minArgs": 4,
          "maxArgs": 4,
          "description": "Retrieves a single field value from the first Data Extension row matching filter criteria. The returned value keeps the column's native runtime type (Text/EmailAddress become string, Number/Decimal become number, Boolean becomes boolean, Date becomes a real Date object). Three distinct empty-ish returns: when no row matches it returns a genuine JavaScript null (=== null is true); when a row exists but the field is empty/NULL it returns a CLR null whose typeof is \"clr\" (=== null is FALSE) and which stringifies to \"\"; otherwise the populated native value. To filter by multiple columns, pass string arrays for whereFieldNames and whereFieldValues (AND logic).",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs type the return as a string, but at runtime Lookup returns the column's typed value. Runtime-verified per DE field type: Text/EmailAddress/Locale/Phone return a string, Number/Decimal return a number, Boolean returns a boolean, and Date returns a real Date object. No-match returns a genuine JavaScript null. A row with an empty/NULL field returns a CLR null (typeof \"clr\", not === null) that stringifies to \"\" — so guard empty fields with a loose == null or a String() coercion, not a strict === null check.",
          "params": [
            {
              "name": "deName",
              "description": "Data Extension name (resolved by Name, not external key)",
              "type": "string"
            },
            {
              "name": "returnField",
              "description": "Name of the field to return",
              "type": "string"
            },
            {
              "name": "whereFieldNames",
              "description": "Filter field name, or an array of field names connected with AND logic",
              "type": "string|string[]"
            },
            {
              "name": "whereFieldValues",
              "description": "Filter field value matching whereFieldNames; must be an array of equal length when whereFieldNames is an array",
              "type": "string|array"
            }
          ],
          "returnType": "string|number|boolean|Date|null",
          "syntax": "Platform.Function.Lookup(deName, returnField, whereFieldNames, whereFieldValues)",
          "example": "// Single filter:\nvar email = Platform.Function.Lookup(\"Subscribers\", \"EmailAddress\", \"SubscriberKey\", \"abc123\");\n\n// Multiple filters (AND logic):\nvar phone = Platform.Function.Lookup(\"CustomerData\", \"Phone\", [\"FirstName\", \"LastName\"], [\"Carolyn\", \"Baumgartner\"]);"
        },
        "callExpr": "Platform.Function.Lookup(\"deName\", \"returnField\", [], [])",
        "isProperty": false
      },
      {
        "id": "Platform.Function.LookupRows",
        "category": "Platform.Function",
        "entry": {
          "name": "LookupRows",
          "ampscriptEquivalent": "LookupRows",
          "minArgs": 3,
          "maxArgs": 3,
          "description": "Returns an array of row objects from a Data Extension matching filter criteria (up to 2,000 rows). Each row object also carries the system fields _CustomObjectKey (number) and _CreatedDate (string). Returns null (not an empty array) when no row matches. To filter by multiple columns, pass string arrays for whereFieldNames and whereFieldValues (AND logic).",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs do not mention that no-match returns null (rather than an empty array) or that each row object includes the system fields _CustomObjectKey and _CreatedDate. Most fields are returned as their typed/native JS value, unlike DataExtension.Rows.Retrieve() which stringifies every field. Runtime-verified per DE field type: Text/EmailAddress/Locale/Phone come back as string, Number/Decimal as number, Boolean as boolean; Date columns are the exception — they come back as an ISO-8601 string (e.g. \"2024-01-15T00:00:00.000\"), NOT a Date object — this differs from Platform.Function.Lookup, which returns a real Date for Date columns. Runtime testing confirms the return value is a genuine JavaScript Array (Array.isArray is true; .push/.slice/.sort work), so the return type is object[]; note that instanceof Array is unreliable in the SFMC engine, so use the Array.isArray polyfill to test it.",
          "params": [
            {
              "name": "deName",
              "description": "Data Extension name (resolved by Name, not external key)",
              "type": "string"
            },
            {
              "name": "whereFieldNames",
              "description": "Filter field name, or an array of field names connected with AND logic",
              "type": "string|string[]"
            },
            {
              "name": "whereFieldValues",
              "description": "Filter field value matching whereFieldNames; must be an array of equal length when whereFieldNames is an array",
              "type": "string|array"
            }
          ],
          "returnType": "object[]|null",
          "syntax": "Platform.Function.LookupRows(deName, whereFieldNames, whereFieldValues)",
          "example": "// Single filter:\nvar rows = Platform.Function.LookupRows(\"MyDE\", \"Status\", \"active\");\nfor (var i = 0; i < rows.length; i++) {\n    Write(rows[i][\"Name\"] + \"<br>\");\n}\n\n// Multiple filters (AND logic):\nvar rows2 = Platform.Function.LookupRows(\"CustomerData\", [\"PreferredLanguage\", \"RewardsTier\"], [\"English\", \"Gold\"]);"
        },
        "callExpr": "Platform.Function.LookupRows(\"deName\", [], [])",
        "isProperty": false
      },
      {
        "id": "Platform.Function.LookupOrderedRows",
        "category": "Platform.Function",
        "entry": {
          "name": "LookupOrderedRows",
          "ampscriptEquivalent": "LookupOrderedRows",
          "minArgs": 5,
          "maxArgs": 5,
          "description": "Returns an ordered array of row objects from a Data Extension. The sort expression is a single string in the format \"ColumnName ASC\" or \"ColumnName DESC\". Multiple columns can be separated by commas. Returns up to 2,000 rows; values below 1 for count default to 2,000. Each row object also carries the system fields _CustomObjectKey (number) and _CreatedDate (string). To filter by multiple columns, pass string arrays for whereFieldNames and whereFieldValues (AND logic).",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs do not mention that each returned row object includes the system fields _CustomObjectKey and _CreatedDate. Most fields are returned as their typed/native JS value, unlike DataExtension.Rows.Retrieve() which stringifies every field. Runtime-verified per DE field type: Text/EmailAddress/Locale/Phone come back as string, Number/Decimal as number, Boolean as boolean; Date columns are the exception — they come back as an ISO-8601 string (e.g. \"2024-01-15T00:00:00.000\"), NOT a Date object — this differs from Platform.Function.Lookup, which returns a real Date for Date columns. Runtime testing confirms the return value is a genuine JavaScript Array (Array.isArray is true; .push/.slice/.sort work), so the return type is object[]; note that instanceof Array is unreliable in the SFMC engine, so use the Array.isArray polyfill to test it.",
          "params": [
            {
              "name": "deName",
              "description": "Data Extension name (resolved by Name, not external key)",
              "type": "string"
            },
            {
              "name": "count",
              "description": "Maximum number of rows to return; values below 1 return up to 2,000",
              "type": "number"
            },
            {
              "name": "orderBy",
              "description": "Sort expression using \"ColumnName ASC/DESC\" syntax (e.g. \"LastName ASC, FirstName ASC\")",
              "type": "string"
            },
            {
              "name": "whereFieldNames",
              "description": "Filter field name, or an array of field names connected with AND logic",
              "type": "string|string[]"
            },
            {
              "name": "whereFieldValues",
              "description": "Filter field value matching whereFieldNames; must be an array of equal length when whereFieldNames is an array",
              "type": "string|array"
            }
          ],
          "returnType": "object[]|null",
          "syntax": "Platform.Function.LookupOrderedRows(deName, count, orderBy, whereFieldNames, whereFieldValues)",
          "example": "// Single filter, sorted by LastName ASC:\nvar rows = Platform.Function.LookupOrderedRows(\"MyDE\", 10, \"LastName ASC\", \"RewardsTier\", \"Silver\");\nfor (var i = 0; i < rows.length; i++) {\n    Write(rows[i][\"Email\"] + \"<br>\");\n}\n\n// Multiple filters (AND logic):\nvar rows2 = Platform.Function.LookupOrderedRows(\"CustomerData\", 0, \"LastName ASC\", [\"PreferredLanguage\", \"RewardsTier\"], [\"English\", \"Silver\"]);"
        },
        "callExpr": "Platform.Function.LookupOrderedRows(\"deName\", 1, \"orderBy\", [], [])",
        "isProperty": false
      },
      {
        "id": "Platform.Function.InsertData",
        "category": "Platform.Function",
        "entry": {
          "name": "InsertData",
          "ampscriptEquivalent": "InsertData",
          "minArgs": 3,
          "maxArgs": 3,
          "description": "Adds a new row to a Data Extension and returns the number of rows inserted. Recommended for non-sending contexts (CloudPages, landing pages, microsites, and SMS messages), but the *DE variants also run and commit there — see InsertDE().",
          "isConfirmed": true,
          "params": [
            {
              "name": "deName",
              "description": "Data Extension name (resolved by Name, not external key)",
              "type": "string"
            },
            {
              "name": "fieldNames",
              "description": "Array of column names to populate",
              "type": "string[]"
            },
            {
              "name": "fieldValues",
              "description": "Array of values aligned to fieldNames",
              "type": "array"
            }
          ],
          "returnType": "number",
          "syntax": "Platform.Function.InsertData(deName, fieldNames, fieldValues)",
          "example": "var rowsAffected = Platform.Function.InsertData(\"MyDE\", [\"Email\", \"Name\"], [\"jane@example.com\", \"Jane\"]);"
        },
        "callExpr": "Platform.Function.InsertData(\"deName\", [], [])",
        "isProperty": false
      },
      {
        "id": "Platform.Function.InsertDE",
        "category": "Platform.Function",
        "entry": {
          "name": "InsertDE",
          "ampscriptEquivalent": "InsertDE",
          "minArgs": 3,
          "maxArgs": 3,
          "description": "Adds a new row to a Data Extension. Returns null (no value). The official docs describe this as an email-context function, but it was proven to run and commit on a CloudPage as well. InsertData() is still preferred outside email because it returns the affected-row count.",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs restrict InsertDE to email contexts, but at runtime it executes and commits its insert on a CloudPage too; it returns null rather than a row count.",
          "params": [
            {
              "name": "deName",
              "description": "Data Extension name (resolved by Name, not external key)",
              "type": "string"
            },
            {
              "name": "fieldNames",
              "description": "Array of column names to populate",
              "type": "string[]"
            },
            {
              "name": "fieldValues",
              "description": "Array of values aligned to fieldNames",
              "type": "array"
            }
          ],
          "returnType": "null",
          "syntax": "Platform.Function.InsertDE(deName, fieldNames, fieldValues)",
          "example": "Platform.Function.InsertDE(\"MyDE\", [\"Email\", \"Name\"], [\"jane@example.com\", \"Jane\"]);"
        },
        "callExpr": "Platform.Function.InsertDE(\"deName\", [], [])",
        "isProperty": false
      },
      {
        "id": "Platform.Function.UpdateData",
        "category": "Platform.Function",
        "entry": {
          "name": "UpdateData",
          "ampscriptEquivalent": "UpdateData",
          "minArgs": 5,
          "maxArgs": 5,
          "description": "Modifies existing rows in a Data Extension matching filter criteria and returns the number of rows updated. Recommended for non-sending contexts (CloudPages, landing pages, microsites, and SMS messages), but the *DE variants also run and commit there — see UpdateDE().",
          "isConfirmed": true,
          "params": [
            {
              "name": "deName",
              "description": "Data Extension name (resolved by Name, not external key)",
              "type": "string"
            },
            {
              "name": "whereFieldNames",
              "description": "Column name(s) to identify the rows to update; use an array for multiple columns (AND logic)",
              "type": "string|string[]"
            },
            {
              "name": "whereFieldValues",
              "description": "Value(s) to match in whereFieldNames; must be an array of equal length when whereFieldNames is an array",
              "type": "string|array"
            },
            {
              "name": "fieldNames",
              "description": "Array of column names to update",
              "type": "string[]"
            },
            {
              "name": "fieldValues",
              "description": "Array of new values aligned to fieldNames",
              "type": "array"
            }
          ],
          "returnType": "number",
          "syntax": "Platform.Function.UpdateData(deName, whereFieldNames, whereFieldValues, fieldNames, fieldValues)",
          "example": "var count = Platform.Function.UpdateData(\"MyDE\", [\"Email\"], [\"jane@example.com\"], [\"Status\"], [\"inactive\"]);"
        },
        "callExpr": "Platform.Function.UpdateData(\"deName\", [], [], [], [])",
        "isProperty": false
      },
      {
        "id": "Platform.Function.UpdateDE",
        "category": "Platform.Function",
        "entry": {
          "name": "UpdateDE",
          "ampscriptEquivalent": "UpdateDE",
          "minArgs": 5,
          "maxArgs": 5,
          "description": "Modifies existing rows in a Data Extension matching filter criteria. Returns null (no value). The official docs describe this as an email-context function, but it was proven to run and commit on a CloudPage as well. UpdateData() is still preferred outside email because it returns the affected-row count.",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs restrict UpdateDE to email contexts, but at runtime it executes and commits its update on a CloudPage too; it returns null rather than a row count.",
          "params": [
            {
              "name": "deName",
              "description": "Data Extension name (resolved by Name, not external key)",
              "type": "string"
            },
            {
              "name": "whereFieldNames",
              "description": "Column name(s) to identify the rows to update; use an array for multiple columns (AND logic)",
              "type": "string|string[]"
            },
            {
              "name": "whereFieldValues",
              "description": "Value(s) to match in whereFieldNames; must be an array of equal length when whereFieldNames is an array",
              "type": "string|array"
            },
            {
              "name": "fieldNames",
              "description": "Array of column names to update",
              "type": "string[]"
            },
            {
              "name": "fieldValues",
              "description": "Array of new values aligned to fieldNames",
              "type": "array"
            }
          ],
          "returnType": "null",
          "syntax": "Platform.Function.UpdateDE(deName, whereFieldNames, whereFieldValues, fieldNames, fieldValues)",
          "example": "var count = Platform.Function.UpdateDE(\"MyDE\", [\"Email\"], [\"jane@example.com\"], [\"Status\"], [\"inactive\"]);"
        },
        "callExpr": "Platform.Function.UpdateDE(\"deName\", [], [], [], [])",
        "isProperty": false
      },
      {
        "id": "Platform.Function.UpsertData",
        "category": "Platform.Function",
        "entry": {
          "name": "UpsertData",
          "ampscriptEquivalent": "UpsertData",
          "minArgs": 5,
          "maxArgs": 5,
          "description": "Inserts a new row or updates an existing one in a Data Extension and returns the number of rows affected. Takes array arguments for the where and field pairs — a flat/variadic argument form is not supported and throws at runtime. Recommended for non-sending contexts (CloudPages, landing pages), but the *DE variants also run and commit there — see UpsertDE().",
          "isConfirmed": true,
          "params": [
            {
              "name": "deName",
              "description": "Data Extension name (resolved by Name, not external key)",
              "type": "string"
            },
            {
              "name": "whereFieldNames",
              "description": "Column name(s) to identify an existing row; use an array for multiple columns (AND logic)",
              "type": "string|string[]"
            },
            {
              "name": "whereFieldValues",
              "description": "Value(s) to match in whereFieldNames; must be an array of equal length when whereFieldNames is an array",
              "type": "string|array"
            },
            {
              "name": "fieldNames",
              "description": "Array of column names to insert or update",
              "type": "string[]"
            },
            {
              "name": "fieldValues",
              "description": "Array of values aligned to fieldNames",
              "type": "array"
            }
          ],
          "returnType": "number",
          "syntax": "Platform.Function.UpsertData(deName, whereFieldNames, whereFieldValues, fieldNames, fieldValues)",
          "example": "var count = Platform.Function.UpsertData(\"CustomerData\", [\"ID\"], [\"12345\"], [\"Company\", \"Country\"], [\"exampleCompany\", \"USA\"]);"
        },
        "callExpr": "Platform.Function.UpsertData(\"deName\", [], [], [], [])",
        "isProperty": false
      },
      {
        "id": "Platform.Function.UpsertDE",
        "category": "Platform.Function",
        "entry": {
          "name": "UpsertDE",
          "ampscriptEquivalent": "UpsertDE",
          "minArgs": 5,
          "maxArgs": 5,
          "description": "Inserts a new row or updates an existing one in a Data Extension. Returns null (no value). The official docs describe this as an email-context function, but it was proven to run and commit on a CloudPage as well. UpsertData() is still preferred outside email because it returns the affected-row count.",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs restrict UpsertDE to email contexts, but at runtime it executes and commits its upsert on a CloudPage too; it returns null rather than a row count.",
          "params": [
            {
              "name": "deName",
              "description": "Data Extension name (resolved by Name, not external key)",
              "type": "string"
            },
            {
              "name": "whereFieldNames",
              "description": "Column name(s) to identify an existing row; use an array for multiple columns (AND logic)",
              "type": "string|string[]"
            },
            {
              "name": "whereFieldValues",
              "description": "Value(s) to match in whereFieldNames; must be an array of equal length when whereFieldNames is an array",
              "type": "string|array"
            },
            {
              "name": "fieldNames",
              "description": "Array of column names to insert or update",
              "type": "string[]"
            },
            {
              "name": "fieldValues",
              "description": "Array of values aligned to fieldNames",
              "type": "array"
            }
          ],
          "returnType": "null",
          "syntax": "Platform.Function.UpsertDE(deName, whereFieldNames, whereFieldValues, fieldNames, fieldValues)",
          "example": "Platform.Function.UpsertDE(\"CustomerData\", [\"ID\"], [\"12345\"], [\"Company\", \"Country\"], [\"exampleCompany\", \"USA\"]);"
        },
        "callExpr": "Platform.Function.UpsertDE(\"deName\", [], [], [], [])",
        "isProperty": false
      },
      {
        "id": "Platform.Function.DeleteData",
        "category": "Platform.Function",
        "entry": {
          "name": "DeleteData",
          "ampscriptEquivalent": "DeleteData",
          "minArgs": 3,
          "maxArgs": 3,
          "description": "Removes rows from a Data Extension matching filter criteria and returns the number of rows deleted. Recommended for non-sending contexts (CloudPages, landing pages, microsites, and SMS messages), but the *DE variants also run and commit there — see DeleteDE().",
          "isConfirmed": true,
          "params": [
            {
              "name": "deName",
              "description": "Data Extension name (resolved by Name, not external key)",
              "type": "string"
            },
            {
              "name": "whereFieldNames",
              "description": "Array of column names to match for deletion",
              "type": "string[]"
            },
            {
              "name": "whereFieldValues",
              "description": "Array of values aligned to whereFieldNames that identify rows to delete",
              "type": "array"
            }
          ],
          "returnType": "number",
          "syntax": "Platform.Function.DeleteData(deName, whereFieldNames, whereFieldValues)",
          "example": "var count = Platform.Function.DeleteData(\"MyDE\", [\"Email\"], [\"jane@example.com\"]);"
        },
        "callExpr": "Platform.Function.DeleteData(\"deName\", [], [])",
        "isProperty": false
      },
      {
        "id": "Platform.Function.DeleteDE",
        "category": "Platform.Function",
        "entry": {
          "name": "DeleteDE",
          "ampscriptEquivalent": "DeleteDE",
          "minArgs": 3,
          "maxArgs": 3,
          "description": "Removes rows from a Data Extension matching filter criteria. Returns null (no value). The official docs describe this as an email-context function, but it was proven to run and commit on a CloudPage as well. DeleteData() is still preferred outside email because it returns the affected-row count.",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs restrict DeleteDE to email contexts, but at runtime it executes and commits its delete on a CloudPage too; it returns null rather than a row count.",
          "params": [
            {
              "name": "deName",
              "description": "Data Extension name (resolved by Name, not external key)",
              "type": "string"
            },
            {
              "name": "whereFieldNames",
              "description": "Array of column names to match for deletion",
              "type": "string[]"
            },
            {
              "name": "whereFieldValues",
              "description": "Array of values aligned to whereFieldNames that identify rows to delete",
              "type": "array"
            }
          ],
          "returnType": "null",
          "syntax": "Platform.Function.DeleteDE(deName, whereFieldNames, whereFieldValues)",
          "example": "Platform.Function.DeleteDE(\"MyDE\", [\"Email\"], [\"jane@example.com\"]);"
        },
        "callExpr": "Platform.Function.DeleteDE(\"deName\", [], [])",
        "isProperty": false
      },
      {
        "id": "Platform.Function.ContentBlockByKey",
        "category": "Platform.Function",
        "entry": {
          "name": "ContentBlockByKey",
          "ampscriptEquivalent": "ContentBlockByKey",
          "minArgs": 1,
          "maxArgs": 4,
          "description": "Renders a Content Builder asset referenced by customer key. Runtime note: when optional arguments are supplied, every argument must be a compile-time literal — passing a variable in a multi-argument call throws a resolved-value error.",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs do not mention that supplying the optional arguments requires every argument to be a compile-time literal; variables are rejected at runtime once more than the key is passed.",
          "params": [
            {
              "name": "customerKey",
              "description": "Customer key of the Content Builder asset",
              "type": "string"
            },
            {
              "name": "regionName",
              "description": "Impression region name for tracking",
              "type": "string",
              "optional": true
            },
            {
              "name": "stopOnError",
              "description": "When true, returns an exception and terminates if content cannot be retrieved. When false, the call proceeds.",
              "type": "boolean",
              "optional": true
            },
            {
              "name": "fallbackContent",
              "description": "Default content to display if the call does not return content",
              "type": "string",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "Platform.Function.ContentBlockByKey(customerKey[, regionName, stopOnError, fallbackContent])",
          "example": "var html = Platform.Function.ContentBlockByKey(\"my-header-block\");\nWrite(html);\n\n// With optional params:\nvar html2 = Platform.Function.ContentBlockByKey(\"my-header-block\", \"impressionRegion\", false, \"defaultContent\");"
        },
        "callExpr": "Platform.Function.ContentBlockByKey(\"customerKey\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.ContentBlockByName",
        "category": "Platform.Function",
        "entry": {
          "name": "ContentBlockByName",
          "ampscriptEquivalent": "ContentBlockByName",
          "minArgs": 1,
          "maxArgs": 5,
          "description": "Renders a Content Builder asset referenced by folder path and name. If the same name is used across multiple folders, supply the full path. Runtime note: when optional arguments are supplied, every argument must be a compile-time literal.",
          "isConfirmed": true,
          "params": [
            {
              "name": "name",
              "description": "Folder path and name of the Content Builder asset",
              "type": "string"
            },
            {
              "name": "regionName",
              "description": "Impression region name for tracking",
              "type": "string",
              "optional": true
            },
            {
              "name": "stopOnError",
              "description": "When true, returns an error if the content area cannot be found or is invalid. When false, no error is returned.",
              "type": "boolean",
              "optional": true
            },
            {
              "name": "fallbackContent",
              "description": "Default content to return if an error occurs. Defaults to empty string.",
              "type": "string",
              "optional": true
            },
            {
              "name": "statusVariable",
              "description": "Receives the status of the call: 0 = success, -1 = no content or invalid content area",
              "type": "number",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "Platform.Function.ContentBlockByName(name[, regionName, stopOnError, fallbackContent, statusVariable])",
          "example": "var html = Platform.Function.ContentBlockByName(\"Shared Content/Footer\");\nWrite(html);"
        },
        "callExpr": "Platform.Function.ContentBlockByName(\"name\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.ContentBlockByID",
        "category": "Platform.Function",
        "entry": {
          "name": "ContentBlockByID",
          "ampscriptEquivalent": "ContentBlockByID",
          "minArgs": 1,
          "maxArgs": 4,
          "description": "Renders a Content Builder asset by its numeric identifier. Runtime note: when optional arguments are supplied, every argument must be a compile-time literal.",
          "isConfirmed": true,
          "params": [
            {
              "name": "id",
              "description": "Numeric ID of the Content Builder asset",
              "type": "number"
            },
            {
              "name": "regionName",
              "description": "Impression region name for tracking",
              "type": "string",
              "optional": true
            },
            {
              "name": "stopOnError",
              "description": "When true, returns an exception and terminates if content cannot be retrieved. When false, the call proceeds.",
              "type": "boolean",
              "optional": true
            },
            {
              "name": "fallbackContent",
              "description": "Default content to display if the call does not return content",
              "type": "string",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "Platform.Function.ContentBlockByID(id[, regionName, stopOnError, fallbackContent])",
          "example": "var html = Platform.Function.ContentBlockByID(12345);\nWrite(html);\n\n// With optional params:\nvar html2 = Platform.Function.ContentBlockByID(12345, \"impressionRegion\", false, \"defaultContent\");"
        },
        "callExpr": "Platform.Function.ContentBlockByID(1)",
        "isProperty": false
      },
      {
        "id": "Platform.Function.ContentImageByKey",
        "category": "Platform.Function",
        "entry": {
          "name": "ContentImageByKey",
          "ampscriptEquivalent": "ContentImageByKey",
          "minArgs": 1,
          "maxArgs": 2,
          "description": "Returns an HTML img tag for a Content Builder image identified by its external key. An optional fallback image ID can be supplied if the primary image is not found.",
          "isConfirmed": true,
          "params": [
            {
              "name": "key",
              "description": "External key of the Content Builder image",
              "type": "string"
            },
            {
              "name": "fallbackId",
              "description": "Numeric ID of a fallback image when the primary cannot be found",
              "type": "number",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "Platform.Function.ContentImageByKey(key[, fallbackId])",
          "example": "var imgTag = Platform.Function.ContentImageByKey(\"hero-banner-key\");\nWrite(imgTag);"
        },
        "callExpr": "Platform.Function.ContentImageByKey(\"key\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.ContentImageByID",
        "category": "Platform.Function",
        "entry": {
          "name": "ContentImageByID",
          "ampscriptEquivalent": "ContentImageByID",
          "minArgs": 1,
          "maxArgs": 2,
          "description": "Returns an HTML img tag for a Content Builder image identified by its numeric ID. An optional fallback ID can be supplied if the primary image is not found.",
          "isConfirmed": true,
          "params": [
            {
              "name": "id",
              "description": "Numeric ID of the Content Builder image",
              "type": "number"
            },
            {
              "name": "fallbackId",
              "description": "Numeric ID of a fallback image when the primary cannot be found",
              "type": "number",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "Platform.Function.ContentImageByID(id[, fallbackId])",
          "example": "var imgTag = Platform.Function.ContentImageByID(98765);\nWrite(imgTag);"
        },
        "callExpr": "Platform.Function.ContentImageByID(1)",
        "isProperty": false
      },
      {
        "id": "Platform.Function.TreatAsContent",
        "category": "Platform.Function",
        "entry": {
          "name": "TreatAsContent",
          "ampscriptEquivalent": "TreatAsContent",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Processes a string as AMPscript/HTML on the SFMC server and returns the rendered result directly as a string. Inline AMPscript (%%=..=%%) is returned in the result; a block-only %%[..]%% string renders to an empty string but its variable side effects persist and are readable by later calls. Does not require Platform.Load(\"core\"). Passing 0 or 2+ arguments throws.",
          "params": [
            {
              "name": "content",
              "description": "String containing AMPscript or HTML to evaluate (non-string values are coerced to string)",
              "type": "string"
            }
          ],
          "returnType": "string",
          "requiresCoreLoad": false,
          "syntax": "Platform.Function.TreatAsContent(content)",
          "example": "var result = Platform.Function.TreatAsContent(\"%%=Add(2,3)=%%\");\nWrite(result); // \"5\"",
          "isConfirmed": true
        },
        "callExpr": "Platform.Function.TreatAsContent(\"content\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.BeginImpressionRegion",
        "category": "Platform.Function",
        "entry": {
          "name": "BeginImpressionRegion",
          "ampscriptEquivalent": "BeginImpressionRegion",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Marks the start of a named impression tracking region within content. Runtime note: the region name must be a compile-time literal — a variable is rejected with a resolved-value error.",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs do not mention that the region name must be a compile-time literal; a variable argument is rejected at runtime.",
          "params": [
            {
              "name": "name",
              "description": "Name identifying the impression region",
              "type": "string"
            }
          ],
          "returnType": "void",
          "syntax": "Platform.Function.BeginImpressionRegion(name)",
          "example": "Platform.Function.BeginImpressionRegion(\"hero-banner\");\nWrite(heroContent);\nPlatform.Function.EndImpressionRegion();"
        },
        "callExpr": "Platform.Function.BeginImpressionRegion(\"name\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.EndImpressionRegion",
        "category": "Platform.Function",
        "entry": {
          "name": "EndImpressionRegion",
          "ampscriptEquivalent": "EndImpressionRegion",
          "minArgs": 0,
          "maxArgs": 1,
          "description": "Marks the end of an impression tracking region within content.",
          "params": [
            {
              "name": "closeAll",
              "description": "When true, closes all nested impression regions",
              "type": "boolean",
              "optional": true
            }
          ],
          "returnType": "null",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs type the return as void, but the runtime always returns a genuine null (typeof \"object\", === null) — including when called with no matching BeginImpressionRegion.",
          "syntax": "Platform.Function.EndImpressionRegion([closeAll])",
          "example": "Platform.Function.BeginImpressionRegion(\"footer\");\nWrite(footerContent);\nPlatform.Function.EndImpressionRegion();"
        },
        "callExpr": "Platform.Function.EndImpressionRegion()",
        "isProperty": false
      },
      {
        "id": "Platform.Function.Now",
        "category": "Platform.Function",
        "entry": {
          "name": "Now",
          "ampscriptEquivalent": "Now",
          "minArgs": 0,
          "maxArgs": 1,
          "description": "Returns the current server date/time as a Date object (in the account timezone, Central by default), or the timestamp of the triggering send when called with true. Concatenating it to a string yields an RFC 2822-style value such as \"Tue, 14 Jul 2026 17:59:40 GMT-06:00\".",
          "params": [
            {
              "name": "useContextTime",
              "description": "When true, returns the time the triggering send or activity was initiated. When false or omitted, returns the current system clock time.",
              "type": "boolean",
              "optional": true
            }
          ],
          "returnType": "Date",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs describe the return as an RFC 2822-compliant date-time string, but the runtime returns a Date object (typeof \"object\", [object Date] with working Date accessors); it only appears as an RFC 2822 string when coerced during output.",
          "syntax": "Platform.Function.Now([useContextTime])",
          "example": "var current = Platform.Function.Now();\nWrite(current); // e.g. \"Tue, 14 Jul 2026 17:59:40 GMT-06:00\"\n\n// current is a Date object:\nWrite(current.getFullYear()); // 2026\n\n// Use context time during triggered sends:\nvar sendTime = Platform.Function.Now(true);"
        },
        "callExpr": "Platform.Function.Now()",
        "isProperty": false
      },
      {
        "id": "Platform.Function.SystemDateToLocalDate",
        "category": "Platform.Function",
        "entry": {
          "name": "SystemDateToLocalDate",
          "ampscriptEquivalent": "SystemDateToLocalDate",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Converts a date-time value from Marketing Cloud system time (CST, without daylight saving) to the local time of the account or user. Returns a Date object (not a string).",
          "params": [
            {
              "name": "dateString",
              "description": "Date-time string in system time (CST)",
              "type": "string"
            }
          ],
          "returnType": "Date",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs type the return value as a string, but the runtime returns a Date object (typeof \"object\", [object Date], with working getFullYear/getHours/getTime); it only serializes to an ISO-like string when written or stringified.",
          "syntax": "Platform.Function.SystemDateToLocalDate(dateString)",
          "example": "var systemDate = Platform.Function.Now();\nvar localDate = Platform.Function.SystemDateToLocalDate(systemDate);\nWrite(localDate);"
        },
        "callExpr": "Platform.Function.SystemDateToLocalDate(\"dateString\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.LocalDateToSystemDate",
        "category": "Platform.Function",
        "entry": {
          "name": "LocalDateToSystemDate",
          "ampscriptEquivalent": "LocalDateToSystemDate",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Converts a date-time value from the local time of the account or user to Marketing Cloud system time (CST, without daylight saving). Returns a Date object (not a string).",
          "params": [
            {
              "name": "dateString",
              "description": "Date-time string in local account/user time",
              "type": "string"
            }
          ],
          "returnType": "Date",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs type the return value as a string, but the runtime returns a Date object (typeof \"object\", [object Date], with working getFullYear/getHours/getTime); it only serializes to an ISO-like string when written or stringified.",
          "syntax": "Platform.Function.LocalDateToSystemDate(dateString)",
          "example": "var localDate = \"8/5/2025 12:00:00 PM\";\nvar systemDate = Platform.Function.LocalDateToSystemDate(localDate);\nWrite(systemDate);"
        },
        "callExpr": "Platform.Function.LocalDateToSystemDate(\"dateString\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.RaiseError",
        "category": "Platform.Function",
        "entry": {
          "name": "RaiseError",
          "ampscriptEquivalent": "RaiseError",
          "minArgs": 1,
          "maxArgs": 4,
          "description": "Raises an error with an optional scope flag. When the second parameter is true, the error stops only the current recipient's send. When false, the error halts the entire send job.",
          "params": [
            {
              "name": "message",
              "description": "Error message describing what went wrong",
              "type": "string"
            },
            {
              "name": "currentRecipientOnly",
              "description": "When true, the error applies only to the current recipient. When false, the entire send job stops.",
              "type": "boolean",
              "optional": true
            },
            {
              "name": "errorCode",
              "description": "Short user-defined code identifying the error type",
              "type": "string",
              "optional": true
            },
            {
              "name": "errorNumber",
              "description": "User-defined numeric error code for reference",
              "type": "number",
              "optional": true
            }
          ],
          "returnType": "void",
          "syntax": "Platform.Function.RaiseError(message[, currentRecipientOnly[, errorCode[, errorNumber]]])",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs mark currentRecipientOnly, errorCode, and errorNumber as required, but the runtime accepts a single message argument; and the caught exception on a CloudPage exposes only message and description (an AMPScriptRaiseErrorException) — the errorCode and errorNumber values are not surfaced on the error object.",
          "example": "var status = Platform.Function.Lookup(\"MyDE\", \"Status\", \"Email\", emailAddress);\nif (!status) {\n    Platform.Function.RaiseError(\"Subscriber not found\", true, \"NOT_FOUND\", 404);\n}"
        },
        "callExpr": "Platform.Function.RaiseError(\"message\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.GUID",
        "category": "Platform.Function",
        "entry": {
          "name": "GUID",
          "ampscriptEquivalent": "GUID",
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Generates a new globally unique identifier as a lowercase canonical UUID v4 string (36 characters). Does not require Platform.Load(\"core\"); passing any argument throws.",
          "params": [],
          "returnType": "string",
          "syntax": "Platform.Function.GUID()",
          "example": "var id = Platform.Function.GUID();\nWrite(id); // e.g. \"550e8400-e29b-41d4-a716-446655440000\"",
          "isConfirmed": true
        },
        "callExpr": "Platform.Function.GUID()",
        "isProperty": false
      },
      {
        "id": "Platform.Function.IsEmailAddress",
        "category": "Platform.Function",
        "entry": {
          "name": "IsEmailAddress",
          "ampscriptEquivalent": "IsEmailAddress",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Checks whether a string is a valid email address format.",
          "params": [
            {
              "name": "value",
              "description": "String to validate",
              "type": "string"
            }
          ],
          "returnType": "boolean",
          "syntax": "Platform.Function.IsEmailAddress(value)",
          "example": "if (Platform.Function.IsEmailAddress(emailInput)) {\n    Write(\"Valid email\");\n} else {\n    Write(\"Invalid email format\");\n}",
          "isConfirmed": true
        },
        "callExpr": "Platform.Function.IsEmailAddress(\"value\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.IsPhoneNumber",
        "category": "Platform.Function",
        "entry": {
          "name": "IsPhoneNumber",
          "ampscriptEquivalent": "IsPhoneNumber",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Evaluates whether a string is a valid phone number and returns a boolean. Runtime-verified (CloudPage): the accepted format is digits 0-9 only, with no spaces and no leading 0. To present any country's country code (including the US) you omit the leading 00/+ and write the country code as bare digits with no leading zero. Values containing spaces, a leading 0, or a +/00 international prefix return false, as do empty, letters, and mixed-text inputs. This is the same digits-only, no-leading-zero format that SFMC phone-number fields and the SMS (MobileConnect) service expect.",
          "params": [
            {
              "name": "value",
              "description": "String to evaluate",
              "type": "string"
            }
          ],
          "returnType": "boolean",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs describe generic \"valid phone number\" validation, but the runtime enforces a stricter format: digits 0-9 only, no spaces, and no leading 0 — country codes must be written without the leading 00/+ (the same format SFMC phone fields and the SMS service expect).",
          "syntax": "Platform.Function.IsPhoneNumber(value)",
          "example": "if (Platform.Function.IsPhoneNumber(phoneInput)) {\n    Write(\"Valid phone\");\n} else {\n    Write(\"Invalid phone number\");\n}"
        },
        "callExpr": "Platform.Function.IsPhoneNumber(\"value\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.CreateObject",
        "category": "Platform.Function",
        "entry": {
          "name": "CreateObject",
          "ampscriptEquivalent": "CreateObject",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Instantiates a Marketing Cloud SOAP API object.",
          "isConfirmed": true,
          "params": [
            {
              "name": "objectType",
              "description": "SOAP API object type name",
              "type": "string"
            }
          ],
          "returnType": "object",
          "syntax": "Platform.Function.CreateObject(objectType)",
          "example": "var sub = Platform.Function.CreateObject(\"Subscriber\");\nPlatform.Function.SetObjectProperty(sub, \"EmailAddress\", \"jane@example.com\");\nPlatform.Function.SetObjectProperty(sub, \"SubscriberKey\", \"sk-123\");"
        },
        "callExpr": "Platform.Function.CreateObject(\"objectType\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.SetObjectProperty",
        "category": "Platform.Function",
        "entry": {
          "name": "SetObjectProperty",
          "ampscriptEquivalent": "SetObjectProperty",
          "minArgs": 3,
          "maxArgs": 3,
          "description": "Assigns a property value on a SOAP API object created with CreateObject. Requires exactly three arguments — calling it with fewer or more throws the generic \"Unable to retrieve security descriptor for this frame.\" error, which in the SSJS engine signals an argument count it does not accept. The property name is validated against the object's real SOAP API schema at set-time: setting an unknown property (or a value the property rejects) throws. String and number values are accepted; the assigned property cannot be read back from SSJS because the underlying CLR object blocks introspection. Returns a genuine JavaScript null on success.",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs type the return as void, but at runtime SetObjectProperty returns a genuine JavaScript null (=== null is true) on success. It also strictly requires exactly three arguments — any other arity throws a TypeError — and validates the property name against the object schema, throwing when the property is unknown or the value is invalid for it.",
          "params": [
            {
              "name": "apiObject",
              "description": "SOAP API object instance",
              "type": "object"
            },
            {
              "name": "propertyName",
              "description": "Property name to set",
              "type": "string"
            },
            {
              "name": "value",
              "description": "Value to assign",
              "type": "any"
            }
          ],
          "returnType": "null",
          "syntax": "Platform.Function.SetObjectProperty(apiObject, propertyName, value)",
          "example": "var sub = Platform.Function.CreateObject(\"Subscriber\");\nPlatform.Function.SetObjectProperty(sub, \"EmailAddress\", \"jane@example.com\");"
        },
        "callExpr": "Platform.Function.SetObjectProperty({}, \"propertyName\", {})",
        "isProperty": false
      },
      {
        "id": "Platform.Function.AddObjectArrayItem",
        "category": "Platform.Function",
        "entry": {
          "name": "AddObjectArrayItem",
          "ampscriptEquivalent": "AddObjectArrayItem",
          "minArgs": 3,
          "maxArgs": 3,
          "description": "Appends an item to a SOAP API object's array property.",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs list a return value, but at runtime the call returns nothing (undefined); it mutates the passed object in place.",
          "params": [
            {
              "name": "apiObject",
              "description": "SOAP API object instance",
              "type": "object"
            },
            {
              "name": "propertyName",
              "description": "Array property name",
              "type": "string"
            },
            {
              "name": "value",
              "description": "Item to append",
              "type": "any"
            }
          ],
          "returnType": "void",
          "syntax": "Platform.Function.AddObjectArrayItem(apiObject, propertyName, value)",
          "example": "var ts = Platform.Function.CreateObject(\"TriggeredSend\");\nPlatform.Function.AddObjectArrayItem(ts, \"Subscribers\", sub);"
        },
        "callExpr": "Platform.Function.AddObjectArrayItem({}, \"propertyName\", {})",
        "isProperty": false
      },
      {
        "id": "Platform.Function.InvokeCreate",
        "category": "Platform.Function",
        "entry": {
          "name": "InvokeCreate",
          "ampscriptEquivalent": "InvokeCreate",
          "minArgs": 3,
          "maxArgs": 3,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs type the return value as an object, but at runtime the call returns the OverallStatus message as a string (\"OK\" / \"Error: ...\"); the request ID is written to status[1] and the error code (a number) is written into the status array.",
          "description": "Executes a SOAP API Create call on an API object and returns the OverallStatus message as a string.",
          "params": [
            {
              "name": "apiObject",
              "description": "SOAP API object instance",
              "type": "object"
            },
            {
              "name": "status",
              "description": "Array that receives the status message and request ID of the API call (e.g. [0, 0]); status[0] is the message string, status[1] the request ID",
              "type": "array"
            },
            {
              "name": "options",
              "description": "API configure options to include in the call. Can contain a null value.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "syntax": "Platform.Function.InvokeCreate(apiObject, status, options)",
          "example": "var StatusAndRequestID = [0, 0];\nvar result = Platform.Function.InvokeCreate(CreateRequest, StatusAndRequestID, null);\nvar status = StatusAndRequestID[0];\nvar requestID = StatusAndRequestID[1];"
        },
        "callExpr": "Platform.Function.InvokeCreate({}, [], {})",
        "isProperty": false
      },
      {
        "id": "Platform.Function.InvokeUpdate",
        "category": "Platform.Function",
        "entry": {
          "name": "InvokeUpdate",
          "ampscriptEquivalent": "InvokeUpdate",
          "minArgs": 3,
          "maxArgs": 3,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs type the return value as an object, but at runtime the call returns the OverallStatus message as a string (\"OK\" / \"Error: ...\"); the request ID is written to status[1] and the error code (a number) is written into the status array.",
          "description": "Executes a SOAP API Update call on an API object and returns the OverallStatus message as a string.",
          "params": [
            {
              "name": "apiObject",
              "description": "SOAP API object instance",
              "type": "object"
            },
            {
              "name": "status",
              "description": "Array that receives the status message and request ID of the API call (e.g. [0, 0]); status[0] is the message string, status[1] the request ID",
              "type": "array"
            },
            {
              "name": "options",
              "description": "API configure options to include in the call. Can contain a null value.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "syntax": "Platform.Function.InvokeUpdate(apiObject, status, options)",
          "example": "var StatusAndRequestID = [0, 0];\nvar result = Platform.Function.InvokeUpdate(UpdateRequest, StatusAndRequestID, null);\nvar status = StatusAndRequestID[0];\nvar requestID = StatusAndRequestID[1];"
        },
        "callExpr": "Platform.Function.InvokeUpdate({}, [], {})",
        "isProperty": false
      },
      {
        "id": "Platform.Function.InvokeDelete",
        "category": "Platform.Function",
        "entry": {
          "name": "InvokeDelete",
          "ampscriptEquivalent": "InvokeDelete",
          "minArgs": 3,
          "maxArgs": 3,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs type the return value as an object, but at runtime the call returns the OverallStatus message as a string (\"OK\" / \"Error: ...\"); the request ID is written to status[1] and the error code (a number) is written into the status array.",
          "description": "Executes a SOAP API Delete call on an API object and returns the OverallStatus message as a string.",
          "params": [
            {
              "name": "apiObject",
              "description": "SOAP API object instance",
              "type": "object"
            },
            {
              "name": "status",
              "description": "Array that receives the status message and request ID of the API call (e.g. [0, 0]); status[0] is the message string, status[1] the request ID",
              "type": "array"
            },
            {
              "name": "options",
              "description": "API configure options to include in the call. Can contain a null value.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "syntax": "Platform.Function.InvokeDelete(apiObject, status, options)",
          "example": "var StatusAndRequestID = [0, 0];\nvar result = Platform.Function.InvokeDelete(DeleteRequest, StatusAndRequestID, null);\nvar status = StatusAndRequestID[0];\nvar requestID = StatusAndRequestID[1];"
        },
        "callExpr": "Platform.Function.InvokeDelete({}, [], {})",
        "isProperty": false
      },
      {
        "id": "Platform.Function.InvokeRetrieve",
        "category": "Platform.Function",
        "entry": {
          "name": "InvokeRetrieve",
          "ampscriptEquivalent": "InvokeRetrieve",
          "minArgs": 2,
          "maxArgs": 2,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs do not mention the null return: at runtime the call returns an array of result objects when records match, but returns null on error or when no records match.",
          "description": "Executes a SOAP API Retrieve call, returning an array of result objects when records match or null on error / no match.",
          "params": [
            {
              "name": "apiObject",
              "description": "SOAP API RetrieveRequest object instance",
              "type": "object"
            },
            {
              "name": "status",
              "description": "Array that receives the status message and request ID of the API call (e.g. [0, 0]); status[0] is the message string (\"OK\" / \"Error: ...\"), status[1] the request ID (GUID string)",
              "type": "array"
            }
          ],
          "returnType": "object[]|null",
          "syntax": "Platform.Function.InvokeRetrieve(apiObject, status)",
          "example": "var RetrieveRequest = Platform.Function.CreateObject(\"RetrieveRequest\");\nPlatform.Function.SetObjectProperty(RetrieveRequest, \"ObjectType\", \"Email\");\nPlatform.Function.AddObjectArrayItem(RetrieveRequest, \"Properties\", \"Email.Name\");\nvar StatusAndRequestID = [0, 0];\nvar Emails = Platform.Function.InvokeRetrieve(RetrieveRequest, StatusAndRequestID);"
        },
        "callExpr": "Platform.Function.InvokeRetrieve({}, [])",
        "isProperty": false
      },
      {
        "id": "Platform.Function.InvokePerform",
        "category": "Platform.Function",
        "entry": {
          "name": "InvokePerform",
          "ampscriptEquivalent": "InvokePerform",
          "minArgs": 4,
          "maxArgs": 4,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs type the return value as an object, but the SOAP Perform contract returns the OverallStatus message as a string; the error code and perform response are written into the status array.",
          "description": "Executes a SOAP API Perform action on an API object and returns the OverallStatus message as a string.",
          "params": [
            {
              "name": "apiObject",
              "description": "SOAP API object instance",
              "type": "object"
            },
            {
              "name": "method",
              "description": "Method to perform on the object",
              "type": "string"
            },
            {
              "name": "status",
              "description": "Array that receives the status, error code, and perform response of the API call (e.g. [0, 0, 0])",
              "type": "array"
            },
            {
              "name": "options",
              "description": "API configure options to include in the call. Can contain a null value.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "syntax": "Platform.Function.InvokePerform(apiObject, method, status, options)",
          "example": "var StatusAndRequestID = [0, 0, 0];\nvar result = Platform.Function.InvokePerform(APIObject, \"Validate\", StatusAndRequestID, null);\nvar statusMessage = StatusAndRequestID[0];\nvar errorCode = StatusAndRequestID[1];\nvar performResponse = StatusAndRequestID[2];"
        },
        "callExpr": "Platform.Function.InvokePerform({}, \"method\", [], {})",
        "isProperty": false
      },
      {
        "id": "Platform.Function.InvokeConfigure",
        "category": "Platform.Function",
        "entry": {
          "name": "InvokeConfigure",
          "ampscriptEquivalent": null,
          "minArgs": 4,
          "maxArgs": 4,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs type the return value as an object, but the SOAP Configure contract returns the OverallStatus message as a string; the request ID is written into the status array.",
          "description": "Executes a SOAP API Configure call on an API object and returns the OverallStatus message as a string.",
          "params": [
            {
              "name": "apiObject",
              "description": "SOAP API object instance",
              "type": "object"
            },
            {
              "name": "method",
              "description": "Method to perform on the object",
              "type": "string"
            },
            {
              "name": "status",
              "description": "Array that receives the status and request ID of the API call (e.g. [0, 0])",
              "type": "array"
            },
            {
              "name": "options",
              "description": "API configure options to include in the call. Can contain a null value.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "syntax": "Platform.Function.InvokeConfigure(apiObject, method, status, options)",
          "example": "var StatusAndRequestID = [0, 0];\nvar result = Platform.Function.InvokeConfigure(ConfigureObject, \"create\", StatusAndRequestID, null);"
        },
        "callExpr": "Platform.Function.InvokeConfigure({}, \"method\", [], {})",
        "isProperty": false
      },
      {
        "id": "Platform.Function.InvokeExecute",
        "category": "Platform.Function",
        "entry": {
          "name": "InvokeExecute",
          "ampscriptEquivalent": "InvokeExecute",
          "minArgs": 2,
          "maxArgs": 2,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs list three arguments (including an options object) and type the return value as an object, but at runtime the call takes exactly two arguments (apiObject, status) — passing a third throws the generic \"Unable to retrieve security descriptor for this frame.\" error (which signals an argument count it does not accept) — and returns an array of result objects.",
          "description": "Executes a SOAP API Execute call on an API object and returns an array of result objects. Takes exactly two arguments.",
          "params": [
            {
              "name": "apiObject",
              "description": "SOAP API object instance",
              "type": "object"
            },
            {
              "name": "status",
              "description": "Array that receives the status and request ID of the API call (e.g. [0, 0])",
              "type": "array"
            }
          ],
          "returnType": "object[]",
          "syntax": "Platform.Function.InvokeExecute(apiObject, status)",
          "example": "var StatusAndRequestID = [0, 0];\nvar result = Platform.Function.InvokeExecute(ExecuteRequest, StatusAndRequestID);\nvar status = StatusAndRequestID[0];\nvar requestID = StatusAndRequestID[1];"
        },
        "callExpr": "Platform.Function.InvokeExecute({}, [])",
        "isProperty": false
      },
      {
        "id": "Platform.Function.InvokeExtract",
        "category": "Platform.Function",
        "entry": {
          "name": "InvokeExtract",
          "ampscriptEquivalent": null,
          "minArgs": 2,
          "maxArgs": 2,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs list a third options argument and type the return value as an object, but at runtime the call takes exactly two arguments (apiObject, statusArray) and returns the OverallStatus message as a string.",
          "description": "Invokes the Extract SOAP API method on the specified object and returns the OverallStatus message as a string.",
          "params": [
            {
              "name": "apiObject",
              "description": "SOAP API object on which to invoke Extract",
              "type": "object"
            },
            {
              "name": "statusArray",
              "description": "Array that receives the status and RequestID of the API call",
              "type": "array"
            }
          ],
          "returnType": "string",
          "syntax": "Platform.Function.InvokeExtract(apiObject, statusArray)",
          "example": "var statusArr = [];\nvar result = Platform.Function.InvokeExtract(extractObj, statusArr);\nWrite(result);"
        },
        "callExpr": "Platform.Function.InvokeExtract({}, [])",
        "isProperty": false
      },
      {
        "id": "Platform.Function.InvokeSchedule",
        "category": "Platform.Function",
        "entry": {
          "name": "InvokeSchedule",
          "ampscriptEquivalent": null,
          "minArgs": 4,
          "maxArgs": 5,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs type the return value as an object, but at runtime the call returns the OverallStatus message as a string; the statusArray argument is required (minimum four arguments), with the trailing options argument optional.",
          "description": "Invokes the Schedule SOAP API method on the specified object and returns the OverallStatus message as a string.",
          "params": [
            {
              "name": "apiObject",
              "description": "SOAP API object on which to invoke Schedule",
              "type": "object"
            },
            {
              "name": "action",
              "description": "Action to perform on the object",
              "type": "string"
            },
            {
              "name": "schedule",
              "description": "Schedule definition object",
              "type": "object"
            },
            {
              "name": "statusArray",
              "description": "Array that receives the status and RequestID of the API call",
              "type": "array"
            },
            {
              "name": "options",
              "description": "Additional API options; may be null",
              "type": "object",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "Platform.Function.InvokeSchedule(apiObject, action, schedule, statusArray[, options])",
          "example": "var statusArr = [];\nvar result = Platform.Function.InvokeSchedule(sendDef, \"start\", scheduleDef, statusArr);\nWrite(result);"
        },
        "callExpr": "Platform.Function.InvokeSchedule({}, \"action\", {}, [])",
        "isProperty": false
      },
      {
        "id": "Platform.Function.HTTPGet",
        "category": "Platform.Function",
        "entry": {
          "name": "HTTPGet",
          "ampscriptEquivalent": "HTTPGet",
          "minArgs": 1,
          "maxArgs": 6,
          "validArities": [
            1,
            6
          ],
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified on a CloudPage. Three corrections to the official docs. (1) The docs state this returns a numeric status, but it actually returns the response body as a string. (2) The argument count is a discontinuous overload, not a simple range: only a 1-argument call (url only) or the full 6-argument call are valid. Calling with 2, 3, 4, or 5 arguments throws \"Unable to retrieve security descriptor for this frame.\" The trailing five arguments (continueOnError, emptyContentHandling, headerNames, headerValues, statusVariable) form an all-or-nothing group — you must supply all five together or none. This contradicts the older claim that \"all six arguments are required\" (the 1-argument form works) as well as the docs listing arguments 3-6 as independently optional. (3) Even on a successful 6-argument call the statusVariable out-parameter was observed empty (statusVariable.length === 0, statusVariable[0] === undefined), so the numeric status is not reliably delivered in a CloudPage context — read the returned body string and do not depend on statusVariable[0].",
          "description": "Performs an HTTP GET request and returns the response body as a string. Only works with HTTP on port 80 and HTTPS on port 443. Times out after 30 seconds. Valid call forms are exactly two: HTTPGet(url) with a single argument, or the full 6-argument form; passing 2-5 arguments is an argument count it does not accept and throws the generic \"Unable to retrieve security descriptor for this frame.\" error. The statusVariable out-parameter is unreliable (observed empty even on success), so read the body from the return value.",
          "params": [
            {
              "name": "url",
              "description": "URL to request",
              "type": "string"
            },
            {
              "name": "continueOnError",
              "description": "When true, the request terminates if an error occurs. When false, the request continues on error. Only valid in the 6-argument form; the trailing five arguments are all-or-nothing.",
              "type": "boolean",
              "optional": true
            },
            {
              "name": "emptyContentHandling",
              "description": "How to handle a URL that returns empty content: 0 = allow empty, 1 = return error, 2 = skip subscriber. Only valid in the 6-argument form (co-required with the other trailing arguments).",
              "type": "number",
              "optional": true
            },
            {
              "name": "headerNames",
              "description": "Array of header names to include in the GET request (pass null when none). Only valid in the 6-argument form (co-required with the other trailing arguments).",
              "type": "string[]",
              "optional": true
            },
            {
              "name": "headerValues",
              "description": "Array of header values corresponding to headerNames (pass null when none). Only valid in the 6-argument form (co-required with the other trailing arguments).",
              "type": "string[]",
              "optional": true
            },
            {
              "name": "statusVariable",
              "description": "Array intended to receive the status code, but observed empty at runtime even on success — do not rely on it. Only valid in the 6-argument form (co-required with the other trailing arguments).",
              "type": "number[]",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "Platform.Function.HTTPGet(url) | Platform.Function.HTTPGet(url, continueOnError, emptyContentHandling, headerNames, headerValues, statusVariable)",
          "example": "// Valid form 1 - single argument, returns the response body as a string\nvar body = Platform.Function.HTTPGet(\"https://api.example.com/data\");\nvar obj = Platform.Function.ParseJSON(body);\n\n// Valid form 2 - full 6-argument form (the trailing five are all-or-nothing)\nvar status = [];\nvar content = Platform.Function.HTTPGet(\n    \"https://api.example.com/data\",\n    false,\n    0,\n    [\"x-request-id\"],\n    [\"sampleValue\"],\n    status\n);\n// Note: status[0] is unreliable (observed empty); read the body from `content`.\nvar parsed = Platform.Function.ParseJSON(content);"
        },
        "callExpr": "Platform.Function.HTTPGet(\"url\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.HTTPPost",
        "category": "Platform.Function",
        "entry": {
          "name": "HTTPPost",
          "ampscriptEquivalent": "HTTPPost",
          "minArgs": 3,
          "maxArgs": 6,
          "isConfirmed": true,
          "description": "Performs an HTTP POST request with a content type and payload. Only works with HTTP on port 80 and HTTPS on port 443. Times out after 30 seconds. Returns the HTTP status code as a number (e.g. 200 for success). The optional response out-parameter is unreliable — in runtime tests it stayed empty even for successful requests, so read the status code from the return value and use HTTP.Post / a WSProxy call when you need the response body.",
          "params": [
            {
              "name": "url",
              "description": "URL to post to",
              "type": "string"
            },
            {
              "name": "contentType",
              "description": "MIME type of the request body",
              "type": "string"
            },
            {
              "name": "payload",
              "description": "Request body content",
              "type": "string"
            },
            {
              "name": "headerNames",
              "description": "Array of header names (co-required with headerValues)",
              "type": "string[]",
              "optional": true
            },
            {
              "name": "headerValues",
              "description": "Array of header values corresponding to headerNames (co-required)",
              "type": "string[]",
              "optional": true
            },
            {
              "name": "response",
              "description": "Array intended to receive the response body. Unreliable — observed empty even on successful (200) responses; do not depend on it.",
              "type": "array",
              "optional": true
            }
          ],
          "returnType": "number",
          "syntax": "Platform.Function.HTTPPost(url, contentType, payload[, headerNames, headerValues, response])",
          "example": "var statusCode = Platform.Function.HTTPPost(\n    \"https://api.example.com/items\",\n    \"application/json\",\n    Stringify({ name: \"Jane\", status: \"active\" })\n);\nif (statusCode == 200) { Write(\"posted\"); }"
        },
        "callExpr": "Platform.Function.HTTPPost(\"url\", \"contentType\", \"payload\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.ParseJSON",
        "category": "Platform.Function",
        "entry": {
          "name": "ParseJSON",
          "ampscriptEquivalent": null,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified on a CloudPage. Two corrections to the official docs: (1) The docs type the argument as `string or string[]` and describe passing an \"array of strings\"; at runtime passing an array (or any non-string object) throws `System.InvalidOperationException: Unable to retrieve security descriptor for this frame`. Only a single string argument is accepted. (2) The docs return type `object|object[]` is incomplete: only JSON objects/arrays are deserialised; a scalar JSON string (\"42\", \"\\\"hello\\\"\", \"true\", \"null\") is returned unchanged as a string, and invalid/empty/null/undefined input returns null (it does NOT throw).",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Parses a JSON-formatted string and returns the resulting JavaScript object or array. SFMC-native equivalent of JSON.parse(), which is not available in the legacy SSJS engine. Only single JSON object/array strings are deserialised; scalar JSON values are returned as strings and invalid, empty, null, or undefined input returns null (no error is thrown). Passing an array or a non-string object throws a runtime error, so pass exactly one string argument.",
          "params": [
            {
              "name": "jsonString",
              "description": "A single valid JSON-formatted string to parse. Must be a string — passing an array or other object throws a runtime error (contrary to the official docs).",
              "type": "string"
            }
          ],
          "returnType": "any",
          "syntax": "Platform.Function.ParseJSON(jsonString)",
          "example": "var jsonString = '{\"name\":\"Jane\",\"age\":30}';\nvar obj = Platform.Function.ParseJSON(jsonString);\nWrite(obj.name); // outputs: Jane\n\n// Invalid or empty input returns null (it does NOT throw):\nvar bad = Platform.Function.ParseJSON(\"{not json\");\nif (bad === null) { Write(\"could not parse\"); }\n\n// Use String() to convert CLR response content before parsing:\nvar req = new Script.Util.HttpRequest(\"https://api.example.com/data\");\nreq.method = \"GET\";\nvar resp = req.send();\nvar result = Platform.Function.ParseJSON(String(resp.content));"
        },
        "callExpr": "Platform.Function.ParseJSON(\"jsonString\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.RedirectTo",
        "category": "Platform.Function",
        "entry": {
          "name": "RedirectTo",
          "ampscriptEquivalent": "RedirectTo",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Specifies the target of an email link as a complete URL stored in an attribute, data extension field, or variable. Use only within the href attribute of an anchor tag in HTML emails. In text emails, add the http:// prefix without spaces inside the parentheses. Include anchor tags in the email body (not in retrieved link content) to retain click-tracking.",
          "params": [
            {
              "name": "url",
              "description": "The URL to redirect to",
              "type": "string"
            }
          ],
          "returnType": "string",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs imply no return value, but at runtime RedirectTo returns the passed-in URL string (typeof \"string\") and does not issue an HTTP redirect nor halt execution when called from SSJS; it requires exactly one argument (zero or two arguments throw a TypeError).",
          "syntax": "Platform.Function.RedirectTo(url)",
          "example": "var email = \"aruiz@example.com\";\nvar firstName = \"Angela\";\nvar baseUrl = \"https://example.com?email=\";\nvar nameJoin = \"&name=\";\nPlatform.Function.RedirectTo(baseUrl.concat(email, nameJoin, firstName));\n// Use inside href: <a href=\"%%=RedirectTo(...)=%%\">link</a>"
        },
        "callExpr": "Platform.Function.RedirectTo(\"url\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.UrlEncode",
        "category": "Platform.Function",
        "entry": {
          "name": "UrlEncode",
          "ampscriptEquivalent": "URLEncode",
          "minArgs": 1,
          "maxArgs": 2,
          "description": "Percent-encodes a complete URL. When encodeReservedKeywords is false (default), only space characters are encoded as %20. When true, all URL-reserved characters are also encoded (spaces become +).",
          "params": [
            {
              "name": "url",
              "description": "The complete URL to encode",
              "type": "string"
            },
            {
              "name": "encodeReservedKeywords",
              "description": "When true, encodes all reserved characters; spaces become +. When false (default), only spaces are encoded as %20.",
              "type": "boolean",
              "optional": true,
              "default": false
            }
          ],
          "returnType": "string",
          "isConfirmed": true,
          "syntax": "Platform.Function.UrlEncode(url[, encodeReservedKeywords])",
          "example": "var baseURL = \"https://www.example.com?value=12+3 12;3\";\nvar encoded = Platform.Function.UrlEncode(baseURL);\nWrite(encoded); // \"https://www.example.com?value=12+3%2012;3\"\nvar encodedFull = Platform.Function.UrlEncode(baseURL, true);\nWrite(encodedFull); // \"https://www.example.com?value%3d12%2b3+12%3b3\""
        },
        "callExpr": "Platform.Function.UrlEncode(\"url\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.Base64Encode",
        "category": "Platform.Function",
        "entry": {
          "name": "Base64Encode",
          "ampscriptEquivalent": "Base64Encode",
          "minArgs": 1,
          "maxArgs": 2,
          "description": "Encodes any string value to standard Base64. The optional charset controls the byte encoding. The result is interoperable standard Base64 and can be decoded by any Base64 decoder. For a simpler single-parameter form without charset control, see `Base64Encode()`.",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs claim output can only be decoded by the matching Base64Decode() function, but the runtime produces standard interoperable Base64 that any decoder accepts.",
          "params": [
            {
              "name": "string",
              "description": "String to encode",
              "type": "string"
            },
            {
              "name": "charset",
              "description": "Character set to use when encoding, such as ASCII or UTF-8",
              "type": "string",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "Platform.Function.Base64Encode(string[, charset])",
          "example": "var normalStr = Platform.Function.Lookup(\"ForBase64Info\",\"ReceiptData\",\"ReceiptKey\",\"stringValue\");\nvar encodedStr = Platform.Function.Base64Encode(normalStr);"
        },
        "callExpr": "Platform.Function.Base64Encode(\"string\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.Base64Decode",
        "category": "Platform.Function",
        "entry": {
          "name": "Base64Decode",
          "ampscriptEquivalent": "Base64Decode",
          "minArgs": 1,
          "maxArgs": 2,
          "description": "Decodes a standard Base64-encoded string. The optional charset controls how the decoded bytes are interpreted. It decodes any valid standard Base64 string, not only values produced by `Base64Encode()`.",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs imply it only decodes values created by the matching Base64Encode() function, but the runtime decodes any valid standard Base64 string.",
          "params": [
            {
              "name": "encodedString",
              "description": "Base64 encoded string to decode",
              "type": "string"
            },
            {
              "name": "charset",
              "description": "Character set to use when decoding, such as ASCII or UTF-8",
              "type": "string",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "Platform.Function.Base64Decode(encodedString[, charset])",
          "example": "var encodedStr = Platform.Function.Lookup(\"forBase64Info\",\"ReceiptData\",\"ReceiptKey\",\"stringValue\");\nvar decodedStr = Platform.Function.Base64Decode(encodedStr);"
        },
        "callExpr": "Platform.Function.Base64Decode(\"encodedString\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.MD5",
        "category": "Platform.Function",
        "entry": {
          "name": "MD5",
          "ampscriptEquivalent": "MD5",
          "minArgs": 1,
          "maxArgs": 2,
          "description": "Returns a lowercase 32-character hexadecimal MD5 hash for a given string value. The optional charset only affects non-ASCII input and defaults to UTF-8.",
          "params": [
            {
              "name": "string",
              "description": "String to evaluate",
              "type": "string"
            },
            {
              "name": "charset",
              "description": "Character set to use when evaluating, such as ASCII or UTF-8",
              "type": "string",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "Platform.Function.MD5(string[, charset])",
          "example": "var normalStr = Platform.Function.Lookup(\"ForMD5Info\",\"HashData\",\"HashKey\",\"stringValue\");\nvar hashedStr = Platform.Function.MD5(normalStr);",
          "isConfirmed": true
        },
        "callExpr": "Platform.Function.MD5(\"string\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.Stringify",
        "category": "Platform.Function",
        "entry": {
          "name": "Stringify",
          "ampscriptEquivalent": null,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Converts a JavaScript object into its JSON string representation. Works only with known JSON-serializable types. Not to be confused with `String()`, which converts CLR response objects to plain strings. The bare-name Stringify() global is equivalent but requires Platform.Load(\"core\",\"1.1.5\"); this Platform.Function form works without it.",
          "params": [
            {
              "name": "value",
              "description": "Value to serialize to JSON. Accepts objects, arrays, strings, numbers, and booleans.",
              "type": "any"
            }
          ],
          "returnType": "string",
          "returnDescription": "JSON string representation of the value. Serializes objects, arrays, nested structures, and scalars; null and undefined both serialize to the literal string \"null\".",
          "syntax": "Platform.Function.Stringify(value)",
          "example": "var json = Platform.Function.Stringify({ name: \"Jane\", age: 30 });\nPlatform.Function.Write(json);",
          "isConfirmed": true
        },
        "callExpr": "Platform.Function.Stringify({})",
        "isProperty": false
      },
      {
        "id": "Platform.Function.ContentArea",
        "category": "Platform.Function",
        "entry": {
          "name": "ContentArea",
          "ampscriptEquivalent": "ContentArea",
          "minArgs": 1,
          "maxArgs": 4,
          "deprecated": true,
          "description": "Retrieves content from a specified classic Content Area by numeric ID. Deprecated — Content Areas are no longer supported on current SFMC infrastructure. Note: the bare-name ContentArea() global uses a string errorMsg as the 3rd parameter and requires Platform.Load(\"core\",\"1.1.5\"); this Platform.Function form does not.",
          "isConfirmed": true,
          "params": [
            {
              "name": "id",
              "description": "Numeric ID of the Content Area.",
              "type": "number"
            },
            {
              "name": "regionName",
              "description": "Impression region for content.",
              "type": "string",
              "optional": true
            },
            {
              "name": "stopOnError",
              "description": "When true, throws on failure; when false the call proceeds.",
              "type": "boolean",
              "optional": true
            },
            {
              "name": "fallbackContent",
              "description": "Default content to display when the area cannot be retrieved.",
              "type": "string",
              "optional": true
            }
          ],
          "returnType": "string",
          "returnDescription": "Rendered content from the Content Area.",
          "syntax": "Platform.Function.ContentArea(id[, regionName, stopOnError, fallbackContent])",
          "example": "var content = Platform.Function.ContentArea(123456, \"impressionRegion\", false, \"defaultContentHere\");"
        },
        "callExpr": "Platform.Function.ContentArea(1)",
        "isProperty": false
      },
      {
        "id": "Platform.Function.ContentAreaByName",
        "category": "Platform.Function",
        "entry": {
          "name": "ContentAreaByName",
          "ampscriptEquivalent": "ContentAreaByName",
          "minArgs": 1,
          "maxArgs": 4,
          "deprecated": true,
          "description": "Retrieves content from a specified classic Content Area by name. Deprecated — Content Areas are no longer supported on current SFMC infrastructure. Note: the bare-name ContentAreaByName() global uses a string errorMsg as the 3rd parameter and requires Platform.Load(\"core\",\"1.1.5\"); this Platform.Function form does not.",
          "isConfirmed": true,
          "params": [
            {
              "name": "name",
              "description": "Name of the Content Area.",
              "type": "string"
            },
            {
              "name": "regionName",
              "description": "Impression region for content.",
              "type": "string",
              "optional": true
            },
            {
              "name": "stopOnError",
              "description": "When true, throws on failure; when false the call proceeds.",
              "type": "boolean",
              "optional": true
            },
            {
              "name": "fallbackContent",
              "description": "Default content to display when the area cannot be retrieved.",
              "type": "string",
              "optional": true
            }
          ],
          "returnType": "string",
          "returnDescription": "Rendered content from the Content Area.",
          "syntax": "Platform.Function.ContentAreaByName(name[, regionName, stopOnError, fallbackContent])",
          "example": "var content = Platform.Function.ContentAreaByName(\"My Content\\\\myContentArea\", \"impressionRegion\", false, \"defaultContentHere\");"
        },
        "callExpr": "Platform.Function.ContentAreaByName(\"name\")",
        "isProperty": false
      },
      {
        "id": "Platform.Function.IsCHTMLBrowser",
        "category": "Platform.Function",
        "entry": {
          "name": "IsCHTMLBrowser",
          "ampscriptEquivalent": "IsCHTMLBrowser",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Indicates whether the passed-in user-agent value represents a CHTML browser. CHTML browsers (e.g. feature phones) use a modified version of HTML. Returns true when the user agent is a CHTML browser.",
          "params": [
            {
              "name": "userAgentString",
              "description": "User-agent string to evaluate.",
              "type": "string"
            }
          ],
          "returnType": "boolean",
          "returnDescription": "True if the user agent represents a CHTML browser.",
          "syntax": "Platform.Function.IsCHTMLBrowser(userAgentString)",
          "example": "Platform.Response.Write(Platform.Request.UserAgent);\nPlatform.Response.Write(\"<br>Is CHTML: \");\nPlatform.Response.Write(Platform.Function.IsCHTMLBrowser(Platform.Request.UserAgent));",
          "isConfirmed": true
        },
        "callExpr": "Platform.Function.IsCHTMLBrowser(\"userAgentString\")",
        "isProperty": false
      }
    ],
    "Platform.Variable": [
      {
        "id": "Platform.Variable.GetValue",
        "category": "Platform.Variable",
        "entry": {
          "name": "GetValue",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Retrieves the value of an AMPscript variable from the SSJS context.",
          "params": [
            {
              "name": "variableName",
              "description": "Name of the AMPscript variable",
              "type": "string"
            }
          ],
          "returnType": "string",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified (CloudPage): when the variable was NEVER SET it returns `null` (typeof \"object\"), NOT an empty string. A variable explicitly set to \"\" returns `\"\"`. The leading `@` is optional — GetValue(\"v\") and GetValue(\"@v\") return the same value.",
          "syntax": "Platform.Variable.GetValue(variableName)",
          "example": "var sk = Platform.Variable.GetValue(\"SubscriberKey\");\nWrite(sk);\n// Bare-name alias: Variable.GetValue(\"SubscriberKey\")"
        },
        "callExpr": "Platform.Variable.GetValue(\"variableName\")",
        "isProperty": false
      },
      {
        "id": "Platform.Variable.SetValue",
        "category": "Platform.Variable",
        "entry": {
          "name": "SetValue",
          "minArgs": 2,
          "maxArgs": 2,
          "description": "Assigns a value to an AMPscript variable from the SSJS context.",
          "params": [
            {
              "name": "variableName",
              "description": "Name of the AMPscript variable",
              "type": "string"
            },
            {
              "name": "value",
              "description": "Value to assign",
              "type": "string"
            }
          ],
          "returnType": "void",
          "isConfirmed": true,
          "officialDocsNote": "Runtime-verified (CloudPage): the leading `@` is optional — SetValue(\"v\", x) and SetValue(\"@v\", x) both write the same AMPscript variable.",
          "syntax": "Platform.Variable.SetValue(variableName, value)",
          "example": "Platform.Variable.SetValue(\"greeting\", \"Hello from SSJS\");\n// @greeting is now available in subsequent AMPscript blocks\n// Bare-name alias: Variable.SetValue(\"greeting\", \"Hello from SSJS\")"
        },
        "callExpr": "Platform.Variable.SetValue(\"variableName\", \"value\")",
        "isProperty": false
      }
    ],
    "Platform.Response": [
      {
        "id": "Platform.Response.SetResponseHeader",
        "category": "Platform.Response",
        "entry": {
          "name": "SetResponseHeader",
          "minArgs": 2,
          "maxArgs": 2,
          "description": "Sets a response header on the current page response.",
          "params": [
            {
              "name": "headerName",
              "description": "Name of the response header.",
              "type": "string"
            },
            {
              "name": "value",
              "description": "Value for the response header.",
              "type": "string"
            }
          ],
          "returnType": "void",
          "syntax": "Platform.Response.SetResponseHeader(headerName, value)",
          "example": "Platform.Response.SetResponseHeader(\"Content-Type\", \"application/json\");\nPlatform.Response.Write(Stringify({ status: \"ok\" }));"
        },
        "callExpr": "Platform.Response.SetResponseHeader(\"headerName\", \"value\")",
        "isProperty": false
      },
      {
        "id": "Platform.Response.RemoveResponseHeader",
        "category": "Platform.Response",
        "entry": {
          "name": "RemoveResponseHeader",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Removes a previously set HTTP response header from the response.",
          "params": [
            {
              "name": "headerName",
              "description": "Name of the HTTP response header to remove.",
              "type": "string"
            }
          ],
          "returnType": "void",
          "syntax": "Platform.Response.RemoveResponseHeader(headerName)",
          "example": "Platform.Response.RemoveResponseHeader(\"X-Powered-By\");"
        },
        "callExpr": "Platform.Response.RemoveResponseHeader(\"headerName\")",
        "isProperty": false
      },
      {
        "id": "Platform.Response.Redirect",
        "category": "Platform.Response",
        "entry": {
          "name": "Redirect",
          "minArgs": 2,
          "maxArgs": 2,
          "description": "Redirects the current page to a new URL. Pass false for a 302 temporary redirect or true for a 301 permanent redirect. Do not use 301 if you want browsers to re-check the original URL later.",
          "params": [
            {
              "name": "url",
              "description": "URL to redirect to.",
              "type": "string"
            },
            {
              "name": "movedPermanently",
              "description": "True for 301 permanent redirect, false for 302 temporary.",
              "type": "boolean"
            }
          ],
          "returnType": "void",
          "syntax": "Platform.Response.Redirect(url, movedPermanently)",
          "example": "Platform.Response.Redirect(\"https://pub.pages.example.com/thank-you\", false);"
        },
        "callExpr": "Platform.Response.Redirect(\"url\", true)",
        "isProperty": false
      },
      {
        "id": "Platform.Response.SetCookie",
        "category": "Platform.Response",
        "entry": {
          "name": "SetCookie",
          "minArgs": 2,
          "maxArgs": 4,
          "description": "Sets a cookie on the client browser response.",
          "params": [
            {
              "name": "name",
              "description": "Name of the cookie to set.",
              "type": "string"
            },
            {
              "name": "value",
              "description": "Value to store in the cookie.",
              "type": "string"
            },
            {
              "name": "expires",
              "description": "Expiration date/time for the cookie.",
              "type": "string",
              "optional": true
            },
            {
              "name": "secure",
              "description": "If true, the cookie is only sent over HTTPS.",
              "type": "boolean",
              "optional": true
            }
          ],
          "returnType": "void",
          "syntax": "Platform.Response.SetCookie(name, value[, expires, secure])",
          "example": "Platform.Response.SetCookie(\"userId\", subscriberKey, \"12/31/2025\", true);"
        },
        "callExpr": "Platform.Response.SetCookie(\"name\", \"value\")",
        "isProperty": false
      },
      {
        "id": "Platform.Response.RemoveCookie",
        "category": "Platform.Response",
        "entry": {
          "name": "RemoveCookie",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Removes a cookie from the client browser by setting its expiration to a past date.",
          "params": [
            {
              "name": "name",
              "description": "Name of the cookie to remove.",
              "type": "string"
            }
          ],
          "returnType": "void",
          "syntax": "Platform.Response.RemoveCookie(name)",
          "example": "Platform.Response.RemoveCookie(\"userId\");"
        },
        "callExpr": "Platform.Response.RemoveCookie(\"name\")",
        "isProperty": false
      },
      {
        "id": "Platform.Response.Write",
        "category": "Platform.Response",
        "entry": {
          "name": "Write",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Writes content to the HTTP response output. Distinct from the bare-name `Write()``, which write to the rendered page output.",
          "params": [
            {
              "name": "content",
              "description": "Content string to write to the response.",
              "type": "string"
            }
          ],
          "returnType": "void",
          "isConfirmed": true,
          "officialDocsNote": "Runtime-verified (CloudPage): writes directly to the HTTP response body.",
          "syntax": "Platform.Response.Write(content)",
          "example": "var data = { name: \"Jane\", status: \"active\" };\nPlatform.Response.Write(Stringify(data));"
        },
        "callExpr": "Platform.Response.Write(\"content\")",
        "isProperty": false
      },
      {
        "id": "Platform.Response.ContentType",
        "category": "Platform.Response",
        "entry": {
          "name": "ContentType",
          "minArgs": 0,
          "maxArgs": 0,
          "isProperty": true,
          "description": "Gets or sets the Content-Type of the HTTP response.",
          "params": [],
          "returnType": "string",
          "syntax": "Platform.Response.ContentType",
          "example": "Platform.Response.ContentType = \"application/json\";"
        },
        "callExpr": "Platform.Response.ContentType",
        "isProperty": true
      },
      {
        "id": "Platform.Response.CharacterSet",
        "category": "Platform.Response",
        "entry": {
          "name": "CharacterSet",
          "minArgs": 0,
          "maxArgs": 0,
          "isProperty": true,
          "description": "Gets or sets the character set of the HTTP response.",
          "params": [],
          "returnType": "string",
          "syntax": "Platform.Response.CharacterSet",
          "example": "Platform.Response.CharacterSet = \"UTF-8\";"
        },
        "callExpr": "Platform.Response.CharacterSet",
        "isProperty": true
      }
    ],
    "Platform.Request": [
      {
        "id": "Platform.Request.GetQueryStringParameter",
        "category": "Platform.Request",
        "entry": {
          "name": "GetQueryStringParameter",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Retrieves the value of a URL query string parameter.",
          "params": [
            {
              "name": "parameterName",
              "description": "Name of the query string parameter.",
              "type": "string"
            }
          ],
          "returnType": "string",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified (CloudPage GET, ?probeParam=hello): a present parameter returns its string value (\"hello\"); an ABSENT parameter returns `null` (typeof \"object\"), NOT an empty string. Exactly one argument is accepted: a zero- or two-argument call throws the generic `Unable to retrieve security descriptor for this frame.` error, which signals an argument count it does not accept. Guard reads with a truthiness / `!= null` check.",
          "syntax": "Platform.Request.GetQueryStringParameter(parameterName)",
          "example": "// Page URL: /mypage?email=jane@example.com\nvar email = Platform.Request.GetQueryStringParameter(\"email\");\nWrite(email);"
        },
        "callExpr": "Platform.Request.GetQueryStringParameter(\"parameterName\")",
        "isProperty": false
      },
      {
        "id": "Platform.Request.GetFormField",
        "category": "Platform.Request",
        "entry": {
          "name": "GetFormField",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Retrieves data from a named form field, including values sent via POST.",
          "params": [
            {
              "name": "name",
              "description": "Name of the form field to retrieve.",
              "type": "string"
            }
          ],
          "returnType": "string",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified (CloudPage): for an ABSENT field it returns `null` (typeof \"object\"), NOT an empty string. Exactly one argument is accepted: a zero- or two-argument call throws the generic `Unable to retrieve security descriptor for this frame.` error, which signals an argument count it does not accept.",
          "syntax": "Platform.Request.GetFormField(name)",
          "example": "var email = Platform.Request.GetFormField(\"emailAddress\");\nWrite(email);"
        },
        "callExpr": "Platform.Request.GetFormField(\"name\")",
        "isProperty": false
      },
      {
        "id": "Platform.Request.GetPostData",
        "category": "Platform.Request",
        "entry": {
          "name": "GetPostData",
          "minArgs": 0,
          "maxArgs": 1,
          "description": "Returns the raw body of the HTTP POST request. CAVEAT: Only returns data on the FIRST call per request; subsequent calls return nothing. Store the result in a variable if you need it multiple times.",
          "params": [
            {
              "name": "encoding",
              "description": "Character encoding for the post data.",
              "type": "string",
              "optional": true
            }
          ],
          "returnType": "string",
          "isConfirmed": true,
          "officialDocsNote": "Runtime-verified (CloudPage): on a GET request it returns `\"\"` (empty string), not null. First call per request returns the body; subsequent calls return `\"\"`.",
          "syntax": "Platform.Request.GetPostData([encoding])",
          "example": "// Read raw POST body once and store it:\nvar rawBody = Platform.Request.GetPostData();\nvar payload = Platform.Function.ParseJSON(rawBody);"
        },
        "callExpr": "Platform.Request.GetPostData()",
        "isProperty": false
      },
      {
        "id": "Platform.Request.GetCookieValue",
        "category": "Platform.Request",
        "entry": {
          "name": "GetCookieValue",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Retrieves the value of a named cookie from the HTTP request sent by the client browser.",
          "params": [
            {
              "name": "cookieName",
              "description": "Name of the cookie to retrieve.",
              "type": "string"
            }
          ],
          "returnType": "string",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified (CloudPage): for an ABSENT cookie it returns `null` (typeof \"object\"), NOT an empty string.",
          "syntax": "Platform.Request.GetCookieValue(cookieName)",
          "example": "var sessionId = Platform.Request.GetCookieValue(\"sessionId\");\nif (sessionId) { Write(\"Session: \" + sessionId); }"
        },
        "callExpr": "Platform.Request.GetCookieValue(\"cookieName\")",
        "isProperty": false
      },
      {
        "id": "Platform.Request.GetUserLanguages",
        "category": "Platform.Request",
        "entry": {
          "name": "GetUserLanguages",
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Returns the language preferences of the client browser as specified in the HTTP Accept-Language request header.",
          "params": [],
          "returnType": "string",
          "isConfirmed": false,
          "notDefinedAtRuntime": true,
          "officialDocsNote": "Officially documented to return the `Accept-Language` header value, but `GetUserLanguages()` as called is NOT DEFINED AT RUNTIME: the engine does not resolve this member — runtime probing shows it throws the generic `System.InvalidOperationException: \"Unable to retrieve security descriptor for this frame.\"` at every arity tried (0/1/2 args), the error the SSJS engine raises for an unrecognized member name or an argument count the engine does not accept (NOT a security or frame restriction). The same `Accept-Language` header IS present and readable in the same run via `Platform.Request.GetRequestHeader(\"Accept-Language\")`. Use `Platform.Request.GetRequestHeader(\"Accept-Language\")` instead, which returns the same value this method is documented to expose.",
          "syntax": "Platform.Request.GetUserLanguages()",
          "example": "var lang = Platform.Request.GetUserLanguages();\nWrite(lang); // e.g. \"en-US,en;q=0.9\""
        },
        "callExpr": "Platform.Request.GetUserLanguages()",
        "isProperty": false
      },
      {
        "id": "Platform.Request.GetRequestHeader",
        "category": "Platform.Request",
        "entry": {
          "name": "GetRequestHeader",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns the value of the named HTTP request header, or null if not present.",
          "params": [
            {
              "name": "headerName",
              "description": "Name of the HTTP request header to retrieve.",
              "type": "string"
            }
          ],
          "returnType": "string",
          "isConfirmed": true,
          "officialDocsNote": "Runtime-verified (CloudPage): for an ABSENT header it returns `null` (typeof \"object\") — consistent with the official docs.",
          "syntax": "Platform.Request.GetRequestHeader(headerName)",
          "example": "var auth = Platform.Request.GetRequestHeader(\"Authorization\");\nif (auth) { Write(\"Auth: \" + auth); }"
        },
        "callExpr": "Platform.Request.GetRequestHeader(\"headerName\")",
        "isProperty": false
      },
      {
        "id": "Platform.Request.Browser",
        "category": "Platform.Request",
        "entry": {
          "name": "Browser",
          "minArgs": 0,
          "maxArgs": 0,
          "isProperty": true,
          "description": "Returns an object describing the client browser.",
          "params": [],
          "returnType": "object",
          "syntax": "Platform.Request.Browser",
          "example": "var browser = Platform.Request.Browser;\nWrite(Stringify(browser));"
        },
        "callExpr": "Platform.Request.Browser",
        "isProperty": true
      },
      {
        "id": "Platform.Request.ClientIP",
        "category": "Platform.Request",
        "entry": {
          "name": "ClientIP",
          "minArgs": 0,
          "maxArgs": 0,
          "isProperty": true,
          "description": "Returns the IP address of the client.",
          "params": [],
          "returnType": "string",
          "syntax": "Platform.Request.ClientIP",
          "example": "Write(Platform.Request.ClientIP);"
        },
        "callExpr": "Platform.Request.ClientIP",
        "isProperty": true
      },
      {
        "id": "Platform.Request.HasSSL",
        "category": "Platform.Request",
        "entry": {
          "name": "HasSSL",
          "minArgs": 0,
          "maxArgs": 0,
          "isProperty": true,
          "description": "Returns true if the current request was made over HTTPS.",
          "params": [],
          "returnType": "boolean",
          "syntax": "Platform.Request.HasSSL",
          "example": "if (Platform.Request.HasSSL) {\n    Write(\"Secure connection\");\n} else {\n    Platform.Response.Redirect(\"https://\" + Platform.Request.RequestURL);\n}"
        },
        "callExpr": "Platform.Request.HasSSL",
        "isProperty": true
      },
      {
        "id": "Platform.Request.IsSSL",
        "category": "Platform.Request",
        "entry": {
          "name": "IsSSL",
          "minArgs": 0,
          "maxArgs": 0,
          "isProperty": true,
          "description": "Returns true if the current request was made over HTTPS (alias of HasSSL).",
          "params": [],
          "returnType": "boolean",
          "syntax": "Platform.Request.IsSSL",
          "example": "Write(Platform.Request.IsSSL);"
        },
        "callExpr": "Platform.Request.IsSSL",
        "isProperty": true
      },
      {
        "id": "Platform.Request.Method",
        "category": "Platform.Request",
        "entry": {
          "name": "Method",
          "minArgs": 0,
          "maxArgs": 0,
          "isProperty": true,
          "description": "Returns the HTTP method (GET, POST, etc.) of the current request.",
          "params": [],
          "returnType": "string",
          "syntax": "Platform.Request.Method",
          "example": "var method = Platform.Request.Method;\nif (method === \"POST\") {\n    var body = Platform.Request.GetPostData();\n    // handle POST\n}"
        },
        "callExpr": "Platform.Request.Method",
        "isProperty": true
      },
      {
        "id": "Platform.Request.QueryString",
        "category": "Platform.Request",
        "entry": {
          "name": "QueryString",
          "minArgs": 0,
          "maxArgs": 0,
          "isProperty": true,
          "description": "Returns the full query string of the current request URL.",
          "params": [],
          "returnType": "string",
          "syntax": "Platform.Request.QueryString",
          "example": "Write(Platform.Request.QueryString);"
        },
        "callExpr": "Platform.Request.QueryString",
        "isProperty": true
      },
      {
        "id": "Platform.Request.ReferrerURL",
        "category": "Platform.Request",
        "entry": {
          "name": "ReferrerURL",
          "minArgs": 0,
          "maxArgs": 0,
          "isProperty": true,
          "description": "Returns the referrer URL from the HTTP Referer header.",
          "params": [],
          "returnType": "string",
          "syntax": "Platform.Request.ReferrerURL",
          "example": "Write(Platform.Request.ReferrerURL);"
        },
        "callExpr": "Platform.Request.ReferrerURL",
        "isProperty": true
      },
      {
        "id": "Platform.Request.RequestURL",
        "category": "Platform.Request",
        "entry": {
          "name": "RequestURL",
          "minArgs": 0,
          "maxArgs": 0,
          "isProperty": true,
          "description": "Returns the full URL of the current page request.",
          "params": [],
          "returnType": "string",
          "syntax": "Platform.Request.RequestURL",
          "example": "Write(\"Current page: \" + Platform.Request.RequestURL);"
        },
        "callExpr": "Platform.Request.RequestURL",
        "isProperty": true
      },
      {
        "id": "Platform.Request.UserAgent",
        "category": "Platform.Request",
        "entry": {
          "name": "UserAgent",
          "minArgs": 0,
          "maxArgs": 0,
          "isProperty": true,
          "description": "Returns the user-agent string from the HTTP request.",
          "params": [],
          "returnType": "string",
          "syntax": "Platform.Request.UserAgent",
          "example": "Write(Platform.Request.UserAgent);"
        },
        "callExpr": "Platform.Request.UserAgent",
        "isProperty": true
      }
    ],
    "Platform.Recipient": [
      {
        "id": "Platform.Recipient.GetAttributeValue",
        "category": "Platform.Recipient",
        "entry": {
          "name": "GetAttributeValue",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns the value of a subscriber attribute or sendable data extension field for the current recipient.",
          "params": [
            {
              "name": "attributeName",
              "description": "Name of the subscriber attribute or sendable DE field to retrieve",
              "type": "string"
            }
          ],
          "returnType": "string",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified (CloudPage): does NOT throw outside a send context — in a plain CloudPage it returns `\"\"` (empty string, typeof \"string\") for any attribute because no recipient is bound. The bare-name `Recipient` alias is NOT available even after Platform.Load; use `Platform.Recipient.GetAttributeValue(...)` (or `Attribute.GetValue(...)` after load).",
          "syntax": "Platform.Recipient.GetAttributeValue(attributeName)",
          "example": "var email = Platform.Recipient.GetAttributeValue(\"EmailAddress\");\nPlatform.Response.Write(email);"
        },
        "callExpr": "Platform.Recipient.GetAttributeValue(\"attributeName\")",
        "isProperty": false
      }
    ],
    "HTTPHeader": [
      {
        "id": "HTTPHeader.GetValue",
        "category": "HTTPHeader",
        "entry": {
          "name": "GetValue",
          "minArgs": 1,
          "maxArgs": 1,
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified (CloudPage): reads INBOUND request headers (e.g. `Host`, `User-Agent`) and returns their string value. It does NOT read back a header you set earlier with `HTTPHeader.SetValue(...)` — GetValue for a just-set custom header returns `null`. Treat GetValue and SetValue as operating on separate (inbound vs outbound) header collections.",
          "description": "Retrieves the value of the specified INBOUND HTTP request header (e.g. Host, User-Agent). Returns `null` for headers that are not present on the request.",
          "params": [
            {
              "name": "name",
              "description": "Name of the HTTP header to read",
              "type": "string"
            }
          ],
          "returnType": "string",
          "syntax": "HTTPHeader.GetValue(name)",
          "example": "Platform.Load(\"core\", \"1\");\nvar host = HTTPHeader.GetValue(\"Host\");\nWrite(host);"
        },
        "callExpr": "HTTPHeader.GetValue(\"name\")",
        "isProperty": false
      },
      {
        "id": "HTTPHeader.SetValue",
        "category": "HTTPHeader",
        "entry": {
          "name": "SetValue",
          "minArgs": 2,
          "maxArgs": 2,
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "description": "Sets the value of the specified OUTBOUND HTTP header. The host and content-length headers cannot be changed. Note: values set here are not readable via `HTTPHeader.GetValue`, which reads inbound headers.",
          "params": [
            {
              "name": "name",
              "description": "Name of the header to set",
              "type": "string"
            },
            {
              "name": "value",
              "description": "Value to assign to the header",
              "type": "string"
            }
          ],
          "returnType": "void",
          "syntax": "HTTPHeader.SetValue(name, value)",
          "example": "Platform.Load(\"core\", \"1\");\nHTTPHeader.SetValue(\"From\", \"aruiz@example.com\");"
        },
        "callExpr": "HTTPHeader.SetValue(\"name\", \"value\")",
        "isProperty": false
      },
      {
        "id": "HTTPHeader.Remove",
        "category": "HTTPHeader",
        "entry": {
          "name": "Remove",
          "minArgs": 1,
          "maxArgs": 1,
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified (CloudPage): returns `undefined` (typeof \"undefined\"), NOT the `\"OK\"` string implied by some docs. Do not rely on the return value; call it for its side effect only.",
          "description": "Removes the specified entry from the HTTP header. Returns `undefined`.",
          "params": [
            {
              "name": "headerName",
              "description": "Name of the header to remove",
              "type": "string"
            }
          ],
          "returnType": "void",
          "syntax": "HTTPHeader.Remove(headerName)",
          "example": "Platform.Load(\"core\", \"1\");\nHTTPHeader.Remove(\"X-Custom-Header\"); // no useful return value"
        },
        "callExpr": "HTTPHeader.Remove(\"headerName\")",
        "isProperty": false
      }
    ],
    "Attribute": [
      {
        "id": "Attribute.GetValue",
        "category": "Attribute",
        "entry": {
          "name": "GetValue",
          "minArgs": 1,
          "maxArgs": 1,
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified on a published CloudPage: after Platform.Load(\"Core\", ...) the Attribute object exists and Attribute.GetValue(name) executes and returns a string — it is NOT unavailable in CloudPages. When no subscriber/attribute is in context (e.g. a plain CloudPage GET) it returns an empty string rather than throwing. In email/triggered-send/personalized contexts it returns the actual attribute value.",
          "description": "Returns the value of the specified subscriber attribute or sendable data extension field for the current recipient. Preferred over Platform.Recipient.GetAttributeValue() — both methods are equivalent. Available in CloudPages after Platform.Load(\"Core\", ...); returns an empty string when no recipient/attribute context is present.",
          "params": [
            {
              "name": "name",
              "description": "Name of the subscriber attribute or sendable DE field to retrieve.",
              "type": "string"
            }
          ],
          "returnType": "string",
          "syntax": "Attribute.GetValue(name)",
          "example": "Platform.Load(\"Core\", \"1.1.1\");\nvar email = Attribute.GetValue(\"EmailAddress\");\nWrite(email);"
        },
        "callExpr": "Attribute.GetValue(\"name\")",
        "isProperty": false
      }
    ],
    "DateTime": [
      {
        "id": "DateTime.SystemDateToLocalDate",
        "category": "DateTime",
        "entry": {
          "name": "SystemDateToLocalDate",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Converts a date-time value from Marketing Cloud system time (CST) to the local time of the account or user.",
          "params": [
            {
              "name": "dateString",
              "description": "Date-time string in system time (CST)",
              "type": "string"
            }
          ],
          "returnType": "string",
          "requiresCoreLoad": true,
          "syntax": "DateTime.SystemDateToLocalDate(dateString)",
          "example": "var localTime = DateTime.SystemDateToLocalDate(Platform.Function.Now());\nWrite(localTime);"
        },
        "callExpr": "DateTime.SystemDateToLocalDate(\"dateString\")",
        "isProperty": false
      },
      {
        "id": "DateTime.LocalDateToSystemDate",
        "category": "DateTime",
        "entry": {
          "name": "LocalDateToSystemDate",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Converts a date-time value from the local time of the account or user to Marketing Cloud system time (CST).",
          "params": [
            {
              "name": "dateString",
              "description": "Date-time string in local account/user time",
              "type": "string"
            }
          ],
          "returnType": "string",
          "requiresCoreLoad": true,
          "syntax": "DateTime.LocalDateToSystemDate(dateString)",
          "example": "var systemTime = DateTime.LocalDateToSystemDate(\"8/5/2025 12:34 PM\");\nWrite(systemTime);"
        },
        "callExpr": "DateTime.LocalDateToSystemDate(\"dateString\")",
        "isProperty": false
      }
    ],
    "DateTime.TimeZone": [
      {
        "id": "DateTime.TimeZone.Retrieve",
        "category": "DateTime.TimeZone",
        "entry": {
          "name": "Retrieve",
          "minArgs": 1,
          "maxArgs": 1,
          "isStatic": true,
          "requiresCoreLoad": true,
          "description": "Retrieves an array of time zones matching the specified filter criteria. If no filter is supplied the function returns all available time zones.",
          "params": [
            {
              "name": "filter",
              "description": "Filter criteria object with properties: `Property`, `SimpleOperator`, `Value`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "syntax": "DateTime.TimeZone.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar timezones = DateTime.TimeZone.Retrieve({ Property: \"ID\", SimpleOperator: \"equals\", Value: 1 });\nWrite(Stringify(timezones));"
        },
        "callExpr": "DateTime.TimeZone.Retrieve({})",
        "isProperty": false
      }
    ],
    "ErrorUtil": [
      {
        "id": "ErrorUtil.ThrowWSProxyError",
        "category": "ErrorUtil",
        "entry": {
          "name": "ThrowWSProxyError",
          "minArgs": 1,
          "maxArgs": 1,
          "isStatic": true,
          "requiresCoreLoad": true,
          "deprecated": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified (CloudPage): `ErrorUtil` (and its only member `ThrowWSProxyError`) is provided ONLY by `Platform.Load(\"Core\", \"1\")`. Under any newer Core version (\"1.1.1\", \"1.1.5\", …) `ErrorUtil` is `undefined`, so this call throws a ReferenceError — it is effectively deprecated in Core > 1. A preceding `new Script.Util.WSProxy()` is NOT required to make ErrorUtil available (disproven at runtime). When it does throw on a real WSProxy error result, it throws a plain STRING (e.g. \"Error: Data extension does not exist: …\") — not an Error object — so the caught value has no `.message`/`.description` (both `undefined`); read the string itself via `String(ex)`. Recommended replacement (works on any Core version): inspect `result.Status` and `throw new Error(...)` (or handle inline) instead of calling ErrorUtil.ThrowWSProxyError.",
          "description": "Inspects a WSProxy result object and throws when its `Status` property indicates an error. WSProxy methods never raise exceptions on SOAP-level errors — instead they return a result object whose `Status` field signals the outcome. DEPRECATED: only available under `Platform.Load(\"Core\", \"1\")`; unavailable in newer Core versions. Prefer checking `result.Status` and throwing `new Error(...)` yourself.",
          "params": [
            {
              "name": "result",
              "description": "Result object returned by any WSProxy method. Minimum shape: `{ Status: string, RequestID: string, Results: object[] }`. Retrieve and perform variants may include additional fields.",
              "type": "object"
            }
          ],
          "returnType": "void",
          "syntax": "ErrorUtil.ThrowWSProxyError(result)",
          "example": "// Only works under Platform.Load(\"Core\", \"1\"); prefer the result.Status check below.\nPlatform.Load(\"Core\", \"1\");\nvar api = new Script.Util.WSProxy();\nvar customerKey = \"0b744ffa-bab5-458d-9e7d-fb05a7873380\";\ntry {\n    var result = api.retrieve(\n        \"DataExtensionObject[\" + customerKey + \"]\",\n        [\"FirstName\", \"LastName\", \"EmailAddress\"]\n    );\n    // Preferred, version-independent replacement:\n    if (String(result.Status).indexOf(\"Error\") === 0) {\n        throw new Error(String(result.Status));\n    }\n    // process successful results\n} catch (ex) {\n    Write(String(ex));\n}"
        },
        "callExpr": "ErrorUtil.ThrowWSProxyError({})",
        "isProperty": false
      }
    ],
    "HTTP": [
      {
        "id": "HTTP.Get",
        "category": "HTTP",
        "entry": {
          "name": "Get",
          "minArgs": 1,
          "maxArgs": 3,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "description": "Performs an HTTP GET request and returns the response body. When supplying `headerNames` and `headerValues`, both arrays must have equal length and parallel ordering.",
          "params": [
            {
              "name": "url",
              "description": "URL to request.",
              "type": "string"
            },
            {
              "name": "headerNames",
              "description": "Array of header names (co-required with headerValues).",
              "type": "array",
              "optional": true
            },
            {
              "name": "headerValues",
              "description": "Array of header values, one per entry in headerNames (co-required).",
              "type": "array",
              "optional": true
            }
          ],
          "returnType": "{ Status: number, Content: string }",
          "syntax": "HTTP.Get(url[, headerNames, headerValues])",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar body = HTTP.Get(\"https://api.example.com/data\");\nvar obj = Platform.Function.ParseJSON(String(body));"
        },
        "callExpr": "HTTP.Get(\"url\")",
        "isProperty": false
      },
      {
        "id": "HTTP.Post",
        "category": "HTTP",
        "entry": {
          "name": "Post",
          "minArgs": 3,
          "maxArgs": 5,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "description": "Performs an HTTP POST request with a content type and payload. Returns an object whose `StatusCode` is a number and whose `Response` is an array-like whose first element (`Response[0]`) is the response body string. Custom headers are optional; when supplied, `headerNames` and `headerValues` must be paired (equal length) — passing only one of the two throws a mismatch error.",
          "params": [
            {
              "name": "url",
              "description": "URL to post to.",
              "type": "string"
            },
            {
              "name": "contentType",
              "description": "MIME type of the request body.",
              "type": "string"
            },
            {
              "name": "payload",
              "description": "Request body content.",
              "type": "string"
            },
            {
              "name": "headerNames",
              "description": "Array of header names to include in the request (co-required with headerValues).",
              "type": "string[]",
              "optional": true
            },
            {
              "name": "headerValues",
              "description": "Array of header values, one per entry in headerNames (co-required).",
              "type": "array",
              "optional": true
            }
          ],
          "returnType": "{ StatusCode: number, Response: string[] }",
          "syntax": "HTTP.Post(url, contentType, payload[, headerNames, headerValues])",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar payload = Stringify({ email: \"jane@example.com\" });\nvar response = HTTP.Post(\"https://api.example.com/items\", \"application/json\", payload);\nif (response.StatusCode == 200) { var body = response.Response[0]; }"
        },
        "callExpr": "HTTP.Post(\"url\", \"contentType\", \"payload\")",
        "isProperty": false
      }
    ],
    "Script.Util": [
      {
        "id": "new Script.Util.WSProxy",
        "category": "Script.Util",
        "entry": {
          "name": "WSProxy",
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Creates a WSProxy instance for making SOAP API calls against the Marketing Cloud web service. No Platform.Load is required.",
          "params": [],
          "returnType": "WSProxyInstance",
          "returnDescription": "An authenticated WSProxy object bound to the current execution context.",
          "syntax": "new Script.Util.WSProxy()",
          "example": "var api = new Script.Util.WSProxy();\nvar result = api.retrieve(\"DataExtension\", [\"Name\", \"CustomerKey\"]);\nif (result.Status === \"OK\") {\n    Write(Stringify(result.Results));\n}",
          "isConfirmed": true
        },
        "callExpr": "new Script.Util.WSProxy()",
        "isProperty": false
      },
      {
        "id": "new Script.Util.HttpRequest",
        "category": "Script.Util",
        "entry": {
          "name": "HttpRequest",
          "minArgs": 1,
          "maxArgs": 1,
          "isConfirmed": true,
          "description": "Creates an HTTP request handler that supports any HTTP method (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS). Unlike Platform.Function.HTTPGet/HTTPPost, this handler supports custom methods and headers. Call send() to execute the request and receive a Script.Util.HttpResponse object.",
          "params": [
            {
              "name": "url",
              "description": "The destination URL for the request",
              "type": "string"
            }
          ],
          "returnType": "HttpRequestInstance",
          "syntax": "new Script.Util.HttpRequest(url)",
          "example": "var url = \"https://api.example.com/items/123\";\nvar req = new Script.Util.HttpRequest(url);\nreq.emptyContentHandling = 0;\nreq.retries = 2;\nreq.continueOnError = true;\nreq.contentType = \"application/json\";\nreq.method = \"PUT\";\nreq.setHeader(\"Authorization\", \"Bearer \" + accessToken);\nreq.postData = Stringify({ status: \"active\" });\nvar resp = req.send();\nvar result = Platform.Function.ParseJSON(String(resp.content));"
        },
        "callExpr": "new Script.Util.HttpRequest(\"url\")",
        "isProperty": false
      },
      {
        "id": "new Script.Util.HttpGet",
        "category": "Script.Util",
        "entry": {
          "name": "HttpGet",
          "minArgs": 1,
          "maxArgs": 1,
          "isConfirmed": true,
          "description": "Creates an HTTP GET request handler. Unlike Platform.Function.HTTPGet, this handler caches content for use in mail sends and supports custom headers. Only works with HTTP on port 80 and HTTPS on port 443. Call send() to execute the request and receive a Script.Util.HttpResponse object.",
          "params": [
            {
              "name": "url",
              "description": "The URL to retrieve content from",
              "type": "string"
            }
          ],
          "returnType": "HttpRequestInstance",
          "syntax": "new Script.Util.HttpGet(url)",
          "example": "var req = new Script.Util.HttpGet(\"https://api.example.com/data\");\nreq.setHeader(\"Authorization\", \"Bearer \" + accessToken);\nreq.retries = 2;\nreq.continueOnError = true;\nvar resp = req.send();\nif (resp.statusCode == 200) {\n    var result = Platform.Function.ParseJSON(String(resp.content));\n    Platform.Response.Write(Platform.Function.Stringify(result));\n}"
        },
        "callExpr": "new Script.Util.HttpGet(\"url\")",
        "isProperty": false
      }
    ],
    "WSProxy": [
      {
        "id": "<WSProxyInstance>.createItem",
        "category": "WSProxy",
        "entry": {
          "name": "createItem",
          "isStatic": false,
          "minArgs": 2,
          "maxArgs": 3,
          "isConfirmed": true,
          "description": "Creates a new Marketing Cloud object via the SOAP API.",
          "params": [
            {
              "name": "objectType",
              "description": "SOAP API object type name",
              "type": "string"
            },
            {
              "name": "properties",
              "description": "Object properties to set",
              "type": "object"
            },
            {
              "name": "createOptions",
              "description": "Optional SOAP CreateOptions object (e.g. RequestType, QueuePriority).",
              "type": "object",
              "optional": true
            }
          ],
          "returnType": "WSProxyResult",
          "returnDescription": "Object with Status, RequestID, and a Results array of per-item results.",
          "syntax": "<WSProxyInstance>.createItem(objectType, properties[, createOptions])",
          "example": "var api = new Script.Util.WSProxy();\nvar result = api.createItem(\"DataExtensionObject\", {\n    CustomerKey: \"MyDE\",\n    Properties: { Property: [{ Name: \"Email\", Value: \"jane@example.com\" }] }\n});\nif (result.Status === \"OK\") { Write(\"Created\"); }"
        },
        "callExpr": "_wsproxy.createItem(\"objectType\", {})",
        "isProperty": false
      },
      {
        "id": "<WSProxyInstance>.updateItem",
        "category": "WSProxy",
        "entry": {
          "name": "updateItem",
          "isStatic": false,
          "minArgs": 2,
          "maxArgs": 3,
          "isConfirmed": true,
          "description": "Updates a single existing Marketing Cloud object via the SOAP API.",
          "params": [
            {
              "name": "objectType",
              "description": "SOAP API object type name",
              "type": "string"
            },
            {
              "name": "properties",
              "description": "Object properties to update",
              "type": "object"
            },
            {
              "name": "updateOptions",
              "description": "Optional SOAP UpdateOptions object (e.g. { SaveOptions: [...] })",
              "type": "object",
              "optional": true
            }
          ],
          "returnType": "WSProxyResult",
          "returnDescription": "Object with Status, RequestID, and a single-entry Results array. The one Results entry carries StatusCode, StatusMessage, OrdinalID, ErrorCode, and an Object wrapper.",
          "syntax": "<WSProxyInstance>.updateItem(objectType, properties[, updateOptions])",
          "example": "var api = new Script.Util.WSProxy();\nvar result = api.updateItem(\"DataExtensionObject\", {\n    CustomerKey: \"MyDE\",\n    Keys: [{ Name: \"Email\", Value: \"a@example.com\" }],\n    Properties: [{ Name: \"Status\", Value: \"inactive\" }]\n});\nif (result.Status === \"OK\") { Write(\"Updated\"); }"
        },
        "callExpr": "_wsproxy.updateItem(\"objectType\", {})",
        "isProperty": false
      },
      {
        "id": "<WSProxyInstance>.deleteItem",
        "category": "WSProxy",
        "entry": {
          "name": "deleteItem",
          "isStatic": false,
          "minArgs": 2,
          "maxArgs": 3,
          "isConfirmed": true,
          "description": "Deletes a Marketing Cloud object via the SOAP API.",
          "params": [
            {
              "name": "objectType",
              "description": "SOAP API object type name",
              "type": "string"
            },
            {
              "name": "properties",
              "description": "Object properties identifying the item to delete",
              "type": "object"
            },
            {
              "name": "deleteOptions",
              "description": "Optional SOAP DeleteOptions object (e.g. RequestType, QueuePriority).",
              "type": "object",
              "optional": true
            }
          ],
          "returnType": "WSProxyResult",
          "returnDescription": "Object with Status, RequestID, and a Results array of per-item results (StatusCode, StatusMessage, ErrorCode). The top-level object has no StatusMessage.",
          "syntax": "<WSProxyInstance>.deleteItem(objectType, properties[, deleteOptions])",
          "example": "var api = new Script.Util.WSProxy();\nvar result = api.deleteItem(\"DataExtensionObject\", {\n    CustomerKey: \"MyDE\",\n    Keys: { Key: [{ Name: \"Email\", Value: \"jane@example.com\" }] }\n});\nif (result.Status === \"OK\") { Write(\"Deleted\"); }"
        },
        "callExpr": "_wsproxy.deleteItem(\"objectType\", {})",
        "isProperty": false
      },
      {
        "id": "<WSProxyInstance>.retrieve",
        "category": "WSProxy",
        "entry": {
          "name": "retrieve",
          "isStatic": false,
          "minArgs": 2,
          "maxArgs": 5,
          "description": "Retrieves Marketing Cloud objects matching an optional filter via the SOAP API. The third parameter is a simple or complex filter; the fourth sets RetrieveOptions; the fifth sets additional request properties such as QueryAllAccounts.",
          "params": [
            {
              "name": "objectType",
              "description": "SOAP API object type name",
              "type": "string"
            },
            {
              "name": "columns",
              "description": "Array of property names to retrieve",
              "type": "array"
            },
            {
              "name": "filter",
              "description": "Simple or complex filter object",
              "type": "object",
              "optional": true
            },
            {
              "name": "retrieveOptions",
              "description": "Properties to set on the SOAP RetrieveOptions object. Set BatchSize (1..2500) here to force paged results; a value above 2500 is ignored and the default page size applies.",
              "type": "object",
              "optional": true
            },
            {
              "name": "requestProps",
              "description": "Additional request properties, e.g. QueryAllAccounts (boolean) and ContinueRequest (a RequestID string). Setting ContinueRequest to the RequestID from a prior paged retrieve fetches the next page — a retrieve-based alternative to getNextBatch.",
              "type": "object",
              "optional": true
            }
          ],
          "returnType": "WSProxyResult",
          "returnDescription": "Object with Status, HasMoreRows, RequestID, and Results array. When a result set is paged, Status is \"MoreDataAvailable\" and HasMoreRows is true; the final page returns Status \"OK\" and HasMoreRows false.",
          "syntax": "<WSProxyInstance>.retrieve(objectType, columns[, filter[, retrieveOptions[, requestProps]]])",
          "officialDocsNote": "Runtime verified on a CloudPage: retrieve(objectType, columns, null, { BatchSize: 2 }, { QueryAllAccounts: false }) against a 6-row Data Extension returned a first page with Status \"MoreDataAvailable\", HasMoreRows true, a RequestID, and exactly 2 rows — the retrieveOptions.BatchSize argument pages cleanly without throwing. Continuation via the requestProps.ContinueRequest field works: setting props.ContinueRequest to the returned RequestID and calling retrieve again returned each subsequent page (3 pages of 2 rows, 6 total), with the RequestID held constant across the sequence and HasMoreRows flipping to false (Status \"OK\") on the final page. This is a retrieve-only paging alternative to getNextBatch. BatchSize caps at 2500; larger values are ignored.",
          "example": "var api = new Script.Util.WSProxy();\nvar cols = [\"Name\", \"CustomerKey\", \"Status\"];\nvar filter = {\n    Property: \"Status\",\n    SimpleOperator: \"equals\",\n    Value: \"Active\"\n};\nvar result = api.retrieve(\"DataExtension\", cols, filter);\nif (result.Status === \"OK\") {\n    var rows = result.Results;\n    for (var i = 0; i < rows.length; i++) {\n        Write(rows[i].Name + \"<br>\");\n    }\n}",
          "isConfirmed": true
        },
        "callExpr": "_wsproxy.retrieve(\"objectType\", [])",
        "isProperty": false
      },
      {
        "id": "<WSProxyInstance>.getNextBatch",
        "category": "WSProxy",
        "entry": {
          "name": "getNextBatch",
          "isStatic": false,
          "minArgs": 2,
          "maxArgs": 2,
          "description": "Retrieves the next page of results from a previous retrieve call that returned HasMoreRows = true.",
          "params": [
            {
              "name": "objectType",
              "description": "SOAP API object type name used in the original retrieve call",
              "type": "string"
            },
            {
              "name": "requestId",
              "description": "RequestID returned by the previous retrieve response",
              "type": "string"
            }
          ],
          "returnType": "WSProxyResult",
          "returnDescription": "Object with Status, HasMoreRows, RequestID, and Results array.",
          "syntax": "<WSProxyInstance>.getNextBatch(objectType, requestId)",
          "example": "var api = new Script.Util.WSProxy();\nvar result = api.retrieve(\"DataExtension\", [\"Name\"], {});\nwhile (result.HasMoreRows) {\n    result = api.getNextBatch(\"DataExtension\", result.RequestID);\n    for (var i = 0; i < result.Results.length; i++) {\n        Write(result.Results[i].Name + \"<br>\");\n    }\n}",
          "isConfirmed": true,
          "officialDocsNote": "Runtime (CloudPage) proved the full paginated continuation: a natural retrieve of a Data Extension seeded with 2600 rows returned the first page with Status \"MoreDataAvailable\", HasMoreRows true, a RequestID, and exactly 2500 rows (the default page size); passing that objectType + RequestID to getNextBatch returned the next page with Status \"OK\", HasMoreRows false, and the remaining 100 rows, for a total of 2600 across two pages. Each Results row exposes a Properties array of { Name, Value } pairs. Pagination therefore happens naturally once a result set exceeds the 2500-row default page size. Calling getNextBatch with a completed/invalid RequestID returns Status \"Error: The RequestID sent through ContinueRequest does not exist.\" The call maps to the SOAP ContinueRequest operation."
        },
        "callExpr": "_wsproxy.getNextBatch(\"objectType\", \"requestId\")",
        "isProperty": false
      },
      {
        "id": "<WSProxyInstance>.performItem",
        "category": "WSProxy",
        "entry": {
          "name": "performItem",
          "isStatic": false,
          "minArgs": 3,
          "maxArgs": 4,
          "description": "Executes a perform action on a single Marketing Cloud object.",
          "params": [
            {
              "name": "objectType",
              "description": "SOAP API object type name.",
              "type": "string"
            },
            {
              "name": "properties",
              "description": "Object properties identifying the target item (e.g. { ObjectID: \"...\" }).",
              "type": "object"
            },
            {
              "name": "action",
              "description": "Action to perform, typically \"Start\". The verb is case-insensitive at runtime (\"start\" works identically to \"Start\").",
              "type": "string",
              "enum": [
                "Start"
              ]
            },
            {
              "name": "performOptions",
              "description": "Properties of the SOAP PerformOptions object.",
              "type": "object",
              "optional": true
            }
          ],
          "returnType": "WSProxyResult",
          "returnDescription": "Object with Status (string, \"OK\" on success), StatusMessage (string, empty on success), RequestID (string) and Results (Array with a single entry for the acted-on item). The Results[0] element carries StatusCode, StatusMessage (\"QueryDefinition perform called successfully\"), OrdinalID, ErrorCode plus an Object (the acted-on API object) and a Task sub-object (StatusCode, StatusMessage, ID, TblAsyncID, InteractionObjectID).",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime (CloudPage) confirmed the (objectType, properties, action[, performOptions]) signature and the WSProxyResult return shape: Status/StatusMessage/RequestID plus a single-entry Results array. Against a freshly-created active QueryDefinition, both \"Start\" and lowercase \"start\" returned Status \"OK\" with Results[0].StatusMessage \"QueryDefinition perform called successfully\" — the action verb is case-insensitive, so the docs' Enum('Start') is not case-sensitive as the page previously claimed. The Results[0] element exposes StatusCode, StatusMessage, OrdinalID, ErrorCode, an Object wrapper and a Task sub-object (with InteractionObjectID); the official docs do not detail this per-item structure.",
          "syntax": "<WSProxyInstance>.performItem(objectType, properties, action[, performOptions])",
          "example": "var api = new Script.Util.WSProxy();\nvar result = api.performItem(\"QueryDefinition\", { ObjectID: queryObjectId }, \"Start\");\nWrite(result.Status);"
        },
        "callExpr": "_wsproxy.performItem(\"objectType\", {}, \"action\")",
        "isProperty": false
      },
      {
        "id": "<WSProxyInstance>.performBatch",
        "category": "WSProxy",
        "entry": {
          "name": "performBatch",
          "isStatic": false,
          "minArgs": 3,
          "maxArgs": 4,
          "description": "Executes a perform action on multiple Marketing Cloud objects in a single SOAP API call.",
          "params": [
            {
              "name": "objectType",
              "description": "SOAP API object type name",
              "type": "string"
            },
            {
              "name": "propertiesArray",
              "description": "Array of property objects identifying the target items",
              "type": "array"
            },
            {
              "name": "action",
              "description": "Action to perform, typically \"Start\". The verb is case-insensitive at runtime (\"start\" works identically to \"Start\").",
              "type": "string",
              "enum": [
                "Start"
              ]
            },
            {
              "name": "performOptions",
              "description": "Properties of the SOAP PerformOptions object",
              "type": "object",
              "optional": true
            }
          ],
          "returnType": "WSProxyResult",
          "returnDescription": "Object with Status (string, \"OK\" on success), StatusMessage (string, empty on success), RequestID (string) and Results (Array with one entry per input item). Each Results element carries StatusCode, StatusMessage, OrdinalID, ErrorCode plus an Object (the acted-on API object) and a Task sub-object (StatusCode, StatusMessage, InteractionObjectID, etc.).",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime (CloudPage) confirmed the (objectType, propertiesArray, action[, performOptions]) signature and the WSProxyResult return shape: Status/StatusMessage/RequestID plus a Results array with one entry per input item. Against a freshly-created active QueryDefinition, both \"Start\" and lowercase \"start\" returned Status \"OK\" with Results[0].StatusMessage \"QueryDefinition perform called successfully\" — the action verb is case-insensitive, so the docs' Enum('Start') is not case-sensitive as previously assumed. Each Results element exposes StatusCode, StatusMessage, OrdinalID, ErrorCode, an Object wrapper and a Task sub-object (with InteractionObjectID); the official docs do not detail this per-item structure.",
          "syntax": "<WSProxyInstance>.performBatch(objectType, propertiesArray, action[, performOptions])",
          "example": "var api = new Script.Util.WSProxy();\nvar items = [{ ObjectID: id1 }, { ObjectID: id2 }];\nvar result = api.performBatch(\"QueryDefinition\", items, \"Start\");\nWrite(result.Status);"
        },
        "callExpr": "_wsproxy.performBatch(\"objectType\", [], \"action\")",
        "isProperty": false
      },
      {
        "id": "<WSProxyInstance>.describe",
        "category": "WSProxy",
        "entry": {
          "name": "describe",
          "isStatic": false,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns structural metadata for one or more SOAP API object types, one ObjectDefinition per requested type.",
          "params": [
            {
              "name": "objectType",
              "description": "Object type name, or an array of type names, to describe",
              "type": "string|string[]"
            }
          ],
          "returnType": "WSProxyResult",
          "returnDescription": "Object with RequestID (string) and Results (Array). Each Results element is itself the ObjectDefinition — properties like ObjectType, Name, IsCreatable and the Properties field-definition array sit directly on Results[i], NOT under a nested Results[i].ObjectDefinition.",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs place field details at Results[0].ObjectDefinition.Properties, but at runtime each Results element is directly the ObjectDefinition (Results[0].Properties); there is no nested ObjectDefinition wrapper, and the return object exposes RequestID (not Status).",
          "syntax": "<WSProxyInstance>.describe(objectType)",
          "example": "var api = new Script.Util.WSProxy();\nvar result = api.describe(\"DataExtension\");\nWrite(Stringify(result.Results[0].Properties));"
        },
        "callExpr": "_wsproxy.describe([])",
        "isProperty": false
      },
      {
        "id": "<WSProxyInstance>.execute",
        "category": "WSProxy",
        "entry": {
          "name": "execute",
          "isStatic": false,
          "minArgs": 2,
          "maxArgs": 2,
          "description": "Runs a SOAP Execute request (e.g. LogUnsubEvent), passing an array of Name/Value parameter objects and the request name.",
          "params": [
            {
              "name": "parameters",
              "description": "Array of Name/Value parameter objects to include in the Execute call.",
              "type": "object[]"
            },
            {
              "name": "requestName",
              "description": "Name of the Execute request to run.",
              "type": "string",
              "enum": [
                "LogUnsubEvent"
              ]
            }
          ],
          "returnType": "WSProxyResult",
          "returnDescription": "Object with Status (string), RequestID (string), and a Results array of per-item ExecuteResponse objects (StatusCode, StatusMessage, OrdinalID, Results, ErrorCode).",
          "syntax": "<WSProxyInstance>.execute(parameters, requestName)",
          "example": "var api = new Script.Util.WSProxy();\nvar props = [\n    { Name: \"SubscriberKey\", Value: \"sample@sample.com\" },\n    { Name: \"EmailAddress\", Value: \"sample@sample.com\" },\n    { Name: \"JobID\", Value: 0 },\n    { Name: \"ListID\", Value: 0 },\n    { Name: \"BatchID\", Value: 0 }\n];\nvar result = api.execute(props, \"LogUnsubEvent\");\nWrite(result.Status);",
          "isConfirmed": true
        },
        "callExpr": "_wsproxy.execute([], \"requestName\")",
        "isProperty": false
      },
      {
        "id": "<WSProxyInstance>.setClientId",
        "category": "WSProxy",
        "entry": {
          "name": "setClientId",
          "isStatic": false,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Sets a ClientId (impersonation) context on the WSProxy instance so subsequent operations run against another business unit. Pass an object with the MID under the \"ID\" key (and optionally \"UserID\"); the calling context must have access to the target BU.",
          "params": [
            {
              "name": "options",
              "description": "Object with the target ClientId properties; at least the \"ID\" key (target BU MID) is expected, \"UserID\" is optional.",
              "type": "object"
            }
          ],
          "returnType": "null",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs document setClientId() as returning void, but at runtime it returns a genuine null (=== null), not undefined.",
          "syntax": "<WSProxyInstance>.setClientId(options)",
          "example": "var api = new Script.Util.WSProxy();\napi.setClientId({ ID: 12345 }); // target child BU by MID\nvar result = api.retrieve(\"DataExtension\", [\"Name\"], {});"
        },
        "callExpr": "_wsproxy.setClientId({})",
        "isProperty": false
      },
      {
        "id": "<WSProxyInstance>.resetClientIds",
        "category": "WSProxy",
        "entry": {
          "name": "resetClientIds",
          "isStatic": false,
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Clears all client IDs set on the WSProxy instance, reverting to the default execution context credentials.",
          "params": [],
          "returnType": "null",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs document resetClientIds() as returning void, but at runtime it returns a genuine null (=== null), not undefined.",
          "syntax": "<WSProxyInstance>.resetClientIds()",
          "example": "var api = new Script.Util.WSProxy();\napi.setClientId({ ID: 12345 });\n// ... perform cross-BU operations ...\napi.resetClientIds(); // revert to default context\nvar result = api.retrieve(\"DataExtension\", [\"Name\"], {});"
        },
        "callExpr": "_wsproxy.resetClientIds()",
        "isProperty": false
      },
      {
        "id": "<WSProxyInstance>.createBatch",
        "category": "WSProxy",
        "entry": {
          "name": "createBatch",
          "isStatic": false,
          "minArgs": 2,
          "maxArgs": 3,
          "isConfirmed": true,
          "description": "Creates multiple Marketing Cloud objects in a single SOAP API call.",
          "params": [
            {
              "name": "objectType",
              "description": "SOAP API object type name",
              "type": "string"
            },
            {
              "name": "propertiesArray",
              "description": "Array of property objects to create",
              "type": "array"
            },
            {
              "name": "createOptions",
              "description": "Optional SOAP CreateOptions object (e.g. RequestType, QueuePriority).",
              "type": "object",
              "optional": true
            }
          ],
          "returnType": "WSProxyResult",
          "returnDescription": "Object with Status (string, e.g. \"OK\"), RequestID (string GUID), and a Results array holding one entry per input object (each with StatusCode, StatusMessage, NewObjectID, Object, etc.).",
          "syntax": "<WSProxyInstance>.createBatch(objectType, propertiesArray[, createOptions])",
          "example": "var api = new Script.Util.WSProxy();\nvar items = [\n    { CustomerKey: \"MyDE\", Properties: { Property: [{ Name: \"Email\", Value: \"a@example.com\" }] } },\n    { CustomerKey: \"MyDE\", Properties: { Property: [{ Name: \"Email\", Value: \"b@example.com\" }] } }\n];\nvar result = api.createBatch(\"DataExtensionObject\", items);\nWrite(result.Status);"
        },
        "callExpr": "_wsproxy.createBatch(\"objectType\", [])",
        "isProperty": false
      },
      {
        "id": "<WSProxyInstance>.updateBatch",
        "category": "WSProxy",
        "entry": {
          "name": "updateBatch",
          "isStatic": false,
          "minArgs": 2,
          "maxArgs": 3,
          "isConfirmed": true,
          "description": "Updates multiple Marketing Cloud objects in a single SOAP API call.",
          "params": [
            {
              "name": "objectType",
              "description": "SOAP API object type name",
              "type": "string"
            },
            {
              "name": "propertiesArray",
              "description": "Array of property objects to update",
              "type": "array"
            },
            {
              "name": "updateOptions",
              "description": "Optional SOAP UpdateOptions object (e.g. { SaveOptions: [...] })",
              "type": "object",
              "optional": true
            }
          ],
          "returnType": "WSProxyResult",
          "returnDescription": "Object with Status, RequestID, and a Results array (one entry per input item). Each Results entry carries StatusCode, StatusMessage, OrdinalID, ErrorCode, and an Object wrapper.",
          "syntax": "<WSProxyInstance>.updateBatch(objectType, propertiesArray[, updateOptions])",
          "example": "var api = new Script.Util.WSProxy();\nvar items = [\n    { CustomerKey: \"MyDE\", Keys: [{ Name: \"Email\", Value: \"a@example.com\" }], Properties: [{ Name: \"Status\", Value: \"active\" }] }\n];\nvar result = api.updateBatch(\"DataExtensionObject\", items);\nWrite(result.Status);"
        },
        "callExpr": "_wsproxy.updateBatch(\"objectType\", [])",
        "isProperty": false
      },
      {
        "id": "<WSProxyInstance>.deleteBatch",
        "category": "WSProxy",
        "entry": {
          "name": "deleteBatch",
          "isStatic": false,
          "minArgs": 2,
          "maxArgs": 3,
          "isConfirmed": true,
          "description": "Deletes multiple Marketing Cloud objects in a single SOAP API call.",
          "params": [
            {
              "name": "objectType",
              "description": "SOAP API object type name",
              "type": "string"
            },
            {
              "name": "propertiesArray",
              "description": "Array of property objects identifying each object to delete",
              "type": "array"
            },
            {
              "name": "deleteOptions",
              "description": "Optional SOAP DeleteOptions object (e.g. RequestType, QueuePriority).",
              "type": "object",
              "optional": true
            }
          ],
          "returnType": "WSProxyResult",
          "returnDescription": "Object with Status (string, e.g. \"OK\"), RequestID (string GUID), and a Results array holding one entry per input object (each with StatusCode, StatusMessage, ErrorCode, Object, etc.). There is no top-level StatusMessage.",
          "syntax": "<WSProxyInstance>.deleteBatch(objectType, propertiesArray[, deleteOptions])",
          "example": "var api = new Script.Util.WSProxy();\nvar items = [\n    { CustomerKey: \"MyDE\", Keys: { Key: [{ Name: \"Email\", Value: \"old@example.com\" }] } }\n];\nvar result = api.deleteBatch(\"DataExtensionObject\", items);\nWrite(result.Status);"
        },
        "callExpr": "_wsproxy.deleteBatch(\"objectType\", [])",
        "isProperty": false
      }
    ],
    "Script.Util.HttpRequest": [
      {
        "id": "<HttpRequestInstance>.send",
        "category": "Script.Util.HttpRequest",
        "entry": {
          "name": "send",
          "minArgs": 0,
          "maxArgs": 0,
          "isConfirmed": true,
          "description": "Executes the HTTP request and returns a Script.Util.HttpResponse object. The response object has a `statusCode` property and a `content` property. Use String(resp.content) to convert the CLR content to a JavaScript string before parsing with Platform.Function.ParseJSON().",
          "params": [],
          "returnType": "HttpResponseInstance",
          "syntax": "<HttpRequestInstance>.send()",
          "example": "var req = new Script.Util.HttpRequest(\"https://api.example.com/data\");\nreq.method = \"GET\";\nreq.setHeader(\"Authorization\", \"Bearer \" + accessToken);\nvar resp = req.send();\nif (resp.statusCode == 200) {\n    var result = Platform.Function.ParseJSON(String(resp.content));\n}"
        },
        "callExpr": "_httpReq.send()",
        "isProperty": false
      },
      {
        "id": "<HttpRequestInstance>.setHeader",
        "category": "Script.Util.HttpRequest",
        "entry": {
          "name": "setHeader",
          "minArgs": 2,
          "maxArgs": 2,
          "isConfirmed": true,
          "description": "Sets a request header on the Script.Util HTTP request. Note: setting a custom header disables content caching for Script.Util.HttpGet.",
          "params": [
            {
              "name": "name",
              "description": "Header name (e.g. \"Authorization\", \"Content-Type\")",
              "type": "string"
            },
            {
              "name": "value",
              "description": "Header value",
              "type": "string"
            }
          ],
          "returnType": "void",
          "syntax": "<HttpRequestInstance>.setHeader(name, value)",
          "example": "var req = new Script.Util.HttpRequest(\"https://api.example.com/data\");\nreq.setHeader(\"Authorization\", \"Bearer \" + accessToken);\nreq.setHeader(\"Content-Type\", \"application/json\");\nvar resp = req.send();"
        },
        "callExpr": "_httpReq.setHeader(\"name\", \"value\")",
        "isProperty": false
      },
      {
        "id": "<HttpRequestInstance>.clearHeaders",
        "category": "Script.Util.HttpRequest",
        "entry": {
          "name": "clearHeaders",
          "minArgs": 0,
          "maxArgs": 0,
          "isConfirmed": true,
          "description": "Removes all custom headers previously set on the request.",
          "params": [],
          "returnType": "void",
          "syntax": "<HttpRequestInstance>.clearHeaders()",
          "example": "var req = new Script.Util.HttpRequest(\"https://api.example.com/data\");\nreq.setHeader(\"Authorization\", \"Bearer \" + accessToken);\nreq.clearHeaders(); // removes Authorization and all other custom headers\nvar resp = req.send();"
        },
        "callExpr": "_httpReq.clearHeaders()",
        "isProperty": false
      },
      {
        "id": "<HttpRequestInstance>.removeHeader",
        "category": "Script.Util.HttpRequest",
        "entry": {
          "name": "removeHeader",
          "minArgs": 1,
          "maxArgs": 1,
          "isConfirmed": true,
          "description": "Removes a specific header from the request by name.",
          "params": [
            {
              "name": "name",
              "description": "Name of the header to remove",
              "type": "string"
            }
          ],
          "returnType": "void",
          "syntax": "<HttpRequestInstance>.removeHeader(name)",
          "example": "var req = new Script.Util.HttpRequest(\"https://api.example.com/data\");\nreq.setHeader(\"Authorization\", \"Bearer \" + accessToken);\nreq.setHeader(\"X-Custom\", \"value\");\nreq.removeHeader(\"X-Custom\");\nvar resp = req.send();"
        },
        "callExpr": "_httpReq.removeHeader(\"name\")",
        "isProperty": false
      }
    ],
    "Core Library": [
      {
        "id": "DataExtension.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Initializes a DataExtension instance bound to the specified data extension. Runtime accepts either the External Key or the Name of the data extension (both resolve to the same DE). Binding is lazy — Init never throws for a missing DE; the error surfaces on the first Rows/Fields operation. Required before invoking any `Fields` or `Rows` sub-namespace method on the returned instance. Note: Core Library DataExtension methods do not support enterprise-level data extensions.",
          "params": [
            {
              "name": "key",
              "description": "External Key or Name of the data extension (the runtime resolves either).",
              "type": "string"
            }
          ],
          "returnType": "DataExtensionInstance",
          "returnDescription": "An initialized DataExtension (exposing `Rows`, `Fields`, `Update`, `Remove`) bound to the specified data extension.",
          "syntax": "DataExtension.Init(key)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar birthdayDE = DataExtension.Init(\"birthdayDE\");"
        },
        "callExpr": "DataExtension.Init(\"key\")",
        "isProperty": false
      },
      {
        "id": "DataExtension.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Creates a new data extension from the supplied properties and returns an initialized DataExtension instance (the same shape as `DataExtension.Init`, exposing `Rows`, `Fields`, `Update`, `Remove`). Note: unlike most static `Add` methods, this returns a `DataExtensionInstance`, not `\"OK\"`.",
          "params": [
            {
              "name": "properties",
              "description": "JSON object describing the new data extension (CustomerKey, Name, Fields[], optional SendableInfo).",
              "type": "object"
            }
          ],
          "returnType": "DataExtensionInstance",
          "returnDescription": "An initialized DataExtension bound to the newly-created data extension.",
          "syntax": "DataExtension.Add(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar deObj = {\n    CustomerKey: \"SendableDE\",\n    Name: \"Sendable Data Extension\",\n    Fields: [\n        { Name: \"SubKey\", FieldType: \"Text\", IsPrimaryKey: true, MaxLength: 50, IsRequired: true },\n        { Name: \"SecondField\", FieldType: \"Text\", MaxLength: 50 }\n    ],\n    SendableInfo: {\n        Field: { Name: \"SubKey\", FieldType: \"Text\" },\n        RelatesOn: \"Subscriber Key\"\n    }\n};\nvar de = DataExtension.Add(deObj);"
        },
        "callExpr": "DataExtension.Add({})",
        "isProperty": false
      },
      {
        "id": "DataExtension.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official Salesforce docs document `filter` as required, but at runtime it is optional: calling `DataExtension.Retrieve()` with no arguments does not throw and returns the full list of data extensions. A filter that matches nothing returns a real empty array (`[object Array]`, `length: 0`).",
          "minArgs": 1,
          "maxArgs": 2,
          "description": "Returns an array of data extensions matching the specified filter. Pass `queryAllAccounts: true` to search all accounts accessible to the authenticated user. The `filter` is documented as required but is optional at runtime — omitting it returns all data extensions.",
          "params": [
            {
              "name": "filter",
              "description": "PascalCase WSProxy-style filter object: `{Property, SimpleOperator, Value}`. Documented as required, but optional at runtime (omitting it returns all data extensions).",
              "type": "object"
            },
            {
              "name": "queryAllAccounts",
              "description": "When `true`, search across all accounts accessible to the authenticated user. Defaults to `false`.",
              "type": "boolean",
              "optional": true,
              "default": false
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of data extensions matching the filter. Limit data extension external keys to 36 characters for downstream compatibility.",
          "syntax": "DataExtension.Retrieve(filter, [queryAllAccounts])",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar results = DataExtension.Retrieve({ Property: \"CustomerKey\", SimpleOperator: \"equals\", Value: \"myDEKey\" });"
        },
        "callExpr": "DataExtension.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "DataExtension.Fields.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": false,
          "requiresCoreLoad": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Adds a field to the previously initialized data extension. `properties.Name` is required; the rest (`CustomerKey`, `FieldType`, `MaxLength`, `IsRequired`, `IsPrimaryKey`, `Ordinal`, `Scale`, `DefaultValue`) are optional. `FieldType` accepts: 'Boolean', 'Date', 'Decimal', 'EmailAddress', 'Locale', 'Number', 'Phone', 'Text'.",
          "params": [
            {
              "name": "properties",
              "description": "Object describing the new field.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success. Runtime returns the string \"Error\" (rather than throwing) when the field cannot be added or arguments are missing.",
          "syntax": "<DataExtensionInstance>.Fields.Add(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar de = DataExtension.Init(\"SSJSTest\");\nvar newField = { Name: \"NewFieldV2\", CustomerKey: \"CustomerKey\", FieldType: \"Number\", IsRequired: true, DefaultValue: \"100\" };\nvar status = de.Fields.Add(newField);",
          "isConfirmed": true
        },
        "callExpr": "_de.Fields.Add({})",
        "isProperty": false
      },
      {
        "id": "DataExtension.Fields.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": false,
          "requiresCoreLoad": true,
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Returns an array of field definitions for the previously initialized data extension.",
          "params": [],
          "returnType": "object[]",
          "returnDescription": "List of field-definition objects. Each object exposes `Name` (string), `ObjectID` (string), `FieldType` (string), `IsPrimaryKey` (boolean), `MaxLength` (number), `Ordinal` (number), and `DefaultValue` (string).",
          "syntax": "<DataExtensionInstance>.Fields.Retrieve()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar birthdayDE = DataExtension.Init(\"birthdayDE\");\nvar fields = birthdayDE.Fields.Retrieve();",
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs example response lists only Name, FieldType, IsPrimaryKey, MaxLength, Ordinal, and DefaultValue. At runtime each field object also includes an `ObjectID` (string) property."
        },
        "callExpr": "_de.Fields.Retrieve()",
        "isProperty": false
      },
      {
        "id": "DataExtension.Fields.UpdateSendableField",
        "category": "Core Library",
        "entry": {
          "name": "UpdateSendableField",
          "isStatic": false,
          "requiresCoreLoad": true,
          "minArgs": 2,
          "maxArgs": 2,
          "description": "Updates which data extension field is used to relate the data extension to the All Subscribers list during sending. Pass the name of the data extension field, and which subscriber attribute it should map to.",
          "params": [
            {
              "name": "deFieldName",
              "description": "Name of the data extension field that should make the connection to the subscriber list.",
              "type": "string"
            },
            {
              "name": "subscriberField",
              "description": "Subscriber attribute to map the data extension field to.",
              "type": "string",
              "enum": [
                "Subscriber Key",
                "Subscriber Id"
              ]
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success (confirmed at runtime; the doc has no `@returns`). Returns the string \"Error\" instead of throwing on failure.",
          "syntax": "<DataExtensionInstance>.Fields.UpdateSendableField(deFieldName, subscriberField)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar updateDE = DataExtension.Init(\"sendableDataExtension\");\nvar status = updateDE.Fields.UpdateSendableField(\"DifferentSubKey\", \"Subscriber Key\");",
          "isConfirmed": true
        },
        "callExpr": "_de.Fields.UpdateSendableField(\"deFieldName\", \"subscriberField\")",
        "isProperty": false
      },
      {
        "id": "DataExtension.Rows.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified on a CloudPage: returns a number (the count of rows added), not the string \"OK\". Also accepts a single row object in addition to an array of objects.",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Adds one or more rows to the previously initialized data extension. Accepts either an array of row objects or a single row object.",
          "params": [
            {
              "name": "rowData",
              "description": "Array of row objects (or a single row object). Each object's keys must match data extension field names.",
              "type": "array"
            }
          ],
          "returnType": "number",
          "returnDescription": "The number of rows that were added.",
          "syntax": "<DataExtensionInstance>.Rows.Add(rowData)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar arrContacts = [\n    { Email: \"jdoe@example.com\", FirstName: \"John\", LastName: \"Doe\" },\n    { Email: \"aruiz@example.com\", FirstName: \"Angel\", LastName: \"Ruiz\" }\n];\nvar birthdayDE = DataExtension.Init(\"birthdayDE\");\nbirthdayDE.Rows.Add(arrContacts);"
        },
        "callExpr": "_de.Rows.Add([])",
        "isProperty": false
      },
      {
        "id": "DataExtension.Rows.Lookup",
        "category": "Core Library",
        "entry": {
          "name": "Lookup",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified on a CloudPage: returns typed values (Number columns come back as number, Boolean as boolean, Date as a real Date object, unlike Retrieve which returns every field as a string). On no match, returns `null` (not an empty array). The result is a host array where `instanceof Array` is `false`, but `.length` and index access work.",
          "minArgs": 2,
          "maxArgs": 4,
          "description": "Returns rows where the specified columns equal the specified values (AND-joined). Optionally limits results and orders by a field. When initializing a data extension for `Lookup()` from an email message, you must use the data extension Name; on landing pages, either Name or external key works — make them identical to be safe.",
          "params": [
            {
              "name": "searchFieldNames",
              "description": "Array of column names to match against.",
              "type": "array"
            },
            {
              "name": "searchValues",
              "description": "Array of values to match (one per column, in order).",
              "type": "array"
            },
            {
              "name": "limit",
              "description": "Maximum number of rows to return.",
              "type": "number",
              "optional": true
            },
            {
              "name": "orderByFieldName",
              "description": "Field to order results by.",
              "type": "string",
              "optional": true
            }
          ],
          "returnType": "object[]",
          "returnDescription": "Rows matching the lookup criteria.",
          "syntax": "<DataExtensionInstance>.Rows.Lookup(searchFieldNames, searchValues, [limit], [orderByFieldName])",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar testDE = DataExtension.Init(\"testDE\");\nvar data = testDE.Rows.Lookup([\"Age\"], [25], 2, \"LastName\");"
        },
        "callExpr": "_de.Rows.Lookup([], [])",
        "isProperty": false
      },
      {
        "id": "DataExtension.Rows.Remove",
        "category": "Core Library",
        "entry": {
          "name": "Remove",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 2,
          "maxArgs": 2,
          "description": "Deletes rows from the previously initialized data extension where the specified columns equal the specified values (AND-joined). For large deletion requests, batch the work — this method times out on long-running deletes.",
          "params": [
            {
              "name": "columnNames",
              "description": "Array of column names to match against.",
              "type": "array"
            },
            {
              "name": "columnValues",
              "description": "Array of values to match (one per column, in order).",
              "type": "array"
            }
          ],
          "returnType": "number",
          "returnDescription": "The number of rows that were modified (deleted).",
          "syntax": "<DataExtensionInstance>.Rows.Remove(columnNames, columnValues)",
          "example": "Platform.Load(\"Core\", \"1.1.5\");\nvar memberDE = DataExtension.Init(\"MembershipRewards\");\nvar result = memberDE.Rows.Remove([\"Area\"], [\"Kensington\"]);"
        },
        "callExpr": "_de.Rows.Remove([], [])",
        "isProperty": false
      },
      {
        "id": "DataExtension.Rows.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified on a CloudPage: calling `Retrieve()` without a filter DOES work on CloudPages and returns all rows — the widely-repeated \"returns empty on CloudPages\" bug could not be reproduced. All field values are returned as strings (even Number/Boolean/Date columns), unlike Lookup which returns typed values. On no match, returns an empty host array (`.length === 0`), not `null`. The result is a host array where `instanceof Array` is `false`, but `.length` and index access work.",
          "minArgs": 0,
          "maxArgs": 1,
          "description": "Retrieves up to 2500 rows from the previously initialized data extension. When called without a filter, returns all rows (subject to the 2500-row cap). Cannot be used in the context of an email message or email preview.",
          "params": [
            {
              "name": "filter",
              "description": "WSProxy-style filter object — simple `{Property, SimpleOperator, Value}` or compound with `LeftOperand`/`LogicalOperator`/`RightOperand`. Optional per the example, despite the doc table marking `Required: Yes`.",
              "type": "object",
              "optional": true
            }
          ],
          "returnType": "object[]",
          "returnDescription": "Rows from the data extension matching the filter (or all rows when no filter is supplied). Field values are strings.",
          "syntax": "<DataExtensionInstance>.Rows.Retrieve([filter])",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar birthdayDE = DataExtension.Init(\"birthdayDE\");\nvar data = birthdayDE.Rows.Retrieve();\nvar filter = { Property: \"Age\", SimpleOperator: \"greaterThan\", Value: 20 };\nvar moredata = birthdayDE.Rows.Retrieve(filter);"
        },
        "callExpr": "_de.Rows.Retrieve()",
        "isProperty": false
      },
      {
        "id": "DataExtension.Rows.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified on a CloudPage: returns a number (the count of rows updated), not the string \"OK\". When no row matches the WHERE clause, it returns `0` and does NOT throw.",
          "minArgs": 3,
          "maxArgs": 3,
          "description": "Updates the columns of rows where `whereFieldNames` equal `whereValues` (AND-joined). Returns 0 (does not throw) when no row matches.",
          "params": [
            {
              "name": "rowData",
              "description": "Object whose keys are columns to update and values are the new values.",
              "type": "object"
            },
            {
              "name": "whereFieldNames",
              "description": "Array of column names to match against.",
              "type": "array"
            },
            {
              "name": "whereValues",
              "description": "Array of values to match (one per column, in order).",
              "type": "array"
            }
          ],
          "returnType": "number",
          "returnDescription": "The number of rows that were updated (0 when no row matches).",
          "syntax": "<DataExtensionInstance>.Rows.Update(rowData, whereFieldNames, whereValues)",
          "example": "Platform.Load(\"Core\", \"1\");\nvar dataExt = DataExtension.Init(\"NTO Customer List\");\nvar fieldsToUpdate = { StateProvince: \"QC\", PreferredActivity: \"Sailing\" };\nvar result = dataExt.Rows.Update(fieldsToUpdate, [\"MemberId\", \"Country\"], [9868600, \"CA\"]);"
        },
        "callExpr": "_de.Rows.Update({}, [], [])",
        "isProperty": false
      },
      {
        "id": "Account.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "requiresCoreLoad": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Initializes an Account instance bound to the specified external key. Required before invoking any other Account method on the returned instance.",
          "params": [
            {
              "name": "key",
              "description": "External key of the account.",
              "type": "string"
            }
          ],
          "returnType": "AccountInstance",
          "returnDescription": "An initialized Account bound to the specified external key.",
          "syntax": "Account.Init(key)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myAccount = Account.Init(\"MyCustomerKey\");",
          "isConfirmed": true
        },
        "callExpr": "Account.Init(\"key\")",
        "isProperty": false
      },
      {
        "id": "Account.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "requiresCoreLoad": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Retrieves accounts based on the specified filter criteria.",
          "params": [
            {
              "name": "filter",
              "description": "Criteria used to search for the account. Use a filter expression or a JSON object containing filter and additional search parameters.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "Array of account rows matching the filter; an empty array (which is falsy in this engine) when nothing matches.",
          "syntax": "Account.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar getAcct = Account.Retrieve({Property:\"CustomerKey\",SimpleOperator:\"equals\",Value:\"MyAccount\"});",
          "isConfirmed": true
        },
        "callExpr": "Account.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "Account.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "requiresCoreLoad": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Updates the account with the supplied attributes. If `properties` includes `TimeZoneID`, the call uses that value to update the account time zone.",
          "params": [
            {
              "name": "properties",
              "description": "Account attributes to change.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK",
            "Error"
          ],
          "returnDescription": "Returns the string \"OK\" on success. On failure it returns the string \"Error\" (proven at runtime) rather than throwing.",
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs state the call throws on failure, but at runtime it returns the plain string \"Error\" instead of throwing.",
          "syntax": "<AccountInstance>.Update(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myAccount = Account.Init(\"MyCustomerKey\");\nvar status = myAccount.Update({ \"FromName\" : \"Demo From Name\" });"
        },
        "callExpr": "_account.Update({})",
        "isProperty": false
      },
      {
        "id": "Account.Tracking.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "requiresCoreLoad": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns an array of tracking data related to the accounts specified by the passed filter argument.",
          "params": [
            {
              "name": "filter",
              "description": "Criteria used to search for the account.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "Array of tracking rows; each row exposes Sends, Bounces, Clicks, Opens and Unsubscribes counters (each an object such as {\"Total\":N}).",
          "syntax": "Account.Tracking.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar acctTracking = Account.Tracking.Retrieve({Property:\"CustomerKey\",SimpleOperator:\"equals\",Value:\"MyAccount\"});",
          "isConfirmed": true
        },
        "callExpr": "Account.Tracking.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "AccountUser.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "requiresCoreLoad": true,
          "minArgs": 2,
          "maxArgs": 2,
          "description": "Initializes an AccountUser instance bound to the specified external key and client ID (MID). Required before invoking any other AccountUser method on the returned instance.",
          "params": [
            {
              "name": "targetUserKey",
              "description": "External key of the user.",
              "type": "string"
            },
            {
              "name": "myClientID",
              "description": "MID of the business unit.",
              "type": "number"
            }
          ],
          "returnType": "AccountUserInstance",
          "returnDescription": "An initialized AccountUser bound to the specified external key and client ID.",
          "isConfirmed": true,
          "syntax": "AccountUser.Init(targetUserKey, myClientID)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar acctUser = AccountUser.Init(\"myAccountUser\", 123456789);"
        },
        "callExpr": "AccountUser.Init(\"targetUserKey\", 1)",
        "isProperty": false
      },
      {
        "id": "AccountUser.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "requiresCoreLoad": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Creates a new account user from the supplied properties object.",
          "params": [
            {
              "name": "properties",
              "description": "JSON object describing the new account user (Name, UserID, Password, Email, ClientID, DefaultBusinessUnitKey, AssociatedBusinessUnits, ...).",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "AccountUser.Add(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar newUser = {\n    \"Name\": \"Andrea Cruz\",\n    \"UserID\": \"acruz\",\n    \"Password\": \"insert new password here\",\n    \"Email\": \"acruz@example.com\",\n    \"ClientID\": 123456789,\n    \"DefaultBusinessUnitKey\": \"childBUKey\",\n    \"AssociatedBusinessUnits\": [\"childBUKey\", \"grandchildBUKey\"]\n};\nvar status = AccountUser.Add(newUser);"
        },
        "callExpr": "AccountUser.Add({})",
        "isProperty": false
      },
      {
        "id": "AccountUser.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "requiresCoreLoad": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Retrieves account users based on the specified filter criteria.",
          "params": [
            {
              "name": "filter",
              "description": "Criteria used to search for the account user.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of results matching the filter.",
          "isConfirmed": true,
          "syntax": "AccountUser.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar accountUser = AccountUser.Retrieve({Property:\"CustomerKey\",SimpleOperator:\"equals\",Value:\"MyAccount\"});"
        },
        "callExpr": "AccountUser.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "AccountUser.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "requiresCoreLoad": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Updates the account user with the supplied attributes.",
          "params": [
            {
              "name": "properties",
              "description": "Attributes of the account user to change.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<AccountUserInstance>.Update(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar acctUser = AccountUser.Init(\"myAccountUser\", 123456789);\nvar status = acctUser.Update({ \"Password\": \"XXXXX\" });"
        },
        "callExpr": "_accountUser.Update({})",
        "isProperty": false
      },
      {
        "id": "AccountUser.Activate",
        "category": "Core Library",
        "entry": {
          "name": "Activate",
          "isStatic": false,
          "requiresCoreLoad": true,
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Activates the account user.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<AccountUserInstance>.Activate()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar acctUser = AccountUser.Init(\"myAccountUser\", 123456789);\nvar status = acctUser.Activate();"
        },
        "callExpr": "_accountUser.Activate()",
        "isProperty": false
      },
      {
        "id": "AccountUser.Deactivate",
        "category": "Core Library",
        "entry": {
          "name": "Deactivate",
          "isStatic": false,
          "requiresCoreLoad": true,
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Deactivates the account user. Note: account users cannot be deleted via server-side JavaScript — deactivation is the only \"removal\" path.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<AccountUserInstance>.Deactivate()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar acctUser = AccountUser.Init(\"myAccountUser\", 123456789);\nvar status = acctUser.Deactivate();"
        },
        "callExpr": "_accountUser.Deactivate()",
        "isProperty": false
      },
      {
        "id": "Portfolio.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "deprecated": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "officialDocsNote": "DEPRECATED — the Portfolio is a legacy Classic Content / Classic Email Studio feature. Salesforce retired classic content creation and editing (the January 2021 release removed the ability to edit/copy/move classic emails and templates, with Classic Content reaching end of life on 24 Apr 2023); Content Builder is now the single cross-channel content repository and SOAP-era Portfolio integrations only operate on the old Classic tools. Prefer Content Builder assets (Asset REST endpoints) for new work.",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Initializes a Portfolio instance bound to the specified external key. Required before invoking any other Portfolio method on the returned instance. DEPRECATED — Portfolio is a legacy Classic Content / Classic Email Studio feature superseded by Content Builder.",
          "params": [
            {
              "name": "key",
              "description": "External key of the portfolio.",
              "type": "string"
            }
          ],
          "returnType": "PortfolioInstance",
          "returnDescription": "An initialized Portfolio bound to the specified external key.",
          "syntax": "Portfolio.Init(key)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar portObj = Portfolio.Init(\"myPortfolioCK\");"
        },
        "callExpr": "Portfolio.Init(\"key\")",
        "isProperty": false
      },
      {
        "id": "Portfolio.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "deprecated": true,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "no-test-data",
          "differsFromOfficialDocs": true,
          "officialDocsNote": "DEPRECATED — the Portfolio is a legacy Classic Content / Classic Email Studio feature superseded by Content Builder (Classic Content reached end of life on 24 Apr 2023); prefer Content Builder Asset REST endpoints for new work. The official docs state Add returns \"OK\" on success or throws on failure. Runtime-verification of the success path was BLOCKED: no portfolio item could be created on the test BU (no valid category/file to reference) — every Add attempt (including a full DisplayName/CustomerKey/FileName/FileLocation payload) returned the plain string \"Error\" and did NOT throw. Treat any non-\"OK\" return as failure.",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Creates a new portfolio (file) object from the supplied properties. DEPRECATED — Portfolio is a legacy Classic Content / Classic Email Studio feature superseded by Content Builder.",
          "params": [
            {
              "name": "properties",
              "description": "JSON object describing the new portfolio item (DisplayName, CustomerKey, CategoryID, FileName, FileLocation).",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK",
            "Error"
          ],
          "returnDescription": "Returns \"OK\" on success; returns the string \"Error\" (not a throw) on failure.",
          "syntax": "Portfolio.Add(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar newPortfolio = {\n    DisplayName: \"SSJS Portfolio Object\",\n    CustomerKey: \"myPortfolioCK\",\n    CategoryID: 12345,\n    FileName: \"logo.png\",\n    FileLocation: \"https://www.example.com/Portals/0/images/global/logo_main.png\"\n};\nvar status = Portfolio.Add(newPortfolio);"
        },
        "callExpr": "Portfolio.Add({})",
        "isProperty": false
      },
      {
        "id": "Portfolio.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "deprecated": true,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "no-test-data",
          "differsFromOfficialDocs": true,
          "officialDocsNote": "DEPRECATED — the Portfolio is a legacy Classic Content / Classic Email Studio feature superseded by Content Builder (Classic Content reached end of life on 24 Apr 2023); prefer Content Builder Asset REST endpoints for new work. The official docs type the return as an array of portfolio objects. Runtime-verification was BLOCKED: no portfolio item could be created on the test BU (no valid category/file to reference; see Add), so a populated array could not be produced. Against an empty account the call returned an `object` with no `.length` property (not a JS array), so the documented `object[]` shape could not be confirmed.",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns an array of portfolio objects matching the specified filter. DEPRECATED — Portfolio is a legacy Classic Content / Classic Email Studio feature superseded by Content Builder.",
          "params": [
            {
              "name": "filter",
              "description": "Criteria used to search for portfolio objects. PascalCase WSProxy-style filter object: `{Property, SimpleOperator, Value}`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of portfolio objects matching the filter.",
          "syntax": "Portfolio.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar portObjArr = Portfolio.Retrieve({ Property: \"CustomerKey\", SimpleOperator: \"equals\", Value: \"PortfolioObjectKey\" });"
        },
        "callExpr": "Portfolio.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "Portfolio.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "deprecated": true,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "no-test-data",
          "differsFromOfficialDocs": true,
          "officialDocsNote": "DEPRECATED — the Portfolio is a legacy Classic Content / Classic Email Studio feature superseded by Content Builder (Classic Content reached end of life on 24 Apr 2023); prefer Content Builder Asset REST endpoints for new work. The official docs state Update returns \"OK\" on success or throws on failure. Runtime-verification was BLOCKED: no portfolio item could be created on the test BU (no valid category/file to reference; see Add), so Update could not be exercised against a real item. Against a non-existent key it returned the string \"Error\" (not \"OK\") and did not throw.",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Updates the portfolio object with the supplied attributes. DEPRECATED — Portfolio is a legacy Classic Content / Classic Email Studio feature superseded by Content Builder.",
          "params": [
            {
              "name": "properties",
              "description": "Attributes to change on the portfolio object.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK",
            "Error"
          ],
          "returnDescription": "Returns \"OK\" on success; returns the string \"Error\" (not a throw) on failure.",
          "syntax": "<PortfolioInstance>.Update(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar portObj = Portfolio.Init(\"myPortfolioCK\");\nvar status = portObj.Update({ DisplayName: \"Updated SSJS Image\" });"
        },
        "callExpr": "_portfolio.Update({})",
        "isProperty": false
      },
      {
        "id": "Portfolio.Remove",
        "category": "Core Library",
        "entry": {
          "name": "Remove",
          "isStatic": false,
          "deprecated": true,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "no-test-data",
          "differsFromOfficialDocs": true,
          "officialDocsNote": "DEPRECATED — the Portfolio is a legacy Classic Content / Classic Email Studio feature superseded by Content Builder (Classic Content reached end of life on 24 Apr 2023); prefer Content Builder Asset REST endpoints for new work. The official docs state Remove returns \"OK\" on success or throws on failure. Runtime-verification was BLOCKED: no portfolio item could be created on the test BU (no valid category/file to reference; see Add), so Remove could not be exercised against a real item. Against a non-existent key it returned the string \"Error\" (not \"OK\") and did not throw.",
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Removes the previously initialized portfolio object. DEPRECATED — Portfolio is a legacy Classic Content / Classic Email Studio feature superseded by Content Builder.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK",
            "Error"
          ],
          "returnDescription": "Returns \"OK\" on success; returns the string \"Error\" (not a throw) on failure.",
          "syntax": "<PortfolioInstance>.Remove()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar portObj = Portfolio.Init(\"myPortfolioCK\");\nvar status = portObj.Remove();"
        },
        "callExpr": "_portfolio.Remove()",
        "isProperty": false
      },
      {
        "id": "ContentAreaObj.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "deprecated": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Initializes a ContentAreaObj instance bound to the specified external key. DEPRECATED — Content Areas are a legacy Classic Content feature; prefer Content Builder assets for new work.",
          "params": [
            {
              "name": "key",
              "description": "External key of the content area.",
              "type": "string"
            }
          ],
          "returnType": "ContentAreaObjInstance",
          "returnDescription": "An initialized ContentAreaObj bound to the specified external key.",
          "syntax": "ContentAreaObj.Init(key)",
          "example": "Platform.Load(\"core\", \"1.1.1\");\nvar area = ContentAreaObj.Init(\"myCA\");"
        },
        "callExpr": "ContentAreaObj.Init(\"key\")",
        "isProperty": false
      },
      {
        "id": "ContentAreaObj.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "deprecated": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official `Add` reference lists `@returns {Enum(\"OK\")}`, but runtime returns an initialized ContentAreaObj instance (an object exposing `Update`/`Remove`, identical in shape to `Init`) — matching the doc's own H1 summary (\"returns an initialized object\") rather than the `@returns` annotation.",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Creates a new content area from the supplied properties and returns an initialized ContentAreaObj instance bound to it. DEPRECATED — Content Areas are a legacy Classic Content feature.",
          "params": [
            {
              "name": "properties",
              "description": "JSON object describing the new content area (CustomerKey, Name, CategoryID, Layout, LayoutSpecified, Content).",
              "type": "object"
            }
          ],
          "returnType": "ContentAreaObjInstance",
          "returnDescription": "An initialized ContentAreaObj instance bound to the newly created content area (exposes Update/Remove). Note: contrary to the `@returns {Enum(\"OK\")}` annotation in the official docs, runtime returns an instance object, not the string \"OK\".",
          "syntax": "ContentAreaObj.Add(properties)",
          "example": "Platform.Load(\"core\", \"1.1.1\");\nvar exampleArea = {\n    CustomerKey: \"exampleArea\",\n    Name: \"SSJS Content Area Example\",\n    CategoryID: 123456,\n    Layout: \"RawText\",\n    LayoutSpecified: true,\n    Content: \"<b>This is example content</b>\"\n};\nvar area = ContentAreaObj.Add(exampleArea);"
        },
        "callExpr": "ContentAreaObj.Add({})",
        "isProperty": false
      },
      {
        "id": "ContentAreaObj.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "deprecated": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns an array of content areas matching the specified filter. DEPRECATED — Content Areas are a legacy Classic Content feature.",
          "params": [
            {
              "name": "filter",
              "description": "PascalCase WSProxy-style filter object: `{Property, SimpleOperator, Value}`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "A host array of content areas matching the filter (empty array when none match). Reports as `[object Array]` and exposes `.length`, but `instanceof Array` is false (host-backed collection).",
          "syntax": "ContentAreaObj.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.1\");\nvar results = ContentAreaObj.Retrieve({ Property: \"CustomerKey\", SimpleOperator: \"equals\", Value: \"myCA\" });"
        },
        "callExpr": "ContentAreaObj.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "ContentAreaObj.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "deprecated": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Updates the content area with the supplied attributes. DEPRECATED — Content Areas are a legacy Classic Content feature.",
          "params": [
            {
              "name": "properties",
              "description": "Attributes to change on the content area.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success.",
          "syntax": "<ContentAreaObjInstance>.Update(properties)",
          "example": "Platform.Load(\"core\", \"1.1.1\");\nvar obj = ContentAreaObj.Init(\"myCA\");\nvar status = obj.Update({ Name: \"Name Updated By SSJS\" });"
        },
        "callExpr": "_contentArea.Update({})",
        "isProperty": false
      },
      {
        "id": "ContentAreaObj.Remove",
        "category": "Core Library",
        "entry": {
          "name": "Remove",
          "isStatic": false,
          "deprecated": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Removes the previously initialized content area. DEPRECATED — Content Areas are a legacy Classic Content feature.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success.",
          "syntax": "<ContentAreaObjInstance>.Remove()",
          "example": "Platform.Load(\"core\", \"1.1.1\");\nvar obj = ContentAreaObj.Init(\"myCA\");\nvar status = obj.Remove();"
        },
        "callExpr": "_contentArea.Remove()",
        "isProperty": false
      },
      {
        "id": "Folder.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "isConfirmed": true,
          "requiresCoreLoad": true,
          "minArgs": 0,
          "maxArgs": 1,
          "description": "Initializes a Folder instance, optionally bound to the specified external key. When called without arguments, a subsequent `<FolderInstance>.SetID(id)` call is required to bind the instance to a specific folder.",
          "params": [
            {
              "name": "key",
              "description": "External key of the folder. Optional — pass nothing and use `SetID()` when the folder has no external key.",
              "type": "string",
              "optional": true
            }
          ],
          "returnType": "FolderInstance",
          "returnDescription": "An initialized Folder; bound to the specified external key when one is supplied.",
          "syntax": "Folder.Init([key])",
          "example": "Platform.Load(\"core\", \"1\");\nvar myFolder = Folder.Init(\"myFolder\");\n// or, when the folder has no external key:\nvar myIDFolder = Folder.Init();\nmyIDFolder.SetID(12345);"
        },
        "callExpr": "Folder.Init()",
        "isProperty": false
      },
      {
        "id": "Folder.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "isConfirmed": true,
          "requiresCoreLoad": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Creates a new folder as a child of an existing folder.",
          "params": [
            {
              "name": "properties",
              "description": "JSON object describing the new folder (Name, CustomerKey, Description, ContentType, IsActive, IsEditable, AllowChildren, ParentFolderID).",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "Folder.Add(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar newFolder = {\n    Name: \"Test Add Folder\",\n    CustomerKey: \"test_folder_key\",\n    Description: \"Test added\",\n    ContentType: \"email\",\n    IsActive: \"true\",\n    IsEditable: \"true\",\n    AllowChildren: \"false\",\n    ParentFolderID: 123456\n};\nvar status = Folder.Add(newFolder);"
        },
        "callExpr": "Folder.Add({})",
        "isProperty": false
      },
      {
        "id": "Folder.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "isConfirmed": true,
          "requiresCoreLoad": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns an array of folders matching the specified filter. Supports simple `{Property, SimpleOperator, Value}` filters and complex filters with `LeftOperand`, `LogicalOperator`, `RightOperand`. Use dot notation (e.g. `ParentFolder.Name`) to filter on child fields.",
          "params": [
            {
              "name": "filter",
              "description": "WSProxy-style filter object — simple or compound with `AND`/`OR`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "Array of folder objects (including nested `ParentFolder` info).",
          "syntax": "Folder.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1\");\nvar folders = Folder.Retrieve({\n    Property: \"ParentFolder.Name\",\n    SimpleOperator: \"equals\",\n    Value: \"RewardsProgram\"\n});\nWrite(Stringify(folders));"
        },
        "callExpr": "Folder.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "Folder.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "isConfirmed": true,
          "requiresCoreLoad": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Updates the folder with the supplied attributes.",
          "params": [
            {
              "name": "properties",
              "description": "Attributes to change on the folder.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<FolderInstance>.Update(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myFolder = Folder.Init(\"myFolder\");\nvar status = myFolder.Update({ Name: \"Updated Folder Name\" });"
        },
        "callExpr": "_folder.Update({})",
        "isProperty": false
      },
      {
        "id": "Folder.Remove",
        "category": "Core Library",
        "entry": {
          "name": "Remove",
          "isStatic": false,
          "isConfirmed": true,
          "requiresCoreLoad": true,
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Removes the previously initialized folder.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<FolderInstance>.Remove()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myFolder = Folder.Init(\"myFolder\");\nmyFolder.Remove();"
        },
        "callExpr": "_folder.Remove()",
        "isProperty": false
      },
      {
        "id": "Folder.SetID",
        "category": "Core Library",
        "entry": {
          "name": "SetID",
          "isStatic": false,
          "isConfirmed": true,
          "requiresCoreLoad": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Binds a previously initialized Folder instance to a specific folder ID. Use this when the folder has no external key, after calling `Folder.Init()` without arguments.",
          "params": [
            {
              "name": "id",
              "description": "The folder ID to bind to this Folder instance.",
              "type": "number"
            }
          ],
          "returnType": "void",
          "returnDescription": "No return value.",
          "syntax": "<FolderInstance>.SetID(id)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myIDFolder = Folder.Init();\nmyIDFolder.SetID(12345);"
        },
        "callExpr": "_folder.SetID(1)",
        "isProperty": false
      },
      {
        "id": "Template.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Initializes a Template instance bound to the specified external key. Required before invoking any other Template method on the returned instance.",
          "params": [
            {
              "name": "key",
              "description": "External key of the template.",
              "type": "string"
            }
          ],
          "returnType": "TemplateInstance",
          "returnDescription": "An initialized Template bound to the specified external key.",
          "syntax": "Template.Init(key)",
          "example": "Platform.Load(\"core\", \"1\");\nvar t = Template.Init(\"myTemplate\");"
        },
        "callExpr": "Template.Init(\"key\")",
        "isProperty": false
      },
      {
        "id": "Template.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Creates a new template from the supplied properties.",
          "params": [
            {
              "name": "properties",
              "description": "JSON object describing the new template (CustomerKey, TemplateName, LayoutHTML).",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "Template.Add(properties)",
          "example": "Platform.Load(\"core\", \"1\");\nvar myTemp = {\n    CustomerKey: \"test_template\",\n    TemplateName: \"SSJS Test Template\",\n    LayoutHTML: \"this is some HTML\"\n};\nvar status = Template.Add(myTemp);"
        },
        "callExpr": "Template.Add({})",
        "isProperty": false
      },
      {
        "id": "Template.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns an array of templates matching the specified filter. Pass `{ Filter: { Property, SimpleOperator, Value }, QueryAllAccounts: true }` to query across all accessible accounts.",
          "params": [
            {
              "name": "filter",
              "description": "PascalCase WSProxy-style filter object, optionally wrapped with `QueryAllAccounts: true`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of templates matching the filter.",
          "syntax": "Template.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar getTemplate = Template.Retrieve({ Property: \"CustomerKey\", SimpleOperator: \"equals\", Value: \"MyTemplate\" });"
        },
        "callExpr": "Template.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "Template.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Updates the template with the supplied attributes.",
          "params": [
            {
              "name": "properties",
              "description": "Attributes to change on the template.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<TemplateInstance>.Update(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myTemplate = Template.Init(\"myTemplateCK\");\nvar status = myTemplate.Update({ TemplateName: \"Edited Template\" });"
        },
        "callExpr": "_template.Update({})",
        "isProperty": false
      },
      {
        "id": "DeliveryProfile.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Initializes a DeliveryProfile instance bound to the specified external key. Required before invoking any other DeliveryProfile method on the returned instance.",
          "params": [
            {
              "name": "key",
              "description": "External key of the delivery profile.",
              "type": "string"
            }
          ],
          "returnType": "DeliveryProfileInstance",
          "returnDescription": "An initialized DeliveryProfile bound to the specified external key.",
          "syntax": "DeliveryProfile.Init(key)",
          "example": "Platform.Load(\"core\", \"1\");\nvar myProfile = DeliveryProfile.Init(\"myDeliveryProfile\");"
        },
        "callExpr": "DeliveryProfile.Init(\"key\")",
        "isProperty": false
      },
      {
        "id": "DeliveryProfile.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified on a CloudPage: returns a CLR object (`ExactTarget.Integration.WSDL.DeliveryProfile`), not the string \"OK\". The returned object stringifies to its .NET type name and its properties are NOT readable from SSJS (\"Use of Common Language Runtime (CLR) is not allowed\"). Treat a non-throwing return as success.",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Creates a new delivery profile from the supplied properties.",
          "params": [
            {
              "name": "properties",
              "description": "JSON object describing the new delivery profile (Name, CustomerKey, Description, SourceAddressType, ...).",
              "type": "object"
            }
          ],
          "returnType": "object",
          "returnDescription": "A CLR DeliveryProfile object on success (its properties are not readable from SSJS). Treat a non-throwing return as success.",
          "syntax": "DeliveryProfile.Add(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar newDP = {\n    Name: \"SSJS Added Delivery Profile\",\n    CustomerKey: \"test_delivery_profile\",\n    Description: \"An SSJS Added Profile\",\n    SourceAddressType: \"DefaultPrivateIPAddress\"\n};\nvar status = DeliveryProfile.Add(newDP);"
        },
        "callExpr": "DeliveryProfile.Add({})",
        "isProperty": false
      },
      {
        "id": "DeliveryProfile.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Updates the delivery profile with the supplied attributes.",
          "params": [
            {
              "name": "properties",
              "description": "Attributes to change on the delivery profile.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<DeliveryProfileInstance>.Update(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myProfile = DeliveryProfile.Init(\"myDeliveryProfile\");\nvar status = myProfile.Update({ Name: \"SSJS Updated Delivery Profile\" });"
        },
        "callExpr": "_deliveryProfile.Update({})",
        "isProperty": false
      },
      {
        "id": "DeliveryProfile.Remove",
        "category": "Core Library",
        "entry": {
          "name": "Remove",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Removes the previously initialized delivery profile.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<DeliveryProfileInstance>.Remove()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myProfile = DeliveryProfile.Init(\"myDeliveryProfile\");\nvar status = myProfile.Remove();"
        },
        "callExpr": "_deliveryProfile.Remove()",
        "isProperty": false
      },
      {
        "id": "SenderProfile.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Initializes a SenderProfile instance bound to the specified external key. Note: SenderProfile methods only work on landing pages — they cannot run inside email messages at send time.",
          "params": [
            {
              "name": "key",
              "description": "External key of the sender profile.",
              "type": "string"
            }
          ],
          "returnType": "SenderProfileInstance",
          "returnDescription": "An initialized SenderProfile bound to the specified external key.",
          "syntax": "SenderProfile.Init(key)",
          "example": "Platform.Load(\"core\", \"1\");\nvar myProfile = SenderProfile.Init(\"mySenderProfile\");"
        },
        "callExpr": "SenderProfile.Init(\"key\")",
        "isProperty": false
      },
      {
        "id": "SenderProfile.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs annotate Add as returning the string \"OK\". Runtime-verified on a live CloudPage: it returns a CLR object (`typeof` is `clr`; it stringifies to `ExactTarget.Integration.WSDL.SenderProfile`), not \"OK\". Reading any property off it throws \"Use of Common Language Runtime (CLR) is not allowed\", so the object is opaque from SSJS — treat any non-throwing return as success. This mirrors DeliveryProfile.Add.",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Creates a new sender profile from the supplied properties.",
          "params": [
            {
              "name": "properties",
              "description": "JSON object describing the new sender profile (Name, CustomerKey, Description, FromName, FromAddress, ...).",
              "type": "object"
            }
          ],
          "returnType": "object",
          "returnDescription": "Returns a CLR SenderProfile object (opaque from SSJS) on success; throws on failure. Not the \"OK\" string the docs imply.",
          "syntax": "SenderProfile.Add(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar newSP = {\n    Name: \"SSJS Added Send Profile\",\n    CustomerKey: \"test_send_profile\",\n    Description: \"An SSJS Added Profile\",\n    FromName: \"Andrea Cruz\",\n    FromAddress: \"acruz@example.com\"\n};\nvar status = SenderProfile.Add(newSP);"
        },
        "callExpr": "SenderProfile.Add({})",
        "isProperty": false
      },
      {
        "id": "SenderProfile.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Updates the sender profile with the supplied attributes.",
          "params": [
            {
              "name": "properties",
              "description": "Attributes to change on the sender profile.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<SenderProfileInstance>.Update(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myProfile = SenderProfile.Init(\"mySenderProfile\");\nvar status = myProfile.Update({ Name: \"SSJS Updated Sender Profile\" });"
        },
        "callExpr": "_senderProfile.Update({})",
        "isProperty": false
      },
      {
        "id": "SenderProfile.Remove",
        "category": "Core Library",
        "entry": {
          "name": "Remove",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Removes the previously initialized sender profile.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<SenderProfileInstance>.Remove()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myProfile = SenderProfile.Init(\"mySenderProfile\");\nvar status = myProfile.Remove();"
        },
        "callExpr": "_senderProfile.Remove()",
        "isProperty": false
      },
      {
        "id": "SendClassification.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Initializes a SendClassification instance bound to the specified external key. Required before invoking any other SendClassification method on the returned instance.",
          "params": [
            {
              "name": "key",
              "description": "External key of the send classification.",
              "type": "string"
            }
          ],
          "returnType": "SendClassificationInstance",
          "returnDescription": "An initialized SendClassification bound to the specified external key.",
          "syntax": "SendClassification.Init(key)",
          "example": "Platform.Load(\"core\", \"1\");\nvar sc = SendClassification.Init(\"mySendClassification\");"
        },
        "callExpr": "SendClassification.Init(\"key\")",
        "isProperty": false
      },
      {
        "id": "SendClassification.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "no-test-data",
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verification of the success path was BLOCKED on the test BU. The official docs state Add returns \"OK\" or throws. Confirmed discrepancy: on failure the Core-library method throws an engine error whose `.message` is `undefined` and whose `String()` is \"Error adding SendClassification.\" (no useful `.message`). Even with the account's own proven-valid `Default` SenderProfile + `Default` DeliveryProfile, `SendClassification.Add` threw \"Error adding SendClassification.\" A direct WSProxy `createItem(\"SendClassification\")` with `SenderProfile.CustomerKey = \"Default\"` returned Status=Error, StatusMessage=\"SenderProfile given an invalid identifier.\", ErrorCode=24101 — the SOAP path needs the SenderProfile ObjectID, not its CustomerKey, so a new SendClassification could not be created from SSJS to confirm the \"OK\" success return.",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Creates a new send classification from the supplied properties.",
          "params": [
            {
              "name": "properties",
              "description": "JSON object describing the new send classification (CustomerKey, Name, Description, SenderProfileKey, DeliveryProfileKey).",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "SendClassification.Add(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar newSC = {\n    CustomerKey: \"mySCKey\",\n    Name: \"SSJS Test SC\",\n    Description: \"Test SSJS description\",\n    SenderProfileKey: \"mySPKey\",\n    DeliveryProfileKey: \"myDPKey\"\n};\nSendClassification.Add(newSC);"
        },
        "callExpr": "SendClassification.Add({})",
        "isProperty": false
      },
      {
        "id": "SendClassification.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns an array of send classifications matching the specified filter.",
          "params": [
            {
              "name": "filter",
              "description": "PascalCase WSProxy-style filter object: `{Property, SimpleOperator, Value}`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of send classifications matching the filter.",
          "syntax": "SendClassification.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar results = SendClassification.Retrieve({ Property: \"CustomerKey\", SimpleOperator: \"equals\", Value: \"mySendClassification\" });"
        },
        "callExpr": "SendClassification.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "SendClassification.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "no-test-data",
          "officialDocsNote": "Runtime-verification of the success path was BLOCKED: no SendClassification could be created on the test BU (see Add), so Update could not be exercised against a real item. Against a non-existent key it returned the string \"Error\" (not \"OK\") and did not throw.",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Updates the send classification with the supplied attributes. You must include both `SenderProfileKey` and `DeliveryProfileKey` in `properties` for the update to succeed.",
          "params": [
            {
              "name": "properties",
              "description": "Attributes to change. Must include `SenderProfileKey` and `DeliveryProfileKey`.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK",
            "Error"
          ],
          "returnDescription": "Returns \"OK\" on success; returns the string \"Error\" (not a throw) on failure.",
          "syntax": "<SendClassificationInstance>.Update(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar sc = SendClassification.Init(\"mySendClassification\");\nvar updatedSC = {\n    Name: \"Updated Send Classification\",\n    SenderProfileKey: \"mySPKey\",\n    DeliveryProfileKey: \"myDPKey\"\n};\nvar status = sc.Update(updatedSC);"
        },
        "callExpr": "_sendClass.Update({})",
        "isProperty": false
      },
      {
        "id": "SendClassification.Remove",
        "category": "Core Library",
        "entry": {
          "name": "Remove",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "no-test-data",
          "officialDocsNote": "Runtime-verification of the success path was BLOCKED: no SendClassification could be created on the test BU (see Add), so Remove could not be exercised against a real item. Against a non-existent key it returned the string \"Error\" (not \"OK\") and did not throw.",
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Removes the previously initialized send classification.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK",
            "Error"
          ],
          "returnDescription": "Returns \"OK\" on success; returns the string \"Error\" (not a throw) on failure.",
          "syntax": "<SendClassificationInstance>.Remove()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar sc = SendClassification.Init(\"mySendClassification\");\nvar status = sc.Remove();"
        },
        "callExpr": "_sendClass.Remove()",
        "isProperty": false
      },
      {
        "id": "FilterDefinition.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "isConfirmed": true,
          "requiresCoreLoad": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Initializes a FilterDefinition instance bound to the specified external key. Required before invoking any other FilterDefinition method on the returned instance.",
          "params": [
            {
              "name": "key",
              "description": "External key of the filter definition.",
              "type": "string"
            }
          ],
          "returnType": "FilterDefinitionInstance",
          "returnDescription": "An initialized FilterDefinition bound to the specified external key.",
          "syntax": "FilterDefinition.Init(key)",
          "example": "Platform.Load(\"core\", \"1\");\nvar fd = FilterDefinition.Init(\"myFilterDef\");"
        },
        "callExpr": "FilterDefinition.Init(\"key\")",
        "isProperty": false
      },
      {
        "id": "FilterDefinition.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "no-test-data",
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verification of the success path was BLOCKED: a valid FilterDefinition could not be created on the test BU (creating one requires an audience/DataSource configuration the test account could not satisfy). Confirmed discrepancy: on failure the Core-library method returns the string \"Error\" (not \"OK\"), and it does NOT throw — the official docs state it returns \"OK\" or throws. Attempted with SubscriberList (by Type, and by real \"All Subscribers\" list ID) and DataExtension (by CustomerKey and by Name) DataSources; every attempt returned the string \"Error\". A direct WSProxy createItem(\"FilterDefinition\") throws with SOAP inner exception \"Invalid property name: Type\" on DataSource.",
          "requiresCoreLoad": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Creates a new filter definition from the supplied properties. The `Filter` field accepts either a simple `{Property, SimpleOperator, Value}` filter or a complex filter with `LeftOperand`, `LogicalOperator`, `RightOperand`. `DataSource.Type` must be `\"SubscriberList\"` or `\"DataExtension\"`. On failure the Core library returns the string \"Error\" rather than throwing.",
          "params": [
            {
              "name": "properties",
              "description": "JSON object describing the new filter definition (Name, CustomerKey, Filter, DataSource).",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK",
            "Error"
          ],
          "returnDescription": "Returns \"OK\" on success. On failure the Core library returns the string \"Error\" (it does not throw).",
          "syntax": "FilterDefinition.Add(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar filterObj = { Property: \"LuckyNumber\", SimpleOperator: \"equals\", Value: 77 };\nvar newFD = {\n    Name: \"SSJS Filter Definition\",\n    CustomerKey: \"myFilterDef\",\n    Filter: filterObj,\n    DataSource: { Type: \"SubscriberList\", CustomerKey: \"example_list_key\" }\n};\nvar status = FilterDefinition.Add(newFD);"
        },
        "callExpr": "FilterDefinition.Add({})",
        "isProperty": false
      },
      {
        "id": "FilterDefinition.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "isConfirmed": true,
          "requiresCoreLoad": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns an array of filter definitions matching the specified filter.",
          "params": [
            {
              "name": "filter",
              "description": "PascalCase WSProxy-style filter object: `{Property, SimpleOperator, Value}`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "Array of filter definitions matching the filter; an empty array when none match.",
          "syntax": "FilterDefinition.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar results = FilterDefinition.Retrieve({ Property: \"CustomerKey\", SimpleOperator: \"equals\", Value: \"myFilterDef\" });"
        },
        "callExpr": "FilterDefinition.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "FilterDefinition.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "no-test-data",
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verification was BLOCKED: no valid FilterDefinition could be created on the test BU (see Add), so Update could not be exercised against a real definition. Against a non-existent definition the Core library returned the string \"Error\" (not \"OK\") and did not throw — the official docs state it returns \"OK\" or throws.",
          "requiresCoreLoad": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Updates the filter definition with the supplied attributes. On failure the Core library returns the string \"Error\" rather than throwing.",
          "params": [
            {
              "name": "properties",
              "description": "Attributes to change on the filter definition.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK",
            "Error"
          ],
          "returnDescription": "Returns \"OK\" on success. On failure the Core library returns the string \"Error\" (it does not throw).",
          "syntax": "<FilterDefinitionInstance>.Update(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar fd = FilterDefinition.Init(\"myFilterDef\");\nvar status = fd.Update({ Name: \"Updated Name\" });"
        },
        "callExpr": "_filterDef.Update({})",
        "isProperty": false
      },
      {
        "id": "FilterDefinition.Remove",
        "category": "Core Library",
        "entry": {
          "name": "Remove",
          "isStatic": false,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "no-test-data",
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verification was BLOCKED: no valid FilterDefinition could be created on the test BU (see Add), so Remove could not be exercised against a real definition. Against a non-existent definition the Core library returned the string \"Error\" (not \"OK\") and did not throw — the official docs state it returns \"OK\" or throws.",
          "requiresCoreLoad": true,
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Deletes the previously initialized filter definition. On failure the Core library returns the string \"Error\" rather than throwing.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK",
            "Error"
          ],
          "returnDescription": "Returns \"OK\" on success. On failure the Core library returns the string \"Error\" (it does not throw).",
          "syntax": "<FilterDefinitionInstance>.Remove()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myFD = FilterDefinition.Init(\"myFilterDef\");\nmyFD.Remove();"
        },
        "callExpr": "_filterDef.Remove()",
        "isProperty": false
      },
      {
        "id": "QueryDefinition.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Initializes a QueryDefinition instance bound to the specified external key. Required before invoking any other QueryDefinition method on the returned instance.",
          "params": [
            {
              "name": "key",
              "description": "External key of the query definition.",
              "type": "string"
            }
          ],
          "returnType": "QueryDefinitionInstance",
          "returnDescription": "An initialized QueryDefinition bound to the specified external key.",
          "syntax": "QueryDefinition.Init(key)",
          "example": "Platform.Load(\"core\", \"1\");\nvar qd = QueryDefinition.Init(\"myQueryDef\");"
        },
        "callExpr": "QueryDefinition.Init(\"key\")",
        "isProperty": false
      },
      {
        "id": "QueryDefinition.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Creates a new query definition from the supplied properties. Pass an optional `CategoryID` to place the query inside a specific folder.",
          "params": [
            {
              "name": "properties",
              "description": "JSON object describing the new query definition (Name, CustomerKey, optional CategoryID, TargetUpdateType, TargetType, Target, QueryText).",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "QueryDefinition.Add(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar queryDef = {\n    Name: \"Example Query Definition\",\n    CustomerKey: \"myQueryDef\",\n    TargetUpdateType: \"Overwrite\",\n    TargetType: \"DE\",\n    Target: { Name: \"Example Target DE\", CustomerKey: \"example_target_de\" },\n    QueryText: \"SELECT SubKey, Email, Name FROM [Example Target DE] where FavoriteItemID=77\"\n};\nvar status = QueryDefinition.Add(queryDef);"
        },
        "callExpr": "QueryDefinition.Add({})",
        "isProperty": false
      },
      {
        "id": "QueryDefinition.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns an array of query definitions matching the specified filter. Supports simple `{Property, SimpleOperator, Value}` filters and complex filters with `LeftOperand`, `LogicalOperator`, `RightOperand`.",
          "params": [
            {
              "name": "filter",
              "description": "WSProxy-style filter object — simple or compound with `AND`/`OR`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "Array of query definition objects (with nested `DataExtensionTarget` info when applicable).",
          "syntax": "QueryDefinition.Retrieve(filter)",
          "example": "Platform.Load(\"Core\", \"1\");\nvar result = QueryDefinition.Retrieve({\n    Property: \"Status\",\n    SimpleOperator: \"equals\",\n    Value: \"Active\"\n});\nWrite(Stringify(result));"
        },
        "callExpr": "QueryDefinition.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "QueryDefinition.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Updates the query definition with the supplied attributes.",
          "params": [
            {
              "name": "properties",
              "description": "Attributes to change on the query definition.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<QueryDefinitionInstance>.Update(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar qd = QueryDefinition.Init(\"myQueryDef\");\nvar status = qd.Update({\n    Name: \"Updated Query Definition Name\",\n    QueryText: \"SELECT SubKey, Email, Name FROM [Example Target DE] where FavoriteItemID=12\"\n});"
        },
        "callExpr": "_queryDef.Update({})",
        "isProperty": false
      },
      {
        "id": "QueryDefinition.Remove",
        "category": "Core Library",
        "entry": {
          "name": "Remove",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Removes the previously initialized query definition.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<QueryDefinitionInstance>.Remove()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar qd = QueryDefinition.Init(\"myQueryDef\");\nvar status = qd.Remove();"
        },
        "callExpr": "_queryDef.Remove()",
        "isProperty": false
      },
      {
        "id": "QueryDefinition.Perform",
        "category": "Core Library",
        "entry": {
          "name": "Perform",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "The official docs and this page state Perform returns \"OK\". Runtime-verified on a live CloudPage: Perform(\"start\") returns the string \"QueryDefinition perform called successfully\" (not \"OK\"). It queues the query run asynchronously and returns immediately — the returned string only confirms the run was accepted, not that the query finished. Treat any thrown error as failure; do not string-match against \"OK\".",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Executes the query definition. Runs the SQL and writes results into the configured target Data Extension.",
          "params": [
            {
              "name": "action",
              "description": "The action to perform. Use `\"start\"` to execute the query.",
              "type": "string",
              "enum": [
                "start"
              ]
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "QueryDefinition perform called successfully"
          ],
          "returnDescription": "Returns the string \"QueryDefinition perform called successfully\" when the run is accepted; throws on failure.",
          "syntax": "<QueryDefinitionInstance>.Perform(action)",
          "example": "Platform.Load(\"core\", \"1\");\nvar qd = QueryDefinition.Init(\"MY_QUERY_KEY\");\nvar result = qd.Perform(\"start\");\nWrite(Stringify(result));"
        },
        "callExpr": "_queryDef.Perform(\"action\")",
        "isProperty": false
      },
      {
        "id": "List.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Initializes a List instance bound to the specified external key. Required before invoking any other List method on the returned instance.",
          "params": [
            {
              "name": "key",
              "description": "External key of the list.",
              "type": "string"
            }
          ],
          "returnType": "ListInstance",
          "returnDescription": "An initialized List bound to the specified external key.",
          "syntax": "List.Init(key)",
          "example": "Platform.Load(\"core\", \"1\");\nvar myList = List.Init(\"myList\");"
        },
        "callExpr": "List.Init(\"key\")",
        "isProperty": false
      },
      {
        "id": "List.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Creates a new list from the supplied properties and returns an initialized list instance. Note: unlike most static `Add` methods, this returns a `ListInstance`, not `\"OK\"`.",
          "params": [
            {
              "name": "properties",
              "description": "JSON object describing the new list (CustomerKey, Name, Description, ...).",
              "type": "object"
            }
          ],
          "returnType": "ListInstance",
          "returnDescription": "An initialized List bound to the newly-created list.",
          "syntax": "List.Add(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myNewList = List.Add({ CustomerKey: \"libList\", Name: \"testLib\", Description: \"desc\" });"
        },
        "callExpr": "List.Add({})",
        "isProperty": false
      },
      {
        "id": "List.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns an array of lists matching the specified filter.",
          "params": [
            {
              "name": "filter",
              "description": "PascalCase WSProxy-style filter object: `{Property, SimpleOperator, Value}`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of list objects matching the filter.",
          "syntax": "List.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar lists = List.Retrieve({ Property: \"ListName\", SimpleOperator: \"equals\", Value: \"BirthdayList\" });"
        },
        "callExpr": "List.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "List.Remove",
        "category": "Core Library",
        "entry": {
          "name": "Remove",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Removes the previously initialized list.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<ListInstance>.Remove()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myList = List.Init(\"myList\");\nvar status = myList.Remove();"
        },
        "callExpr": "_list.Remove()",
        "isProperty": false
      },
      {
        "id": "List.Subscribers.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Adds a subscriber to the previously initialized list.",
          "params": [
            {
              "name": "properties",
              "description": "Object containing subscriber properties (EmailAddress, SubscriberKey, optionally list status).",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<ListInstance>.Subscribers.Add(properties)",
          "example": "Platform.Load(\"core\", \"1\");\nvar list = List.Init(\"MY_LIST_KEY\");\nvar result = list.Subscribers.Add({\n    EmailAddress: \"test@example.com\",\n    SubscriberKey: \"test@example.com\"\n});\nWrite(Stringify(result));"
        },
        "callExpr": "_listSubscribers.Add({})",
        "isProperty": false
      },
      {
        "id": "List.Subscribers.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 0,
          "maxArgs": 1,
          "description": "Returns the subscribers belonging to the previously initialized list. Pass an optional filter to narrow the results; omit it to return all subscribers on the list.",
          "params": [
            {
              "name": "filter",
              "description": "Optional WSProxy-style filter object to narrow the results.",
              "type": "object",
              "optional": true
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of subscriber objects on the list (filtered when a filter is supplied).",
          "syntax": "<ListInstance>.Subscribers.Retrieve([filter])",
          "example": "Platform.Load(\"core\", \"1\");\nvar list = List.Init(\"MY_LIST_KEY\");\nvar subscribers = list.Subscribers.Retrieve();"
        },
        "callExpr": "_listSubscribers.Retrieve()",
        "isProperty": false
      },
      {
        "id": "List.Subscribers.Unsubscribe",
        "category": "Core Library",
        "entry": {
          "name": "Unsubscribe",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Removes the specified subscriber from the previously initialized list.",
          "params": [
            {
              "name": "emailAddress",
              "description": "Email address of the subscriber, or a `{EmailAddress, SubscriberKey}` object identifying the subscriber.",
              "type": "string"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<ListInstance>.Subscribers.Unsubscribe(emailAddress)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myList = List.Init(\"myList\");\nvar status = myList.Subscribers.Unsubscribe(\"aruiz@example.com\");"
        },
        "callExpr": "_listSubscribers.Unsubscribe(\"emailAddress\")",
        "isProperty": false
      },
      {
        "id": "List.Subscribers.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 2,
          "maxArgs": 2,
          "description": "Updates the status of the specified subscriber on the previously initialized list.",
          "params": [
            {
              "name": "emailAddress",
              "description": "Email address of the subscriber, or a `{EmailAddress, SubscriberKey}` object identifying the subscriber.",
              "type": "string"
            },
            {
              "name": "status",
              "description": "New status of the subscriber on the list.",
              "type": "string"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<ListInstance>.Subscribers.Update(emailAddress, status)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myList = List.Init(\"myList\");\nvar status = myList.Subscribers.Update(\"aruiz@example.com\", \"Active\");"
        },
        "callExpr": "_listSubscribers.Update(\"emailAddress\", \"status\")",
        "isProperty": false
      },
      {
        "id": "List.Subscribers.Upsert",
        "category": "Core Library",
        "entry": {
          "name": "Upsert",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 2,
          "maxArgs": 2,
          "description": "Adds the subscriber if not on the list, otherwise updates the supplied attributes. If `attributes.Status` is supplied, the subscriber's list status is updated.",
          "params": [
            {
              "name": "emailAddress",
              "description": "Email address of the subscriber, or a `{EmailAddress, SubscriberKey}` object identifying the subscriber.",
              "type": "string"
            },
            {
              "name": "attributes",
              "description": "Additional subscriber attributes to set or update.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<ListInstance>.Subscribers.Upsert(emailAddress, attributes)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myList = List.Init(\"myList\");\nvar status = myList.Subscribers.Upsert(\"aruiz@example.com\", { ZipCode: \"46202\" });"
        },
        "callExpr": "_listSubscribers.Upsert(\"emailAddress\", {})",
        "isProperty": false
      },
      {
        "id": "List.Subscribers.Tracking.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns an array of tracking data for subscribers matching the filter.",
          "params": [
            {
              "name": "filter",
              "description": "PascalCase WSProxy-style filter object identifying the subscribers.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of tracking records matching the filter.",
          "syntax": "<ListInstance>.Subscribers.Tracking.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myList = List.Init(\"MyList\");\nvar results = myList.Subscribers.Tracking.Retrieve({ Property: \"SubscriberKey\", SimpleOperator: \"equals\", Value: \"MyKey\" });"
        },
        "callExpr": "_listSubTracking.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "Subscriber.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Initializes a Subscriber instance bound to the specified subscriber key. Required before invoking any instance method on the returned object.",
          "params": [
            {
              "name": "key",
              "description": "Subscriber key.",
              "type": "string"
            }
          ],
          "returnType": "SubscriberInstance",
          "returnDescription": "An initialized Subscriber bound to the specified key.",
          "syntax": "Subscriber.Init(key)",
          "example": "Platform.Load(\"core\", \"1\");\nvar sub = Subscriber.Init(\"mySubscriber\");"
        },
        "callExpr": "Subscriber.Init(\"key\")",
        "isProperty": false
      },
      {
        "id": "Subscriber.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Verification attempted but blocked: the QA test BU rejects programmatic Subscriber writes via its spam-filter guardrail. The live CloudPage attempt returned SOAP fault `TriggeredSpamFilter` (ErrorCode 12002), so the \"OK\" success path could not be proven on this BU.",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Creates a new subscriber from the supplied properties.",
          "params": [
            {
              "name": "properties",
              "description": "JSON object describing the new subscriber (EmailAddress, SubscriberKey, EmailTypePreference, Attributes, Lists, ...).",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "Subscriber.Add(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar newSubscriber = {\n    EmailAddress: \"test.008@example.com\",\n    SubscriberKey: \"20100730001\",\n    EmailTypePreference: \"Text\",\n    Attributes: { \"First Name\": \"test.008\", \"Last Name\": \"test.008\" },\n    Lists: { Status: \"Active\", ID: 12345, Action: \"Create\" }\n};\nvar status = Subscriber.Add(newSubscriber);"
        },
        "callExpr": "Subscriber.Add({})",
        "isProperty": false
      },
      {
        "id": "Subscriber.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns an array of subscribers matching the specified filter.",
          "params": [
            {
              "name": "filter",
              "description": "PascalCase WSProxy-style filter object: `{Property, SimpleOperator, Value}`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of subscribers matching the filter.",
          "syntax": "Subscriber.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar results = Subscriber.Retrieve({ Property: \"SubscriberKey\", SimpleOperator: \"equals\", Value: \"MySubscriberKey\" });"
        },
        "callExpr": "Subscriber.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "Subscriber.Upsert",
        "category": "Core Library",
        "entry": {
          "name": "Upsert",
          "isStatic": false,
          "requiresCoreLoad": true,
          "differsFromOfficialDocs": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Official docs document a static Subscriber.Upsert(properties); at runtime Subscriber.Upsert is undefined — the method lives on the instance (Subscriber.Init(key).Upsert(properties)). The instance-method location is proven, but the write itself could not be verified: the QA test BU rejects programmatic Subscriber writes via its spam-filter guardrail (SOAP fault `TriggeredSpamFilter`, ErrorCode 12002).",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Creates a new subscriber, or updates the initialized one matched by EmailAddress / SubscriberKey.",
          "params": [
            {
              "name": "properties",
              "description": "JSON object describing the subscriber (EmailAddress, SubscriberKey, Attributes, ...).",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<SubscriberInstance>.Upsert(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar subObj = Subscriber.Init(\"test@example.com\");\nvar result = subObj.Upsert({\n    EmailAddress: \"test@example.com\",\n    SubscriberKey: \"test@example.com\",\n    Attributes: [ { Name: \"FirstName\", Value: \"Jane\" } ]\n});"
        },
        "callExpr": "_subscriber.Upsert({})",
        "isProperty": false
      },
      {
        "id": "Subscriber.Statistics",
        "category": "Core Library",
        "entry": {
          "name": "Statistics",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Official docs document a static Subscriber.Statistics(subscriberKey); at runtime Subscriber.Statistics is undefined — the method lives on the instance (Subscriber.Init(key).Statistics()).",
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Retrieves statistical data for the initialized subscriber (sends, opens, clicks, bounces, unsubscribes).",
          "params": [],
          "returnType": "object",
          "returnDescription": "A single object with subscriber statistics (not an array).",
          "syntax": "<SubscriberInstance>.Statistics()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar subObj = Subscriber.Init(\"test@example.com\");\nvar stats = subObj.Statistics();"
        },
        "callExpr": "_subscriber.Statistics()",
        "isProperty": false
      },
      {
        "id": "Subscriber.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Verification attempted but blocked: the QA test BU rejects programmatic Subscriber writes via its spam-filter guardrail (SOAP fault `TriggeredSpamFilter`, ErrorCode 12002), so the update success path could not be proven on this BU.",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Updates the previously initialized subscriber with the supplied attributes.",
          "params": [
            {
              "name": "properties",
              "description": "Subscriber properties to change.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<SubscriberInstance>.Update(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar subObj = Subscriber.Init(\"SubKey\");\nvar status = subObj.Update({ EmailTypePreference: \"HTML\", Attributes: { \"First Name\": \"Test\", \"Last Name\": \"User\" } });"
        },
        "callExpr": "_subscriber.Update({})",
        "isProperty": false
      },
      {
        "id": "Subscriber.Remove",
        "category": "Core Library",
        "entry": {
          "name": "Remove",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Verification attempted but blocked: the QA test BU rejects programmatic Subscriber writes via its spam-filter guardrail (SOAP fault `TriggeredSpamFilter`, ErrorCode 12002), so the delete success path could not be proven on this BU.",
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Deletes the previously initialized subscriber.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<SubscriberInstance>.Remove()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar subObj = Subscriber.Init(\"SubKey\");\nvar status = subObj.Remove();"
        },
        "callExpr": "_subscriber.Remove()",
        "isProperty": false
      },
      {
        "id": "Subscriber.Unsubscribe",
        "category": "Core Library",
        "entry": {
          "name": "Unsubscribe",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Verification attempted but blocked: the QA test BU rejects programmatic Subscriber writes via its spam-filter guardrail (SOAP fault `TriggeredSpamFilter`, ErrorCode 12002), so the unsubscribe success path could not be proven on this BU.",
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Sets the previously initialized subscriber's status to `\"Unsubscribed\"`.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<SubscriberInstance>.Unsubscribe()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar subObj = Subscriber.Init(\"SubKey\");\nvar status = subObj.Unsubscribe();"
        },
        "callExpr": "_subscriber.Unsubscribe()",
        "isProperty": false
      },
      {
        "id": "Subscriber.Attributes.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Returns an array of attributes associated with the previously initialized subscriber.",
          "params": [],
          "returnType": "object[]",
          "returnDescription": "List of attribute objects for the subscriber.",
          "syntax": "<SubscriberInstance>.Attributes.Retrieve()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar subObj = Subscriber.Init(\"SubKey\");\nvar attributes = subObj.Attributes.Retrieve();"
        },
        "callExpr": "_subscriberAttrs.Retrieve()",
        "isProperty": false
      },
      {
        "id": "Subscriber.Lists.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Returns the lists the previously initialized subscriber is a member of.",
          "params": [],
          "returnType": "object[]",
          "returnDescription": "List of list objects the subscriber belongs to.",
          "syntax": "<SubscriberInstance>.Lists.Retrieve()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar subObj = Subscriber.Init(\"SubKey\");\nvar listArray = subObj.Lists.Retrieve();"
        },
        "callExpr": "_subscriberLists.Retrieve()",
        "isProperty": false
      },
      {
        "id": "Email.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "deprecated": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Initializes an Email instance bound to the specified external key. Required before invoking any other Email method on the returned instance. External keys cannot be set in the UI — set one via SOAP API, or look up the value via `Email.Retrieve()`. Deprecated — operates on classic Email Studio emails; prefer Content Builder assets for new work.",
          "params": [
            {
              "name": "key",
              "description": "External key of the email message.",
              "type": "string"
            }
          ],
          "returnType": "EmailInstance",
          "returnDescription": "An initialized Email bound to the specified external key.",
          "syntax": "Email.Init(key)",
          "example": "Platform.Load(\"core\", \"1\");\nvar myEmail = Email.Init(\"myEmail\");"
        },
        "callExpr": "Email.Init(\"key\")",
        "isProperty": false
      },
      {
        "id": "Email.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "deprecated": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Creates a new classic email message from the supplied properties and returns an initialized email instance. Note: unlike most static `Add` methods, this returns an `EmailInstance`, not `\"OK\"`. Deprecated — operates on classic Email Studio emails; prefer Content Builder assets for new work.",
          "params": [
            {
              "name": "properties",
              "description": "JSON object describing the new email (CustomerKey, Name, optional CategoryID, HTMLBody, TextBody, Subject, EmailType, ...).",
              "type": "object"
            }
          ],
          "returnType": "EmailInstance",
          "returnDescription": "An initialized Email bound to the newly-created email message.",
          "syntax": "Email.Add(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar newMail = {\n    CustomerKey: \"test_email_key\",\n    Name: \"Test Email\",\n    HTMLBody: \"<b>This is a test email</b>\",\n    TextBody: \"This is a test email\",\n    Subject: \"Test Email Subject\",\n    EmailType: \"HTML\",\n    CharacterSet: \"US-ASCII\"\n};\nvar myEmail = Email.Add(newMail);"
        },
        "callExpr": "Email.Add({})",
        "isProperty": false
      },
      {
        "id": "Email.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "deprecated": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns an array of classic email messages matching the specified filter. Deprecated — operates on classic Email Studio emails; prefer Content Builder assets for new work.",
          "params": [
            {
              "name": "filter",
              "description": "PascalCase WSProxy-style filter object: `{Property, SimpleOperator, Value}`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of email messages matching the filter.",
          "syntax": "Email.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar results = Email.Retrieve({ Property: \"CustomerKey\", SimpleOperator: \"equals\", Value: \"myEmail\" });"
        },
        "callExpr": "Email.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "Email.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "deprecated": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Updates the classic email message with the supplied attributes. Deprecated — operates on classic Email Studio emails; prefer Content Builder assets for new work.",
          "params": [
            {
              "name": "properties",
              "description": "Attributes to change on the email message.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<EmailInstance>.Update(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myEmail = Email.Init(\"myEmail\");\nvar status = myEmail.Update({ Name: \"Updated Name\", Subject: \"Updated Email Subject\" });"
        },
        "callExpr": "_email.Update({})",
        "isProperty": false
      },
      {
        "id": "Email.Remove",
        "category": "Core Library",
        "entry": {
          "name": "Remove",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "deprecated": true,
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Removes the previously initialized classic email message. Deprecated — operates on classic Email Studio emails; prefer Content Builder assets for new work.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<EmailInstance>.Remove()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myEmail = Email.Init(\"myEmail\");\nmyEmail.Remove();"
        },
        "callExpr": "_email.Remove()",
        "isProperty": false
      },
      {
        "id": "Email.Validate",
        "category": "Core Library",
        "entry": {
          "name": "Validate",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "deprecated": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified (CloudPage): `Task.ValidationStatus` is a STRING (e.g. \"Fail\"), not the boolean the official docs describe. Compare against string values, not `true`/`false`.",
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Runs validation checks on the previously initialized classic email message. Returns a `{Task: {ValidationStatus: string, ValidationMessages: string}}` object. Deprecated — operates on classic Email Studio emails; prefer Content Builder assets for new work.",
          "params": [],
          "returnType": "object",
          "returnDescription": "Validation result with `Task.ValidationStatus` (string, e.g. \"Fail\") and `Task.ValidationMessages` (string).",
          "syntax": "<EmailInstance>.Validate()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myEmail = Email.Init(\"myEmail\");\nvar results = myEmail.Validate();\nWrite(results.Task.ValidationStatus);\nWrite(results.Task.ValidationMessages);"
        },
        "callExpr": "_email.Validate()",
        "isProperty": false
      },
      {
        "id": "Email.CheckContent",
        "category": "Core Library",
        "entry": {
          "name": "CheckContent",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "deprecated": true,
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Runs content checks on the previously initialized classic email message. Returns a `{Task: {CheckPassed: boolean, ResultMessage: string}}` object. Deprecated — operates on classic Email Studio emails; prefer Content Builder assets for new work.",
          "params": [],
          "returnType": "object",
          "returnDescription": "Content-check result with `Task.CheckPassed` (boolean) and `Task.ResultMessage` (string).",
          "syntax": "<EmailInstance>.CheckContent()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar myEmail = Email.Init(\"myEmail\");\nvar results = myEmail.CheckContent();\nWrite(results.Task.CheckPassed);\nWrite(results.Task.ResultMessage);"
        },
        "callExpr": "_email.CheckContent()",
        "isProperty": false
      },
      {
        "id": "Send.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Initializes a Send instance bound to the specified send ID. Required before invoking any other Send method on the returned instance.",
          "params": [
            {
              "name": "id",
              "description": "Numeric ID of the send.",
              "type": "number"
            }
          ],
          "returnType": "SendInstance",
          "returnDescription": "An initialized Send bound to the specified send ID.",
          "syntax": "Send.Init(id)",
          "example": "Platform.Load(\"core\", \"1\");\nvar s = Send.Init(12345);"
        },
        "callExpr": "Send.Init(1)",
        "isProperty": false
      },
      {
        "id": "Send.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 2,
          "maxArgs": 3,
          "description": "Creates a new send to the specified email and list(s). Pass an `options` object to override From name, From address, subject, send time, etc.",
          "params": [
            {
              "name": "emailKey",
              "description": "CustomerKey of the email message to associate with the send.",
              "type": "string"
            },
            {
              "name": "listIds",
              "description": "Array of list IDs to send to.",
              "type": "array"
            },
            {
              "name": "options",
              "description": "Optional send options (FromName, FromAddress, Subject, send time, ...).",
              "type": "object",
              "optional": true
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "Send.Add(emailKey, listIds, [options])",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar status = Send.Add(\"test_email\", [12345, 12346]);\nvar options = { FromName: \"JSON Specified Name\", FromAddress: \"aruiz@example.com\", Subject: \"JSON Test Mail\" };\nvar status2 = Send.Add(\"test_email\", [12345, 12346], options);"
        },
        "callExpr": "Send.Add(\"emailKey\", [])",
        "isProperty": false
      },
      {
        "id": "Send.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns an array of sends matching the specified filter.",
          "params": [
            {
              "name": "filter",
              "description": "PascalCase WSProxy-style filter object — simple or compound with `LeftOperand`/`LogicalOperator`/`RightOperand`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of sends matching the filter.",
          "syntax": "Send.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar sends = Send.Retrieve({ Property: \"ID\", SimpleOperator: \"equals\", Value: 12345 });"
        },
        "callExpr": "Send.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "Send.RetrieveLists",
        "category": "Core Library",
        "entry": {
          "name": "RetrieveLists",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns information about the lists targeted by a send. Filter must restrict results to specific send ID(s).",
          "params": [
            {
              "name": "filter",
              "description": "WSProxy-style filter restricting results to specific send ID(s).",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of list objects associated with matching sends; throws on failure.",
          "syntax": "Send.RetrieveLists(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar listsSentTo = Send.RetrieveLists({ Property: \"SendID\", SimpleOperator: \"equals\", Value: 12345 });"
        },
        "callExpr": "Send.RetrieveLists({})",
        "isProperty": false
      },
      {
        "id": "Send.Remove",
        "category": "Core Library",
        "entry": {
          "name": "Remove",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Removes the previously initialized send.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<SendInstance>.Remove()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar s = Send.Init(12345);\ns.Remove();"
        },
        "callExpr": "_send.Remove()",
        "isProperty": false
      },
      {
        "id": "Send.CancelSend",
        "category": "Core Library",
        "entry": {
          "name": "CancelSend",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified (CloudPage): `CancelSend()` returns the literal string \"status\" on success, not the \"OK\" the official docs describe. Do not compare its return value against \"OK\".",
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Attempts to cancel the previously initialized send.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "status"
          ],
          "returnDescription": "Returns the literal string \"status\" on success (not \"OK\"); throws on failure.",
          "syntax": "<SendInstance>.CancelSend()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar mySend = Send.Init(12345);\nvar status = mySend.CancelSend();"
        },
        "callExpr": "_send.CancelSend()",
        "isProperty": false
      },
      {
        "id": "Send.Tracking.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns tracking data for sends matching the filter. This is a static call on `Send.Tracking.*` — no `Send.Init()` is required.",
          "params": [
            {
              "name": "filter",
              "description": "WSProxy-style filter object.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of tracking records matching the filter.",
          "syntax": "Send.Tracking.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar sendTracking = Send.Tracking.Retrieve({ Property: \"SendID\", SimpleOperator: \"equals\", Value: 12345 });"
        },
        "callExpr": "Send.Tracking.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "Send.Definition.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Initializes a SendDefinition instance bound to the specified external key. Required before invoking any instance method on the returned object.",
          "params": [
            {
              "name": "key",
              "description": "External key of the send definition.",
              "type": "string"
            }
          ],
          "returnType": "SendDefinitionInstance",
          "returnDescription": "An initialized SendDefinition bound to the specified external key.",
          "syntax": "Send.Definition.Init(key)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar esd = Send.Definition.Init(\"myESD\");"
        },
        "callExpr": "Send.Definition.Init(\"key\")",
        "isProperty": false
      },
      {
        "id": "Send.Definition.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Verification attempted but blocked: creating a send definition programmatically is rejected by this BU. The live CloudPage attempt returned `CreateEmailSendDefinition` SOAP ErrorCode 42116, so the \"OK\" success path could not be proven on this BU.",
          "minArgs": 4,
          "maxArgs": 4,
          "description": "Creates a new send definition.",
          "params": [
            {
              "name": "esdParams",
              "description": "Object with CustomerKey, Name, EmailSubject for the new send definition.",
              "type": "object"
            },
            {
              "name": "sendClassificationKey",
              "description": "CustomerKey of the related send classification.",
              "type": "string"
            },
            {
              "name": "emailKey",
              "description": "CustomerKey of the email message to use.",
              "type": "string"
            },
            {
              "name": "listIds",
              "description": "Array of list IDs targeted by the send definition.",
              "type": "array"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "Send.Definition.Add(esdParams, sendClassificationKey, emailKey, listIds)",
          "example": "Platform.Load(\"core\", \"1\");\nvar esdParams = { CustomerKey: \"example_esd\", Name: \"Example Send Definition\", EmailSubject: \"Sent By Example Send Definition\" };\nSend.Definition.Add(esdParams, \"example_sc_key\", \"example_email_key\", [12345, 12346]);"
        },
        "callExpr": "Send.Definition.Add({}, \"sendClassificationKey\", \"emailKey\", [])",
        "isProperty": false
      },
      {
        "id": "Send.Definition.AddWithDE",
        "category": "Core Library",
        "entry": {
          "name": "AddWithDE",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Verification attempted but blocked: creating a send definition programmatically is rejected by this BU (`CreateEmailSendDefinition` SOAP ErrorCode 42116), so the \"OK\" success path could not be proven on this BU.",
          "minArgs": 5,
          "maxArgs": 5,
          "description": "Creates a new send definition that targets a sendable Data Extension.",
          "params": [
            {
              "name": "esdParams",
              "description": "Object with CustomerKey, Name, EmailSubject for the new send definition.",
              "type": "object"
            },
            {
              "name": "sendClassificationKey",
              "description": "CustomerKey of the related send classification.",
              "type": "string"
            },
            {
              "name": "emailKey",
              "description": "CustomerKey of the email message to use.",
              "type": "string"
            },
            {
              "name": "sendableDataExtensionKey",
              "description": "CustomerKey of the sendable Data Extension.",
              "type": "string"
            },
            {
              "name": "publicationListKey",
              "description": "CustomerKey of the publication list to associate.",
              "type": "string"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "Send.Definition.AddWithDE(esdParams, sendClassificationKey, emailKey, sendableDataExtensionKey, publicationListKey)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar esdParams = { CustomerKey: \"ssjs_de_esd_1c\", Name: \"SSJS DE Test ESD3\", EmailSubject: \"Third send By Test DE Send Definition\" };\nvar status = Send.Definition.AddWithDE(esdParams, \"scKey\", \"test_email\", \"deKey\", \"myPubList\");"
        },
        "callExpr": "Send.Definition.AddWithDE({}, \"sendClassificationKey\", \"emailKey\", \"sendableDataExtensionKey\", \"publicationListKey\")",
        "isProperty": false
      },
      {
        "id": "Send.Definition.AddWithFilterDefinition",
        "category": "Core Library",
        "entry": {
          "name": "AddWithFilterDefinition",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Verification attempted but blocked: creating a send definition programmatically is rejected by this BU (`CreateEmailSendDefinition` SOAP ErrorCode 42116), so the \"OK\" success path could not be proven on this BU.",
          "minArgs": 5,
          "maxArgs": 5,
          "description": "Creates a new send definition that targets the audience defined by a filter definition.",
          "params": [
            {
              "name": "esdParams",
              "description": "Object with CustomerKey, Name, EmailSubject for the new send definition.",
              "type": "object"
            },
            {
              "name": "sendClassificationKey",
              "description": "CustomerKey of the related send classification.",
              "type": "string"
            },
            {
              "name": "emailKey",
              "description": "CustomerKey of the email message to use.",
              "type": "string"
            },
            {
              "name": "filterDefinitionKey",
              "description": "CustomerKey of the filter definition.",
              "type": "string"
            },
            {
              "name": "listId",
              "description": "ID of the list targeted by the filter.",
              "type": "number"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "Send.Definition.AddWithFilterDefinition(esdParams, sendClassificationKey, emailKey, filterDefinitionKey, listId)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar esdParams = { CustomerKey: \"filterDef_esd\", Name: \"Example Filtered Send Definition\", EmailSubject: \"Sent By Filtered Send Definition\" };\nvar status = Send.Definition.AddWithFilterDefinition(esdParams, \"scKey\", \"test_email\", \"fdKey\", 144);"
        },
        "callExpr": "Send.Definition.AddWithFilterDefinition({}, \"sendClassificationKey\", \"emailKey\", \"filterDefinitionKey\", 1)",
        "isProperty": false
      },
      {
        "id": "Send.Definition.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 0,
          "maxArgs": 1,
          "description": "Returns an array of send definitions, optionally filtered. When no filter is supplied, all send definitions are returned.",
          "params": [
            {
              "name": "filter",
              "description": "Optional WSProxy-style filter object: `{Property, SimpleOperator, Value}`.",
              "type": "object",
              "optional": true
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of send definitions matching the filter (or all when no filter is supplied).",
          "syntax": "Send.Definition.Retrieve([filter])",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar esd = Send.Definition.Retrieve({ Property: \"CustomerKey\", SimpleOperator: \"equals\", Value: \"ssjs_test_esd\" });"
        },
        "callExpr": "Send.Definition.Retrieve()",
        "isProperty": false
      },
      {
        "id": "Send.Definition.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Verification attempted but blocked: send-definition writes are rejected by this BU (`CreateEmailSendDefinition` SOAP ErrorCode 42116), so the update success path could not be proven on this BU.",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Updates the previously initialized send definition.",
          "params": [
            {
              "name": "properties",
              "description": "Properties to update.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<SendDefinitionInstance>.Update(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar sendDef = Send.Definition.Init(\"MY_SEND_DEF_KEY\");\nvar result = sendDef.Update({ Name: \"Updated Send Definition Name\" });"
        },
        "callExpr": "_sendDef.Update({})",
        "isProperty": false
      },
      {
        "id": "Send.Definition.Remove",
        "category": "Core Library",
        "entry": {
          "name": "Remove",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Verification attempted but blocked: send-definition writes are rejected by this BU (`CreateEmailSendDefinition` SOAP ErrorCode 42116), so the delete success path could not be proven on this BU.",
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Deletes the previously initialized send definition.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<SendDefinitionInstance>.Remove()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar esd = Send.Definition.Init(\"myESD\");\nvar status = esd.Remove();"
        },
        "callExpr": "_sendDef.Remove()",
        "isProperty": false
      },
      {
        "id": "Send.Definition.Send",
        "category": "Core Library",
        "entry": {
          "name": "Send",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Verification attempted but blocked: triggering a send programmatically is rejected by this BU (send-definition creation policy, `CreateEmailSendDefinition` SOAP ErrorCode 42116), so the send success path could not be proven on this BU.",
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Sends email messages to the lists associated with the previously initialized send definition.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<SendDefinitionInstance>.Send()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar esd = Send.Definition.Init(\"myESD\");\nvar status = esd.Send();"
        },
        "callExpr": "_sendDef.Send()",
        "isProperty": false
      },
      {
        "id": "TriggeredSend.Init",
        "category": "Core Library",
        "entry": {
          "name": "Init",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Initializes a TriggeredSend instance bound to the specified external key. Required before invoking any instance method on the returned object. Note: TriggeredSend methods cannot be used in the context of an email message or email preview.",
          "params": [
            {
              "name": "key",
              "description": "External key of the triggered send definition.",
              "type": "string"
            }
          ],
          "returnType": "TriggeredSendInstance",
          "returnDescription": "An initialized TriggeredSend bound to the specified external key.",
          "syntax": "TriggeredSend.Init(key)",
          "example": "Platform.Load(\"core\", \"1\");\nvar triggeredSend = TriggeredSend.Init(\"support\");"
        },
        "callExpr": "TriggeredSend.Init(\"key\")",
        "isProperty": false
      },
      {
        "id": "TriggeredSend.Add",
        "category": "Core Library",
        "entry": {
          "name": "Add",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Verification attempted but blocked: the QA test BU rejects programmatic Triggered Send Definition creation. On a live CloudPage, `TriggeredSend.Add` threw `Error adding TSD.` and the equivalent WSProxy `CreateTriggeredSendDefinition` returned an opaque server exception (ErrorCode 2, no actionable StatusMessage) even with a valid classic email, Default SendClassification, and the All Subscribers list. No working TSD could be provisioned on this BU, so the documented `TriggeredSendInstance` return could not be proven.",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Creates a new triggered send definition from the supplied properties and returns an initialized TriggeredSend instance. Note: unlike most static `Add` methods, this returns a `TriggeredSendInstance`, not `\"OK\"`.",
          "params": [
            {
              "name": "properties",
              "description": "JSON object describing the new triggered send definition (Name, CustomerKey, FromName, FromAddress, EmailID, SendClassificationID, ...).",
              "type": "object"
            }
          ],
          "returnType": "TriggeredSendInstance",
          "returnDescription": "An initialized TriggeredSend bound to the newly-created triggered send definition.",
          "syntax": "TriggeredSend.Add(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar newTSD = {\n    Name: \"Test TSD\",\n    CustomerKey: \"ssjs_tsd_key\",\n    FromName: \"Test From Name\",\n    FromAddress: \"me@example.com\",\n    EmailID: 12345,\n    SendClassificationID: 54321\n};\nvar tsd = TriggeredSend.Add(newTSD);"
        },
        "callExpr": "TriggeredSend.Add({})",
        "isProperty": false
      },
      {
        "id": "TriggeredSend.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns an array of triggered send definitions matching the specified filter.",
          "params": [
            {
              "name": "filter",
              "description": "PascalCase WSProxy-style filter object: `{Property, SimpleOperator, Value}`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of triggered send definitions matching the filter.",
          "syntax": "TriggeredSend.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar results = TriggeredSend.Retrieve({ Property: \"CustomerKey\", SimpleOperator: \"equals\", Value: \"ssjs_tsd_key\" });"
        },
        "callExpr": "TriggeredSend.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "TriggeredSend.Update",
        "category": "Core Library",
        "entry": {
          "name": "Update",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Verification attempted but blocked: no Triggered Send Definition could be created on the QA test BU (see TriggeredSend.Add), so there was no active TSD to update. On a live CloudPage the call returned the string `\"Error\"` with `LastMessage` = \"Unable to access the specified triggered send definition\"; the documented `\"OK\"` success path could not be proven without a valid TSD.",
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Updates the previously initialized triggered send definition.",
          "params": [
            {
              "name": "properties",
              "description": "Attributes to change on the triggered send definition.",
              "type": "object"
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<TriggeredSendInstance>.Update(properties)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar tsd = TriggeredSend.Init(\"triggeredSend\");\nvar status = tsd.Update({ Name: \"Updated TSD Name\" });"
        },
        "callExpr": "_triggeredSend.Update({})",
        "isProperty": false
      },
      {
        "id": "TriggeredSend.Start",
        "category": "Core Library",
        "entry": {
          "name": "Start",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Verification attempted but blocked: no Triggered Send Definition could be created on the QA test BU (see TriggeredSend.Add), so there was no paused TSD to reactivate. On a live CloudPage the call returned the string `\"Error\"` with `LastMessage` = \"Unable to access the specified triggered send definition\"; the documented `\"OK\"` success path could not be proven.",
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Starts (reactivates) a paused triggered send definition.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<TriggeredSendInstance>.Start()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar ts = TriggeredSend.Init(\"MY_TRIGGERED_SEND_KEY\");\nvar result = ts.Start();"
        },
        "callExpr": "_triggeredSend.Start()",
        "isProperty": false
      },
      {
        "id": "TriggeredSend.Pause",
        "category": "Core Library",
        "entry": {
          "name": "Pause",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Verification attempted but blocked: no Triggered Send Definition could be created on the QA test BU (see TriggeredSend.Add), so there was no active TSD to pause. On a live CloudPage the call returned the string `\"Error\"` with `LastMessage` = \"Unable to access the specified triggered send definition\"; the documented `\"OK\"` success path could not be proven.",
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Pauses an active triggered send definition.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<TriggeredSendInstance>.Pause()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar ts = TriggeredSend.Init(\"MY_TRIGGERED_SEND_KEY\");\nvar status = ts.Pause();"
        },
        "callExpr": "_triggeredSend.Pause()",
        "isProperty": false
      },
      {
        "id": "TriggeredSend.Publish",
        "category": "Core Library",
        "entry": {
          "name": "Publish",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Verification attempted but blocked: no Triggered Send Definition could be created on the QA test BU (see TriggeredSend.Add), so there was no draft/inactive TSD to publish. On a live CloudPage the call returned the string `\"Error\"` with `LastMessage` = \"Unable to access the specified triggered send definition\"; the documented `\"OK\"` success path could not be proven.",
          "minArgs": 0,
          "maxArgs": 0,
          "description": "Publishes a triggered send definition, making it active and ready to accept sends. Use this to move a definition from Draft / Inactive to Active.",
          "params": [],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or throws on failure.",
          "syntax": "<TriggeredSendInstance>.Publish()",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar ts = TriggeredSend.Init(\"MY_TRIGGERED_SEND_KEY\");\nvar result = ts.Publish();"
        },
        "callExpr": "_triggeredSend.Publish()",
        "isProperty": false
      },
      {
        "id": "TriggeredSend.Send",
        "category": "Core Library",
        "entry": {
          "name": "Send",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": false,
          "verificationBlocked": true,
          "verificationBlockedReason": "bu-guardrail",
          "officialDocsNote": "Verification attempted but blocked: no Triggered Send Definition could be created on the QA test BU (see TriggeredSend.Add), so there was no active TSD to send through. On a live CloudPage the call returned the string `\"Error\"` with `LastMessage` = \"Unable to access the specified triggered send definition\"; the documented `\"OK\"` success path and the actual send side effect could not be proven.",
          "minArgs": 1,
          "maxArgs": 2,
          "description": "Sends an email using the previously initialized triggered send definition. On failure, inspect `<TriggeredSendInstance>.LastMessage` for error details.",
          "params": [
            {
              "name": "emailAddress",
              "description": "Email address to send to. SubscriberKey is **not** supported.",
              "type": "string"
            },
            {
              "name": "sendTimeAttributes",
              "description": "Optional object with dynamic attributes to include in the send.",
              "type": "object",
              "optional": true
            }
          ],
          "returnType": "string",
          "returnEnum": [
            "OK"
          ],
          "returnDescription": "Returns \"OK\" on success or \"Error\"; throws on a hard failure.",
          "syntax": "<TriggeredSendInstance>.Send(emailAddress, [sendTimeAttributes])",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar ts = TriggeredSend.Init(\"triggeredSend\");\nvar status = ts.Send(\"aruiz@example.com\", { FirstName: \"Angel\", CouponCode: \"AA1AF\" });\nif (status != \"OK\") { var message = ts.LastMessage; }"
        },
        "callExpr": "_triggeredSend.Send(\"emailAddress\")",
        "isProperty": false
      },
      {
        "id": "TriggeredSend.Tracking.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 0,
          "maxArgs": 1,
          "description": "Returns tracking data for the previously initialized triggered send definition.",
          "params": [
            {
              "name": "filter",
              "description": "Optional WSProxy-style filter object.",
              "type": "object",
              "optional": true
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of tracking records.",
          "syntax": "<TriggeredSendInstance>.Tracking.Retrieve([filter])",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar tsd = TriggeredSend.Init(\"MyTSDKey\");\nvar tsdTracking = tsd.Tracking.Retrieve();"
        },
        "callExpr": "_tsTracking.Retrieve()",
        "isProperty": false
      },
      {
        "id": "TriggeredSend.Tracking.Clicks.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Returns click tracking information for the previously initialized triggered send definition.",
          "params": [
            {
              "name": "filter",
              "description": "WSProxy-style filter restricting click results.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of click tracking records matching the filter.",
          "syntax": "<TriggeredSendInstance>.Tracking.Clicks.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar tsd = TriggeredSend.Init(\"MyTSDKey\");\nvar results = tsd.Tracking.Clicks.Retrieve({ Property: \"SendUrlID\", SimpleOperator: \"equals\", Value: 12345 });"
        },
        "callExpr": "_tsClicks.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "TriggeredSend.Tracking.TotalByInterval.Retrieve",
        "category": "Core Library",
        "entry": {
          "name": "Retrieve",
          "isStatic": false,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 4,
          "maxArgs": 4,
          "description": "Returns aggregated tracking data for the previously initialized triggered send. Aggregates by `type` over the date range, grouped by `groupBy`.",
          "params": [
            {
              "name": "type",
              "description": "Type of data to aggregate.",
              "type": "string",
              "enum": [
                "Send",
                "Open",
                "Click",
                "Bounce",
                "Unsubscribe"
              ]
            },
            {
              "name": "startDate",
              "description": "Start date of the data period (MM-DD-YYYY).",
              "type": "string"
            },
            {
              "name": "endDate",
              "description": "End date of the data period (MM-DD-YYYY).",
              "type": "string"
            },
            {
              "name": "groupBy",
              "description": "Interval used to aggregate data.",
              "type": "string",
              "enum": [
                "day",
                "hour"
              ]
            }
          ],
          "returnType": "object[]",
          "returnDescription": "List of aggregated tracking records.",
          "syntax": "<TriggeredSendInstance>.Tracking.TotalByInterval.Retrieve(type, startDate, endDate, groupBy)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar tsd = TriggeredSend.Init(\"MyTSDKey\");\nvar results = tsd.Tracking.TotalByInterval.Retrieve(\"Click\", \"07-01-2010\", \"07-31-2010\", \"day\");"
        },
        "callExpr": "_tsInterval.Retrieve(\"type\", \"startDate\", \"endDate\", \"groupBy\")",
        "isProperty": false
      }
    ],
    "Events": [
      {
        "id": "BounceEvent.Retrieve",
        "category": "Events",
        "entry": {
          "name": "Retrieve",
          "owner": "BounceEvent",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Retrieves bounce event data for message sends matching the specified filter.",
          "params": [
            {
              "name": "filter",
              "description": "Filter criteria object with properties: `Property`, `SimpleOperator`, `Value`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "syntax": "BounceEvent.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar bounces = BounceEvent.Retrieve({ Property: \"SendID\", SimpleOperator: \"equals\", Value: 12345 });\nWrite(Stringify(bounces));"
        },
        "callExpr": "BounceEvent.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "ClickEvent.Retrieve",
        "category": "Events",
        "entry": {
          "name": "Retrieve",
          "owner": "ClickEvent",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Retrieves click tracking event data for message sends matching the specified filter.",
          "params": [
            {
              "name": "filter",
              "description": "Filter criteria object with properties: `Property`, `SimpleOperator`, `Value`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "syntax": "ClickEvent.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar clicks = ClickEvent.Retrieve({ Property: \"SendID\", SimpleOperator: \"equals\", Value: 12345 });\nWrite(Stringify(clicks));"
        },
        "callExpr": "ClickEvent.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "ForwardedEmailEvent.Retrieve",
        "category": "Events",
        "entry": {
          "name": "Retrieve",
          "owner": "ForwardedEmailEvent",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Retrieves forwarded email event data for message sends matching the specified filter.",
          "params": [
            {
              "name": "filter",
              "description": "Filter criteria object with properties: `Property`, `SimpleOperator`, `Value`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "syntax": "ForwardedEmailEvent.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar forwards = ForwardedEmailEvent.Retrieve({ Property: \"SendID\", SimpleOperator: \"equals\", Value: 12345 });\nWrite(Stringify(forwards));"
        },
        "callExpr": "ForwardedEmailEvent.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "ForwardedEmailOptInEvent.Retrieve",
        "category": "Events",
        "entry": {
          "name": "Retrieve",
          "owner": "ForwardedEmailOptInEvent",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Retrieves forwarded email opt-in event data for message sends matching the specified filter.",
          "params": [
            {
              "name": "filter",
              "description": "Filter criteria object with properties: `Property`, `SimpleOperator`, `Value`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "syntax": "ForwardedEmailOptInEvent.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar optIns = ForwardedEmailOptInEvent.Retrieve({ Property: \"SendID\", SimpleOperator: \"equals\", Value: 12345 });\nWrite(Stringify(optIns));"
        },
        "callExpr": "ForwardedEmailOptInEvent.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "NotSentEvent.Retrieve",
        "category": "Events",
        "entry": {
          "name": "Retrieve",
          "owner": "NotSentEvent",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Retrieves not-sent event data for message sends matching the specified filter.",
          "params": [
            {
              "name": "filter",
              "description": "Filter criteria object with properties: `Property`, `SimpleOperator`, `Value`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "syntax": "NotSentEvent.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar notSent = NotSentEvent.Retrieve({ Property: \"SendID\", SimpleOperator: \"equals\", Value: 12345 });\nWrite(Stringify(notSent));"
        },
        "callExpr": "NotSentEvent.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "OpenEvent.Retrieve",
        "category": "Events",
        "entry": {
          "name": "Retrieve",
          "owner": "OpenEvent",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Retrieves open tracking event data for message sends matching the specified filter.",
          "params": [
            {
              "name": "filter",
              "description": "Filter criteria object with properties: `Property`, `SimpleOperator`, `Value`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "syntax": "OpenEvent.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar opens = OpenEvent.Retrieve({ Property: \"SendID\", SimpleOperator: \"equals\", Value: 12345 });\nWrite(Stringify(opens));"
        },
        "callExpr": "OpenEvent.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "SentEvent.Retrieve",
        "category": "Events",
        "entry": {
          "name": "Retrieve",
          "owner": "SentEvent",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Retrieves sent event data for message sends matching the specified filter.",
          "params": [
            {
              "name": "filter",
              "description": "Filter criteria object with properties: `Property`, `SimpleOperator`, `Value`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "syntax": "SentEvent.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar sent = SentEvent.Retrieve({ Property: \"SendID\", SimpleOperator: \"equals\", Value: 12345 });\nWrite(Stringify(sent));"
        },
        "callExpr": "SentEvent.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "SurveyEvent.Retrieve",
        "category": "Events",
        "entry": {
          "name": "Retrieve",
          "owner": "SurveyEvent",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Retrieves survey response event data for message sends matching the specified filter.",
          "params": [
            {
              "name": "filter",
              "description": "Filter criteria object with properties: `Property`, `SimpleOperator`, `Value`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "syntax": "SurveyEvent.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar surveys = SurveyEvent.Retrieve({ Property: \"SendID\", SimpleOperator: \"equals\", Value: 12345 });\nWrite(Stringify(surveys));"
        },
        "callExpr": "SurveyEvent.Retrieve({})",
        "isProperty": false
      },
      {
        "id": "UnsubEvent.Retrieve",
        "category": "Events",
        "entry": {
          "name": "Retrieve",
          "owner": "UnsubEvent",
          "isStatic": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "minArgs": 1,
          "maxArgs": 1,
          "description": "Retrieves unsubscribe event data for message sends matching the specified filter.",
          "params": [
            {
              "name": "filter",
              "description": "Filter criteria object with properties: `Property`, `SimpleOperator`, `Value`.",
              "type": "object"
            }
          ],
          "returnType": "object[]",
          "syntax": "UnsubEvent.Retrieve(filter)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar unsubs = UnsubEvent.Retrieve({ Property: \"SendID\", SimpleOperator: \"equals\", Value: 12345 });\nWrite(Stringify(unsubs));"
        },
        "callExpr": "UnsubEvent.Retrieve({})",
        "isProperty": false
      }
    ],
    "ECMAScript": [
      {
        "id": "Array.prototype.join",
        "category": "ECMAScript",
        "entry": {
          "name": "join",
          "owner": "Array.prototype",
          "esVersion": 3,
          "description": "Joins all array elements into a string, separated by the specified delimiter.",
          "params": [
            {
              "name": "separator",
              "description": "Delimiter string (default: \",\")",
              "type": "string",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "Array.join([separator])",
          "example": "var arr = [\"a\", \"b\", \"c\"];\nvar str = arr.join(\", \"); // \"a, b, c\""
        },
        "callExpr": "_arr.join()",
        "isProperty": false
      },
      {
        "id": "Array.prototype.push",
        "category": "ECMAScript",
        "entry": {
          "name": "push",
          "owner": "Array.prototype",
          "esVersion": 3,
          "description": "Appends one or more elements to the end of an array and returns the new length.",
          "params": [
            {
              "name": "element",
              "description": "Element to append (repeat for multiple)",
              "type": "any"
            }
          ],
          "returnType": "number",
          "syntax": "Array.push(element[, ...])",
          "example": "var arr = [1, 2];\narr.push(3);\n// arr is now [1, 2, 3]"
        },
        "callExpr": "_arr.push()",
        "isProperty": false
      },
      {
        "id": "Array.prototype.pop",
        "category": "ECMAScript",
        "entry": {
          "name": "pop",
          "owner": "Array.prototype",
          "esVersion": 3,
          "description": "Removes and returns the last element from an array.",
          "params": [],
          "returnType": "any",
          "syntax": "Array.pop()",
          "example": "var arr = [1, 2, 3];\nvar last = arr.pop(); // 3"
        },
        "callExpr": "_arr.pop()",
        "isProperty": false
      },
      {
        "id": "Array.prototype.shift",
        "category": "ECMAScript",
        "entry": {
          "name": "shift",
          "owner": "Array.prototype",
          "esVersion": 3,
          "description": "Removes and returns the first element from an array.",
          "params": [],
          "returnType": "any",
          "syntax": "Array.shift()",
          "example": "var arr = [1, 2, 3];\nvar first = arr.shift(); // 1"
        },
        "callExpr": "_arr.shift()",
        "isProperty": false
      },
      {
        "id": "Array.prototype.unshift",
        "category": "ECMAScript",
        "entry": {
          "name": "unshift",
          "owner": "Array.prototype",
          "esVersion": 3,
          "description": "Inserts one or more elements at the start of an array and returns the new length.",
          "params": [
            {
              "name": "element",
              "description": "Element to prepend (repeat for multiple)",
              "type": "any"
            }
          ],
          "returnType": "number",
          "syntax": "Array.unshift(element[, ...])",
          "example": "var arr = [2, 3];\narr.unshift(1);\n// arr is now [1, 2, 3]"
        },
        "callExpr": "_arr.unshift()",
        "isProperty": false
      },
      {
        "id": "Array.prototype.concat",
        "category": "ECMAScript",
        "entry": {
          "name": "concat",
          "owner": "Array.prototype",
          "esVersion": 3,
          "description": "Returns a new array formed by merging this array with other arrays or values.",
          "params": [
            {
              "name": "value",
              "description": "Array or value to concatenate",
              "type": "any"
            }
          ],
          "returnType": "array",
          "syntax": "Array.concat(value[, ...])",
          "example": "var a = [1, 2];\nvar b = [3, 4];\nvar c = a.concat(b); // [1, 2, 3, 4]"
        },
        "callExpr": "_arr.concat()",
        "isProperty": false
      },
      {
        "id": "Array.prototype.slice",
        "category": "ECMAScript",
        "entry": {
          "name": "slice",
          "owner": "Array.prototype",
          "esVersion": 3,
          "description": "Returns a shallow copy of a portion of an array.",
          "caveat": "The no-argument form arr.slice() throws in the SFMC engine. Always pass at least a start index, e.g. arr.slice(0), to copy the whole array.",
          "params": [
            {
              "name": "start",
              "description": "Start index (0-based, negative counts from end)",
              "type": "number"
            },
            {
              "name": "end",
              "description": "End index (exclusive)",
              "type": "number",
              "optional": true
            }
          ],
          "returnType": "array",
          "syntax": "Array.slice([start[, end]])",
          "example": "var arr = [1, 2, 3, 4, 5];\nvar sub = arr.slice(1, 3); // [2, 3]"
        },
        "callExpr": "_arr.slice()",
        "isProperty": false
      },
      {
        "id": "Array.prototype.sort",
        "category": "ECMAScript",
        "entry": {
          "name": "sort",
          "owner": "Array.prototype",
          "esVersion": 3,
          "description": "Sorts the array in place and returns it. Default sort is lexicographic.",
          "caveat": "The no-argument form arr.sort() throws in the SFMC engine. Always pass an explicit compare function, e.g. arr.sort(function (a, b) { return a < b ? -1 : a > b ? 1 : 0; }).",
          "params": [
            {
              "name": "compareFn",
              "description": "Optional comparison function (a, b) returning negative, 0, or positive",
              "type": "function",
              "optional": true
            }
          ],
          "returnType": "array",
          "syntax": "Array.sort([compareFn])",
          "example": "var arr = [3, 1, 2];\narr.sort(function(a, b) { return a - b; }); // [1, 2, 3]"
        },
        "callExpr": "_arr.sort()",
        "isProperty": false
      },
      {
        "id": "Array.prototype.reverse",
        "category": "ECMAScript",
        "entry": {
          "name": "reverse",
          "owner": "Array.prototype",
          "esVersion": 3,
          "description": "Reverses the elements of an array in place.",
          "params": [],
          "returnType": "array",
          "syntax": "Array.reverse()",
          "example": "var arr = [1, 2, 3];\narr.reverse(); // [3, 2, 1]"
        },
        "callExpr": "_arr.reverse()",
        "isProperty": false
      },
      {
        "id": "Array.prototype.length",
        "category": "ECMAScript",
        "entry": {
          "name": "length",
          "owner": "Array.prototype",
          "esVersion": 3,
          "description": "Returns the number of elements in the array.",
          "params": [],
          "returnType": "number",
          "syntax": "Array.length",
          "example": "var arr = [1, 2, 3];\nWrite(arr.length); // 3"
        },
        "callExpr": "_arr.length",
        "isProperty": true
      },
      {
        "id": "Array.prototype.toLocaleString",
        "category": "ECMAScript",
        "entry": {
          "name": "toLocaleString",
          "owner": "Array.prototype",
          "esVersion": 3,
          "description": "Returns a string representing the array elements, joined by a locale-specific separator.",
          "params": [],
          "returnType": "string",
          "syntax": "Array.toLocaleString()",
          "example": "var arr = [1, 2, 3];\nWrite(arr.toLocaleString()); // \"1,2,3\""
        },
        "callExpr": "_arr.toLocaleString()",
        "isProperty": false
      },
      {
        "id": "String.prototype.charAt",
        "category": "ECMAScript",
        "entry": {
          "name": "charAt",
          "owner": "String.prototype",
          "esVersion": 3,
          "description": "Returns the character at the specified index.",
          "caveat": "Out-of-range indices are broken in the SFMC engine: instead of the spec-mandated empty string \"\", str.charAt(i) for i >= str.length returns the LAST character of the string (e.g. \"Hello\".charAt(99) returns \"o\"). Guard the index against str.length before calling. Bracket access str[i] for an out-of-range index throws \"Index was outside the bounds of the array\" rather than returning undefined.",
          "params": [
            {
              "name": "index",
              "description": "Zero-based character index",
              "type": "number"
            }
          ],
          "returnType": "string",
          "syntax": "String.charAt(index)",
          "example": "var str = \"Hello\";\nWrite(str.charAt(1)); // \"e\""
        },
        "callExpr": "_str.charAt()",
        "isProperty": false
      },
      {
        "id": "String.prototype.charCodeAt",
        "category": "ECMAScript",
        "entry": {
          "name": "charCodeAt",
          "owner": "String.prototype",
          "esVersion": 3,
          "description": "Returns the UTF-16 code unit at the specified index.",
          "params": [
            {
              "name": "index",
              "description": "Zero-based character index",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "String.charCodeAt(index)",
          "example": "var str = \"A\";\nWrite(str.charCodeAt(0)); // 65"
        },
        "callExpr": "_str.charCodeAt()",
        "isProperty": false
      },
      {
        "id": "String.prototype.indexOf",
        "category": "ECMAScript",
        "entry": {
          "name": "indexOf",
          "owner": "String.prototype",
          "esVersion": 3,
          "description": "Returns the index of the first occurrence of a substring, or -1 if not found.",
          "params": [
            {
              "name": "searchValue",
              "description": "Substring to search for",
              "type": "string"
            },
            {
              "name": "fromIndex",
              "description": "Index to start the search from",
              "type": "number",
              "optional": true
            }
          ],
          "returnType": "number",
          "syntax": "String.indexOf(searchValue[, fromIndex])",
          "example": "var str = \"Hello, world!\";\nWrite(str.indexOf(\"world\")); // 7"
        },
        "callExpr": "_str.indexOf()",
        "isProperty": false
      },
      {
        "id": "String.prototype.lastIndexOf",
        "category": "ECMAScript",
        "entry": {
          "name": "lastIndexOf",
          "owner": "String.prototype",
          "esVersion": 3,
          "description": "Returns the index of the last occurrence of a substring, or -1 if not found.",
          "params": [
            {
              "name": "searchValue",
              "description": "Substring to search for",
              "type": "string"
            },
            {
              "name": "fromIndex",
              "description": "Index to search backwards from",
              "type": "number",
              "optional": true
            }
          ],
          "returnType": "number",
          "syntax": "String.lastIndexOf(searchValue[, fromIndex])",
          "example": "var str = \"abcabc\";\nWrite(str.lastIndexOf(\"b\")); // 4"
        },
        "callExpr": "_str.lastIndexOf()",
        "isProperty": false
      },
      {
        "id": "String.prototype.match",
        "category": "ECMAScript",
        "entry": {
          "name": "match",
          "owner": "String.prototype",
          "esVersion": 3,
          "description": "Matches a string against a regular expression and returns the matches array.",
          "params": [
            {
              "name": "regexp",
              "description": "Regular expression to match against",
              "type": "RegExp"
            }
          ],
          "returnType": "array",
          "syntax": "String.match(regexp)",
          "example": "var str = \"test@example.com\";\nvar matches = str.match(/[\\w.]+@[\\w.]+/);\nif (matches) { Write(matches[0]); }"
        },
        "callExpr": "_str.match()",
        "isProperty": false
      },
      {
        "id": "String.prototype.replace",
        "category": "ECMAScript",
        "entry": {
          "name": "replace",
          "owner": "String.prototype",
          "esVersion": 3,
          "description": "Returns a new string with matches replaced by a replacement string or function.",
          "params": [
            {
              "name": "searchValue",
              "description": "Substring or RegExp to find",
              "type": "any"
            },
            {
              "name": "replaceValue",
              "description": "Replacement string",
              "type": "string"
            }
          ],
          "returnType": "string",
          "syntax": "String.replace(searchValue, replaceValue)",
          "example": "var str = \"Hello, world!\";\nWrite(str.replace(\"world\", \"SSJS\")); // \"Hello, SSJS!\""
        },
        "callExpr": "_str.replace()",
        "isProperty": false
      },
      {
        "id": "String.prototype.search",
        "category": "ECMAScript",
        "entry": {
          "name": "search",
          "owner": "String.prototype",
          "esVersion": 3,
          "description": "Searches for a match and returns the index of the first match, or -1.",
          "caveat": "String.search is unreliable in the SFMC engine: a no-match returns 0 instead of the spec-mandated -1, and some real matches return the wrong index (observed returning 0 or -1 where the match is elsewhere). Use String.match or RegExp.test to detect a match, or apply the search polyfill.",
          "params": [
            {
              "name": "regexp",
              "description": "Regular expression to search for",
              "type": "RegExp"
            }
          ],
          "returnType": "number",
          "syntax": "String.search(regexp)",
          "example": "var str = \"foo123bar\";\nWrite(str.search(/\\d+/)); // 3"
        },
        "callExpr": "_str.search()",
        "isProperty": false
      },
      {
        "id": "String.prototype.slice",
        "category": "ECMAScript",
        "entry": {
          "name": "slice",
          "owner": "String.prototype",
          "esVersion": 3,
          "description": "Extracts a section of a string and returns it as a new string.",
          "params": [
            {
              "name": "start",
              "description": "Start index (negative counts from end)",
              "type": "number"
            },
            {
              "name": "end",
              "description": "End index (exclusive)",
              "type": "number",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "String.slice(start[, end])",
          "example": "var str = \"Hello, world!\";\nWrite(str.slice(7, 12)); // \"world\""
        },
        "callExpr": "_str.slice()",
        "isProperty": false
      },
      {
        "id": "String.prototype.split",
        "category": "ECMAScript",
        "entry": {
          "name": "split",
          "owner": "String.prototype",
          "esVersion": 3,
          "description": "Splits a string into an array of substrings using a separator.",
          "caveat": "The empty-separator form str.split(\"\") does NOT split into characters in the SFMC engine (it returns the whole string as a single element). To get characters, loop with charAt.",
          "params": [
            {
              "name": "separator",
              "description": "String or RegExp to split on",
              "type": "any"
            },
            {
              "name": "limit",
              "description": "Maximum number of substrings to return",
              "type": "number",
              "optional": true
            }
          ],
          "returnType": "array",
          "syntax": "String.split(separator[, limit])",
          "example": "var str = \"a,b,c\";\nvar parts = str.split(\",\"); // [\"a\", \"b\", \"c\"]"
        },
        "callExpr": "_str.split()",
        "isProperty": false
      },
      {
        "id": "String.prototype.substring",
        "category": "ECMAScript",
        "entry": {
          "name": "substring",
          "owner": "String.prototype",
          "esVersion": 3,
          "description": "Returns the characters between two indices of a string.",
          "params": [
            {
              "name": "start",
              "description": "Start index (inclusive)",
              "type": "number"
            },
            {
              "name": "end",
              "description": "End index (exclusive)",
              "type": "number",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "String.substring(start[, end])",
          "example": "var str = \"Hello, world!\";\nWrite(str.substring(7, 12)); // \"world\""
        },
        "callExpr": "_str.substring()",
        "isProperty": false
      },
      {
        "id": "String.prototype.toLowerCase",
        "category": "ECMAScript",
        "entry": {
          "name": "toLowerCase",
          "owner": "String.prototype",
          "esVersion": 3,
          "description": "Returns the string converted to lowercase.",
          "params": [],
          "returnType": "string",
          "syntax": "String.toLowerCase()",
          "example": "var str = \"Hello World\";\nWrite(str.toLowerCase()); // \"hello world\""
        },
        "callExpr": "_str.toLowerCase()",
        "isProperty": false
      },
      {
        "id": "String.prototype.toLocaleLowerCase",
        "category": "ECMAScript",
        "entry": {
          "name": "toLocaleLowerCase",
          "owner": "String.prototype",
          "esVersion": 3,
          "description": "Returns the string converted to lowercase according to host locale mappings.",
          "params": [],
          "returnType": "string",
          "syntax": "String.toLocaleLowerCase()",
          "example": "var str = \"AbC\";\nWrite(str.toLocaleLowerCase()); // \"abc\""
        },
        "callExpr": "_str.toLocaleLowerCase()",
        "isProperty": false
      },
      {
        "id": "String.prototype.toUpperCase",
        "category": "ECMAScript",
        "entry": {
          "name": "toUpperCase",
          "owner": "String.prototype",
          "esVersion": 3,
          "description": "Returns the string converted to uppercase.",
          "params": [],
          "returnType": "string",
          "syntax": "String.toUpperCase()",
          "example": "var str = \"Hello World\";\nWrite(str.toUpperCase()); // \"HELLO WORLD\""
        },
        "callExpr": "_str.toUpperCase()",
        "isProperty": false
      },
      {
        "id": "String.prototype.concat",
        "category": "ECMAScript",
        "entry": {
          "name": "concat",
          "owner": "String.prototype",
          "esVersion": 3,
          "description": "Returns a new string formed by concatenating this string with one or more additional strings.",
          "params": [
            {
              "name": "string",
              "description": "String to append (repeat for multiple)",
              "type": "string"
            }
          ],
          "returnType": "string",
          "syntax": "String.concat(string[, ...])",
          "example": "var str = \"Hello\";\nWrite(str.concat(\", \", \"world!\")); // \"Hello, world!\""
        },
        "callExpr": "_str.concat()",
        "isProperty": false
      },
      {
        "id": "String.prototype.localeCompare",
        "category": "ECMAScript",
        "entry": {
          "name": "localeCompare",
          "owner": "String.prototype",
          "esVersion": 3,
          "description": "Compares this string with another and returns a negative number if it sorts before, a positive number if it sorts after, or 0 if they are equivalent.",
          "params": [
            {
              "name": "compareString",
              "description": "The string to compare against",
              "type": "string"
            }
          ],
          "returnType": "number",
          "syntax": "String.localeCompare(compareString)",
          "example": "Write('a'.localeCompare('b')); // -1"
        },
        "callExpr": "_str.localeCompare()",
        "isProperty": false
      },
      {
        "id": "String.prototype.length",
        "category": "ECMAScript",
        "entry": {
          "name": "length",
          "owner": "String.prototype",
          "esVersion": 3,
          "description": "Returns the number of characters in the string.",
          "params": [],
          "returnType": "number",
          "syntax": "String.length",
          "example": "var str = \"Hello\";\nWrite(str.length); // 5"
        },
        "callExpr": "_str.length",
        "isProperty": true
      },
      {
        "id": "Math.abs",
        "category": "ECMAScript",
        "entry": {
          "name": "abs",
          "owner": "Math",
          "esVersion": 3,
          "description": "Returns the absolute value of a number.",
          "params": [
            {
              "name": "x",
              "description": "A number",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.abs(x)",
          "example": "Write(Math.abs(-5)); // 5"
        },
        "callExpr": "Math.abs()",
        "isProperty": false
      },
      {
        "id": "Math.ceil",
        "category": "ECMAScript",
        "entry": {
          "name": "ceil",
          "owner": "Math",
          "esVersion": 3,
          "description": "Rounds a number up to the next integer.",
          "params": [
            {
              "name": "x",
              "description": "A number",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.ceil(x)",
          "example": "Write(Math.ceil(4.1)); // 5"
        },
        "callExpr": "Math.ceil()",
        "isProperty": false
      },
      {
        "id": "Math.floor",
        "category": "ECMAScript",
        "entry": {
          "name": "floor",
          "owner": "Math",
          "esVersion": 3,
          "description": "Rounds a number down to the nearest integer.",
          "params": [
            {
              "name": "x",
              "description": "A number",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.floor(x)",
          "example": "Write(Math.floor(4.9)); // 4"
        },
        "callExpr": "Math.floor()",
        "isProperty": false
      },
      {
        "id": "Math.max",
        "category": "ECMAScript",
        "entry": {
          "name": "max",
          "owner": "Math",
          "esVersion": 3,
          "description": "Returns the largest of the supplied numbers.",
          "caveat": "The variadic form throws in the SFMC engine when passed 3+ arguments, and the no-argument Math.max() returns 0 instead of -Infinity. Compare two values at a time, e.g. Math.max(Math.max(a, b), c), or fold with a loop.",
          "params": [
            {
              "name": "values",
              "description": "Numbers to compare (variadic)",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.max(value1[, value2, ...])",
          "example": "Write(Math.max(1, 5)); // 5"
        },
        "callExpr": "Math.max()",
        "isProperty": false
      },
      {
        "id": "Math.min",
        "category": "ECMAScript",
        "entry": {
          "name": "min",
          "owner": "Math",
          "esVersion": 3,
          "description": "Returns the smallest of the supplied numbers.",
          "caveat": "The variadic form throws in the SFMC engine when passed 3+ arguments, and the no-argument Math.min() returns 0 instead of +Infinity. Compare two values at a time, e.g. Math.min(Math.min(a, b), c), or fold with a loop.",
          "params": [
            {
              "name": "values",
              "description": "Numbers to compare (variadic)",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.min(value1[, value2, ...])",
          "example": "Write(Math.min(1, 5)); // 1"
        },
        "callExpr": "Math.min()",
        "isProperty": false
      },
      {
        "id": "Math.pow",
        "category": "ECMAScript",
        "entry": {
          "name": "pow",
          "owner": "Math",
          "esVersion": 3,
          "description": "Returns the base raised to the exponent power.",
          "params": [
            {
              "name": "base",
              "description": "The base number",
              "type": "number"
            },
            {
              "name": "exponent",
              "description": "The exponent",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.pow(base, exponent)",
          "example": "Write(Math.pow(2, 10)); // 1024"
        },
        "callExpr": "Math.pow()",
        "isProperty": false
      },
      {
        "id": "Math.random",
        "category": "ECMAScript",
        "entry": {
          "name": "random",
          "owner": "Math",
          "esVersion": 3,
          "description": "Returns a pseudo-random floating-point number in [0, 1).",
          "params": [],
          "returnType": "number",
          "syntax": "Math.random()",
          "example": "var r = Math.random();\nWrite(Math.floor(r * 100)); // random 0–99"
        },
        "callExpr": "Math.random()",
        "isProperty": false
      },
      {
        "id": "Math.round",
        "category": "ECMAScript",
        "entry": {
          "name": "round",
          "owner": "Math",
          "esVersion": 3,
          "description": "Rounds a number to the nearest integer.",
          "params": [
            {
              "name": "x",
              "description": "A number",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.round(x)",
          "example": "Write(Math.round(4.5)); // 5"
        },
        "callExpr": "Math.round()",
        "isProperty": false
      },
      {
        "id": "Math.sqrt",
        "category": "ECMAScript",
        "entry": {
          "name": "sqrt",
          "owner": "Math",
          "esVersion": 3,
          "description": "Returns the square root of a number.",
          "params": [
            {
              "name": "x",
              "description": "A non-negative number",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.sqrt(x)",
          "example": "Write(Math.sqrt(16)); // 4"
        },
        "callExpr": "Math.sqrt()",
        "isProperty": false
      },
      {
        "id": "Math.sin",
        "category": "ECMAScript",
        "entry": {
          "name": "sin",
          "owner": "Math",
          "esVersion": 3,
          "description": "Returns the sine of an angle given in radians.",
          "params": [
            {
              "name": "x",
              "description": "Angle in radians",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.sin(x)",
          "example": "Write(Math.sin(Math.PI / 2)); // 1"
        },
        "callExpr": "Math.sin()",
        "isProperty": false
      },
      {
        "id": "Math.cos",
        "category": "ECMAScript",
        "entry": {
          "name": "cos",
          "owner": "Math",
          "esVersion": 3,
          "description": "Returns the cosine of an angle given in radians.",
          "params": [
            {
              "name": "x",
              "description": "Angle in radians",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.cos(x)",
          "example": "Write(Math.cos(0)); // 1"
        },
        "callExpr": "Math.cos()",
        "isProperty": false
      },
      {
        "id": "Math.tan",
        "category": "ECMAScript",
        "entry": {
          "name": "tan",
          "owner": "Math",
          "esVersion": 3,
          "description": "Returns the tangent of an angle given in radians.",
          "params": [
            {
              "name": "x",
              "description": "Angle in radians",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.tan(x)",
          "example": "Write(Math.tan(Math.PI / 4)); // ~1"
        },
        "callExpr": "Math.tan()",
        "isProperty": false
      },
      {
        "id": "Math.asin",
        "category": "ECMAScript",
        "entry": {
          "name": "asin",
          "owner": "Math",
          "esVersion": 3,
          "description": "Returns the arc sine (in radians) of a number in the range [-1, 1].",
          "params": [
            {
              "name": "x",
              "description": "A number between -1 and 1",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.asin(x)",
          "example": "Write(Math.asin(1)); // ~1.5708 (π/2)"
        },
        "callExpr": "Math.asin()",
        "isProperty": false
      },
      {
        "id": "Math.acos",
        "category": "ECMAScript",
        "entry": {
          "name": "acos",
          "owner": "Math",
          "esVersion": 3,
          "description": "Returns the arc cosine (in radians) of a number in the range [-1, 1].",
          "params": [
            {
              "name": "x",
              "description": "A number between -1 and 1",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.acos(x)",
          "example": "Write(Math.acos(1)); // 0"
        },
        "callExpr": "Math.acos()",
        "isProperty": false
      },
      {
        "id": "Math.atan",
        "category": "ECMAScript",
        "entry": {
          "name": "atan",
          "owner": "Math",
          "esVersion": 3,
          "description": "Returns the arc tangent (in radians) of a number.",
          "params": [
            {
              "name": "x",
              "description": "A number",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.atan(x)",
          "example": "Write(Math.atan(1)); // ~0.7854 (π/4)"
        },
        "callExpr": "Math.atan()",
        "isProperty": false
      },
      {
        "id": "Math.atan2",
        "category": "ECMAScript",
        "entry": {
          "name": "atan2",
          "owner": "Math",
          "esVersion": 3,
          "description": "Returns the angle (in radians) from the positive x-axis to the point (x, y). Unlike atan, atan2 correctly handles all quadrants.",
          "params": [
            {
              "name": "y",
              "description": "Y coordinate",
              "type": "number"
            },
            {
              "name": "x",
              "description": "X coordinate",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.atan2(y, x)",
          "example": "Write(Math.atan2(1, 1)); // ~0.7854 (π/4)"
        },
        "callExpr": "Math.atan2()",
        "isProperty": false
      },
      {
        "id": "Math.exp",
        "category": "ECMAScript",
        "entry": {
          "name": "exp",
          "owner": "Math",
          "esVersion": 3,
          "description": "Returns e raised to the power of x (e^x).",
          "params": [
            {
              "name": "x",
              "description": "The exponent",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.exp(x)",
          "example": "Write(Math.exp(1)); // ~2.71828 (e)"
        },
        "callExpr": "Math.exp()",
        "isProperty": false
      },
      {
        "id": "Math.log",
        "category": "ECMAScript",
        "entry": {
          "name": "log",
          "owner": "Math",
          "esVersion": 3,
          "description": "Returns the natural logarithm (base e) of a number.",
          "params": [
            {
              "name": "x",
              "description": "A positive number",
              "type": "number"
            }
          ],
          "returnType": "number",
          "syntax": "Math.log(x)",
          "example": "Write(Math.log(Math.E)); // 1"
        },
        "callExpr": "Math.log()",
        "isProperty": false
      },
      {
        "id": "Math.PI",
        "category": "ECMAScript",
        "entry": {
          "name": "PI",
          "owner": "Math",
          "esVersion": 3,
          "description": "The ratio of a circle's circumference to its diameter (~3.14159).",
          "params": [],
          "returnType": "number",
          "syntax": "Math.PI",
          "example": "var area = Math.PI * r * r;"
        },
        "callExpr": "Math.PI",
        "isProperty": true
      },
      {
        "id": "Math.E",
        "category": "ECMAScript",
        "entry": {
          "name": "E",
          "owner": "Math",
          "esVersion": 3,
          "description": "Euler's number, the base of the natural logarithm (~2.71828).",
          "params": [],
          "returnType": "number",
          "syntax": "Math.E",
          "example": "Write(Math.E); // ~2.71828"
        },
        "callExpr": "Math.E",
        "isProperty": true
      },
      {
        "id": "Math.LN2",
        "category": "ECMAScript",
        "entry": {
          "name": "LN2",
          "owner": "Math",
          "esVersion": 3,
          "description": "The natural logarithm of 2 (~0.69315).",
          "params": [],
          "returnType": "number",
          "syntax": "Math.LN2",
          "example": "Write(Math.LN2); // ~0.693"
        },
        "callExpr": "Math.LN2",
        "isProperty": true
      },
      {
        "id": "Math.LN10",
        "category": "ECMAScript",
        "entry": {
          "name": "LN10",
          "owner": "Math",
          "esVersion": 3,
          "description": "The natural logarithm of 10 (~2.30259).",
          "params": [],
          "returnType": "number",
          "syntax": "Math.LN10",
          "example": "Write(Math.LN10); // ~2.303"
        },
        "callExpr": "Math.LN10",
        "isProperty": true
      },
      {
        "id": "Math.LOG2E",
        "category": "ECMAScript",
        "entry": {
          "name": "LOG2E",
          "owner": "Math",
          "esVersion": 3,
          "description": "The base-2 logarithm of e (~1.44270).",
          "params": [],
          "returnType": "number",
          "syntax": "Math.LOG2E",
          "example": "Write(Math.LOG2E); // ~1.443"
        },
        "callExpr": "Math.LOG2E",
        "isProperty": true
      },
      {
        "id": "Math.SQRT2",
        "category": "ECMAScript",
        "entry": {
          "name": "SQRT2",
          "owner": "Math",
          "esVersion": 3,
          "description": "The square root of 2 (~1.41421).",
          "params": [],
          "returnType": "number",
          "syntax": "Math.SQRT2",
          "example": "Write(Math.SQRT2); // ~1.414"
        },
        "callExpr": "Math.SQRT2",
        "isProperty": true
      },
      {
        "id": "Math.SQRT1_2",
        "category": "ECMAScript",
        "entry": {
          "name": "SQRT1_2",
          "owner": "Math",
          "esVersion": 3,
          "description": "The square root of 1/2 (~0.70711); equivalent to 1/Math.SQRT2.",
          "params": [],
          "returnType": "number",
          "syntax": "Math.SQRT1_2",
          "example": "Write(Math.SQRT1_2); // ~0.707"
        },
        "callExpr": "Math.SQRT1_2",
        "isProperty": true
      },
      {
        "id": "Number.prototype.toFixed",
        "category": "ECMAScript",
        "entry": {
          "name": "toFixed",
          "owner": "Number.prototype",
          "esVersion": 3,
          "description": "Returns a string representing the number in fixed-point notation with the given number of decimal places.",
          "params": [
            {
              "name": "fractionDigits",
              "description": "Number of digits after the decimal point (0–20, default 0)",
              "type": "number",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "Number.toFixed([fractionDigits])",
          "example": "var price = 9.99;\nWrite(price.toFixed(2)); // \"9.99\"\nWrite((1.5).toFixed(0)); // \"2\""
        },
        "callExpr": "_num.toFixed()",
        "isProperty": false
      },
      {
        "id": "Number.prototype.toExponential",
        "category": "ECMAScript",
        "entry": {
          "name": "toExponential",
          "owner": "Number.prototype",
          "esVersion": 3,
          "description": "Returns a string representing the number in exponential notation. When fractionDigits is omitted the SFMC Jint engine pads the significand with trailing zeros (e.g. (3.14159).toExponential() → \"3.1415900000000000e+0\") instead of the minimal form standard JS produces. Always pass an explicit fractionDigits argument for predictable output.",
          "params": [
            {
              "name": "fractionDigits",
              "description": "Digits after the decimal point in the significand (0–20)",
              "type": "number",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "Number.toExponential([fractionDigits])",
          "example": "Write((123456).toExponential(2)); // \"1.23e+5\""
        },
        "callExpr": "_num.toExponential()",
        "isProperty": false
      },
      {
        "id": "Number.prototype.toPrecision",
        "category": "ECMAScript",
        "entry": {
          "name": "toPrecision",
          "owner": "Number.prototype",
          "esVersion": 3,
          "description": "Returns a string representing the number to the specified number of significant digits.",
          "params": [
            {
              "name": "precision",
              "description": "Number of significant digits (1–21)",
              "type": "number",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "Number.toPrecision([precision])",
          "example": "Write((123.456).toPrecision(5)); // \"123.46\""
        },
        "callExpr": "_num.toPrecision()",
        "isProperty": false
      },
      {
        "id": "Number.prototype.toString",
        "category": "ECMAScript",
        "entry": {
          "name": "toString",
          "owner": "Number.prototype",
          "esVersion": 3,
          "description": "Returns a string representing the number. In the SFMC Jint engine the optional radix only supports 2, 8, 10, and 16 — any other base throws \"Invalid Base.\" (standard JS supports 2–36). Fractional values are truncated to their integer part before non-decimal conversion.",
          "params": [
            {
              "name": "radix",
              "description": "Base for the conversion. SFMC only accepts 2, 8, 10, or 16; other values throw \"Invalid Base.\"",
              "type": "number",
              "optional": true
            }
          ],
          "returnType": "string",
          "syntax": "Number.toString([radix])",
          "example": "Write((255).toString(16)); // \"ff\"\nWrite((255).toString(2)); // \"11111111\"\n// (35).toString(36) throws \"Invalid Base.\" in SFMC"
        },
        "callExpr": "_num.toString()",
        "isProperty": false
      },
      {
        "id": "Number.prototype.valueOf",
        "category": "ECMAScript",
        "entry": {
          "name": "valueOf",
          "owner": "Number.prototype",
          "esVersion": 3,
          "description": "Returns the primitive number value of a Number object.",
          "params": [],
          "returnType": "number",
          "syntax": "Number.valueOf()",
          "example": "Write((42).valueOf()); // 42"
        },
        "callExpr": "_num.valueOf()",
        "isProperty": false
      },
      {
        "id": "Object.prototype.hasOwnProperty",
        "category": "ECMAScript",
        "entry": {
          "name": "hasOwnProperty",
          "owner": "Object.prototype",
          "esVersion": 3,
          "description": "Returns true if the object has the specified property as its own (not inherited) property. Commonly used to safely iterate for...in loops.",
          "params": [
            {
              "name": "v",
              "description": "Property name to test",
              "type": "string"
            }
          ],
          "returnType": "boolean",
          "syntax": "Object.hasOwnProperty(v)",
          "example": "var obj = {a: 1};\nfor (var key in obj) {\n    if (obj.hasOwnProperty(key)) { Write(key); }\n}"
        },
        "callExpr": "_obj.hasOwnProperty()",
        "isProperty": false
      },
      {
        "id": "Object.prototype.toString",
        "category": "ECMAScript",
        "entry": {
          "name": "toString",
          "owner": "Object.prototype",
          "esVersion": 3,
          "description": "Returns a string representation of the object. For a plain object it returns \"[object Object]\". Object.prototype.toString.call(value) is the standard type-tag test (e.g. \"[object Array]\").",
          "params": [],
          "returnType": "string",
          "syntax": "Object.toString()",
          "example": "var obj = {a: 1};\nWrite(obj.toString()); // \"[object Object]\"\nWrite(Object.prototype.toString.call([])); // \"[object Array]\""
        },
        "callExpr": "_obj.toString()",
        "isProperty": false
      },
      {
        "id": "Object.prototype.valueOf",
        "category": "ECMAScript",
        "entry": {
          "name": "valueOf",
          "owner": "Object.prototype",
          "esVersion": 3,
          "description": "Returns the primitive value of the object. For a plain object it returns the object itself.",
          "params": [],
          "returnType": "object",
          "syntax": "Object.valueOf()",
          "example": "var obj = {a: 1};\nWrite(obj.valueOf() === obj); // true"
        },
        "callExpr": "_obj.valueOf()",
        "isProperty": false
      },
      {
        "id": "Global.parseInt",
        "category": "ECMAScript",
        "entry": {
          "name": "parseInt",
          "owner": "Global",
          "esVersion": 3,
          "description": "Parses a string and returns an integer in the specified radix (base). Leading whitespace is ignored. Returns NaN if no valid integer is found. Always specify a radix to avoid octal/hex ambiguity.",
          "caveat": "Unlike the spec, the SFMC engine returns NaN when the string has trailing non-numeric characters (e.g. parseInt(\"10px\", 10) is NaN, not 10). Strip non-digits before parsing.",
          "params": [
            {
              "name": "string",
              "description": "The string to parse",
              "type": "string"
            },
            {
              "name": "radix",
              "description": "Base of the numeral system (2–36); use 10 for decimal",
              "type": "number",
              "optional": true
            }
          ],
          "returnType": "number",
          "syntax": "parseInt(string[, radix])",
          "example": "Write(parseInt(\"42\", 10)); // 42\nWrite(parseInt(\"abc\", 10)); // NaN\nWrite(parseInt(\"10px\", 10)); // NaN in SFMC (spec would give 10)"
        },
        "callExpr": "parseInt()",
        "isProperty": false
      },
      {
        "id": "Global.parseFloat",
        "category": "ECMAScript",
        "entry": {
          "name": "parseFloat",
          "owner": "Global",
          "esVersion": 3,
          "description": "Parses a string and returns a floating-point number. Stops parsing at the first character that is not part of a valid number. Returns NaN if no valid number is found.",
          "caveat": "Unlike the spec, the SFMC engine returns NaN when the string has trailing non-numeric characters (e.g. parseFloat(\"1.5kg\") is NaN, not 1.5). Also note the returned value uses 32-bit float precision (parseFloat(\"3.14\") === 3.14 is false); compare with a tolerance.",
          "params": [
            {
              "name": "string",
              "description": "The string to parse",
              "type": "string"
            }
          ],
          "returnType": "number",
          "syntax": "parseFloat(string)",
          "example": "Write(parseFloat(\"3.14\")); // 3.14 (32-bit precision)\nWrite(parseFloat(\"abc\")); // NaN\nWrite(parseFloat(\"1.5kg\")); // NaN in SFMC (spec would give 1.5)"
        },
        "callExpr": "parseFloat()",
        "isProperty": false
      },
      {
        "id": "Global.isNaN",
        "category": "ECMAScript",
        "entry": {
          "name": "isNaN",
          "owner": "Global",
          "esVersion": 3,
          "description": "Returns true if the value is NaN (Not-a-Number) after applying ToNumber conversion. Use this to guard against failed parseInt/parseFloat calls.",
          "params": [
            {
              "name": "value",
              "description": "Value to test",
              "type": "any"
            }
          ],
          "returnType": "boolean",
          "syntax": "isNaN(value)",
          "example": "Write(isNaN(NaN)); // true\nWrite(isNaN(parseInt(\"abc\", 10))); // true\nWrite(isNaN(42)); // false"
        },
        "callExpr": "isNaN()",
        "isProperty": false
      },
      {
        "id": "Global.isFinite",
        "category": "ECMAScript",
        "entry": {
          "name": "isFinite",
          "owner": "Global",
          "esVersion": 3,
          "description": "Returns true if the value is a finite number (not NaN, +Infinity, or -Infinity) after applying ToNumber conversion.",
          "params": [
            {
              "name": "value",
              "description": "Value to test",
              "type": "any"
            }
          ],
          "returnType": "boolean",
          "syntax": "isFinite(value)",
          "example": "Write(isFinite(42)); // true\nWrite(isFinite(1 / 0)); // false (Infinity)\nWrite(isFinite(NaN)); // false"
        },
        "callExpr": "isFinite()",
        "isProperty": false
      },
      {
        "id": "Global.eval",
        "category": "ECMAScript",
        "entry": {
          "name": "eval",
          "owner": "Global",
          "esVersion": 3,
          "description": "Parses a string of JavaScript source and executes it as a script, returning the completion value of the last evaluated expression (or undefined when there is nothing to complete). A non-string argument is returned unchanged. Runtime-verified to work in SFMC SSJS: direct eval sees the surrounding local scope, and bare-name Core globals loaded via Platform.Load are visible inside the evaluated string. Use sparingly — it runs arbitrary code and is a common injection risk; prefer Platform.Function.ParseJSON for parsing data.",
          "params": [
            {
              "name": "script",
              "description": "A string of JavaScript source to evaluate",
              "type": "string"
            }
          ],
          "returnType": "any",
          "syntax": "eval(script)",
          "example": "Write(eval(\"1 + 1\")); // 2\nvar x = 5;\nWrite(eval(\"x + 10\")); // 15\nPlatform.Load(\"core\",\"1.1.5\");\nWrite(eval(\"Stringify({a:1})\")); // {\"a\":1}"
        },
        "callExpr": "eval()",
        "isProperty": false
      },
      {
        "id": "Global.RegExp",
        "category": "ECMAScript",
        "entry": {
          "name": "RegExp",
          "owner": "Global",
          "esVersion": 3,
          "description": "Creates a regular expression object for pattern matching. Prefer the literal syntax (/pattern/flags) when the pattern is known at write time. Use the constructor when the pattern must be built dynamically at runtime.",
          "params": [
            {
              "name": "pattern",
              "description": "Regular expression pattern string",
              "type": "string"
            },
            {
              "name": "flags",
              "description": "Optional flags: g (global), i (case-insensitive), m (multiline)",
              "type": "string",
              "optional": true
            }
          ],
          "returnType": "RegExp",
          "syntax": "new RegExp(pattern[, flags])",
          "minArgs": 1,
          "maxArgs": 2,
          "example": "var fieldName = \"email\";\nvar re = new RegExp(fieldName + \"=([^&]+)\", \"i\");\nvar match = queryString.match(re);\nif (match) { Write(match[1]); }"
        },
        "callExpr": "RegExp(\"pattern\")",
        "isProperty": false
      },
      {
        "id": "RegExp.test",
        "category": "ECMAScript",
        "entry": {
          "name": "test",
          "owner": "RegExp",
          "esVersion": 3,
          "description": "Tests whether the string matches the pattern. Returns true if the pattern is found, false otherwise. When the g flag is set, successive calls advance lastIndex.",
          "params": [
            {
              "name": "string",
              "description": "The string to test against the regular expression",
              "type": "string"
            }
          ],
          "returnType": "boolean",
          "syntax": "RegExp.test(string)",
          "minArgs": 1,
          "maxArgs": 1,
          "example": "var emailRe = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\nif (emailRe.test(subscriberEmail)) {\n    Write(\"Valid email\");\n}"
        },
        "callExpr": "_re.test(\"string\")",
        "isProperty": false
      },
      {
        "id": "RegExp.exec",
        "category": "ECMAScript",
        "entry": {
          "name": "exec",
          "owner": "RegExp",
          "esVersion": 3,
          "description": "Executes a search for a match in the string. Returns an array with the full match at index 0 and any capture groups at subsequent indices, or null if no match is found. The array also has index and input properties. When the g flag is set, successive calls advance lastIndex.",
          "caveat": "In the SFMC engine capture groups are broken: result[0] (the full match), result.index, and result.input work, but result[1], result[2], … are undefined. result.length is always 3 regardless of group count, so it cannot be used to count captures. Likewise the g-flag lastIndex does not advance between calls. Use the full match plus String.split/substring to extract sub-parts instead of capture groups.",
          "params": [
            {
              "name": "string",
              "description": "The string to search",
              "type": "string"
            }
          ],
          "returnType": "array",
          "syntax": "RegExp.exec(string)",
          "minArgs": 1,
          "maxArgs": 1,
          "example": "var re = /\\d{4}-\\d{2}-\\d{2}/;\nvar result = re.exec(\"Order placed on 2026-01-15\");\nif (result) {\n    Write(\"Match: \" + result[0]); // \"2026-01-15\" (capture groups result[1]+ are broken)\n}"
        },
        "callExpr": "_re.exec(\"string\")",
        "isProperty": false
      },
      {
        "id": "RegExp.source",
        "category": "ECMAScript",
        "entry": {
          "name": "source",
          "owner": "RegExp",
          "esVersion": 3,
          "isProperty": true,
          "description": "The text of the pattern, excluding the enclosing slashes and any flags.",
          "params": [],
          "returnType": "string",
          "syntax": "RegExp.source",
          "example": "var re = /hello/gi;\nWrite(re.source); // \"hello\""
        },
        "callExpr": "_re.source",
        "isProperty": true
      },
      {
        "id": "RegExp.global",
        "category": "ECMAScript",
        "entry": {
          "name": "global",
          "owner": "RegExp",
          "esVersion": 3,
          "isProperty": true,
          "description": "True if the g (global) flag was specified when creating the regular expression.",
          "params": [],
          "returnType": "boolean",
          "syntax": "RegExp.global",
          "example": "var re = /hello/g;\nWrite(re.global); // true"
        },
        "callExpr": "_re.global",
        "isProperty": true
      },
      {
        "id": "RegExp.lastIndex",
        "category": "ECMAScript",
        "entry": {
          "name": "lastIndex",
          "owner": "RegExp",
          "esVersion": 3,
          "isProperty": true,
          "description": "The index at which to start the next match. Only relevant when the g or y flag is set. Automatically updated by exec() and test().",
          "caveat": "In the SFMC engine lastIndex does NOT advance after exec()/test() with the g flag, so it cannot be used to iterate matches. Setting lastIndex manually is also ignored — the next exec() still matches from the start. Use String.match(/.../g) to get all matches at once instead.",
          "params": [],
          "returnType": "number",
          "syntax": "RegExp.lastIndex",
          "example": "var re = /\\d+/g;\nre.exec(\"abc 123 def 456\");\nWrite(re.lastIndex); // does not advance in SFMC"
        },
        "callExpr": "_re.lastIndex",
        "isProperty": true
      },
      {
        "id": "Date.prototype.getFullYear",
        "category": "ECMAScript",
        "entry": {
          "name": "getFullYear",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the four-digit year of the date according to local time.",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getFullYear()",
          "example": "var d = new Date();\nWrite(d.getFullYear()); // e.g. 2026"
        },
        "callExpr": "_date.getFullYear()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getMonth",
        "category": "ECMAScript",
        "entry": {
          "name": "getMonth",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the month (0 = January … 11 = December) of the date according to local time.",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getMonth()",
          "example": "var d = new Date(2026, 5, 1);\nWrite(d.getMonth()); // 5 (June, 0-based)"
        },
        "callExpr": "_date.getMonth()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getDate",
        "category": "ECMAScript",
        "entry": {
          "name": "getDate",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the day of the month (1–31) of the date according to local time.",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getDate()",
          "example": "var d = new Date(2026, 0, 15);\nWrite(d.getDate()); // 15"
        },
        "callExpr": "_date.getDate()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getHours",
        "category": "ECMAScript",
        "entry": {
          "name": "getHours",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the hour (0–23) of the date according to local time.",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getHours()",
          "example": "var d = new Date(2026, 0, 1, 13);\nWrite(d.getHours()); // 13"
        },
        "callExpr": "_date.getHours()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getTime",
        "category": "ECMAScript",
        "entry": {
          "name": "getTime",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the numeric timestamp (milliseconds since 1970-01-01T00:00:00 UTC) for the date.",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getTime()",
          "example": "var d = new Date(2021, 0, 1);\nWrite(d.getTime()); // milliseconds since epoch"
        },
        "callExpr": "_date.getTime()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getTimezoneOffset",
        "category": "ECMAScript",
        "entry": {
          "name": "getTimezoneOffset",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the difference, in minutes, between this date evaluated in UTC and in the host local time zone.",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getTimezoneOffset()",
          "example": "var d = new Date();\nWrite(d.getTimezoneOffset()); // minutes offset from UTC"
        },
        "callExpr": "_date.getTimezoneOffset()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getMinutes",
        "category": "ECMAScript",
        "entry": {
          "name": "getMinutes",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the minutes (0–59) of the date according to local time.",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getMinutes()",
          "example": "var d = new Date();\nWrite(d.getMinutes());"
        },
        "callExpr": "_date.getMinutes()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getSeconds",
        "category": "ECMAScript",
        "entry": {
          "name": "getSeconds",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the seconds (0–59) of the date according to local time.",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getSeconds()",
          "example": "var d = new Date();\nWrite(d.getSeconds());"
        },
        "callExpr": "_date.getSeconds()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getDay",
        "category": "ECMAScript",
        "entry": {
          "name": "getDay",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the day of the week (0 = Sunday … 6 = Saturday) according to local time.",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getDay()",
          "example": "var d = new Date();\nWrite(d.getDay()); // 0–6"
        },
        "callExpr": "_date.getDay()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getMilliseconds",
        "category": "ECMAScript",
        "entry": {
          "name": "getMilliseconds",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the milliseconds (0–999) of the date according to local time.",
          "caveat": "In the SFMC engine this is frequently off by one (e.g. a date constructed with 123 ms reports 122). Do not rely on millisecond precision; round or avoid sub-second comparisons.",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getMilliseconds()",
          "example": "var d = new Date();\nWrite(d.getMilliseconds()); // may be off by one in SFMC"
        },
        "callExpr": "_date.getMilliseconds()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.toString",
        "category": "ECMAScript",
        "entry": {
          "name": "toString",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns a human-readable string representing the date.",
          "params": [],
          "returnType": "string",
          "syntax": "Date.toString()",
          "example": "var d = new Date(0);\nWrite(d.toString());"
        },
        "callExpr": "_date.toString()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.toDateString",
        "category": "ECMAScript",
        "entry": {
          "name": "toDateString",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the date portion of the date as a human-readable string.",
          "params": [],
          "returnType": "string",
          "syntax": "Date.toDateString()",
          "example": "var d = new Date(0);\nWrite(d.toDateString()); // \"Wed, 31 Dec 1969\" (locale-dependent)"
        },
        "callExpr": "_date.toDateString()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.toUTCString",
        "category": "ECMAScript",
        "entry": {
          "name": "toUTCString",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the date as a string using the UTC time zone.",
          "params": [],
          "returnType": "string",
          "syntax": "Date.toUTCString()",
          "example": "var d = new Date(0);\nWrite(d.toUTCString()); // \"Thu, 01 Jan 1970 00:00:00 UTC\""
        },
        "callExpr": "_date.toUTCString()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.valueOf",
        "category": "ECMAScript",
        "entry": {
          "name": "valueOf",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the primitive value of the date as the number of milliseconds since the Unix epoch.",
          "params": [],
          "returnType": "number",
          "syntax": "Date.valueOf()",
          "example": "var d = new Date(0);\nWrite(d.valueOf()); // 0"
        },
        "callExpr": "_date.valueOf()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getUTCFullYear",
        "category": "ECMAScript",
        "entry": {
          "name": "getUTCFullYear",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the four-digit year of the date according to universal time (UTC).",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getUTCFullYear()",
          "example": "var d = new Date(0);\nWrite(d.getUTCFullYear()); // 1970"
        },
        "callExpr": "_date.getUTCFullYear()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getUTCMonth",
        "category": "ECMAScript",
        "entry": {
          "name": "getUTCMonth",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the month (0 = January … 11 = December) of the date according to universal time (UTC).",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getUTCMonth()",
          "example": "var d = new Date(0);\nWrite(d.getUTCMonth()); // 0"
        },
        "callExpr": "_date.getUTCMonth()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getUTCDate",
        "category": "ECMAScript",
        "entry": {
          "name": "getUTCDate",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the day of the month (1–31) of the date according to universal time (UTC).",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getUTCDate()",
          "example": "var d = new Date(0);\nWrite(d.getUTCDate()); // 1"
        },
        "callExpr": "_date.getUTCDate()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getUTCDay",
        "category": "ECMAScript",
        "entry": {
          "name": "getUTCDay",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the day of the week (0 = Sunday … 6 = Saturday) according to universal time (UTC).",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getUTCDay()",
          "example": "var d = new Date(0);\nWrite(d.getUTCDay()); // 4 (Thursday)"
        },
        "callExpr": "_date.getUTCDay()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getUTCHours",
        "category": "ECMAScript",
        "entry": {
          "name": "getUTCHours",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the hour (0–23) of the date according to universal time (UTC).",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getUTCHours()",
          "example": "var d = new Date(0);\nWrite(d.getUTCHours()); // 0"
        },
        "callExpr": "_date.getUTCHours()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getUTCMinutes",
        "category": "ECMAScript",
        "entry": {
          "name": "getUTCMinutes",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the minutes (0–59) of the date according to universal time (UTC).",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getUTCMinutes()",
          "example": "var d = new Date(0);\nWrite(d.getUTCMinutes()); // 0"
        },
        "callExpr": "_date.getUTCMinutes()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getUTCSeconds",
        "category": "ECMAScript",
        "entry": {
          "name": "getUTCSeconds",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the seconds (0–59) of the date according to universal time (UTC).",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getUTCSeconds()",
          "example": "var d = new Date(0);\nWrite(d.getUTCSeconds()); // 0"
        },
        "callExpr": "_date.getUTCSeconds()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.getUTCMilliseconds",
        "category": "ECMAScript",
        "entry": {
          "name": "getUTCMilliseconds",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the milliseconds (0–999) of the date according to universal time (UTC).",
          "params": [],
          "returnType": "number",
          "syntax": "Date.getUTCMilliseconds()",
          "example": "var d = new Date(0);\nWrite(d.getUTCMilliseconds()); // 0"
        },
        "callExpr": "_date.getUTCMilliseconds()",
        "isProperty": false
      },
      {
        "id": "Date.prototype.toTimeString",
        "category": "ECMAScript",
        "entry": {
          "name": "toTimeString",
          "owner": "Date.prototype",
          "esVersion": 3,
          "description": "Returns the time portion of the date as a human-readable string.",
          "params": [],
          "returnType": "string",
          "syntax": "Date.toTimeString()",
          "example": "var d = new Date(0);\nWrite(d.toTimeString());"
        },
        "callExpr": "_date.toTimeString()",
        "isProperty": false
      },
      {
        "id": "Date.UTC",
        "category": "ECMAScript",
        "entry": {
          "name": "UTC",
          "owner": "Date",
          "esVersion": 3,
          "isStatic": true,
          "description": "Returns the number of milliseconds since the Unix epoch for the given UTC date components.",
          "params": [
            {
              "name": "year",
              "description": "Full year",
              "type": "number"
            },
            {
              "name": "month",
              "description": "Month (0–11)",
              "type": "number",
              "optional": true
            },
            {
              "name": "day",
              "description": "Day of the month (1–31)",
              "type": "number",
              "optional": true
            },
            {
              "name": "hours",
              "description": "Hours (0–23)",
              "type": "number",
              "optional": true
            },
            {
              "name": "minutes",
              "description": "Minutes (0–59)",
              "type": "number",
              "optional": true
            },
            {
              "name": "seconds",
              "description": "Seconds (0–59)",
              "type": "number",
              "optional": true
            },
            {
              "name": "milliseconds",
              "description": "Milliseconds (0–999)",
              "type": "number",
              "optional": true
            }
          ],
          "returnType": "number",
          "caveat": "Runtime-verified: with year + month (and beyond) it returns the correct UTC timestamp, but the year-only form Date.UTC(2026) returns a nonsense small number (observed -21597974) instead of treating the month as 0 — always pass at least year and month, e.g. Date.UTC(2026, 0, 1).",
          "syntax": "Date.UTC(year[, month[, day[, hours[, minutes[, seconds[, ms]]]]]])",
          "example": "Write(Date.UTC(1970, 0, 1)); // 0"
        },
        "callExpr": "Date.UTC()",
        "isProperty": false
      },
      {
        "id": "Date.parse",
        "category": "ECMAScript",
        "entry": {
          "name": "parse",
          "owner": "Date",
          "esVersion": 3,
          "isStatic": true,
          "description": "Parses a date string and returns the numeric timestamp (milliseconds since the Unix epoch). In the SFMC engine an unparseable string returns 0 (the epoch), NOT NaN as the spec requires.",
          "params": [
            {
              "name": "dateString",
              "description": "A date string (ISO 8601 is the most portable form)",
              "type": "string"
            }
          ],
          "returnType": "number",
          "caveat": "Runtime-verified: unlike the spec, an unparseable or invalid string (e.g. \"garbage\", \"\", \"2021-13-45\") returns 0 — the Unix epoch — instead of NaN, so isNaN() cannot detect a bad date and invalid input silently becomes 1970-01-01. Also, a date-only ISO string such as \"2026-06-18\" is parsed as LOCAL midnight, not UTC (contrary to the ES5+ spec). Validate input yourself; do not rely on NaN for error detection.",
          "syntax": "Date.parse(dateString)",
          "example": "Write(Date.parse('2021-01-01T00:00:00Z')); // 1609459200000"
        },
        "callExpr": "Date.parse()",
        "isProperty": false
      },
      {
        "id": "Date.now",
        "category": "ECMAScript",
        "entry": {
          "name": "now",
          "owner": "Date",
          "esVersion": 5,
          "isStatic": true,
          "description": "Returns the current time. In the SFMC engine this returns a Date OBJECT, not a numeric timestamp as the spec requires — coerce it (+Date.now() or new Date().getTime()) to get epoch milliseconds.",
          "params": [],
          "returnType": "object",
          "caveat": "Runtime-verified: unlike the spec (which returns a Number), Date.now() returns a Date object (typeof \"object\") that stringifies to a date-time string. Numeric coercion (Date.now() + 0, Date.now() * 1) yields the epoch milliseconds, but code expecting a number will break. Prefer new Date().getTime(), which returns a clean number.",
          "syntax": "Date.now()",
          "example": "var ms = new Date().getTime(); // clean epoch milliseconds (Date.now() returns a Date object in SFMC)"
        },
        "callExpr": "Date.now()",
        "isProperty": false
      },
      {
        "id": "Object.defineProperty",
        "category": "ECMAScript",
        "entry": {
          "name": "defineProperty",
          "owner": "Object",
          "esVersion": 5,
          "isStatic": true,
          "description": "Defines a new property on an object, or modifies an existing one, with the given descriptor.",
          "params": [
            {
              "name": "obj",
              "description": "The object on which to define the property",
              "type": "object"
            },
            {
              "name": "prop",
              "description": "The name of the property to define",
              "type": "string"
            },
            {
              "name": "descriptor",
              "description": "Property descriptor (value, enumerable, writable, configurable, get, set)",
              "type": "object"
            }
          ],
          "returnType": "object",
          "syntax": "Object.defineProperty(obj, prop, descriptor)",
          "example": "var o = {};\nObject.defineProperty(o, \"x\", { value: 42, enumerable: true });\nWrite(o.x); // 42"
        },
        "callExpr": "Object.defineProperty()",
        "isProperty": false
      },
      {
        "id": "Object.getPrototypeOf",
        "category": "ECMAScript",
        "entry": {
          "name": "getPrototypeOf",
          "owner": "Object",
          "esVersion": 5,
          "isStatic": true,
          "description": "Returns the prototype (internal [[Prototype]]) of the specified object. Runtime-verified working in SFMC SSJS.",
          "params": [
            {
              "name": "obj",
              "description": "The object whose prototype to return",
              "type": "object"
            }
          ],
          "returnType": "object",
          "syntax": "Object.getPrototypeOf(obj)",
          "example": "var proto = Object.getPrototypeOf({ a: 1 }); // returns the object prototype"
        },
        "callExpr": "Object.getPrototypeOf()",
        "isProperty": false
      },
      {
        "id": "Function.prototype.call",
        "category": "ECMAScript",
        "entry": {
          "name": "call",
          "owner": "Function.prototype",
          "esVersion": 3,
          "minArgs": 1,
          "description": "Calls the function with a given `this` value and arguments provided individually.",
          "params": [
            {
              "name": "thisArg",
              "description": "The value to use as `this` when calling the function",
              "type": "any"
            },
            {
              "name": "arg",
              "description": "Argument passed to the function (repeat for multiple)",
              "type": "any",
              "optional": true
            }
          ],
          "returnType": "any",
          "syntax": "fn.call(thisArg[, arg1[, arg2[, ...]]])",
          "example": "function greet(greeting) { return greeting + \", \" + this.name; }\nvar r = greet.call({ name: \"Sam\" }, \"Hi\"); // \"Hi, Sam\""
        },
        "callExpr": "Function.prototype.call({})",
        "isProperty": false
      },
      {
        "id": "Function.prototype.apply",
        "category": "ECMAScript",
        "entry": {
          "name": "apply",
          "owner": "Function.prototype",
          "esVersion": 3,
          "minArgs": 1,
          "description": "Calls the function with a given `this` value and arguments provided as an array.",
          "params": [
            {
              "name": "thisArg",
              "description": "The value to use as `this` when calling the function",
              "type": "any"
            },
            {
              "name": "argsArray",
              "description": "Array of arguments to pass to the function",
              "type": "array",
              "optional": true
            }
          ],
          "returnType": "any",
          "syntax": "fn.apply(thisArg[, argsArray])",
          "example": "function sum(a, b) { return a + b; }\nvar r = sum.apply(null, [2, 3]); // 5"
        },
        "callExpr": "Function.prototype.apply({})",
        "isProperty": false
      },
      {
        "id": "Function.prototype.toString",
        "category": "ECMAScript",
        "entry": {
          "name": "toString",
          "owner": "Function.prototype",
          "esVersion": 3,
          "description": "Returns a string representing the function. In the SFMC engine this returns the generic \"[object Function]\" tag, NOT the function source code the spec produces.",
          "params": [],
          "returnType": "string",
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified: unlike standard JavaScript (which returns the function source), fn.toString() returns the generic \"[object Function]\" object tag in the SFMC Jint engine. String(fn) / (\"\" + fn) yield \"function\" instead. Do not rely on function source introspection.",
          "syntax": "fn.toString()",
          "example": "function greet() {}\nWrite(greet.toString()); // \"[object Function]\" in SFMC (not the source)"
        },
        "callExpr": "Function.prototype.toString()",
        "isProperty": false
      }
    ],
    "SSJS Global": [
      {
        "id": "String",
        "category": "SSJS Global",
        "entry": {
          "name": "String",
          "type": "function",
          "minArgs": 0,
          "maxArgs": 1,
          "isConfirmed": true,
          "description": "Native JavaScript function that converts any value to its string representation. Essential in SSJS for converting the CLR response object returned by Script.Util.HttpRequest.send().content into a JavaScript string that can be passed to Platform.Function.ParseJSON(). Unlike Stringify(), String() works on CLR/.NET objects and does not produce JSON output. Runtime-verified (CloudPage): available with no Platform.Load; `String()` with no argument returns `\"\"`, `String(null)` returns `\"null\"`.",
          "params": [
            {
              "name": "value",
              "description": "Value to convert to string (any type, including CLR objects)",
              "type": "any"
            }
          ],
          "returnType": "string",
          "syntax": "String(value)",
          "example": "// Convert a CLR response object to a JavaScript string for JSON parsing:\nvar req = new Script.Util.HttpRequest(\"https://api.example.com/data\");\nreq.method = \"GET\";\nvar resp = req.send();\nvar responseStr = String(resp.content);  // CLR -> JS string\nvar responseJSON = Platform.Function.ParseJSON(responseStr);\n\n// Also works for numbers and other primitives:\nvar num = 42;\nvar str = String(num); // \"42\""
        },
        "callExpr": "String()",
        "isProperty": false
      },
      {
        "id": "Error",
        "category": "SSJS Global",
        "entry": {
          "name": "Error",
          "type": "function",
          "minArgs": 0,
          "maxArgs": 1,
          "isConfirmed": true,
          "differsFromOfficialDocs": true,
          "officialDocsNote": "Runtime-verified: unlike standard JavaScript, a JS-constructed `new Error(\"msg\")` in the SFMC Jint engine does NOT expose the message via `.message` — `err.message` reads back `undefined`, and `Stringify(err)` surfaces only a hidden `{jintException}` (the .NET stack), not the message. Recover the message with `String(err)` or `(\"\" + err)` (both yield the constructor argument), or `err.toString()` (yields \"Error: undefined\"). This differs from engine-raised errors, which DO carry `.message` + `.description`. Do not rely on `new Error(...).message`.",
          "description": "Native JavaScript Error constructor. Creates an Error object that can be thrown or caught. Use inside try/catch blocks for structured error handling in SSJS. CAVEAT: for a JS-constructed `new Error(\"msg\")`, the message is NOT readable via `.message` (it returns undefined); use `String(err)` or `(\"\" + err)` to recover it. Engine-raised errors (e.g. from a bad Platform.Function call) instead expose `.message` and `.description`.",
          "params": [
            {
              "name": "message",
              "description": "Human-readable description of the error",
              "type": "string",
              "optional": true
            }
          ],
          "returnType": "object",
          "syntax": "new Error([message])",
          "example": "try {\n    var req = new Script.Util.HttpRequest(\"https://api.example.com/data\");\n    req.method = \"GET\";\n    req.continueOnError = false;\n    var resp = req.send();\n    if (resp.statusCode !== 200) {\n        throw new Error(\"Request failed with status: \" + resp.statusCode);\n    }\n} catch (e) {\n    // For new Error(...), the message is recovered via String(e), NOT e.message.\n    Write(\"Error: \" + String(e));\n}"
        },
        "callExpr": "new Error()",
        "isProperty": false
      },
      {
        "id": "Base64Encode",
        "category": "SSJS Global",
        "entry": {
          "name": "Base64Encode",
          "type": "function",
          "minArgs": 1,
          "maxArgs": 1,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": false,
          "officialDocsNote": "Runtime-verified (CloudPage): the bare-name `Base64Encode` works after `Platform.Load(\"core\", ...)` and returns the encoded string (e.g. Base64Encode(\"hi\") -> \"aGk=\"). This matches the official docs — the Core-library intro documents that these bare-name globals require Platform.Load, so the requirement is documented behavior, not a deviation. SCOPE RULE: bare-name Core globals exist ONLY after Platform.Load has run — call the load first. Once loaded they are usable in that scope and inside nested helper-function bodies that close over it. For charset control or a scope-independent form that needs no Platform.Load, use `Platform.Function.Base64Encode(string[, charset])`.",
          "description": "Encodes plain text to a Base64 encoded string. For charset control or scope-independent use, use `Platform.Function.Base64Encode(string, charset)` instead.",
          "params": [
            {
              "name": "string",
              "description": "Text to encode",
              "type": "string"
            }
          ],
          "returnType": "string",
          "syntax": "Base64Encode(string)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar encoded = Base64Encode('Convert to Base64'); // \"Q29udmVydCB0byBCYXNlNjQ=\""
        },
        "callExpr": "Base64Encode(\"string\")",
        "isProperty": false
      },
      {
        "id": "Base64Decode",
        "category": "SSJS Global",
        "entry": {
          "name": "Base64Decode",
          "type": "function",
          "minArgs": 1,
          "maxArgs": 1,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": false,
          "officialDocsNote": "Runtime-verified (CloudPage): the bare-name `Base64Decode` works after `Platform.Load(\"core\", ...)` (e.g. Base64Decode(\"aGk=\") -> \"hi\"). This matches the official docs — the Core-library intro documents that these bare-name globals require Platform.Load, so the requirement is documented behavior, not a deviation. SCOPE RULE: bare-name Core globals exist ONLY after Platform.Load has run — call the load first. Once loaded they are usable in that scope and inside nested helper-function bodies that close over it. For charset control or a scope-independent form that needs no Platform.Load, use `Platform.Function.Base64Decode(encodedString[, charset])`.",
          "description": "Decodes a Base64 encoded string to plain text. For charset control or scope-independent use, use `Platform.Function.Base64Decode(encodedString, charset)` instead.",
          "params": [
            {
              "name": "encodedString",
              "description": "Base64 encoded string to decode",
              "type": "string"
            }
          ],
          "returnType": "string",
          "syntax": "Base64Decode(encodedString)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar decoded = Base64Decode('VGhpcyB3YXMgYSBCYXNlNjQgZW5jb2RlZCBzdHJpbmcu'); // \"This was a Base64 encoded string.\""
        },
        "callExpr": "Base64Decode(\"encodedString\")",
        "isProperty": false
      },
      {
        "id": "ContentArea",
        "category": "SSJS Global",
        "entry": {
          "name": "ContentArea",
          "minArgs": 1,
          "maxArgs": 4,
          "deprecated": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "officialDocsNote": "Runtime-verified (CloudPage): the bare-name `ContentArea` IS defined as a function after `Platform.Load(\"core\", ...)` has run (the load must precede use; once loaded the bare name is usable in that scope and in nested helper bodies that close over it). It throws only because Content Areas are deprecated and the target area no longer resolves on current SFMC infrastructure, not because the global is missing. The Platform.Function.ContentArea() variant does not require Platform.Load.",
          "description": "Retrieves content from a classic Content Area by numeric ID. Deprecated — Content Areas are no longer supported on current SFMC infrastructure. Note: the Platform.Function.ContentArea() variant does not require Platform.Load and accepts a boolean stopOnError parameter instead of a string errorMsg.",
          "params": [
            {
              "name": "id",
              "description": "Numeric ID of the Content Area.",
              "type": "number"
            },
            {
              "name": "regionName",
              "description": "Impression region for content.",
              "type": "string",
              "optional": true
            },
            {
              "name": "errorMsg",
              "description": "Error message string returned on failure.",
              "type": "string",
              "optional": true
            },
            {
              "name": "fallbackContent",
              "description": "Default content to display when the area cannot be retrieved.",
              "type": "string",
              "optional": true
            }
          ],
          "returnType": "string",
          "returnDescription": "Rendered content from the Content Area.",
          "syntax": "ContentArea(id[, regionName, errorMsg, fallbackContent])",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar content = ContentArea(123456, \"impressionRegion\", \"fallback error msg\", \"defaultContentHere\");"
        },
        "callExpr": "ContentArea(1)",
        "isProperty": false
      },
      {
        "id": "ContentAreaByName",
        "category": "SSJS Global",
        "entry": {
          "name": "ContentAreaByName",
          "minArgs": 1,
          "maxArgs": 4,
          "deprecated": true,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "officialDocsNote": "Runtime-verified (CloudPage): the bare-name `ContentAreaByName` IS defined as a function after `Platform.Load(\"core\", ...)` has run (the load must precede use; once loaded the bare name is usable in that scope and in nested helper bodies that close over it). It throws only because Content Areas are deprecated and the target area no longer resolves on current SFMC infrastructure, not because the global is missing. The Platform.Function.ContentAreaByName() variant does not require Platform.Load.",
          "description": "Retrieves content from a classic Content Area by name. Deprecated — Content Areas are no longer supported on current SFMC infrastructure. Note: the Platform.Function.ContentAreaByName() variant does not require Platform.Load and accepts a boolean stopOnError parameter instead of a string errorMsg.",
          "params": [
            {
              "name": "name",
              "description": "Name of the Content Area.",
              "type": "string"
            },
            {
              "name": "regionName",
              "description": "Impression region for content.",
              "type": "string",
              "optional": true
            },
            {
              "name": "errorMsg",
              "description": "Error message string returned on failure.",
              "type": "string",
              "optional": true
            },
            {
              "name": "fallbackContent",
              "description": "Default content to display when the area cannot be retrieved.",
              "type": "string",
              "optional": true
            }
          ],
          "returnType": "string",
          "returnDescription": "Rendered content from the Content Area.",
          "syntax": "ContentAreaByName(name[, regionName, errorMsg, fallbackContent])",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar content = ContentAreaByName(\"My Content\\\\myContentArea\", \"impressionRegion\", \"fallback error msg\", \"defaultContentHere\");"
        },
        "callExpr": "ContentAreaByName(\"name\")",
        "isProperty": false
      },
      {
        "id": "Redirect",
        "category": "SSJS Global",
        "entry": {
          "name": "Redirect",
          "type": "function",
          "requiresCoreLoad": true,
          "minArgs": 2,
          "maxArgs": 2,
          "isConfirmed": true,
          "differsFromOfficialDocs": false,
          "officialDocsNote": "Runtime-verified (CloudPage): the bare-name `Redirect` IS defined as a function after `Platform.Load(\"core\", ...)` and actually performs the redirect. This matches the official docs — the Core-library intro documents that these bare-name globals require Platform.Load, so the requirement is documented behavior, not a deviation. SCOPE RULE: bare-name Core globals exist ONLY after Platform.Load has run — call the load first. Once loaded they are usable in that scope and inside nested helper-function bodies that close over it. For a scope-independent form that needs no Platform.Load, use `Platform.Response.Redirect(url, movedPermanently)`. Meaningful only in CloudPage context.",
          "description": "Redirects the browser to another address. For scope-independent use that needs no Platform.Load, use `Platform.Response.Redirect(url, movedPermanently)`. Meaningful only in CloudPage context.",
          "params": [
            {
              "name": "url",
              "description": "The address to send the browser to.",
              "type": "string"
            },
            {
              "name": "movedPermanently",
              "description": "Pass `true` for an HTTP 301 (permanent) redirect or `false` for a 302 (temporary) redirect.",
              "type": "boolean"
            }
          ],
          "returnType": "void",
          "syntax": "Redirect(url, movedPermanently)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nRedirect(\"https://www.example.com\", false); // or, scope-independent: Platform.Response.Redirect(\"https://www.example.com\", false);"
        },
        "callExpr": "Redirect(\"url\", true)",
        "isProperty": false
      },
      {
        "id": "Write",
        "category": "SSJS Global",
        "entry": {
          "name": "Write",
          "type": "function",
          "aliasOf": "Platform.Response.Write",
          "minArgs": 1,
          "maxArgs": 1,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": false,
          "officialDocsNote": "Runtime-verified (CloudPage): the bare-name `Write` works after `Platform.Load(\"core\", ...)` and outputs to the response. This matches the official docs — the Core-library intro documents that these bare-name globals require Platform.Load, so the requirement is documented behavior, not a deviation. SCOPE RULE: bare-name Core globals exist ONLY after Platform.Load has run — call the load first. Once loaded they are usable in that scope and inside nested helper-function bodies that close over it. For a scope-independent form that needs no Platform.Load and works in any scope, use `Platform.Response.Write(text)` instead.",
          "description": "Writes text to the HTTP response output. For scope-independent output that needs no Platform.Load, use `Platform.Response.Write(text)` instead.",
          "params": [
            {
              "name": "text",
              "description": "Text to write to the response.",
              "type": "string"
            }
          ],
          "returnType": "void",
          "syntax": "Write(text)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nWrite(\"Hello world\"); // or, scope-independent: Platform.Response.Write(\"Hello world\");"
        },
        "callExpr": "Write(\"text\")",
        "isProperty": false
      },
      {
        "id": "Stringify",
        "category": "SSJS Global",
        "entry": {
          "name": "Stringify",
          "type": "function",
          "aliasOf": "Platform.Function.Stringify",
          "minArgs": 1,
          "maxArgs": 1,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": false,
          "officialDocsNote": "Runtime-verified (CloudPage): the bare-name `Stringify` works after `Platform.Load(\"core\", ...)` (e.g. Stringify({a:1,b:\"x\"}) -> '{\"a\":1,\"b\":\"x\"}'). This matches the official docs — the Core-library intro documents that these bare-name globals require Platform.Load, so the requirement is documented behavior, not a deviation. SCOPE RULE: bare-name Core globals exist ONLY after Platform.Load has run — call the load first. Once loaded they are usable in that scope and inside nested helper-function bodies that close over it. For a scope-independent form that needs no Platform.Load, use `Platform.Function.Stringify(value)`.",
          "description": "Serializes a value to a JSON string. For scope-independent use, use `Platform.Function.Stringify(value)` instead.",
          "params": [
            {
              "name": "value",
              "description": "Value to serialize to JSON.",
              "type": "any"
            }
          ],
          "returnType": "string",
          "syntax": "Stringify(value)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar json = Stringify({ a: 1, b: \"x\" }); // '{\"a\":1,\"b\":\"x\"}'"
        },
        "callExpr": "Stringify({})",
        "isProperty": false
      },
      {
        "id": "Format",
        "category": "SSJS Global",
        "entry": {
          "name": "Format",
          "type": "function",
          "minArgs": 2,
          "maxArgs": 2,
          "requiresCoreLoad": true,
          "isConfirmed": true,
          "differsFromOfficialDocs": false,
          "officialDocsNote": "Runtime-verified (CloudPage): the bare-name `Format` works after `Platform.Load(\"core\", ...)` (e.g. Format(4213.65, \"C2\") -> \"$4,213.65\"). This matches the official docs — the Core-library intro documents that these bare-name globals require Platform.Load, so the requirement is documented behavior, not a deviation. SCOPE RULE: bare-name Core globals exist ONLY after Platform.Load has run — call the load first. Once loaded they are usable in that scope and inside nested helper-function bodies that close over it.",
          "description": "Applies a formatting rule to a string or numeric value. Use format codes such as `C` (currency), `D` (decimal), `N` (number with separators), `P` (percentage), `O` (ISO 8601 date), `s` (sortable date), `d` (short date), `t` (12-hour time), etc. Append a digit to control decimal places, e.g. `C2` for two decimal places.",
          "params": [
            {
              "name": "textToFormat",
              "description": "The string or number to apply a formatting rule to.",
              "type": "string|number"
            },
            {
              "name": "formatCode",
              "description": "A format code to apply. Numeric: C, D, E, F, G, N, P (append digit for decimal places). Date/time: d, M, f, g, O, r, s, t, T, or a custom pattern.",
              "type": "string"
            }
          ],
          "returnType": "string",
          "syntax": "Format(textToFormat, formatCode)",
          "example": "Platform.Load(\"core\", \"1.1.5\");\nvar price = Format(4213.65, \"C2\");  // \"$4,213.65\"\nvar isoDate = Format(\"2024-08-05T13:41:23\", \"O\");  // \"2024-08-05T13:41:23.0000000\"\nWrite(price + \" / \" + isoDate);"
        },
        "callExpr": "Format(\"textToFormat\", \"formatCode\")",
        "isProperty": false
      }
    ],
    "SSJS Global Alias": [
      {
        "id": "BeginImpressionRegion (alias of Platform.Function.BeginImpressionRegion)",
        "category": "SSJS Global Alias",
        "entry": {
          "name": "BeginImpressionRegion",
          "aliasOf": "Platform.Function.BeginImpressionRegion",
          "requiresCoreLoad": true
        },
        "callExpr": "BeginImpressionRegion(\"name\")",
        "isProperty": false
      },
      {
        "id": "EndImpressionRegion (alias of Platform.Function.EndImpressionRegion)",
        "category": "SSJS Global Alias",
        "entry": {
          "name": "EndImpressionRegion",
          "aliasOf": "Platform.Function.EndImpressionRegion",
          "requiresCoreLoad": true
        },
        "callExpr": "EndImpressionRegion()",
        "isProperty": false
      },
      {
        "id": "Now (alias of Platform.Function.Now)",
        "category": "SSJS Global Alias",
        "entry": {
          "name": "Now",
          "aliasOf": "Platform.Function.Now",
          "requiresCoreLoad": true
        },
        "callExpr": "Now()",
        "isProperty": false
      },
      {
        "id": "GUID (alias of Platform.Function.GUID)",
        "category": "SSJS Global Alias",
        "entry": {
          "name": "GUID",
          "aliasOf": "Platform.Function.GUID",
          "requiresCoreLoad": true
        },
        "callExpr": "GUID()",
        "isProperty": false
      },
      {
        "id": "IsEmailAddress (alias of Platform.Function.IsEmailAddress)",
        "category": "SSJS Global Alias",
        "entry": {
          "name": "IsEmailAddress",
          "aliasOf": "Platform.Function.IsEmailAddress",
          "requiresCoreLoad": true
        },
        "callExpr": "IsEmailAddress(\"value\")",
        "isProperty": false
      },
      {
        "id": "IsPhoneNumber (alias of Platform.Function.IsPhoneNumber)",
        "category": "SSJS Global Alias",
        "entry": {
          "name": "IsPhoneNumber",
          "aliasOf": "Platform.Function.IsPhoneNumber",
          "requiresCoreLoad": true
        },
        "callExpr": "IsPhoneNumber(\"value\")",
        "isProperty": false
      }
    ]
  }
}
