중복 레코드 조회
작성일 2026.04.23 | 수정일 2026.04.23
POST/crm-core/v1/records/duplicates
개체 내에서 지정한 속성 값(또는 레코드 이름)을 기준으로 중복 레코드 그룹을 탐지합니다. 같은 전화번호·이메일·이름 등으로 중복 등록된 레코드를 찾아 병합 후보 목록을 반환합니다.
Body Params
| Name | Type | Required | Description |
|---|---|---|---|
| entityId | string | 검사 대상 개체 ID | |
| propertyIds | Array | 중복 검사 속성 ID 목록 (권장) | |
| propertyId | string | 단일 속성 ID (레거시, 하나만 검사) | |
| includeName | boolean | 레코드 name 필드도 중복 검사에 포함할지 여부 | |
| recordIds | Array | 검사 범위를 특정 레코드 ID 집합으로 제한 (예=최근 임포트 건만 검사) |
Response
| Name | Type | Required | Description |
|---|---|---|---|
| groups | Array | 중복 그룹 배열 | |
| groups[].key | string | 중복 기준이 된 값 (이름 또는 속성 값) | |
| groups[].recordIds | Array | 해당 그룹의 레코드 ID 목록 | |
| groups[].count | number | 그룹 내 레코드 수 | |
| totalDuplicates | number | 중복으로 판별된 총 레코드 수 |
Structure
코드 예제
const response = await fetch('https://api.solapi.com/crm-core/v1/records/duplicates', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + TOKEN,
'Content-Type': 'application/json'
},
body: JSON.stringify({
entityId: 'CRMET1260423081530123XYZ11122233',
propertyIds: ['CRMPP1260423091530123PHON1112223']
})
});
const duplicates = await response.json();
import requests
response = requests.post(
'https://api.solapi.com/crm-core/v1/records/duplicates',
headers={'Authorization': f'Bearer {TOKEN}'},
json={'entityId': 'CRMET1260423081530123XYZ11122233', 'propertyIds': ['CRMPP1260423091530123PHON1112223']}
)
duplicates = response.json()
curl -X POST 'https://api.solapi.com/crm-core/v1/records/duplicates' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"entityId":"CRMET...","propertyIds":["CRMPP..."]}'
lightbulb
`includeName: true`로 레코드 이름까지 중복 기준으로 포함할 수 있습니다. 여러 속성을 함께 검사하면 **모든 속성 값이 일치**하는 레코드만 그룹핑됩니다(AND 조건).