Enterprise
E-discovery
Manage legal cases, custodians, preservation orders, and evidence chain-of-custody in FluxyChat.
FluxyChat stores e-discovery metadata in D1: cases, custodians, preservation scopes, collected evidence, and chain-of-custody events. Use the dashboard E-discovery page or /admin/ediscovery/* APIs.
Workflow
- Create case with a unique case number and matter title.
- Add custodians (users or external contacts) tied to the case.
- Preserve data — record room/user scopes before export (pairs with retention legal hold).
- Collect evidence — register messages, attachments, or exports with hash + collector audit trail.
- Chain of custody —
GET /admin/ediscovery/evidence/{id}/chainfor auditor handoff.
Admin API
# Stats
curl "$WORKER/admin/ediscovery/stats" -H "Authorization: Bearer $ADMIN_JWT"
# Create case
curl -X POST "$WORKER/admin/ediscovery/cases" \
-H "Authorization: Bearer $ADMIN_JWT" \
-H "Content-Type: application/json" \
-d '{"caseNumber":"MAT-2026-001","title":"Customer dispute","priority":"high"}'
# Preserve room messages
curl -X POST "$WORKER/admin/ediscovery/cases/edc_abc/preserve" \
-H "Authorization: Bearer $ADMIN_JWT" \
-H "Content-Type: application/json" \
-d '{"roomId":"support-1","dataTypes":"messages,attachments","reason":"Litigation hold"}'Message history import
When migrating from another vendor, use the admin import API for backdated messages:
curl -X POST "$WORKER/admin/messages/import" \
-H "Authorization: Bearer $ADMIN_JWT" \
-H "Content-Type: application/json" \
-d '{
"roomId": "legacy-room",
"userId": "legacy-user-42",
"content": "Imported message body",
"createdAt": "2024-06-01T12:00:00.000Z",
"clientMessageId": "pusher-msg-991"
}'Batch (max 100 per request): POST /admin/messages/import/batch with { "messages": [ ... ] }.
CLI: pnpm import-chat-history ./export.json (uses the import API when userId / createdAt are present).