이 API는 Client SDK 키(osk_ 접두사)로 인증합니다.
모든 요청에 Authorization: Bearer {CLIENT_SDK_KEY} 헤더가 필요합니다.
페르소나 등록
AI 개인화를 위한 페르소나를 등록합니다.
자유 형식 JSON — 테넌트의 서비스에 맞는 어떤 필드든 포함할 수 있습니다.
{
"name": "홍길동",
"age": 40,
"gender": "M",
"locale": "ko",
"preference": "카레",
"store_id": "S001"
}
요청 본문은 스키마 제한이 없습니다. 전달된 데이터는 그대로 저장되며, 채팅 시 모델 컨텍스트로 활용됩니다.
{
"success": true,
"data": {
"persona_id": "d28fd898-bfa0-4444-be38-c0655f5f8307"
}
}
페르소나 조회
GET /v1/persona/{persona_id}
{
"success": true,
"data": {
"persona_id": "d28fd898-bfa0-4444-be38-c0655f5f8307",
"data": {
"name": "홍길동",
"age": 40,
"gender": "M",
"locale": "ko",
"preference": "카레",
"store_id": "S001"
}
}
}
페르소나 수정
PUT /v1/persona/{persona_id}
전달된 필드가 기존 데이터에 머지됩니다. 최소 1개 이상의 필드를 포함해야 합니다.
{
"locale": "ja",
"preference": "와인"
}
조회 응답과 동일한 형식으로, 머지된 전체 데이터가 반환됩니다.
페르소나 삭제
DELETE /v1/persona/{persona_id}
소프트 삭제됩니다. 삭제된 페르소나의 정보가 응답으로 반환됩니다.
{
"success": true,
"data": {
"persona_id": "d28fd898-bfa0-4444-be38-c0655f5f8307",
"data": {
"name": "홍길동",
"age": 40,
"gender": "M",
"locale": "ja",
"preference": "와인",
"store_id": "S001"
}
}
}
페르소나 상태 조회
GET /v1/persona/{persona_id}/status
페르소나의 현재 상태를 조회합니다. CHAT 상태이면 진행 중인 스레드 ID가 포함됩니다.
{
"success": true,
"data": {
"persona_id": "d28fd898-bfa0-4444-be38-c0655f5f8307",
"status": "CHAT",
"current_thread_id": "thr_a1b2c3d4e5f6",
"last_active_at": "2026-04-16T10:30:00Z"
}
}
상태 종류
| 상태 | 설명 |
|---|
READY | 대기 중 (채팅 가능) |
CHAT | 채팅 진행 중 |
SHOPPING | 쇼핑 중 |
PAYMENT | 결제 진행 중 |
COMPLETE | 완료 |
코드 예제
Swift (iOS)
// 페르소나 등록 — 자유 형식 JSON
let url = URL(string: "https://api.ones1ght.com/v1/persona")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer \(sdkKey)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let body: [String: Any] = [
"name": "홍길동",
"age": 40,
"locale": "ko",
"store_id": "S001",
"preference": "카레"
]
request.httpBody = try JSONSerialization.data(withJSONObject: body)
let (data, _) = try await URLSession.shared.data(for: request)
let result = try JSONDecoder().decode(PersonaResponse.self, from: data)
let personaId = result.data.persona_id
curl
# 등록 (자유 형식)
curl -X POST https://api.ones1ght.com/v1/persona \
-H "Authorization: Bearer $SDK_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "홍길동", "age": 40, "store_id": "S001", "preference": "카레"}'
# 수정 (기존 데이터에 머지)
curl -X PUT https://api.ones1ght.com/v1/persona/$PERSONA_ID \
-H "Authorization: Bearer $SDK_KEY" \
-H "Content-Type: application/json" \
-d '{"preference": "와인", "vip": true}'
# 상태 조회
curl https://api.ones1ght.com/v1/persona/$PERSONA_ID/status \
-H "Authorization: Bearer $SDK_KEY"