curl --location --request POST 'https://api.stateset.com/v1/customers/merge' \
--header 'Content-Type: application/json' \
--header 'Authorization: Token <token>' \
--data-raw '{
"primary_customer_id": "cust_primary_123",
"duplicate_customer_ids": ["cust_dup_456", "cust_dup_789"],
"merge_strategy": {
"contacts": "merge_all",
"orders": "transfer_all",
"addresses": "merge_unique",
"preferences": "most_recent"
},
"reason": "Duplicate accounts identified during data cleanup"
}'
mutation customerMergeMutation {
customerMerge(
primaryCustomerId: "${primaryCustomerId}",
duplicateCustomerIds: ${duplicateCustomerIds},
mergeStrategy: ${mergeStrategy},
reason: "${reason}"
) {
customer {
id
email
merge_summary {
orders_transferred
addresses_merged
total_lifetime_value
}
}
userErrors {
field
message
}
}
}
const mergedCustomer = await stateset.customers.merge({
primary_customer_id: 'cust_primary_123',
duplicate_customer_ids: ['cust_dup_456', 'cust_dup_789'],
merge_strategy: {
contacts: 'merge_all',
orders: 'transfer_all',
addresses: 'merge_unique',
preferences: 'most_recent'
},
reason: 'Duplicate accounts identified during data cleanup'
});
merged_customer = stateset.customers.merge({
'primary_customer_id': 'cust_primary_123',
'duplicate_customer_ids': ['cust_dup_456', 'cust_dup_789'],
'merge_strategy': {
'contacts': 'merge_all',
'orders': 'transfer_all',
'addresses': 'merge_unique',
'preferences': 'most_recent'
},
'reason': 'Duplicate accounts identified during data cleanup'
})
merged_customer = Stateset::Customer.merge({
primary_customer_id: 'cust_primary_123',
duplicate_customer_ids: ['cust_dup_456', 'cust_dup_789'],
merge_strategy: {
contacts: 'merge_all',
orders: 'transfer_all',
addresses: 'merge_unique',
preferences: 'most_recent'
},
reason: 'Duplicate accounts identified during data cleanup'
})
mergedCustomer, err := stateset.Customers.merge({
PrimaryCustomerID: 'cust_primary_123',
DuplicateCustomerIDs: []string{'cust_dup_456', 'cust_dup_789'},
MergeStrategy: MergeStrategy{
Contacts: 'merge_all',
Orders: 'transfer_all',
Addresses: 'merge_unique',
Preferences: 'most_recent'
},
Reason: 'Duplicate accounts identified during data cleanup'
})
Customer mergedCustomer = stateset.customers.merge({
primaryCustomerId: 'cust_primary_123',
duplicateCustomerIds: ['cust_dup_456', 'cust_dup_789'],
mergeStrategy: {
contacts: 'merge_all',
orders: 'transfer_all',
addresses: 'merge_unique',
preferences: 'most_recent'
},
reason: 'Duplicate accounts identified during data cleanup'
});
$merged_customer = $stateset->customers->merge([
'primary_customer_id' => 'cust_primary_123',
'duplicate_customer_ids' => ['cust_dup_456', 'cust_dup_789'],
'merge_strategy' => [
'contacts' => 'merge_all',
'orders' => 'transfer_all',
'addresses' => 'merge_unique',
'preferences' => 'most_recent'
],
'reason' => 'Duplicate accounts identified during data cleanup'
]);
var mergedCustomer = await stateset.Customers.Merge(new {
PrimaryCustomerId = 'cust_primary_123',
DuplicateCustomerIds = new[] { 'cust_dup_456', 'cust_dup_789' },
MergeStrategy = new {
Contacts = 'merge_all',
Orders = 'transfer_all',
Addresses = 'merge_unique',
Preferences = 'most_recent'
},
Reason = 'Duplicate accounts identified during data cleanup'
});
{
"id": "cust_primary_123",
"merged_customer_ids": ["cust_dup_456", "cust_dup_789"],
"merge_summary": {
"orders_transferred": 15,
"addresses_merged": 3,
"contacts_merged": 2,
"total_lifetime_value": 4567.89,
"loyalty_points_combined": 2500
},
"conflicts_resolved": [
{
"field": "email",
"primary_value": "john@example.com",
"duplicate_values": ["j.doe@example.com", "johndoe@example.com"],
"resolution": "kept_primary"
},
{
"field": "phone",
"primary_value": "+1-555-0123",
"duplicate_values": ["+1-555-0124"],
"resolution": "kept_all_as_secondary"
}
],
"merged_at": "2024-01-15T14:30:00Z",
"merged_by": "user_admin_123",
"success": true
}
{
"error": {
"code": "merge_conflict",
"message": "Cannot merge customers with active subscriptions. Please resolve subscriptions first.",
"details": {
"primary_customer_subscriptions": 1,
"duplicate_customer_subscriptions": ["cust_dup_456"],
"resolution_required": "cancel_or_transfer_subscriptions"
}
}
}
Merge Customers
This endpoint merges duplicate customer records into a single primary record.
POST
/
v1
/
customers
/
merge
curl --location --request POST 'https://api.stateset.com/v1/customers/merge' \
--header 'Content-Type: application/json' \
--header 'Authorization: Token <token>' \
--data-raw '{
"primary_customer_id": "cust_primary_123",
"duplicate_customer_ids": ["cust_dup_456", "cust_dup_789"],
"merge_strategy": {
"contacts": "merge_all",
"orders": "transfer_all",
"addresses": "merge_unique",
"preferences": "most_recent"
},
"reason": "Duplicate accounts identified during data cleanup"
}'
mutation customerMergeMutation {
customerMerge(
primaryCustomerId: "${primaryCustomerId}",
duplicateCustomerIds: ${duplicateCustomerIds},
mergeStrategy: ${mergeStrategy},
reason: "${reason}"
) {
customer {
id
email
merge_summary {
orders_transferred
addresses_merged
total_lifetime_value
}
}
userErrors {
field
message
}
}
}
const mergedCustomer = await stateset.customers.merge({
primary_customer_id: 'cust_primary_123',
duplicate_customer_ids: ['cust_dup_456', 'cust_dup_789'],
merge_strategy: {
contacts: 'merge_all',
orders: 'transfer_all',
addresses: 'merge_unique',
preferences: 'most_recent'
},
reason: 'Duplicate accounts identified during data cleanup'
});
merged_customer = stateset.customers.merge({
'primary_customer_id': 'cust_primary_123',
'duplicate_customer_ids': ['cust_dup_456', 'cust_dup_789'],
'merge_strategy': {
'contacts': 'merge_all',
'orders': 'transfer_all',
'addresses': 'merge_unique',
'preferences': 'most_recent'
},
'reason': 'Duplicate accounts identified during data cleanup'
})
merged_customer = Stateset::Customer.merge({
primary_customer_id: 'cust_primary_123',
duplicate_customer_ids: ['cust_dup_456', 'cust_dup_789'],
merge_strategy: {
contacts: 'merge_all',
orders: 'transfer_all',
addresses: 'merge_unique',
preferences: 'most_recent'
},
reason: 'Duplicate accounts identified during data cleanup'
})
mergedCustomer, err := stateset.Customers.merge({
PrimaryCustomerID: 'cust_primary_123',
DuplicateCustomerIDs: []string{'cust_dup_456', 'cust_dup_789'},
MergeStrategy: MergeStrategy{
Contacts: 'merge_all',
Orders: 'transfer_all',
Addresses: 'merge_unique',
Preferences: 'most_recent'
},
Reason: 'Duplicate accounts identified during data cleanup'
})
Customer mergedCustomer = stateset.customers.merge({
primaryCustomerId: 'cust_primary_123',
duplicateCustomerIds: ['cust_dup_456', 'cust_dup_789'],
mergeStrategy: {
contacts: 'merge_all',
orders: 'transfer_all',
addresses: 'merge_unique',
preferences: 'most_recent'
},
reason: 'Duplicate accounts identified during data cleanup'
});
$merged_customer = $stateset->customers->merge([
'primary_customer_id' => 'cust_primary_123',
'duplicate_customer_ids' => ['cust_dup_456', 'cust_dup_789'],
'merge_strategy' => [
'contacts' => 'merge_all',
'orders' => 'transfer_all',
'addresses' => 'merge_unique',
'preferences' => 'most_recent'
],
'reason' => 'Duplicate accounts identified during data cleanup'
]);
var mergedCustomer = await stateset.Customers.Merge(new {
PrimaryCustomerId = 'cust_primary_123',
DuplicateCustomerIds = new[] { 'cust_dup_456', 'cust_dup_789' },
MergeStrategy = new {
Contacts = 'merge_all',
Orders = 'transfer_all',
Addresses = 'merge_unique',
Preferences = 'most_recent'
},
Reason = 'Duplicate accounts identified during data cleanup'
});
{
"id": "cust_primary_123",
"merged_customer_ids": ["cust_dup_456", "cust_dup_789"],
"merge_summary": {
"orders_transferred": 15,
"addresses_merged": 3,
"contacts_merged": 2,
"total_lifetime_value": 4567.89,
"loyalty_points_combined": 2500
},
"conflicts_resolved": [
{
"field": "email",
"primary_value": "john@example.com",
"duplicate_values": ["j.doe@example.com", "johndoe@example.com"],
"resolution": "kept_primary"
},
{
"field": "phone",
"primary_value": "+1-555-0123",
"duplicate_values": ["+1-555-0124"],
"resolution": "kept_all_as_secondary"
}
],
"merged_at": "2024-01-15T14:30:00Z",
"merged_by": "user_admin_123",
"success": true
}
{
"error": {
"code": "merge_conflict",
"message": "Cannot merge customers with active subscriptions. Please resolve subscriptions first.",
"details": {
"primary_customer_subscriptions": 1,
"duplicate_customer_subscriptions": ["cust_dup_456"],
"resolution_required": "cancel_or_transfer_subscriptions"
}
}
}
Body
string
The customer ID that will be kept as the primary record
array
Array of customer IDs to be merged into the primary record
object
Strategy for handling conflicting data during merge
string
The reason for merging these customer records
Response
string
The ID of the primary customer record after merge
array
Array of customer IDs that were merged
object
array
List of conflicts that were resolved during merge
string
Timestamp when the merge was completed
string
User who performed the merge
boolean
Indicates whether the merge was successful
curl --location --request POST 'https://api.stateset.com/v1/customers/merge' \
--header 'Content-Type: application/json' \
--header 'Authorization: Token <token>' \
--data-raw '{
"primary_customer_id": "cust_primary_123",
"duplicate_customer_ids": ["cust_dup_456", "cust_dup_789"],
"merge_strategy": {
"contacts": "merge_all",
"orders": "transfer_all",
"addresses": "merge_unique",
"preferences": "most_recent"
},
"reason": "Duplicate accounts identified during data cleanup"
}'
mutation customerMergeMutation {
customerMerge(
primaryCustomerId: "${primaryCustomerId}",
duplicateCustomerIds: ${duplicateCustomerIds},
mergeStrategy: ${mergeStrategy},
reason: "${reason}"
) {
customer {
id
email
merge_summary {
orders_transferred
addresses_merged
total_lifetime_value
}
}
userErrors {
field
message
}
}
}
const mergedCustomer = await stateset.customers.merge({
primary_customer_id: 'cust_primary_123',
duplicate_customer_ids: ['cust_dup_456', 'cust_dup_789'],
merge_strategy: {
contacts: 'merge_all',
orders: 'transfer_all',
addresses: 'merge_unique',
preferences: 'most_recent'
},
reason: 'Duplicate accounts identified during data cleanup'
});
merged_customer = stateset.customers.merge({
'primary_customer_id': 'cust_primary_123',
'duplicate_customer_ids': ['cust_dup_456', 'cust_dup_789'],
'merge_strategy': {
'contacts': 'merge_all',
'orders': 'transfer_all',
'addresses': 'merge_unique',
'preferences': 'most_recent'
},
'reason': 'Duplicate accounts identified during data cleanup'
})
merged_customer = Stateset::Customer.merge({
primary_customer_id: 'cust_primary_123',
duplicate_customer_ids: ['cust_dup_456', 'cust_dup_789'],
merge_strategy: {
contacts: 'merge_all',
orders: 'transfer_all',
addresses: 'merge_unique',
preferences: 'most_recent'
},
reason: 'Duplicate accounts identified during data cleanup'
})
mergedCustomer, err := stateset.Customers.merge({
PrimaryCustomerID: 'cust_primary_123',
DuplicateCustomerIDs: []string{'cust_dup_456', 'cust_dup_789'},
MergeStrategy: MergeStrategy{
Contacts: 'merge_all',
Orders: 'transfer_all',
Addresses: 'merge_unique',
Preferences: 'most_recent'
},
Reason: 'Duplicate accounts identified during data cleanup'
})
Customer mergedCustomer = stateset.customers.merge({
primaryCustomerId: 'cust_primary_123',
duplicateCustomerIds: ['cust_dup_456', 'cust_dup_789'],
mergeStrategy: {
contacts: 'merge_all',
orders: 'transfer_all',
addresses: 'merge_unique',
preferences: 'most_recent'
},
reason: 'Duplicate accounts identified during data cleanup'
});
$merged_customer = $stateset->customers->merge([
'primary_customer_id' => 'cust_primary_123',
'duplicate_customer_ids' => ['cust_dup_456', 'cust_dup_789'],
'merge_strategy' => [
'contacts' => 'merge_all',
'orders' => 'transfer_all',
'addresses' => 'merge_unique',
'preferences' => 'most_recent'
],
'reason' => 'Duplicate accounts identified during data cleanup'
]);
var mergedCustomer = await stateset.Customers.Merge(new {
PrimaryCustomerId = 'cust_primary_123',
DuplicateCustomerIds = new[] { 'cust_dup_456', 'cust_dup_789' },
MergeStrategy = new {
Contacts = 'merge_all',
Orders = 'transfer_all',
Addresses = 'merge_unique',
Preferences = 'most_recent'
},
Reason = 'Duplicate accounts identified during data cleanup'
});
{
"id": "cust_primary_123",
"merged_customer_ids": ["cust_dup_456", "cust_dup_789"],
"merge_summary": {
"orders_transferred": 15,
"addresses_merged": 3,
"contacts_merged": 2,
"total_lifetime_value": 4567.89,
"loyalty_points_combined": 2500
},
"conflicts_resolved": [
{
"field": "email",
"primary_value": "john@example.com",
"duplicate_values": ["j.doe@example.com", "johndoe@example.com"],
"resolution": "kept_primary"
},
{
"field": "phone",
"primary_value": "+1-555-0123",
"duplicate_values": ["+1-555-0124"],
"resolution": "kept_all_as_secondary"
}
],
"merged_at": "2024-01-15T14:30:00Z",
"merged_by": "user_admin_123",
"success": true
}
{
"error": {
"code": "merge_conflict",
"message": "Cannot merge customers with active subscriptions. Please resolve subscriptions first.",
"details": {
"primary_customer_subscriptions": 1,
"duplicate_customer_subscriptions": ["cust_dup_456"],
"resolution_required": "cancel_or_transfer_subscriptions"
}
}
}
⌘I