API

개체 생성

작성일 2026.04.23 | 수정일 2026.04.29

POST/crm-core/v1/entities

새로운 CRM 개체(고객, 회사 등)를 생성합니다. 개체는 레코드가 속하는 상위 컨테이너로, 속성(Property) 집합·뷰 설정·인사이트 위젯을 보유합니다. MEMBER 이상 권한이 필요합니다. 성공 시 HTTP 201 Created.

Body Params

NameTypeRequiredDescription
namestring*개체 이름 (예: 고객, 회사)
slugstringURL 친화적 식별자. 미지정 시 서버가 자동 생성. 계정 내 고유.
descriptionstring개체 설명
propertyIdsarray개체에 포함할 속성 ID 목록
recordAccessstring레코드 접근 권한 (PUBLIC / ENTITY_OWNER_ONLY / ADMIN_ONLY). 기본 PUBLIC
ownerIdstring개체 소유자 멤버 ID
viewSettingsobject뷰 설정 (TABLE / BOARD / CALENDAR). 콘솔 UI 편집 권장
modestring기본 뷰 모드 (TABLE / BOARD / CALENDAR)
tableobject테이블 뷰 설정
pageSizenumber페이지당 레코드 수
boardobject보드 뷰 설정
groupByPropertyIdstring보드 컬럼 그룹화 기준 속성 ID
sumPropertyIdstring보드 합계 집계 기준 속성 ID
weightPropertyIdstring가중치 집계 기준 속성 ID
aggregationTypestring집계 방식 (SUM / AVG / MAX / COUNT)
sortByPropertyIdstring정렬 기준 속성 ID
sortOrderstring정렬 방향 (ASC / DESC)
closedWonValuesarrayClosed-Won 으로 간주할 컬럼 값 목록
closedLostValuesarrayClosed-Lost 로 간주할 컬럼 값 목록
dealRottingobjectDeal Rotting 설정 (일정 기간 변동 없는 카드 강조)
enabledbooleanDeal Rotting 활성 여부
daysnumber변동 없음으로 간주할 일수 (기본 14)
calendarobject캘린더 뷰 설정
datePropertyIdstring캘린더 날짜 속성 ID
titlePropertyIdstring캘린더 제목 속성 ID
colorPropertyIdstring캘린더 색상 속성 ID
insightWidgetsarray레코드 인사이트 위젯 목록 (콘솔 UI 편집 권장)
widgetIdstring*위젯 고유 ID
typestring*위젯 유형 (METRIC / CHART / TABLE / LIST)
titlestring*위젯 제목
relationshipTypeIdstring*연결된 관계 유형 ID
queryobject*위젯 쿼리 설정
positionobject*위젯 그리드 위치/크기 (x, y, w, h)
chartTypestring차트 서브타입 (PIE, BAR, LINE 등)
displayPropertyIdsarray(TABLE/LIST) 표시할 속성 ID 목록
subtitlePropertyIdstring(LIST) 부제 속성 ID
configobject위젯 추가 설정

Response

NameTypeRequiredDescription
entityIdstring*개체 고유 ID (CRMET1…)
accountIdstring*계정 고유 ID
workspaceIdstring워크스페이스 ID (워크스페이스 환경에서만)
namestring*개체 이름
slugstring개체 슬러그
descriptionstring개체 설명
propertyIdsarray*속성 ID 목록
viewSettingsobject*뷰 설정 (TABLE / BOARD / CALENDAR 세팅)
modestring*기본 뷰 모드 (TABLE / BOARD / CALENDAR)
tableobject*테이블 뷰 설정
pageSizenumber*테이블 뷰 페이지당 레코드 수
boardobject*보드 뷰 설정
groupByPropertyIdstring보드 컬럼 그룹화 기준 속성 ID
sumPropertyIdstring보드 합계 집계 기준 속성 ID
weightPropertyIdstring가중치 집계 기준 속성 ID
aggregationTypestring집계 방식 (SUM / AVG / MAX / COUNT)
sortByPropertyIdstring정렬 기준 속성 ID
sortOrderstring정렬 방향 (ASC / DESC)
closedWonValuesarrayClosed-Won 으로 간주할 컬럼 값 목록
closedLostValuesarrayClosed-Lost 로 간주할 컬럼 값 목록
dealRottingobjectDeal Rotting 설정 (일정 기간 변동 없는 카드 강조)
enabledbooleanDeal Rotting 활성 여부
daysnumber변동 없음으로 간주할 일수 (기본 14)
calendarobject캘린더 뷰 설정
datePropertyIdstring캘린더 날짜 속성 ID
titlePropertyIdstring캘린더 제목 속성 ID
colorPropertyIdstring캘린더 색상 속성 ID
insightWidgetsarray*인사이트 위젯 목록
recordAccessstring*레코드 접근 권한 (PUBLIC / ENTITY_OWNER_ONLY / ADMIN_ONLY)
ownerIdstring개체 소유자 멤버 ID
prioritynumber*사이드바 표시 순서
isDeletedboolean*삭제 여부 (휴지통 플래그)
createdBystring생성한 멤버 ID
updatedBystring마지막으로 수정한 멤버 ID (생성 직후엔 createdBy 와 동일)
dateCreateddate*최초 생성 시각 (UTC, ISO 8601)
dateUpdateddate*최근 수정 시각 (UTC, ISO 8601)

