HomeGuidesAPI Reference
Submit Documentation FeedbackJoin Developer CommunityOptimizely GitHubOptimizely NuGetLog In

Customer operations

This topic describes how to work with RESTful operations for managing customers, organizations, and contacts, when using the Optimizely Service API for Optimizely Commerce integrations.

Example models

public class Contact
  {
    public Guid? PrimaryKeyId { get; set; }
    public Address[] Addresses { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string RegistrationSource { get; set; }
 }
 
public class Address
  {
    public Guid? AddressId { get; set; }
    public DateTime? Modified { get; set; }
    public string Name { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string CountryName { get; set; }
    public string CountryCode { get; set; }
    public string City { get; set; }
    public string PostalCode { get; set; }
    public string Line1 { get; set; }
    public string Line2 { get; set; }
    public string RegionName { get; set; }
    public string RegionCode { get; set; }
    public string Email { get; set; }
    public bool ShippingDefault { get; set; }
    public bool BillingDefault { get; set; }
    public string DaytimePhoneNumber { get; set; }
    public string EveningPhoneNumber { get; set; }
    public string Organization { get; set; }
  }
public class Organization
  {
    public Guid PrimaryKeyId { get; set; }
    public IEnumerable<Address> Addresses { get; set; }
    public IEnumerable<Organization> ChildOrganizations { get; set; }
    public IEnumerable<Contact> Contacts { get; set; }
    public string OrganizationType { get; set; }
    public string OrgCustomerGroup { get; set; } 
  }

Contacts

Get all contacts

📘

Note

This method only retrieves the first 1000 objects. To get more objects, see Get all contacts with paging.

GET

get/episerverapi/commerce/customers/contact

Get all contacts

JSON response type

C# code sample

var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);        
var result = client.GetAsync("/episerverapi/commerce/customers/contact").Result.Content.ReadAsStringAsync().Result

Request and response

C# code sample

var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml"));       
var result = client.GetAsync("/episerverapi/commerce/customers/contact").Result.Content.ReadAsStringAsync().Result

Response

<ArrayOfContact xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Contact>
    <PrimaryKeyId>de34525b-fff5-46ce-ba40-0cb05e54df22</PrimaryKeyId>
    <Addresses />
    <FirstName>Order</FirstName>
    <LastName>Manager</LastName>
    <Email>[email protected]</Email>
  </Contact>
  <Contact>
    <PrimaryKeyId>fe28218b-4fa9-496a-900c-678004a8f39a</PrimaryKeyId>
    <Addresses />
    <FirstName>Shipping</FirstName>
    <LastName>Manager</LastName>
    <Email>[email protected]</Email>
  </Contact>
  <Contact>
    <PrimaryKeyId>165c5742-4015-431c-a567-6853c3a0edd1</PrimaryKeyId>
    <Addresses />
    <FirstName>Receiving</FirstName>
    <LastName>Manager</LastName>
    <Email>[email protected]</Email>
  </Contact>
  <Contact>
    <PrimaryKeyId>4fcb2e02-3f88-431a-a1f0-83c4b0b51e82</PrimaryKeyId>
    <Addresses />
    &lt;FirstName>[email protected]</FirstName>
    <LastName />
    <Email />
  </Contact>
  <Contact>
    <PrimaryKeyId>24813df6-eea0-4871-aa4b-e89984eaa2a3</PrimaryKeyId>
    <Addresses />
    <FirstName>Order</FirstName>
    <LastName>Supervisor</LastName>
    <Email>[email protected]</Email>
  </Contact>
</ArrayOfContact>

GET

get/episerverapi/commerce/customers/contact/{startIndex}/{recordsToRetrieve}

Get all contacts with paging [New in Service API 5.4]

GET

get/episerverapi/commerce/customers/contact/{contactId}

Get a specific contact

JSON response type

C# code sample

var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);        
var result = client.GetAsync("/episerverapi/commerce/customers/contact/{contactId}").Result.Content.ReadAsStringAsync().Result

XML response type

C# code sample

