---
name: "ticket_update"
area: "helpdesk"
title: "Update a ticket"
price: "$0.01"
method: "POST"
url: "https://api.conecto.chat/v1/tools/ticket_update"
mcp_server: "https://api.conecto.chat/mcp/helpdesk"
auth: "Authorization: Bearer <conecto_sk_ key>"
docs_url: "https://conecto.chat/tools/helpdesk/ticket_update"
---

# Update a ticket (`ticket_update`)

Changes a ticket's status, priority, category, subject, tags, fields, assignee, or the CRM records it is about.

Change a ticket: status (open, pending = waiting on the customer, resolved), priority (its SLA targets follow), category, subject, tags, custom fields, the bot it is assigned to ("me", another bot's name, or "" for nobody) and the CRM contact or company it is about (0 unlinks). Resolving emails the requester a satisfaction survey when the settings ask for one; ask_rating true or false decides for this call (true also works on a ticket already resolved).

Price: $0.01 a call. A call that fails costs nothing.

## Use it when

A ticket changes hands, priority or state, or is resolved.

- For an answer to the customer at the same time, use [ticket_reply](https://conecto.chat/tools/helpdesk/ticket_reply.md).

## Say this to your agent

> Paul has his bike back and is happy. Close ticket 87 and send him the satisfaction survey.

## Inputs

| Name | Type | Required | Description | Allowed values | Default |
|---|---|---|---|---|---|
| `number` | integer | yes | The ticket number, e.g. 42 for ticket #42. At least 1. |  |  |
| `status` | string | no |  | `"open"`, `"pending"`, `"resolved"` |  |
| `priority` | string | no |  | `"low"`, `"normal"`, `"high"`, `"urgent"` |  |
| `category` | string | no | Up to 80 characters. |  |  |
| `subject` | string | no | 1 to 200 characters. |  |  |
| `add_tags` | array of strings | no | Short labels like "refund" or "vip" (kept lower-case, spaces become dashes). Up to 20 items. |  |  |
| `remove_tags` | array of strings | no | Short labels like "refund" or "vip" (kept lower-case, spaces become dashes). Up to 20 items. |  |  |
| `fields` | object | no | Custom fields like {"order_id": "1042"}, merged into the ticket's fields; null removes one. |  |  |
| `assign_to` | string | no | Up to 80 characters. |  |  |
| `contact_id` | integer | no | At least 0. |  |  |
| `company_id` | integer | no | At least 0. |  |  |
| `ask_rating` | boolean | no |  |  |  |

## Example

Written for Halverson Cycle & Repair, a bike shop with a repair workshop in Portland, Oregon.

MCP: call `ticket_update` on the MCP server `https://api.conecto.chat/mcp/helpdesk` with these arguments:

```json
{
  "number": 87,
  "status": "resolved",
  "ask_rating": true
}
```

REST:

```bash
curl https://api.conecto.chat/v1/tools/ticket_update \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"number": 87, "status": "resolved", "ask_rating": true}'
```

## Response

```json
{
  "call_id": "5f0c8a2e-3b7d-4c1e-9a64-2d8e1f7b0c93",
  "tool": "ticket_update",
  "status": "succeeded",
  "replayed": false,
  "cost_usd": "$0.01",
  "balance_usd": "$19.75",
  "result": {
    "ticket": {
      "number": 87,
      "subject": "Scratch on the Tabor's top tube",
      "status": "resolved",
      "priority": "high",
      "category": "Damaged delivery",
      "tags": [
        "damage"
      ],
      "requester_email": "paul.hoffmann@example.com",
      "requester_name": "Paul Hoffmann",
      "contact_id": null,
      "company_id": null,
      "source": "api",
      "channel": "api",
      "assigned_to": null,
      "waiting_on": null,
      "sla": null,
      "merged_into": null,
      "created_at": "2026-10-14T08:00:00+00:00",
      "last_activity_at": "2026-10-14T08:00:00+00:00",
      "first_reply_at": null,
      "resolved_at": "2026-10-14T08:00:00+00:00"
    },
    "rating_request": "sent"
  }
}
```

`result`: The ticket as it now is, and the rating request when a survey was emailed.

## Errors

| Code | Status | When | Fix |
|---|---|---|---|
| `not_found` | 404 | No ticket of the business has that number. | Find it with ticket_list and use its number. |
| `not_found` | 404 | No contact, company or agent matches what was given. | Use ids from crm_search, and assign_to "me", a key's bot name, or "" for nobody. |
| `invalid_input` | 400 | A rating was asked for on a ticket that is not resolved, or a tag is not valid. | Send status "resolved" together with ask_rating: true. |
| `ambiguous` | 409 | Several agents have the name in assign_to. | Let the agent meant claim it with assign_to "me". |
| `too_many` | 422 | The ticket would hold more tags or custom fields than it may. | Remove some with remove_tags, or set fields to null, first. |
| `payment_required_for_outbound` | 402 | The balance is still free credit, which cannot email people outside the business. | Top up once (POST /v1/topups); after that email to outsiders works. |
| `new_recipient_limit` | 429 | The business has emailed as many new addresses today as it may. | Send to these people tomorrow. Replies and people who wrote first are not limited. |
| `sending_paused` | 403 | Email from the business is paused after bounces, complaints or emails refused as cold outreach. | Tell the owner; Conecto reviews the pause before sending resumes. |
| `suppressed` | 422 | An address bounced, complained or unsubscribed before. | Remove the addresses the message lists and send again. |
| `found_by_lookup` | 422 | An address was found or checked with Conecto's lookups; a Conecto inbox never writes to it first. | Write from the business's own mailbox (google_mail_send or m365_mail_send). |
| `cold_email` | 422 | The email looks like cold outreach, a pitch or a request to people who never wrote to the business, so it wasn't sent. The third within 7 days pauses the account's email. | Email only people who wrote first or asked to hear from the business. |
| `check_unavailable` | 503 | The check an email to someone new goes through couldn't run just now. | Try again in a minute. |
| `send_failed` | 502 | The email service did not accept the email. | Call again in a moment. |
| `sending_unavailable` | 503 | Email to outsiders is not possible yet while the sending account is in review. | Send to the owner's address for now, or try again later. |

The refusals every tool can give (401 key, 402 balance, 429 limits) are on the errors page: https://conecto.chat/docs/errors.md

## Related

- [ticket_list](https://conecto.chat/tools/helpdesk/ticket_list.md): Tickets, newest activity first, filtered by status, priority, requester, tag, field or contact, or as a work queue. Free up to 1,000,000 reads a month.
- [ticket_get](https://conecto.chat/tools/helpdesk/ticket_get.md): One ticket with its request, every reply, customer message and note, its fields, SLA state and rating. Free up to 1,000,000 reads a month.
- [ticket_create](https://conecto.chat/tools/helpdesk/ticket_create.md): Opens a support ticket for a customer request; the customer is emailed only if you ask. $0.01 a call.
- [ticket_reply](https://conecto.chat/tools/helpdesk/ticket_reply.md): Emails the requester a reply in the ticket's thread, with files if needed, or adds a private note, and can set the status. $0.05 a call.
- [ticket_merge](https://conecto.chat/tools/helpdesk/ticket_merge.md): Merges a duplicate ticket into another: its messages, notes, email threads, tags and fields move over. $0.01 a call.
- [ticket_connect_inbox](https://conecto.chat/tools/helpdesk/ticket_connect_inbox.md): Makes an inbox a support inbox: every new email to it opens a ticket, and replies stay in its thread. $0.001 a call.
- [ticket_save_template](https://conecto.chat/tools/helpdesk/ticket_save_template.md): Saves a canned reply under a name, with the status and tags it applies whenever it is sent. $0.001 a call.
- [ticket_list_templates](https://conecto.chat/tools/helpdesk/ticket_list_templates.md): Every saved reply with its text, status and tags. Free up to 1,000,000 reads a month.
- [ticket_delete_template](https://conecto.chat/tools/helpdesk/ticket_delete_template.md): Deletes a saved reply by name. $0.001 a call.
- [ticket_get_settings](https://conecto.chat/tools/helpdesk/ticket_get_settings.md): The help desk's SLA targets, auto-close, satisfaction survey setting and support inboxes. Free up to 1,000,000 reads a month.
- [ticket_update_settings](https://conecto.chat/tools/helpdesk/ticket_update_settings.md): Sets the SLA targets per priority, auto-close and the satisfaction survey. $0.001 a call.
- [ticket_report](https://conecto.chat/tools/helpdesk/ticket_report.md): How support went over the last days: volumes, backlog, response and resolution times, SLA results, ratings, and tickets by channel, priority and tag. Free up to 1,000,000 reads a month.
