You can add and remove subscribers from lists as part of importing subscribers. You can also manage subscribers and lists as part of creating Subscription Centers. The SubscriberList object, when acted upon as the child of a Subscriber object, enables the before mentioned use cases.
How To Manage Subscribers on Lists
The information and sample code below presents the necessary information to manage subscribers on lists. Use the examples as models to construct your own API calls.
SubscriberList
The SubscriberList object represents the union between subscribers and lists.
SubscriberList Actions
Create: creates an existing subscriber on a list
Update: updates an existing subscriber on a list (for status purposes primarily)
Delete: deletes an existing subscriber from a list
Upsert: Creates the subscriber on the list if they don’t exist or updates them if they already exist on the list.
Identifiers
When using the SubscriberList object on Create and Update methods, the ID property represents the ID of the list. On the Retrieve method, the ID property represents the ID of the Subscriber (with the List.ID representing the List ID). Retrieve also supports Subscriber.SubscriberKey as an identifer.
Sample Code
Adding an Existing Subscriber to a List
This example assumes the subscriber exists in the account but not on the list.
Sample .NET Code
1public static void UpdateSubscriber_AddToList(SoapClient soapClient,2 string iEmailAddress,3 int iListID)4 {5 Subscriber sub = new Subscriber();6 sub.EmailAddress = iEmailAddress;7 // Define the SubscriberList and set the status to Active8 SubscriberList subList = new SubscriberList();9 subList.ID = iListID;10 subList.IDSpecified = true;11 subList.Status = SubscriberStatus.Active;12 subList.StatusSpecified = true;13 // Action is set on the SubscriberList to 'create' meaning they are added if they don't exist.14 // If they already exist, it returns an error.15 subList.Action = "create";16 //Relate the SubscriberList defined to the Subscriber17 sub.Lists = new SubscriberList[] { subList };18 string sStatus = "";19 string sRequestId = "";20 UpdateResult[] uResults =21 soapClient.Update(new UpdateOptions(), new APIObject[] { sub }, out sRequestId, out sStatus);22 Console.WriteLine("Status: " + sStatus);23 Console.WriteLine("Request ID: " + sRequestId);24 foreach (UpdateResult ur in uResults)25 {26 Console.WriteLine("StatusCode: " + ur.StatusCode);27 Console.WriteLine("StatusMessage: " + ur.StatusMessage);28 Console.WriteLine("ErrorCode: " + ur.ErrorCode);29 }30 }
Sample Java (Axis2) Code
1public static void Run(PartnerAPIStub ps, String iEmailAddress, int iListID) {2 try {3 Subscriber sub = Subscriber.Factory.newInstance();4 sub.setEmailAddress(iEmailAddress);5 SubscriberList subList = SubscriberList.Factory.newInstance();6 subList.setID(iListID);7 subList.setStatus(SubscriberStatus.ACTIVE);89 // Action is set on the SubscriberList to 'create' meaning they are added if they don't exist.10 // If they already exist, it returns an error.11 subList.setAction("create");12 sub.setListsArray(new SubscriberList[] { subList });1314 UpdateRequestDocument updateRequestDocument = UpdateRequestDocument.Factory15 .newInstance();16 UpdateRequestDocument.UpdateRequest UpdateRequest = UpdateRequestDocument.UpdateRequest.Factory17 .newInstance();18 UpdateRequest.setObjectsArray(new APIObject[] { sub });19 UpdateOptions updateOptions = UpdateOptions.Factory.newInstance();20 UpdateRequest.setOptions(updateOptions);21 updateRequestDocument.setUpdateRequest(UpdateRequest);22 UpdateResponseDocument responseDoc = ps23 .update(updateRequestDocument);24 UpdateResponse uResults = responseDoc.getUpdateResponse();25 System.out.println("Status: " + uResults.getOverallStatus());26 System.out.println("Request ID: " + uResults.getRequestID());27 for (UpdateResult ur : uResults.getResultsArray())28 {29 System.out.println("StatusCode: " + ur.getStatusCode());30 System.out.println("StatusMessage: " + ur.getStatusMessage());31 System.out.println("ErrorCode: " + ur.getErrorCode());32 }33 } catch (Exception e) {34 e.printStackTrace();35 }36 }
This example assumes the subscriber exists on the list already.
Sample .NET Code
1public static void UpdateSubscriber_UnsubscribeFromList(SoapClient soapClient,2 string iEmailAddress,3 int iListID)4 {5 Subscriber sub = new Subscriber();6 sub.EmailAddress = iEmailAddress;7 // Define the SubscriberList and set the status to Active8 SubscriberList subList = new SubscriberList();9 subList.ID = iListID;10 subList.IDSpecified = true;11 subList.Status = SubscriberStatus.Unsubscribed;12 subList.StatusSpecified = true;13 // Action is set on the SubscriberList to 'update'.14 // An error is returned if the subscriber does not already exist on list.15 subList.Action = "update";16 //Relate the SubscriberList defined to the Subscriber17 sub.Lists = new SubscriberList[] { subList };18 string sStatus = "";19 string sRequestId = "";20 UpdateResult[] uResults =21 soapClient.Update(new UpdateOptions(), new APIObject[] { sub }, out sRequestId, out sStatus);22 Console.WriteLine("Status: " + sStatus);23 Console.WriteLine("Request ID: " + sRequestId);24 foreach (UpdateResult ur in uResults)25 {26 Console.WriteLine("StatusCode: " + ur.StatusCode);27 Console.WriteLine("StatusMessage: " + ur.StatusMessage);28 Console.WriteLine("ErrorCode: " + ur.ErrorCode);29 }30 }
Sample Java Code (Axis2)
The code below unsubscribes the subscriber from all lists the subscriber is on. Specify a ListID in the code to remove the subscriber from a specific list.
1public static void Run(PartnerAPIStub ps, String iEmailAddress, int iListID) {2 try {3 Subscriber sub = Subscriber.Factory.newInstance();4 sub.setEmailAddress(iEmailAddress);5 SubscriberList subList = SubscriberList.Factory.newInstance();6 subList.setID(iListID);78 subList.setStatus(SubscriberStatus.UNSUBSCRIBED);910 // Action is set on the SubscriberList to 'update'.11 // An error is returned if the subscriber does not already exist on list.12 subList.setAction("update");13 sub.setListsArray(new SubscriberList[] { subList });1415 UpdateRequestDocument updateRequestDocument = UpdateRequestDocument.Factory16 .newInstance();17 UpdateRequestDocument.UpdateRequest UpdateRequest = UpdateRequestDocument.UpdateRequest.Factory18 .newInstance();19 UpdateRequest.setObjectsArray(new APIObject[] { sub });20 UpdateOptions updateOptions = UpdateOptions.Factory.newInstance();21 UpdateRequest.setOptions(updateOptions);22 updateRequestDocument.setUpdateRequest(UpdateRequest);23 UpdateResponseDocument responseDoc = ps24 .update(updateRequestDocument);25 UpdateResponse uResults = responseDoc.getUpdateResponse();26 System.out.println("Status: " + uResults.getOverallStatus());27 System.out.println("Request ID: " + uResults.getRequestID());28 for (UpdateResult ur : uResults.getResultsArray())29 {30 System.out.println("StatusCode: " + ur.getStatusCode());31 System.out.println("StatusMessage: " + ur.getStatusMessage());32 System.out.println("ErrorCode: " + ur.getErrorCode());33 }34 } catch (Exception e) {35 e.printStackTrace();36 }37 }