← All action domains

Helpdesk

9 operations. Call each with POST https://app.chirply.io/api/v1/actions/<name> and a bearer token; the response is { "data": { "action", "summary", "result" } }. A read badge means the operation changes nothing; write requires the credential’s write scope.

Assign ticket

helpdesk.assignwrite

Assign a ticket to a team member (they get a notification), or unassign it by omitting the assignee.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe ticket to assign.
assignee_user_idstring (uuid) (or null)optionalThe team member to own it. Null or omitted unassigns.

Example

curl -X POST https://app.chirply.io/api/v1/actions/helpdesk.assign \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool helpdesk_assign at https://app.chirply.io/api/mcp, same bearer token, same input.

New ticket

helpdesk.createwrite

Create a help desk ticket on the customer's behalf. Stamps a first-response SLA deadline from the account's per-priority policy, links (or creates) the CRM contact from the requester's email/phone, and notifies the assignee — or the desk's default assignee, or the whole account. Sends no email or SMS to the customer (the 'we got your request' confirmation email goes out only for the customer's own public-portal submissions).

Parameters

FieldTypeRequiredDescription
subjectstringrequiredOne line saying what the ticket is about.
bodystringrequiredThe request itself, as the customer described it.
priority"low" | "normal" | "high" | "urgent"optionalHow urgent the ticket is. Drives the first-response SLA target. Default: "normal"
queuestringoptionalQueue to file it in (free-text name, e.g. 'Billing').
assignee_user_idstring (uuid)optionalTeam member to assign it to. Omit to leave it unassigned.
contact_idstring (uuid)optionalExisting CRM contact this ticket belongs to. Omit to match-or-create one from the requester email/phone.
requester_namestringoptionalThe customer's name.
requester_emailstringoptionalThe customer's email address.
requester_phonestringoptionalThe customer's phone number.

Example

curl -X POST https://app.chirply.io/api/v1/actions/helpdesk.create \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Example",
    "body": "example"
  }'
Test with your API key

Over MCP the same operation is the tool helpdesk_create at https://app.chirply.io/api/mcp, same bearer token, same input.

Open a ticket

helpdesk.getread

Fetch one help desk ticket by id, with its full thread — public replies the customer can see and internal agent-only notes, each marked by its `internal` flag.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe ticket's id.

Example

curl -X POST https://app.chirply.io/api/v1/actions/helpdesk.get \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool helpdesk_get at https://app.chirply.io/api/mcp, same bearer token, same input.

Help Desk settings

helpdesk.get_settingsread

Read the account's help desk configuration: the first-response SLA target in minutes for each ticket priority, whether the customer-facing submission portal is on and the public URL it is served at, the portal's display name and intro copy, the default assignee and default queue new tickets land in, and whether public replies are also emailed to the customer. Reads only — nothing is changed and nobody is contacted.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/helpdesk.get_settings \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

Over MCP the same operation is the tool helpdesk_get_settings at https://app.chirply.io/api/mcp, same bearer token, same input.

List tickets

helpdesk.listread

List the account's help desk tickets (support requests from its OWN customers), most recently updated first. Optionally filter by status, priority, assignee, queue, or the linked contact.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
status"new" | "open" | "waiting" | "solved" | "closed"optionalOnly tickets in this status.
priority"low" | "normal" | "high" | "urgent"optionalOnly tickets at this priority.
assignee_user_idstring (uuid)optionalOnly tickets assigned to this team member.
queuestringoptionalOnly tickets in this queue (queues are free-text names).
contact_idstring (uuid)optionalOnly tickets linked to this CRM contact.
querystringoptionalText to match in the subject or body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/helpdesk.list \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "offset": 0
  }'
Test with your API key

Over MCP the same operation is the tool helpdesk_list at https://app.chirply.io/api/mcp, same bearer token, same input.

Reply on ticket

helpdesk.replywriteconfirm

