관계 일괄 생성
POST/crm-core/v1/relationships/bulk
여러 소스 레코드와 대상 레코드를 카르테시안 곱으로 일괄 연결한다. 소스는 ID 배열(sourceRecordIds) 또는 필터(sourceFilter) 중 하나로 지정한다. 권한 요구: MEMBER 이상.
Body Params
| Name | Type | Required | Description |
|---|---|---|---|
| sourceEntityId | string | 소스 개체 ID | |
| targetEntityId | string | 대상 개체 ID | |
| relationshipTypeId | string | 관계 유형 ID | |
| sourceRecordIds | Array | 소스 레코드 ID 목록. 최대 500개. sourceFilter와 택일 | |
| sourceFilter | Object | 필터 조건으로 소스 레코드를 선택 (최대 5,000건까지 수집) | |
| sourceFilter.keyword | string | 레코드 이름에 대한 부분 일치 키워드 | |
| sourceFilter.filters | string | 속성값 필터 JSON 문자열. 예: {"propId":{"op":"eq","value":"VIP"}} | |
| sourceFilter.segmentId | string | 특정 세그먼트에 속한 레코드로 제한 | |
| targetRecordIds | Array | 대상 레코드 ID 목록. 최소 1개, 최대 100개 |
Response
| Name | Type | Required | Description |
|---|---|---|---|
| total | number | 생성 시도한 관계 수 (소스 × 대상) | |
| created | number | 실제 생성된 관계 수 | |
| skipped | number | * | 중복으로 건너뛴 관계 수 |
Structure
코드 예제
const response = await fetch('https://api.solapi.com/crm-core/v1/relationships/bulk', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + TOKEN,
'Content-Type': 'application/json'
},
body: JSON.stringify({
sourceEntityId: 'CRMET1260423081530123XYZ11122233',
targetEntityId: 'CRMET1260423081530124XYZ11122234',
relationshipTypeId: 'CRMRT1260423091530123RTP11122233',
sourceFilter: { segmentId: 'CRMSG1260423081530123SGM11122233' },
targetRecordIds: ['CRMRC1260423081530125REC11122235']
})
});
const data = await response.json();
import requests
response = requests.post(
'https://api.solapi.com/crm-core/v1/relationships/bulk',
headers={'Authorization': f'Bearer {TOKEN}'},
json={
'sourceEntityId': 'CRMET1260423081530123XYZ11122233',
'targetEntityId': 'CRMET1260423081530124XYZ11122234',
'relationshipTypeId': 'CRMRT1260423091530123RTP11122233',
'sourceRecordIds': ['CRMRC1260423081530123REC11122233'],
'targetRecordIds': ['CRMRC1260423081530125REC11122235']
}
)
data = response.json()
curl -X POST 'https://api.solapi.com/crm-core/v1/relationships/bulk' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"sourceEntityId":"CRMET1260423081530123XYZ11122233","targetEntityId":"CRMET1260423081530124XYZ11122234","relationshipTypeId":"CRMRT1260423091530123RTP11122233","sourceRecordIds":["CRMRC1260423081530123REC11122233"],"targetRecordIds":["CRMRC1260423081530125REC11122235"]}'
`sourceRecordIds`와 `sourceFilter`는 택일이다. 둘 다 비어 있으면 400이 반환된다. `sourceFilter` 경로로 선택되는 소스 레코드는 최대 5,000건까지이며, 삭제된(`isDeleted=true`) 레코드는 자동 제외된다.
생성 예상량(소스 × 대상)이 10,000건을 초과하면 400이 반환된다. 중복 관계는 고유 인덱스로 자동 차단되어 `skipped`에 집계된다.