Cases & Helpdesk
Manage support cases with queues, SLA tracking, AI assistance, and automation from a unified helpdesk.
Cases in CRM Factory represent support tickets, service requests, and customer issues. The helpdesk includes queue-based routing, SLA enforcement, AI-powered assistance, and full integration with the rest of the CRM.
Case Management
Creating Cases
Cases can be created from multiple sources:
- Manually — Click "New Case" from the Cases page or from a contact/account record
- API —
POST /api/v1/caseswith subject, description, priority, and optional queue - Voicemail — The voicemail pipeline auto-creates cases from transcribed messages
- Automation — Workflow actions can create cases based on triggers
- Conversations — AI escalation from messaging channels can generate cases
Case Fields
| Field | Description |
|---|---|
subject | Short description of the issue |
description | Full details |
status | new, open, pending, resolved, closed |
priority | low, medium, high, critical |
queue | Assignment queue for routing |
owner | Assigned user |
account / contact | Related customer records |
opportunity | Optionally linked sales opportunity |
custom_fields | Org-defined extensions via Custom Fields |
Case Timeline
Each case has a timeline showing:
- Status changes and field updates
- Comments (internal and customer-facing)
- Linked activities (calls, emails, tasks)
- AI-generated summaries and suggestions
Queues
Queues organize cases by team, skill, or topic and control how cases are assigned.
Assignment Methods
| Method | Behavior |
|---|---|
| Round Robin | Distributes cases evenly across queue members in rotation |
| Least Active | Assigns to the member with the fewest open cases |
Creating a Queue
POST /api/v1/case-queues
Content-Type: application/json
{
"name": "Tier 1 Support",
"description": "First-line support for general inquiries",
"assignment_method": "round_robin"
}When a case is created with a queue_id, the queue router automatically assigns it to a member and applies the queue's SLA policy.
SLA Policies
SLA policies define response and resolution time targets per priority level.
Policy Structure
Each policy contains rules per priority:
POST /api/v1/sla-policies
Content-Type: application/json
{
"name": "Standard SLA",
"rules": [
{ "priority": "critical", "first_response_minutes": 30, "resolution_minutes": 240 },
{ "priority": "high", "first_response_minutes": 60, "resolution_minutes": 480 },
{ "priority": "medium", "first_response_minutes": 240, "resolution_minutes": 1440 },
{ "priority": "low", "first_response_minutes": 480, "resolution_minutes": 2880 }
]
}SLA Tracking
When a case is routed through a queue with an SLA policy:
- First response due is calculated from creation time + the policy's first response window
- Resolution due is calculated from creation time + the policy's resolution window
- SLA breached flag is set automatically when deadlines pass
SLA breach status is visible on the Cases list, dashboards, and reports. Filter cases by sla_breached to surface at-risk tickets.
AI Assistance
Each case has AI-powered tools accessible from the case detail page or via API:
Available Actions
| Action | Description |
|---|---|
summarize | Generate a concise summary of the case and its comment thread |
categorize | Auto-classify the case by type, topic, and suggested priority |
suggest_reply | Draft a customer-facing response based on case context |
evaluate | Assess case complexity and recommend next steps |
API Usage
POST /api/v1/cases/{id}/ai
Content-Type: application/json
{
"action": "suggest_reply",
"erp_context": {
"orders": [...],
"shipments": [...],
"credit": { ... }
}
}The optional erp_context parameter provides ERP data (orders, shipments, credit status) to the AI for more informed responses — useful when cases involve order or delivery issues.
API Reference
List Cases
GET /api/v1/casesPaginated list with filtering support. Returns cases with account, contact, and SLA context.
Get Case Detail
GET /api/v1/cases/{id}Returns the case with related account, contact, opportunity, and full comment thread.
Create a Case
POST /api/v1/cases
Content-Type: application/json
{
"subject": "Order #4521 arrived damaged",
"description": "Customer reports box was crushed during shipping...",
"priority": "high",
"contact_id": "cnt_abc123",
"account_id": "acc_xyz789",
"queue_id": "q_support_t1"
}Update a Case
PATCH /api/v1/cases/{id}
Content-Type: application/json
{
"status": "resolved",
"resolution_notes": "Replacement shipped via overnight delivery"
}Comments
GET /api/v1/cases/{id}/comments
POST /api/v1/cases/{id}/comments
{
"body": "Reached out to shipping — replacement is on the way.",
"internal": true
}Automation
Cases integrate with the workflow builder. Common patterns:
- Auto-assign critical cases — Trigger on
case.createdwithpriority: critical, actionassign_to_queue - Escalation alerts — Trigger on SLA breach, action
send_notification - Customer acknowledgment — Trigger on
case.created, actionchannel_notifywith a template message