Structure

코드 예제

const crypto = require('crypto');

const apiKey = 'NCSXXXXXXXXXXXXX';
const apiSecret = 'YOUR_API_SECRET';
const dateTime = new Date().toISOString();
const salt = crypto.randomBytes(16).toString('hex');
const signature = crypto.createHmac('sha256', apiSecret).update(dateTime + salt).digest('hex');
const authHeader = HMAC-SHA256 apiKey=${apiKey}, date=${dateTime}, salt=${salt}, signature=${signature};

const response = await fetch('https://api.solapi.com/crm-core/v1/entities', {
method: 'POST',
headers: { 'Authorization': authHeader, 'Content-Type': 'application/json' },
body: JSON.stringify({
name: '고객',
slug: 'customers',
description: 'B2C 고객 정보를 관리하는 개체',
recordAccess: 'PUBLIC'
})
});
const data = await response.json();

import hmac, hashlib, secrets, requests
from datetime import datetime, timezone

api_key = 'NCSXXXXXXXXXXXXX'
api_secret = 'YOUR_API_SECRET'
date_time = datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')
salt = secrets.token_hex(16)
signature = hmac.new(api_secret.encode(), (date_time + salt).encode(), hashlib.sha256).hexdigest()
auth_header = f'HMAC-SHA256 apiKey={api_key}, date={date_time}, salt={salt}, signature={signature}'

response = requests.post('https://api.solapi.com/crm-core/v1/entities', headers={
'Authorization': auth_header,
'Content-Type': 'application/json'
}, json={
'name': '고객',
'slug': 'customers',
'description': 'B2C 고객 정보를 관리하는 개체',
'recordAccess': 'PUBLIC'
})
data = response.json()

API_KEY="NCSXXXXXXXXXXXXX"
API_SECRET="YOUR_API_SECRET"
DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
SALT=$(openssl rand -hex 16)
SIGNATURE=$(echo -n "${DATE}${SALT}" | openssl dgst -sha256 -hmac "${API_SECRET}" | awk '{print $NF}')
AUTH="HMAC-SHA256 apiKey=${API_KEY}, date=${DATE}, salt=${SALT}, signature=${SIGNATURE}"

curl -X POST 'https://api.solapi.com/crm-core/v1/entities' \
-H "Authorization: ${AUTH}" \
-H "Content-Type: application/json" \
-d '{"name":"고객","slug":"customers","description":"B2C 고객 정보를 관리하는 개체","recordAccess":"PUBLIC"}'

lightbulb

개체 생성 직후에는 속성(Property)이 비어 있어 레코드를 저장할 수 없습니다. 생성 응답의 `entityId`를 `POST /crm-core/v1/properties/bulk` 호출의 각 항목 `entityId`에 지정해 속성을 추가하세요.

lightbulb

`viewSettings`(TABLE / BOARD / CALENDAR 세부 옵션)와 `insightWidgets`(대시보드 위젯)는 중첩 구조가 복잡합니다. 본문에는 최소 필드로 생성한 뒤 **콘솔 UI의 뷰 설정·위젯 편집기**에서 상세 구성하는 것을 권장합니다.

lightbulb

**401 응답**: `{ "errorCode": "Unauthorized", "errorMessage": "권한이 없습니다." }`