Ticket
WARNING
Ticket endpoints depend on group permissions and if the user you're using is an agent. Because of this tickets may or may not be available.
TIP
Suppress notifications: To create or update a ticket without triggering agent notifications (email and in-app), add the following HTTP header to your request:
plain
X-Zammad-Suppress-Notifications: trueThis is useful for automated integrations that manage tickets via webhooks or triggers to avoid notification loops. The header only affects admin and agent accounts and is ignored for customers.
List
Required permission: ticket.agent or ticket.customer
GET-Request sent: /api/v1/tickets
Details
json
// HTTP-Code 200 OK
[
{
"id": 1,
"group_id": 1,
"priority_id": 2,
"state_id": 1,
"organization_id": 1,
"number": "69001",
"title": "Welcome to Zammad!",
"owner_id": 1,
"customer_id": 2,
"note": null,
"first_response_at": null,
"first_response_escalation_at": null,
"first_response_in_min": null,
"first_response_diff_in_min": null,
"close_at": null,
"close_escalation_at": null,
"close_in_min": null,
"close_diff_in_min": null,
"update_escalation_at": null,
"update_in_min": null,
"update_diff_in_min": null,
"last_close_at": null,
"last_contact_at": "2025-07-03T08:52:34.556Z",
"last_contact_agent_at": null,
"last_contact_customer_at": "2025-07-03T08:52:34.556Z",
"last_owner_update_at": null,
"create_article_type_id": 5,
"create_article_sender_id": 2,
"article_count": 1,
"escalation_at": null,
"pending_time": null,
"type": null,
"time_unit": null,
"preferences": {},
"updated_by_id": 2,
"created_by_id": 2,
"created_at": "2025-07-03T08:52:34.343Z",
"updated_at": "2025-07-03T08:52:34.661Z",
"checklist_id": null
},
{
"id": 2,
"group_id": 3,
"priority_id": 2,
"state_id": 4,
"organization_id": null,
"number": "69002",
"title": "Refund for order 4388019",
"owner_id": 7,
"customer_id": 15,
"note": null,
"first_response_at": null,
"first_response_escalation_at": null,
"first_response_in_min": null,
"first_response_diff_in_min": null,
"close_at": null,
"close_escalation_at": null,
"close_in_min": null,
"close_diff_in_min": null,
"update_escalation_at": null,
"update_in_min": null,
"update_diff_in_min": null,
"last_close_at": null,
"last_contact_at": "2025-01-04T13:54:28.811Z",
"last_contact_agent_at": "2025-01-03T07:54:28.787Z",
"last_contact_customer_at": "2025-01-04T13:54:28.811Z",
"last_owner_update_at": null,
"create_article_type_id": 1,
"create_article_sender_id": 2,
"article_count": 3,
"escalation_at": null,
"pending_time": null,
"type": null,
"time_unit": null,
"preferences": {},
"updated_by_id": 15,
"created_by_id": 15,
"created_at": "2025-01-03T06:54:28.656Z",
"updated_at": "2025-07-03T08:54:28.821Z",
"checklist_id": null
},
{
"id": 3,
"group_id": 5,
"priority_id": 2,
"state_id": 2,
"organization_id": 3,
"number": "69003",
"title": "Order of 10 laptops XYX3000",
"owner_id": 14,
"customer_id": 18,
"note": null,
"first_response_at": null,
"first_response_escalation_at": null,
"first_response_in_min": null,
"first_response_diff_in_min": null,
"close_at": null,
"close_escalation_at": null,
"close_in_min": null,
"close_diff_in_min": null,
"update_escalation_at": null,
"update_in_min": null,
"update_diff_in_min": null,
"last_close_at": null,
"last_contact_at": "2025-07-03T08:17:28.879Z",
"last_contact_agent_at": "2025-07-03T08:17:28.879Z",
"last_contact_customer_at": "2025-07-03T07:14:28.831Z",
"last_owner_update_at": null,
"create_article_type_id": 1,
"create_article_sender_id": 2,
"article_count": 3,
"escalation_at": "2025-07-03T08:14:28.832Z",
"pending_time": null,
"type": null,
"time_unit": null,
"preferences": {},
"updated_by_id": 14,
"created_by_id": 18,
"created_at": "2025-07-03T07:14:28.831Z",
"updated_at": "2025-07-03T08:54:28.938Z",
"checklist_id": null
},
{
"id": 4,
"group_id": 9,
"priority_id": 3,
"state_id": 2,
"organization_id": 2,
"number": "69004",
"title": "Onboarding new colleague",
"owner_id": 3,
"customer_id": 10,
"note": null,
"first_response_at": null,
"first_response_escalation_at": null,
"first_response_in_min": null,
"first_response_diff_in_min": null,
"close_at": null,
"close_escalation_at": null,
"close_in_min": null,
"close_diff_in_min": null,
"update_escalation_at": null,
"update_in_min": null,
"update_diff_in_min": null,
"last_close_at": null,
"last_contact_at": "2025-07-01T08:54:28.948Z",
"last_contact_agent_at": null,
"last_contact_customer_at": "2025-07-01T08:54:28.948Z",
"last_owner_update_at": null,
"create_article_type_id": 11,
"create_article_sender_id": 2,
"article_count": 1,
"escalation_at": null,
"pending_time": null,
"type": null,
"time_unit": null,
"preferences": {},
"updated_by_id": 10,
"created_by_id": 10,
"created_at": "2025-07-01T08:54:28.948Z",
"updated_at": "2025-07-03T08:54:29.488Z",
"checklist_id": 1
},
{
"id": 5,
"group_id": 9,
"priority_id": 3,
"state_id": 2,
"organization_id": 2,
"number": "69005",
"title": "IT | Onboarding new colleague",
"owner_id": 3,
"customer_id": 10,
"note": null,
"first_response_at": null,
"first_response_escalation_at": null,
"first_response_in_min": null,
"first_response_diff_in_min": null,
"close_at": null,
"close_escalation_at": null,
"close_in_min": null,
"close_diff_in_min": null,
"update_escalation_at": null,
"update_in_min": null,
"update_diff_in_min": null,
"last_close_at": null,
"last_contact_at": "2025-07-01T08:59:29.238Z",
"last_contact_agent_at": null,
"last_contact_customer_at": "2025-07-01T08:59:29.238Z",
"last_owner_update_at": null,
"create_article_type_id": 11,
"create_article_sender_id": 2,
"article_count": 1,
"escalation_at": null,
"pending_time": null,
"type": null,
"time_unit": null,
"preferences": {},
"updated_by_id": 10,
"created_by_id": 10,
"created_at": "2025-07-01T08:59:29.238Z",
"updated_at": "2025-07-03T08:54:29.495Z",
"checklist_id": 2
},
{
"id": 6,
"group_id": 4,
"priority_id": 2,
"state_id": 2,
"organization_id": null,
"number": "69006",
"title": "Laptop not working [Order 931529477]",
"owner_id": 6,
"customer_id": 16,
"note": null,
"first_response_at": null,
"first_response_escalation_at": null,
"first_response_in_min": null,
"first_response_diff_in_min": null,
"close_at": null,
"close_escalation_at": null,
"close_in_min": null,
"close_diff_in_min": null,
"update_escalation_at": null,
"update_in_min": null,
"update_diff_in_min": null,
"last_close_at": null,
"last_contact_at": "2025-07-03T08:43:29.827Z",
"last_contact_agent_at": "2025-07-03T08:43:29.827Z",
"last_contact_customer_at": "2025-07-03T08:34:29.703Z",
"last_owner_update_at": null,
"create_article_type_id": 1,
"create_article_sender_id": 2,
"article_count": 5,
"escalation_at": null,
"pending_time": null,
"type": null,
"time_unit": null,
"preferences": {},
"updated_by_id": 8,
"created_by_id": 16,
"created_at": "2025-07-03T08:07:29.526Z",
"updated_at": "2025-07-03T08:54:29.870Z",
"checklist_id": null
},
{
"id": 7,
"group_id": 2,
"priority_id": 1,
"state_id": 2,
"organization_id": null,
"number": "69007",
"title": "My battery is dead / order 110572",
"owner_id": 13,
"customer_id": 17,
"note": null,
"first_response_at": null,
"first_response_escalation_at": null,
"first_response_in_min": null,
"first_response_diff_in_min": null,
"close_at": null,
"close_escalation_at": null,
"close_in_min": null,
"close_diff_in_min": null,
"update_escalation_at": null,
"update_in_min": null,
"update_diff_in_min": null,
"last_close_at": null,
"last_contact_at": "2025-07-03T07:54:29.904Z",
"last_contact_agent_at": null,
"last_contact_customer_at": "2025-07-03T07:54:29.904Z",
"last_owner_update_at": null,
"create_article_type_id": 1,
"create_article_sender_id": 2,
"article_count": 1,
"escalation_at": null,
"pending_time": null,
"type": null,
"time_unit": null,
"preferences": {},
"updated_by_id": 17,
"created_by_id": 17,
"created_at": "2025-07-03T07:54:29.904Z",
"updated_at": "2025-07-03T08:54:29.958Z",
"checklist_id": null
}
]Show
Required permission: ticket.agent or ticket.customer
GET-Request sent: /api/v1/tickets/{ticket id}
Details
json
// HTTP-Code 200 OK
{
"id": 3,
"group_id": 1,
"priority_id": 2,
"state_id": 4,
"organization_id": 3,
"number": "22003",
"title": "Order 787556",
"owner_id": 3,
"customer_id": 7,
"note": null,
"first_response_at": null,
"first_response_escalation_at": null,
"first_response_in_min": null,
"first_response_diff_in_min": null,
"close_at": null,
"close_escalation_at": null,
"close_in_min": null,
"close_diff_in_min": null,
"update_escalation_at": null,
"update_in_min": null,
"update_diff_in_min": null,
"last_contact_at": "2021-06-03T09:57:17.987Z",
"last_contact_agent_at": "2021-06-03T09:57:17.987Z",
"last_contact_customer_at": "2021-06-01T11:57:17.935Z",
"last_owner_update_at": null,
"create_article_type_id": 1,
"create_article_sender_id": 2,
"article_count": 2,
"escalation_at": null,
"pending_time": null,
"type": null,
"time_unit": null,
"preferences": {},
"updated_by_id": 4,
"created_by_id": 7,
"created_at": "2021-06-01T11:57:17.935Z",
"updated_at": "2021-11-03T11:57:17.997Z"
}Create
Required permission: ticket.agent or ticket.customer
POST-Request sent: /api/v1/tickets
TIP
On behalf of users
If you want to create tickets on behalf of other users, use the customer_id attribute. This requires the ticket.agent permission. Without it, customer_id is ignored and the ticket's Customer field is set to the current user. Use guess:{email address} to save an API call if you don't know the user's ID or want to create the user in question ("customer_id": "guess:jane@doe.com").
When creating a ticket on behalf of a customer with an initial article, you must set article.sender to "Customer" explicitly. Without this, the sender defaults to "Agent" (based on the current user's permission). This affects the ticket's create_article_sender_id and the resulting contact timestamp calculations.
The same applies to articles added later via PUT: set sender explicitly there as well when acting on behalf of a customer. Since the sender of an article cannot be changed after creation, it is important to set it correctly from the start.
For more details on the sender attribute, see articles.
TIP
Add mention subscription right away
Add the mentions attribute to your ticket payload and provide an array of user ids to directly subscribe them during ticket creation.
E.g.: "mentions": [1, 5, 7, 8],
Details
json
{
"title": "Help me!",
"group": "2nd Level",
"customer": "david@example.com",
"article": {
"subject": "My subject",
"body": "I am a message!",
"type": "note",
"sender": "Customer",
"internal": false
}
}TIP
The sender attribute of the initial article determines the ticket's create_article_sender_id and contact timestamps. For the full list of article attributes and their behavior, see articles.
Update
Required permission: ticket.agent or ticket.customer
PUT-Request sent: /api/v1/tickets/{ticket id}
Details
json
{
"title": "No help for you",
"group": "Sales",
"state": "open",
"priority": "3 high",
"article": {
"subject": "Update via API",
"body": "Here's my reason for updating this ticket...",
"internal": true
}
}INFO
Above example provides an article. This article is a new article and does not affect any existing ones.
TIP
Adding attachments
Attachment payloads are identical to the POST method, just use PUT instead.
Delete
Required permission: admin
DELETE-Request sent: /api/v1/tickets/{ticket id}
DANGER
This is a permanent removal:
Please note that removing tickets cannot be undone. All data (e.g. articles & attachments) will be lost.
Details
Response:
json
// HTTP-Code 200 OK
{}