Service Desk Partner API

Customer Replies

Add a customer's follow-up message to their ticket through the API, exactly as an emailed reply would land.

POST /service-desk/items/{itemNumber}/requester-replies posts the ticket requester's own reply, relayed by your tool. It lands exactly as if the customer had replied by email:

  • a customer-visible comment authored by the requester (staff see the customer's name and a Customer badge);
  • the customer replied automation trigger, and reopen on reply if your status settings do that;
  • the ticket's next-response SLA clock restarts;
  • a comment.created webhook event.

DevStride never emails the reply. The author is always the ticket's stored requester; there is no field to choose another.

Needs: Create Items and Workstreams, and edit access to the ticket. (The customer is the author, so the staff permission Send Public Replies is not required.)

Request

FieldRequiredMeaning
body.htmlYesThe customer's words as HTML. Scripts and unsafe markup are removed; markup that cleans to nothing is refused as empty.
externalIdNoYour id for this message; makes retries safe.
sentAtNoWhen the customer wrote it (ISO 8601 with an offset). Next response counts from it. Never before the ticket was created. If a newer public comment is already on the ticket (for example, staff answered while your tool was relaying this message), the reply is placed just after that comment instead, so the thread reads in order and the customer still shows as having spoken last.
curl -X POST "https://api.devstride.com/v1/organizations/$ORG_ID/service-desk/items/I123/requester-replies" \
  -u "$DEVSTRIDE_API_KEY:$DEVSTRIDE_API_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "body": { "html": "<p>Thanks, the reset link works now.</p>" },
    "externalId": "inbound-5522",
    "sentAt": "2026-10-23T15:10:00Z"
  }'
{ "itemNumber": "I123", "commentId": "6d1e0c3a-9b4f-4c2a-8f0e-1a2b3c4d5e6f" }

Replies to closed tickets

A ticket in a status your organization maps to Closed is final for customers. A reply to it opens a follow-up ticket for the same requester, linked to the original, with the reply as its description. The response then names the follow-up: itemNumber is the new ticket and commentId is null. Always use the returned itemNumber from then on.

Refusals

StatusWhen
400The body is empty after cleaning, the requester is blocked or erased, sentAt is out of range, or the externalId was already used for a ticket creation or a reply on another ticket.
401 / 403The key's owner lacks edit access to the ticket (401) or Create Items and Workstreams (403).
409The item is not a Service Desk ticket.