API

관계 생성

작성일 2026.04.23 | 수정일 2026.04.23

POST/crm-core/v1/relationships
두 레코드를 지정한 관계 유형(Relationship Type)으로 연결한다. 권한 요구: MEMBER 이상. 소스 레코드·대상 레코드·관계 유형 조합이 이미 존재하면 409가 반환된다.

Body Params

NameTypeRequiredDescription
relationshipTypeIdstring미리 정의된 관계 유형 ID (CRMRT1...)
sourceEntityIdstring소스 레코드가 속한 개체 ID
sourceRecordIdstring연결의 출발점 레코드 ID
targetEntityIdstring대상 레코드가 속한 개체 ID
targetRecordIdstring연결의 도착점 레코드 ID
metadataObject관계별 부가 정보
metadata.rolestring관계 역할. 예: primary, secondary
metadata.startDatedate관계 시작일
metadata.endDatedate관계 종료일
metadata.isPrimaryboolean대표 관계 여부
metadata.notesstring메모

Response

NameTypeRequiredDescription
relationshipIdstring생성된 관계 ID
accountIdstring계정 ID
workspaceIdstring워크스페이스 ID
sourceEntityIdstring소스 개체 ID
sourceRecordIdstring소스 레코드 ID
targetEntityIdstring대상 개체 ID
targetRecordIdstring대상 레코드 ID
relationshipTypeIdstring관계 유형 ID
metadataObject관계 메타데이터
dateCreateddate생성 시각
dateUpdateddate마지막 수정 시각

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}}'

lightbulb

관계의 방향은 `relationshipTypeId`에 정의된 `sourceEntityId`/`targetEntityId`를 따른다. 요청 본문의 source/target 개체 ID가 관계 유형 정의와 반대여도 서비스가 방향을 자동 보정하지 않으므로, 항상 유형 정의에 맞춰 호출할 것.

lightbulb

동일한 `(sourceRecordId, targetRecordId, relationshipTypeId)` 조합은 고유 인덱스로 중복이 차단된다. 중복 요청은 `409 Conflict`("동일한 관계가 이미 존재합니다.")로 응답된다.