Post an agent message on a ticket. A public reply (internal=false) is shown to the customer on their ticket status page, stops the first-response SLA clock, and moves a new/open ticket to 'waiting' — and when the account's help desk email updates are on (the default while an email provider is connected) and the ticket has a requester email, the reply is ALSO emailed to that real customer through its own connected email account, with a reply-to address that threads their answer back onto the ticket. It is outward-facing customer communication. An internal note (internal=true) stays agent-only and is never emailed.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe ticket to reply on.
bodystringrequiredThe message text.
internalbooleanoptionaltrue = private agent note the customer never sees; false = public reply shown on the customer's ticket page. Default: false

Example

curl -X POST https://app.chirply.io/api/v1/actions/helpdesk.reply \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "body": "example"
  }'
Test with your API key

Over MCP the same operation is the tool helpdesk_reply at https://app.chirply.io/api/mcp, same bearer token, same input.

Set ticket priority

helpdesk.set_prioritywrite

Change a ticket's priority. While the first-response SLA clock is still running, the deadline is recomputed under the new priority's target.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe ticket to change.
priority"low" | "normal" | "high" | "urgent"requiredHow urgent the ticket is. Drives the first-response SLA target.

Example

curl -X POST https://app.chirply.io/api/v1/actions/helpdesk.set_priority \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "priority": "low"
  }'
Test with your API key

Over MCP the same operation is the tool helpdesk_set_priority at https://app.chirply.io/api/mcp, same bearer token, same input.

Set ticket status

helpdesk.set_statuswrite

Move a ticket between statuses. Setting 'solved' stamps the solve time and makes the customer's ticket page offer a one-time 1–5 CSAT rating; reopening a solved/closed ticket clears the solve stamp. Reversible at any time.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe ticket to move.
status"new" | "open" | "waiting" | "solved" | "closed"requirednew = untouched, open = an agent is on it, waiting = waiting on the customer, solved = believed done (starts the CSAT ask), closed = archived.

Example

curl -X POST https://app.chirply.io/api/v1/actions/helpdesk.set_status \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "status": "new"
  }'
Test with your API key

Over MCP the same operation is the tool helpdesk_set_status at https://app.chirply.io/api/mcp, same bearer token, same input.

Save Help Desk settings

helpdesk.update_settingswriteconfirm

Change the account's help desk configuration. Omitted fields are left alone. Turning `portal_enabled` on PUBLISHES a public web page where anyone with the link can open tickets against this account, and the portal name/intro appear on that public page; changing the default assignee or queue changes where every new customer ticket lands; the SLA minutes set the first-response deadline stamped on tickets from now on (existing tickets keep their deadline); `email_updates` controls whether public replies are also emailed to the real customer through the account's own connected email. Requires the plan that includes the help desk. Returns the settings as they now stand.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
sla_urgent_minutesintegeroptionalFirst-response target for urgent tickets, in minutes (5 to 43200 = 30 days).
sla_high_minutesintegeroptionalFirst-response target for high-priority tickets, in minutes (5 to 43200).
sla_normal_minutesintegeroptionalFirst-response target for normal-priority tickets, in minutes (5 to 43200).
sla_low_minutesintegeroptionalFirst-response target for low-priority tickets, in minutes (5 to 43200).
portal_enabledbooleanoptionaltrue publishes the public submission portal page; false stops NEW submissions (existing ticket links keep working for their requesters).
portal_namestring (or null)optionalHeading shown on the public portal page. Null clears it back to the default.
portal_introstring (or null)optionalIntro copy shown on the public portal page. Null clears it.
default_assignee_user_idstring (uuid) (or null)optionalTeam member who is notified about (and owns) new unassigned tickets. Null notifies the whole account instead.
default_queuestring (or null)optionalQueue new portal tickets are filed in (free-text name). Null for no queue.
email_updatesbooleanoptionaltrue (the default state) also emails each public agent reply to the ticket's requester through the account's own connected email account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/helpdesk.update_settings \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "sla_urgent_minutes": 5,
    "sla_high_minutes": 5
  }'
Test with your API key

Over MCP the same operation is the tool helpdesk_update_settings at https://app.chirply.io/api/mcp, same bearer token, same input.

The machine-readable version of this page is GET https://app.chirply.io/api/v1/actions?domain=helpdesk — same operations, with full JSON Schemas. Authentication, errors and rate limits are covered in the API documentation home.