WSProxy is the recommended way to interact with the SFMC SOAP API from SSJS. It abstracts the verbose CreateObject/SetObjectProperty/InvokeCreate pattern behind simple JavaScript method calls.

Quick Start

var proxy = new Script.Util.WSProxy();

// Retrieve active triggered sends
var cols = ["Name", "CustomerKey", "Status"];
var filter = {
    Property: "Status",
    SimpleOperator: "equals",
    Value: "Active"
};
var result = proxy.retrieve("TriggeredSendDefinition", cols, filter);
var items = result.Results;

Methods

Method Description
new Script.Util.WSProxy() Create a WSProxy instance
<WSProxyInstance>.retrieve(...) Retrieve SFMC objects (paginate with getNextBatch when HasMoreRows)
<WSProxyInstance>.getNextBatch(...) Continue a paginated retrieve
<WSProxyInstance>.setBatchSize(...) Change retrieve page size
<WSProxyInstance>.createItem(...) Create a new SFMC object
<WSProxyInstance>.updateItem(...) Update an existing object
<WSProxyInstance>.deleteItem(...) Delete an object
<WSProxyInstance>.createBatch(...) Create multiple objects
<WSProxyInstance>.updateBatch(...) Update multiple objects
<WSProxyInstance>.deleteBatch(...) Delete multiple objects
<WSProxyInstance>.describe(...) SOAP object metadata
<WSProxyInstance>.execute(...) Named execute requests (e.g. LogUnsubEvent)
<WSProxyInstance>.performItem(...) SOAP Perform on one object
<WSProxyInstance>.performBatch(...) SOAP Perform on many objects
<WSProxyInstance>.setClientId(...) Target another business unit
<WSProxyInstance>.resetClientIds() Clear BU override

Common Use Cases

Retrieve Data Extension Rows

var proxy = new Script.Util.WSProxy();
var cols = ["Email", "FirstName", "Status"];
var filter = {
    Property: "Status",
    SimpleOperator: "equals",
    Value: "active"
};
var result = proxy.retrieve("DataExtensionObject[MyDE]", cols, filter);
var rows = result.Results;

Upsert Subscriber

var proxy = new Script.Util.WSProxy();
proxy.createItem("Subscriber", {
    EmailAddress: "jane@example.com",
    SubscriberKey: "sub_jane",
    Lists: [{ ID: 123, Status: "Active" }]
});

Retrieve All Data Extensions

var proxy = new Script.Util.WSProxy();
var cols = ["Name", "CustomerKey", "Description", "RowCount"];
var result = proxy.retrieve("DataExtension", cols);
var des = result.Results;

Response Structure

All WSProxy methods return an object with the following shape:

{
    Status: "OK",          // "OK" or an error status
    RequestID: "...",      // SFMC request ID
    Results: [...],      // Array of result objects (retrieve) or affected rows
    HasMoreRows: false    // true when pagination is needed (retrieve)
}

Always check result.Status before using result.Results:

var result = proxy.retrieve("DataExtension", ["Name", "CustomerKey"]);
if (result.Status !== "OK") {
    Write("Error: " + result.Status);
} else {
    var des = result.Results;
    for (var i = 0; i < des.length; i++) {
        Write(des[i].Name + "<br>");
    }
}

WSProxy vs InvokeCreate/Retrieve

Feature WSProxy CreateObject/Invoke
Code verbosity Concise Verbose
Native JS objects Yes No (SFMC objects)
Error handling Returns Status Sets output variables
Pagination Built-in (HasMoreRows) Manual
Recommended Yes Legacy