var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml"));       
var result = client.GetAsync("/episerverapi/commerce/customers/contact/{contactId}").Result.Content.ReadAsStringAsync().Result

Response

<Contact>
  <PrimaryKeyId>de34525b-fff5-46ce-ba40-0cb05e54df22</PrimaryKeyId>
  <Addresses />
  <FirstName>Order</FirstName>
  <LastName>Manager</LastName>
  <Email>[email protected]</Email>
</Contact>

Create contact

POST

post/episerverapi/commerce/customers/contact/{userId}

Create contact

JSON response type

C# code sample

var json = JsonConvert.SerializeObject(model);
var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);        
var result = client.PostAsync("/episerverapi/commerce/customers/contact/{userId}",
  new StringContent(json, Encoding.UTF8, "application/json")).Result.Content.ReadAsStringAsync().Result

XML response type

C# code sample

var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"]) 
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
var serializer = new XmlSerializer(typeof(Contact));
var xml = String.Empty;
using (var ms = new MemoryStream())
  {
    serializer.Serialize(ms, model);
    xml = Encoding.Default.GetString(ms.ToArray());
  } 
var result = client.PostAsync("/episerverapi/commerce/customers/contact/{userId}",
  new StringContent(xml, Encoding.UTF8, "text/xml")).Result.Content.ReadAsStringAsync().Result

Response

<Contact xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <PrimaryKeyId>099e12f5-684c-4f34-a38b-cebfc8e41816</PrimaryKeyId>
  <Addresses>
    <Address>
      <AddressId>c0bc3105-7191-48e8-b921-3d557ebd4dd1</AddressId>
      <Modified>2017-10-02T08:49:57.107+02:00</Modified>
      <Name>Shipping address</Name>
      <FirstName>Customer</FirstName>
      <LastName>Sample</LastName>
      <CountryCode>US</CountryCode>
      <City>New York</City>
      <PostalCode>10012</PostalCode>
      <Line1>379 West Broadway</Line1>
      <Line2>Suite 248</Line2>
      <RegionName>New York</RegionName>
      <RegionCode>NY</RegionCode>
      <Email>[email protected]</Email>
      <ShippingDefault>true</ShippingDefault>
      <BillingDefault>false</BillingDefault>
      <DaytimePhoneNumber>(347) 261-7408</DaytimePhoneNumber>
      <EveningPhoneNumber>(347) 261-7408</EveningPhoneNumber>
    </Address>
    <Address>
      <AddressId>19245200-1045-44a5-afae-fd0bb86c279f</AddressId>
      <Modified>2017-10-02T08:49:57.203+02:00</Modified>
      <Name>Shipping address</Name>
      <FirstName>Customer</FirstName>
      <LastName>Sample</LastName>
      <CountryCode>US</CountryCode>
      <City>New York</City>
      <PostalCode>10012</PostalCode>
      <Line1>379 West Broadway</Line1>
      <Line2>Suite 248</Line2>
      <RegionName>New York</RegionName>
      <RegionCode>NY</RegionCode>
      <Email>[email protected]</Email>
      <ShippingDefault>true</ShippingDefault>
      <BillingDefault>false</BillingDefault>
      <DaytimePhoneNumber>(347) 261-7408</DaytimePhoneNumber>
      <EveningPhoneNumber>(347) 261-7408</EveningPhoneNumber>
    </Address>
  </Addresses>
  <FirstName>Customer</FirstName>
  <LastName>Sample</LastName>
  <Email>[email protected]</Email>
  <RegistrationSource>Geta.ServiceApi.Commerce integration tests</RegistrationSource>
</Contact>

Update contact

PUT

put/episerverapi/commerce/customers/contact/{contactId}

Update contact

JSON response type

C# code sample

var json = JsonConvert.SerializeObject(model);
var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);        
var result = client.PutAsync("/episerverapi/commerce/customers/contact/{contactId}",
  new StringContent(json, Encoding.UTF8, "application/json")).Result.Content.ReadAsStringAsync().Result

