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:
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.)
| Field | Required | Meaning |
|---|---|---|
body.html | Yes | The customer's words as HTML. Scripts and unsafe markup are removed; markup that cleans to nothing is refused as empty. |
externalId | No | Your id for this message; makes retries safe. |
sentAt | No | When 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" }
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.
| Status | When |
|---|---|
400 | The 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 / 403 | The key's owner lacks edit access to the ticket (401) or Create Items and Workstreams (403). |
409 | The item is not a Service Desk ticket. |