Customer operations
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 />
    <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>
Updated over 1 year ago