XML response type

C# code sample

var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
var serializer = new XmlSerializer(typeof(Contact));
var xml = String.Empty;
using (var ms = new MemoryStream())
  {
    serializer.Serialize(ms, model);
    xml = Encoding.Default.GetString(ms.ToArray());
  }     
var result = client.PutAsync("/episerverapi/commerce/customers/contact/{contactId}",
  new StringContent(xml, Encoding.UTF8, "text/xml")).Result.Content.ReadAsStringAsync().Result

Response

200 No Content

Delete contact

DELETE

delete/episerverapi/commerce/customers/contact/{contactId}

Delete contact

JSON response type

C# code sample

var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);        
var result = client.DeleteAsync("/episerverapi/commerce/customers/contact/{contactId}").Result.Content.ReadAsStringAsync().Result

XML response type

C# code sample

var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml"));   
var result = client.DeleteAsync("/episerverapi/commerce/customers/contact/{contactId}").Result.Content.ReadAsStringAsync().Result

Response

<Contact>
  <PrimaryKeyId>de34525b-fff5-46ce-ba40-0cb05e54df22</PrimaryKeyId>
  <Addresses />
  <FirstName>Order</FirstName>
  <LastName>Manager</LastName>
  <Email>[email protected]</Email>
</Contact>

Organizations

Get all organizations

GET

get/episerverapi/commerce/customers/organization

Get all organizations

JSON response type

C# code sample

var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);        
var result = client.GetAsync("/episerverapi/commerce/customers/organization").Result.Content.ReadAsStringAsync().Result

XML response type

C# code sample

var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml"));       
var result = client.GetAsync("/episerverapi/commerce/customers/organization").Result.Content.ReadAsStringAsync().Result

Response

<Organizations>
  <Organization>
    <PrimaryKeyId>9718eb2d-8839-432d-a6f7-32cf30e5f3af</PrimaryKeyId>
    <Addresses />
   <ChildOrganizations>
      <Organization>
         <PrimaryKeyId>943a4d24-8f93-4e93-bca7-f7f227a564b1</PrimaryKeyId>
         <Addresses />
         <ChildOrganizations />
         <Contacts />
         <OrganizationType>Organization Unit</OrganizationType>
         <OrgCustomerGroup>Customer</OrgCustomerGroup>
      </Organization>
   </ChildOrganizations>   
    <Contacts />
    <OrganizationType>Organization</OrganizationType>
    <OrgCustomerGroup>Partner</OrgCustomerGroup>
 </Organization>
 <Organization>
   <PrimaryKeyId>9718eb2d-8839-432d-a6f7-f7f227a564b1</PrimaryKeyId>
   <Addresses />
   <ChildOrganizations />
   <Contacts />
    <OrganizationType>Organization Unit</OrganizationType>
    <OrgCustomerGroup>Customer</OrgCustomerGroup>
 </Organization>
</Organizations>

Get a specific organization

GET

get/episerverapi/commerce/customers/organization/{orgId}

Get a specific organization

JSON response type

C# code sample

var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);        
var result = client.GetAsync("/episerverapi/commerce/customers/organization/{orgId}").Result.Content.ReadAsStringAsync().Result

XML response type

C# code sample

var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml"));       
var result = client.GetAsync("/episerverapi/commerce/customers/organization/{orgId}").Result.Content.ReadAsStringAsync().Result

Response

<Organization>
    <PrimaryKeyId>9718eb2d-8839-432d-a6f7-32cf30e5f3af</PrimaryKeyId>
    <Addresses />
   <ChildOrganizations>
      <Organization>
         <PrimaryKeyId>943a4d24-8f93-4e93-bca7-f7f227a564b1</PrimaryKeyId>
         <Addresses />
         <ChildOrganizations />
         <Contacts />
         <OrganizationType>Organization Unit</OrganizationType>
         <OrgCustomerGroup>Customer</OrgCustomerGroup>
      </Organization>
   </ChildOrganizations>   
    <Contacts />
    <OrganizationType>Organization</OrganizationType>
    <OrgCustomerGroup>Partner</OrgCustomerGroup>
 </Organization>

