API 참조

Tenant API를 사용하여 enuchat을 시스템에 통합하세요. 대화 관리, 메시지 전송 및 청구 데이터에 프로그래밍 방식으로 액세스하세요.

인증

모든 API 요청은 X-Api-Key 헤더에 전송된 API 키를 사용하여 인증됩니다.

API 키 얻기

  1. 대시보드에서 설정 → API 키로 이동
  2. API 키 만들기를 클릭하고 이름 지정
  3. 키를 즉시 복사하세요 — 한 번만 표시됩니다
  4. 안전하게 저장하세요 (환경 변수, 비밀 관리자)

요청 만들기

모든 요청에 키를 포함하세요:

curl -H "X-Api-Key: tak_your_key_here" \
     https://api.enuchat.com/api/v1/tenant-api/widgets

모든 응답은 JSON입니다. 성공적인 응답에는 data 필드가 있습니다. 오류에는 codemessage가 있는 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

최근 메시지별로 정렬된 대화 나열.

쿼리 매개변수

매개변수유형설명
statusstring상태별 필터: open, pending, closed
widgetIdstring위젯 UUID로 필터
limitinteger최대 결과 (기본 20, 최대 100)
offsetintegerN개 결과 건너뛰기

예제

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}

모든 메시지와 함께 대화 가져오기.

쿼리 매개변수

매개변수유형설명
limitinteger최대 메시지 (기본 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"
}
필드유형설명
contentstring필수. 메시지 텍스트.
rolestringsystem (기본) 또는 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"
}
필드유형설명
statusstringopen, pending 또는 closed
assignedTostring|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 응답을 받게 됩니다. 지수 백오프로 기다렸다가 다시 시도하세요.

통합할 준비가 되셨나요?

무료 계정을 만들고 몇 분 안에 API 키를 생성하세요.

무료로 시작