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ステータスでフィルタ:openpendingclosed
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"
}
フィールドタイプ説明
statusstringopenpending、またはclosed
assignedTostring|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レスポンスを受け取ります。指数バックオフで待機してリトライしてください。

連携する準備はできましたか?

無料アカウントを作成し、数分でAPIキーを生成しましょう。

無料で始める