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
The customer ID that will be kept as the primary record
Array of customer IDs to be merged into the primary record
Strategy for handling conflicting data during merge
Show properties
Show properties
How to merge contact info: “primary_only”, “merge_all”, “most_recent”
How to handle orders: “transfer_all”, “keep_separate”
How to merge addresses: “primary_only”, “merge_unique”, “keep_all”
How to merge preferences: “primary_only”, “merge_all”, “most_recent”
The reason for merging these customer records
Response
The ID of the primary customer record after merge
Array of customer IDs that were merged
List of conflicts that were resolved during merge
Timestamp when the merge was completed
User who performed the merge
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