---
title: "Action tickets_create"
description: "Creates a ticket: collects custom fields, connects to an operator, and saves the ticket."
---

# Action `tickets_create`

> **System ID:** `action_tickets_create`

## Description

Creates a new ticket for a subject (`subject_alias`): collects custom fields from user constants, creates a chat in Operator Panel (via connect-to-operator), assigns an agent if needed, and saves the ticket. If the subject requires field input — returns the matching branch for data collection.

During creation it calls connect-to-operator; therefore **banned** and **limit** branches are possible (same as the connect-to-operator action).

## Events (scenario branches)

| Event | When it occurs |
|-------|----------------|
| **success** | Ticket created successfully |
| **banned** | User is under an active ban (from connect-to-operator) |
| **limit** | No free operator (from connect-to-operator) |
| **error** | No `subject_alias`, subject not found, connect failure, or ticket creation failure |
| **select_custom_field** | A custom field value must be selected from a list |
| **required_custom_field** | A required custom field is not filled yet |
| **optional_custom_field** | An optional custom field can be filled or skipped |

## Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `subject_alias` | string | yes | — | Ticket subject alias (placeholders) |
| `additional_fields` | object | no | `{}` | Extra custom fields (key–value; placeholders in values) |
| `keep_original_message` | boolean | no | `false` | `true` — keep the original user message text |
| `resolved` | boolean | no | `false` | `true` — create the ticket as resolved and close the chat |
| `assignee_id` | string / number | no | `null` | Operator ID to assign (placeholders) |
| `unassigned` | string | no | `false` | `"true"` — do not assign, even if `assignee_id` is set |
| `auto_assignee` | boolean | no | `false` | `true` — automatic assignment (round-robin) |
| `reporter_id` | string / number | no | `null` | Reporter operator ID (placeholders) |
| `watchers` | array | no | `[]` | Watcher operator IDs (placeholders) |
| `status_name` | string | no | `null` | Custom chat status (placeholders) |
| `ticket_description` | string | no | `null` | Ticket description (placeholders). Takes priority over the `ticket_description` constant |

After creation, the ticket ID is stored in the tickets module state; client confirmation comes from the bot constant `ticket_created` (if set).

## Configuration example

```json
{
  "subject_alias": "support",
  "auto_assignee": true,
  "ticket_description": "{{user_request.text}}",
  "watchers": []
}
```

## Related docs

- [Actions reference](/en/actionjail/reference/actions-reference.md)
