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
}
}エラーハンドリング
エラーは非2xxステータスコードとJSONボディを返します:
{'{'}
"error": {'{'}
"code": "NOT_FOUND",
"message": "Conversation not found."
}
}| HTTPステータス | 意味 |
|---|---|
401 | 無効、期限切れ、または欠落したAPIキー |
400 | 無効なリクエストボディまたはパラメータ |
404 | リソースが見つからない(または別のテナントに属している) |
500 | サーバーエラー |
一般的なユースケース
CRM連携
新しい会話をポーリングし、訪問者データ(名前、メール、言語)をCRMに同期。会話IDを外部参照として使用。
自動フォローアップ
会話が閉じられた後、APIでフォローアップメッセージを送信:「チャットありがとうございました!他にお手伝いできることはありますか?」
Webhookの代替
アウトバウンドWebhookが利用可能になるまで、conversationsエンドポイントを定期的にポーリングして新しいメッセージやステータス変更を検出。
一括操作
7日以上経過したすべての会話を閉じる、外部ロジックに基づいて会話をオペレーターに割り当てる、分析のために会話履歴をエクスポート。
レート制限
APIはAPIキーあたり1分間に60リクエストまで許可されます。この制限を超えると、429 Too Many Requestsレスポンスを受け取ります。指数バックオフで待機してリトライしてください。