Help desk

Reply to a ticket

ticket_reply · Changes data · Markdown

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

From your agent’s balance. A call that fails costs nothing.

An example

Tell Paul we'll touch up the top tube next week, send him the photo of the paint match, and set the ticket to waiting on him.

Your agent callsticket_reply$0.05 a call

The example business is Halverson Cycle & Repair, a bike shop with a repair workshop in Portland, Oregon. The reply is the one the tool really gives.

With these arguments
{
  "number": 87,
  "status": "pending",
  "body": "Hello Paul,\n\nwe are sorry about the scratch. We can pick the bike up on Tuesday, touch up the top tube in our workshop and bring it back on Thursday. A photo of the paint match is attached. Does that work for you?\n\nHalverson Support",
  "attachments": [
    "6e8a0c2e-4b6d-4f8a-8d2f-7c9e1a3b5d7f"
  ]
}
What comes back
{
  "ticket": {
    "number": 87,
    "subject": "Scratch on the Tabor's top tube",
    "status": "pending",
    "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": "customer",
    "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": "2026-10-14T08:00:00+00:00",
    "resolved_at": null,
    "body": "Called on Wednesday: the Tabor gravel bike delivered on Monday has a 3 cm scratch on the top tube. He would like it touched up or the frame swapped.",
    "fields": {
      "order_id": "2231"
    },
    "inbox": "support@halverson-cycle-repair.useconecto.com",
    "email_message_id": null,
    "rating": null,
    "rating_requested_at": null,
    "comments": [
      {
        "kind": "agent_reply",
        "body": "Hello Paul,\n\nwe are sorry about the scratch. We can pick the bike up on Tuesday, touch up the top tube in our workshop and bring it back on Thursday. A photo of the paint match is attached. Does that work for you?\n\nHalverson Support\n\nThis message was written by Halverson Cycle & Repair's AI assistant.",
        "email_status": "sent",
        "at": "2026-10-14T08:00:00+00:00",
        "email_message_id": "1ae0972e-f03c-422a-a90f-253ebacb7a21"
      }
    ]
  }
}

Use it when

A ticket needs an answer to the customer, or a note for the team.

  • For an answer in the website chat, use chat_reply.
  • For an email that belongs to no ticket, use email_send.

What it does

Email the requester a reply (internal=false) or add a private note only the team sees (internal=true). A reply goes out from the ticket's support inbox in the same email thread, so the customer's answer comes back to this ticket (inbox picks another support inbox); without one it is Conecto's standard ticket email. template sends a saved reply and applies its status and tags; body, if also given, goes above it. attachments: files of the file store, sent with a reply from a support inbox. status sets the status afterwards (pending = waiting on the customer, resolved = done); without it a reply reopens a resolved ticket.

What comes back

The ticket in full after the reply, and the rating request when resolving it emailed a survey. Every reply also carries cost_usd and balance_usd.

Inputs

NameTypeWhat it is
numberRequiredintegerThe ticket number, e.g. 42 for ticket #42. At least 1.
bodystringUp to 8,000 characters.
internalbooleanDefault: false.
templatestringUp to 80 characters.
by_personbooleantrue when a person at the business wrote it. Otherwise a last line says the business's AI assistant wrote it (EU AI Act Art. 50). Default: false.
statusstringOne of: open,pending,resolved.
inboxstringUp to 254 characters.
attachmentsarray of stringsFile ids from the file store (files_list), up to 10 files and 25 MB together. Replies from a support inbox only. Up to 10 items.

The call

Over MCP, call ticket_reply on https://api.conecto.chat/mcp/helpdesk. Over REST:

Terminal
curl -X POST https://api.conecto.chat/v1/tools/ticket_reply \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"number":87,"status":"pending","body":"Hello Paul,\n\nwe are sorry about the scratch. We can pick the bike up on Tuesday, touch up the top tube in our workshop and bring it back on Thursday. A photo of the paint match is attached. Does that work for you?\n\nHalverson Support","attachments":["6e8a0c2e-4b6d-4f8a-8d2f-7c9e1a3b5d7f"]}'

When it refuses

A refused call costs nothing and says what to do next.

CodeWhenWhat to do
not_found404No ticket of the business has that number.Find it with ticket_list and use its number.
not_found404No saved reply has that template name, no support inbox has that address, or an attachment is not a file in the store.Use a name from ticket_list_templates, an inbox from email_list_inboxes and file_ids from files_list.
conflict409The ticket was merged into another.Reply on the ticket the message names.
invalid_input400Neither body nor template was given, attachments were given with an internal note, or there are more than 10.Send a body, a template or both; attach files to replies only, up to 10.
no_support_inbox409Attachments go out from a support inbox, and the ticket has none.Connect one with ticket_connect_inbox, or pass inbox.
too_many422The ticket would hold more tags or custom fields than it may.Remove some with remove_tags, or set fields to null, first.
too_large413The attachments add up to more than 25 MB.Send big files as download links from files_get.
unsupported_type400Email cannot carry a file of that kind (like .exe or .js).Send a download link from files_get instead.
payment_required_for_outbound402The 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_limit429The 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_paused403Email from the business is paused after bounces, complaints or emails refused as cold outreach.Tell the owner; Conecto reviews the pause before sending resumes.
suppressed422An address bounced, complained or unsubscribed before.Remove the addresses the message lists and send again.
found_by_lookup422An 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_email422The 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_unavailable503The check an email to someone new goes through couldn't run just now.Try again in a minute.
send_failed502The reply was saved on the ticket, but the email could not be sent.Call again in a moment to send it; the message says what failed.
sending_unavailable503Email 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.

Give this to your agent.

Set up Conecto from https://conecto.chat/SKILL.md