관계 생성
POST/crm-core/v1/relationships
두 레코드를 지정한 관계 유형(Relationship Type)으로 연결한다. 권한 요구: MEMBER 이상. 소스 레코드·대상 레코드·관계 유형 조합이 이미 존재하면 409가 반환된다.
Body Params
| Name | Type | Required | Description |
|---|---|---|---|
| relationshipTypeId | string | 미리 정의된 관계 유형 ID (CRMRT1...) | |
| sourceEntityId | string | 소스 레코드가 속한 개체 ID | |
| sourceRecordId | string | 연결의 출발점 레코드 ID | |
| targetEntityId | string | 대상 레코드가 속한 개체 ID | |
| targetRecordId | string | 연결의 도착점 레코드 ID | |
| metadata | Object | 관계별 부가 정보 | |
| metadata.role | string | 관계 역할. 예: primary, secondary | |
| metadata.startDate | date | 관계 시작일 | |
| metadata.endDate | date | 관계 종료일 | |
| metadata.isPrimary | boolean | 대표 관계 여부 | |
| metadata.notes | string | 메모 |
Response
| Name | Type | Required | Description |
|---|---|---|---|
| relationshipId | string | 생성된 관계 ID | |
| accountId | string | 계정 ID | |
| workspaceId | string | 워크스페이스 ID | |
| sourceEntityId | string | 소스 개체 ID | |
| sourceRecordId | string | 소스 레코드 ID | |
| targetEntityId | string | 대상 개체 ID | |
| targetRecordId | string | 대상 레코드 ID | |
| relationshipTypeId | string | 관계 유형 ID | |
| metadata | Object | 관계 메타데이터 | |
| dateCreated | date | 생성 시각 | |
| dateUpdated | date | 마지막 수정 시각 |
Structure
코드 예제
const response = await fetch('https://api.solapi.com/crm-core/v1/relationships', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + TOKEN,
'Content-Type': 'application/json'
},
body: JSON.stringify({
relationshipTypeId: 'CRMRT1260423091530123RTP11122233',
sourceEntityId: 'CRMET1260423081530123XYZ11122233',
sourceRecordId: 'CRMRC1260423081530123REC11122233',
targetEntityId: 'CRMET1260423081530124XYZ11122234',
targetRecordId: 'CRMRC1260423081530124REC11122234',
metadata: { role: 'primary', isPrimary: true }
})
});
const data = await response.json();
import requests
response = requests.post(
'https://api.solapi.com/crm-core/v1/relationships',
headers={'Authorization': f'Bearer {TOKEN}'},
json={
'relationshipTypeId': 'CRMRT1260423091530123RTP11122233',
'sourceEntityId': 'CRMET1260423081530123XYZ11122233',
'sourceRecordId': 'CRMRC1260423081530123REC11122233',
'targetEntityId': 'CRMET1260423081530124XYZ11122234',
'targetRecordId': 'CRMRC1260423081530124REC11122234',
'metadata': {'role': 'primary', 'isPrimary': True}
}
)
data = response.json()
curl -X POST 'https://api.solapi.com/crm-core/v1/relationships' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"relationshipTypeId":"CRMRT1260423091530123RTP11122233","sourceEntityId":"CRMET1260423081530123XYZ11122233","sourceRecordId":"CRMRC1260423081530123REC11122233","targetEntityId":"CRMET1260423081530124XYZ11122234","targetRecordId":"CRMRC1260423081530124REC11122234","metadata":{"role":"primary","isPrimary":true}}'
관계의 방향은 `relationshipTypeId`에 정의된 `sourceEntityId`/`targetEntityId`를 따른다. 요청 본문의 source/target 개체 ID가 관계 유형 정의와 반대여도 서비스가 방향을 자동 보정하지 않으므로, 항상 유형 정의에 맞춰 호출할 것.
동일한 `(sourceRecordId, targetRecordId, relationshipTypeId)` 조합은 고유 인덱스로 중복이 차단된다. 중복 요청은 `409 Conflict`("동일한 관계가 이미 존재합니다.")로 응답된다.