Create an organization

POST

post/episerverapi/commerce/customers/organization

Create organization

JSON response type

C# code sample

var json = JsonConvert.SerializeObject(model);
var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);        
var result = client.PostAsync("/episerverapi/commerce/customers/organization",
  new StringContent(json, Encoding.UTF8, "application/json")).Result.Content.ReadAsStringAsync().Result

XML response type

C# code sample

var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
var serializer = new XmlSerializer(typeof(Organization));
var xml = String.Empty;
using (var ms = new MemoryStream())
  {
    serializer.Serialize(ms, model);
    xml = Encoding.Default.GetString(ms.ToArray());
  } 
var result = client.PostAsync("/episerverapi/commerce/customers/organization",
  new StringContent(xml, Encoding.UTF8, "text/xml")).Result.Content.ReadAsStringAsync().Result

Response

<Organization>
    <PrimaryKeyId>9718eb2d-8839-432d-a6f7-32cf30e5f3af</PrimaryKeyId>
    <Addresses />
   <ChildOrganizations>
      <Organization>
         <PrimaryKeyId>943a4d24-8f93-4e93-bca7-f7f227a564b1</PrimaryKeyId>
         <Addresses />
         <ChildOrganizations />
         <Contacts />
         <OrganizationType>Organization Unit</OrganizationType>
         <OrgCustomerGroup>Customer</OrgCustomerGroup>
      </Organization>
   </ChildOrganizations>   
    <Contacts />
    <OrganizationType>Organization</OrganizationType>
    <OrgCustomerGroup>Partner</OrgCustomerGroup>
 </Organization>

Update an organization

PUT

put/episerverapi/commerce/customers/organization/{orgId}

Update organization

JSON response type

C# code sample

var json = JsonConvert.SerializeObject(model);
var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);        
var result = client.PutAsync("/episerverapi/commerce/customers/organization/{orgId}",
  new StringContent(json, Encoding.UTF8, "application/json")).Result.Content.ReadAsStringAsync().Result

XML response type

C# code sample

var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
var serializer = new XmlSerializer(typeof(Organization));
var xml = String.Empty;
using (var ms = new MemoryStream())
  {
    serializer.Serialize(ms, model);
    xml = Encoding.Default.GetString(ms.ToArray());
  }     
var result = client.PutAsync("/episerverapi/commerce/customers/organization",
  new StringContent(xml, Encoding.UTF8, "text/xml")).Result.Content.ReadAsStringAsync().Result

Response

200 No Content

Delete an organization

DELETE

delete/episerverapi/commerce/customers/organization/{orgId}

Delete organization

JSON response type

C# code sample

var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);        
var result = client.DeleteAsync("/episerverapi/commerce/customers/organization/{orgId}").Result.Content.ReadAsStringAsync().Result

XML response type

C# code sample

var client = new HttpClient()
  {
    BaseAddress = new Uri(ConfigurationManager.AppSettings["integrationUrl"])
  };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml"));   
var result = client.DeleteAsync("/episerverapi/commerce/customers/organization/{orgId}").Result.Content.ReadAsStringAsync().Result

Response

<Organization>
    <PrimaryKeyId>9718eb2d-8839-432d-a6f7-32cf30e5f3af</PrimaryKeyId>
    <Addresses />
   <ChildOrganizations>
      <Organization>
         <PrimaryKeyId>943a4d24-8f93-4e93-bca7-f7f227a564b1</PrimaryKeyId>
         <Addresses />
         <ChildOrganizations />
         <Contacts />
         <OrganizationType>Organization Unit</OrganizationType>
         <OrgCustomerGroup>Customer</OrgCustomerGroup>
      </Organization>
   </ChildOrganizations>   
    <Contacts />
    <OrganizationType>Organization</OrganizationType>
    <OrgCustomerGroup>Partner</OrgCustomerGroup>
 </Organization>

Did this page help you?