Canned Responses
Canned responses are pre-written reply templates that agents can quickly insert when responding to tickets. They save time on repetitive questions and ensure consistent messaging across your support team.
List Canned Responses
GET /api/v1/canned-responses
Returns all canned responses accessible to the current user. This includes personal responses created by the user and shared responses created by any team member.
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
per_page |
integer | 25 | Results per page (max: 100) |
cursor |
string | — | Cursor for next page |
category |
string | — | Filter by category name |
is_shared |
boolean | — | Filter shared vs. personal responses |
search |
string | — | Full-text search in title and body |
Example Request
GET /api/v1/canned-responses?category=billing&is_shared=true
Example Response
{
"data": [
{
"id": "01912345-6789-7abc-def0-123456789abc",
"title": "Refund Processing Time",
"body": "Hi {{customer_name}},\n\nThank you for your patience. Your refund has been initiated and will be processed within **5-7 business days**.\n\nOnce the refund is complete, you'll receive a confirmation email. If you don't see it within 7 business days, please let us know and we'll investigate.\n\nBest regards,\n{{agent_name}}",
"category": "billing",
"is_shared": true,
"keyboard_shortcut": "/refund-time",
"created_by": {
"id": "01912345-3333-7abc-def0-123456789abc",
"name": "Alex Johnson"
},
"usage_count": 142,
"created_at": "2025-01-10T08:00:00Z",
"updated_at": "2025-01-14T11:30:00Z"
},
{
"id": "01912345-aaaa-7abc-def0-123456789abc",
"title": "Payment Method Update",
"body": "Hi {{customer_name}},\n\nTo update your payment method:\n\n1. Log in to your account at **{{portal_url}}**\n2. Navigate to **Billing > Payment Methods**\n3. Click **Add Payment Method**\n4. Enter your new card details and click **Save**\n\nYour next billing cycle will automatically use the new payment method.\n\nLet me know if you run into any issues!",
"category": "billing",
"is_shared": true,
"keyboard_shortcut": "/payment-update",
"created_by": {
"id": "01912345-4444-7abc-def0-123456789abc",
"name": "Sarah Chen"
},
"usage_count": 89,
"created_at": "2025-01-11T09:00:00Z",
"updated_at": "2025-01-11T09:00:00Z"
}
],
"meta": {
"per_page": 25,
"has_more": false,
"next_cursor": null
}
}
Create a Canned Response
POST /api/v1/canned-responses
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
title |
string | Yes | Response title for quick identification (max 255 chars) |
body |
string | Yes | Response content with Markdown support (max 10,000 chars) |
category |
string | No | Category for organization (max 100 chars) |
is_shared |
boolean | No | If true, visible to all agents. Default: false |
keyboard_shortcut |
string | No | Quick-insert shortcut (max 50 chars, must start with /) |
Template Variables
The body field supports template variables that are replaced with actual values when the response is inserted into a ticket reply:
| Variable | Description |
|---|---|
{{customer_name}} |
The customer's display name |
{{customer_email}} |
The customer's email address |
{{ticket_number}} |
The ticket number |
{{ticket_subject}} |
The ticket subject |
{{agent_name}} |
The current agent's name |
{{portal_url}} |
The customer portal URL |
{{company_name}} |
The tenant's company name |
Example Request
{
"title": "Account Locked - Password Reset",
"body": "Hi {{customer_name}},\n\nIt looks like your account has been temporarily locked due to multiple failed login attempts. This is a security measure to protect your account.\n\nTo unlock your account:\n\n1. Go to **{{portal_url}}/reset-password**\n2. Enter your email address: `{{customer_email}}`\n3. Check your inbox for the reset link (valid for 60 minutes)\n4. Set a new password and log in\n\nIf you didn't attempt to log in, please let us know immediately so we can investigate any unauthorized access.\n\nBest regards,\n{{agent_name}}",
"category": "account",
"is_shared": true,
"keyboard_shortcut": "/locked-account"
}
Example Response (201 Created)
{
"data": {
"id": "01912345-bbbb-7abc-def0-123456789abc",
"title": "Account Locked - Password Reset",
"body": "Hi {{customer_name}},\n\nIt looks like your account has been temporarily locked...",
"category": "account",
"is_shared": true,
"keyboard_shortcut": "/locked-account",
"created_by": {
"id": "01912345-3333-7abc-def0-123456789abc",
"name": "Alex Johnson"
},
"usage_count": 0,
"created_at": "2025-01-16T09:00:00Z",
"updated_at": "2025-01-16T09:00:00Z"
}
}
Update a Canned Response
PATCH /api/v1/canned-responses/{id}
Update any fields on an existing canned response. Only include the fields you want to change.
Important: You can only update responses you created, unless you have the
adminorleadrole.
Example: Update Body and Category
{
"body": "Hi {{customer_name}},\n\nYour refund of **{{amount}}** has been initiated and will arrive within **3-5 business days**.\n\nRefund reference: {{ticket_number}}\n\nBest regards,\n{{agent_name}}",
"category": "billing-refunds"
}
Example Response
{
"data": {
"id": "01912345-6789-7abc-def0-123456789abc",
"title": "Refund Processing Time",
"body": "Hi {{customer_name}},\n\nYour refund of **{{amount}}** has been initiated...",
"category": "billing-refunds",
"is_shared": true,
"keyboard_shortcut": "/refund-time",
"created_by": {
"id": "01912345-3333-7abc-def0-123456789abc",
"name": "Alex Johnson"
},
"usage_count": 142,
"created_at": "2025-01-10T08:00:00Z",
"updated_at": "2025-01-16T10:00:00Z"
}
}
Delete a Canned Response
DELETE /api/v1/canned-responses/{id}
Permanently deletes a canned response. Returns 204 No Content.
Important: You can only delete responses you created, unless you have the
adminorleadrole. Deleting a shared response removes it for all agents.
Keyboard Shortcuts
Keyboard shortcuts provide a fast way to insert canned responses while composing a reply. When an agent types the shortcut (e.g., /refund-time) in the reply editor, the full canned response body is inserted with template variables replaced.
Shortcut rules:
- Must start with
/ - Must be unique across the tenant
- Maximum 50 characters
- Alphanumeric characters and hyphens only (e.g.,
/refund-time,/password-reset)
Example Workflow
- Agent starts typing a reply to a billing ticket
- Agent types
/refund-time - The editor replaces the shortcut with the full canned response body
- Template variables like
{{customer_name}}are filled in automatically - Agent reviews and sends the reply
Shared vs. Personal Responses
| Type | Visibility | Use Case |
|---|---|---|
Shared (is_shared: true) |
All agents in the tenant | Standard replies, policies, common procedures |
Personal (is_shared: false) |
Only the creator | Individual greetings, personal sign-offs, niche topics |
When listing canned responses, agents see both their personal responses and all shared responses. The is_shared filter lets you query just one type.
Best Practices
Use descriptive titles — Agents search by title when selecting a canned response. "Refund Processing Time" is better than "Refund Reply".
Leverage template variables — Personalize responses with
{{customer_name}}and{{agent_name}}instead of generic greetings.Organize by category — Group related responses (e.g., "billing", "account", "technical") so agents can filter and find them quickly.
Keep responses current — Review shared responses periodically to ensure policies, URLs, and procedures are up to date.
Assign keyboard shortcuts to frequent responses — The top 10-15 most-used responses should have shortcuts for maximum efficiency.
Use Markdown formatting — Bold key information, use numbered lists for step-by-step instructions, and use code blocks for technical details.