API 참조
Tenant API를 사용하여 enuchat을 시스템에 통합하세요. 대화 관리, 메시지 전송 및 청구 데이터에 프로그래밍 방식으로 액세스하세요.
인증
모든 API 요청은 X-Api-Key 헤더에 전송된 API 키를 사용하여 인증됩니다.
API 키 얻기
- 대시보드에서 설정 → API 키로 이동
- API 키 만들기를 클릭하고 이름 지정
- 키를 즉시 복사하세요 — 한 번만 표시됩니다
- 안전하게 저장하세요 (환경 변수, 비밀 관리자)
요청 만들기
모든 요청에 키를 포함하세요:
curl -H "X-Api-Key: tak_your_key_here" \
https://api.enuchat.com/api/v1/tenant-api/widgets모든 응답은 JSON입니다. 성공적인 응답에는 data 필드가 있습니다. 오류에는 code 및 message가 있는 error 필드가 있습니다.
보안: API 키는 데이터베이스에서 해시됩니다 (SHA-256). 원시 키를 저장하지 않습니다. 키를 비밀번호처럼 취급하세요 — 코드에 커밋하거나 공개적으로 공유하지 마세요.
기본 URL
https://api.enuchat.com/api/v1/tenant-api아래의 모든 엔드포인트는 이 기본 URL에 상대적입니다.
엔드포인트
GET /widgets
계정의 모든 위젯 나열.
응답
{'{'}
"data": [
{'{'}
"id": "019d19c6-7e0b-...",
"name": "Main Website Chat",
"isActive": true,
"aiEnabled": true,
"translationEnabled": true,
"primaryColor": "#2563eb",
"position": "bottom-right"
}
]
}GET /conversations
최근 메시지별로 정렬된 대화 나열.
쿼리 매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
status | string | 상태별 필터: open, pending, closed |
widgetId | string | 위젯 UUID로 필터 |
limit | integer | 최대 결과 (기본 20, 최대 100) |
offset | integer | N개 결과 건너뛰기 |
예제
curl -H "X-Api-Key: tak_..." \
"https://api.enuchat.com/api/v1/tenant-api/conversations?status=open&limit=10"응답
{'{'}
"data": [
{'{'}
"id": "019d6724-000e-...",
"widgetId": "019d19c6-7e0b-...",
"visitorId": "v-abc123",
"visitorName": "John",
"visitorEmail": "john{'@'}example.com",
"visitorLanguage": "en",
"status": "open",
"assignedTo": null,
"lastMessageAt": "2026-04-11T14:30:00+00:00",
"startedAt": "2026-04-11T14:25:00+00:00"
}
]
}GET /conversations/{'{'}id}
모든 메시지와 함께 대화 가져오기.
쿼리 매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
limit | integer | 최대 메시지 (기본 50, 최대 200) |
응답
{'{'}
"data": {'{'}
"id": "019d6724-000e-...",
"visitorLanguage": "en",
"status": "open",
"messages": [
{'{'}
"id": "019d6724-1234-...",
"role": "visitor",
"content": "Hello, how much does it cost?",
"contentLanguage": "en",
"translatedContent": "Cześć, ile to kosztuje?",
"translatedLanguage": "pl",
"isAutoReply": false,
"createdAt": "2026-04-11T14:25:30+00:00"
},
{'{'}
"id": "019d6724-5678-...",
"role": "ai",
"content": "Our plans start at €19/month...",
"isAutoReply": true,
"createdAt": "2026-04-11T14:25:32+00:00"
}
]
}
}POST /conversations/{'{'}id}/messages
대화에 메시지를 보냅니다. 메시지는 채팅 위젯을 통해 방문자에게 실시간으로 전달됩니다.
요청 본문
{'{'}
"content": "Thanks for reaching out! We'll process your request.",
"role": "system"
}| 필드 | 유형 | 설명 |
|---|---|---|
content | string | 필수. 메시지 텍스트. |
role | string | system (기본) 또는 operator |
응답 (201 Created)
{'{'}
"data": {'{'}
"id": "019d6725-abcd-...",
"role": "system",
"content": "Thanks for reaching out!",
"createdAt": "2026-04-11T14:35:00+00:00"
}
}PATCH /conversations/{'{'}id}
대화의 상태 또는 할당 업데이트.
요청 본문
{'{'}
"status": "closed"
}| 필드 | 유형 | 설명 |
|---|---|---|
status | string | open, pending 또는 closed |
assignedTo | string|null | 할당할 운영자 UUID 또는 할당 해제하려면 null |
GET /billing/balance
현재 요금제 및 크레딧 잔액 가져오기.
응답
{'{'}
"data": {'{'}
"plan": "pro",
"creditBalance": 4500000,
"totalCreditsAdded": 10000000
}
}오류 처리
오류는 JSON 본문과 함께 2xx가 아닌 상태 코드를 반환합니다:
{'{'}
"error": {'{'}
"code": "NOT_FOUND",
"message": "Conversation not found."
}
}| HTTP 상태 | 의미 |
|---|---|
401 | 잘못된, 만료된 또는 누락된 API 키 |
400 | 잘못된 요청 본문 또는 매개변수 |
404 | 리소스를 찾을 수 없음 (또는 다른 테넌트에 속함) |
500 | 서버 오류 |
일반적인 사용 사례
CRM 통합
새 대화를 폴링하고 방문자 데이터 (이름, 이메일, 언어)를 CRM에 동기화하세요. 대화 ID를 외부 참조로 사용하세요.
자동화된 후속 조치
대화가 종료된 후 API를 통해 후속 메시지를 보내세요: „채팅 감사합니다! 더 도움이 필요한 것이 있나요?"
Webhook 대안
발신 웹훅을 사용할 수 있을 때까지 대화 엔드포인트를 주기적으로 폴링하여 새 메시지나 상태 변경을 감지하세요.
대량 작업
7일보다 오래된 모든 대화 닫기, 외부 논리에 따라 운영자에게 대화 할당 또는 분석을 위해 대화 기록 내보내기.
속도 제한
API는 API 키당 분당 최대 60개 요청을 허용합니다. 이 제한을 초과하면 429 Too Many Requests 응답을 받게 됩니다. 지수 백오프로 기다렸다가 다시 시도하세요.