POST /service-desk/requests opens a ticket on behalf of a customer. It goes through exactly the same intake as an email to your support address: the requester is found or created (and confirmed, since your API key vouches for them), the ticket is created with channel api, SLA clocks start, and automations and webhooks fire. DevStride sends the customer no acknowledgement email for an API request.
Needs: Create Items and Workstreams, and edit access to the parent workstream or item.
| Field | Required | Meaning |
|---|---|---|
title | Yes | The ticket title. |
requesterEmail | Yes | The customer. Matched case-insensitively to an existing requester, or created. |
requesterName | No | Display name for a new requester. |
parentNumber | Yes | Where the ticket is filed, for example F42 (a workstream) or I7. |
workTypeId | Yes | The ticket's work type. |
body.html | No | The customer's message, shown on the ticket as its customer-visible description. |
priorityId, dueDate, customFields | No | As on any work item. |
externalId | No | Your id for this message; makes retries safe. |
sentAt | No | When the customer actually wrote, ISO 8601 with an offset. See below. |
curl -X POST "https://api.devstride.com/v1/organizations/$ORG_ID/service-desk/requests" \
-u "$DEVSTRIDE_API_KEY:$DEVSTRIDE_API_SECRET" \
-H "Content-Type: application/json" \
-d '{
"title": "Cannot reset my password",
"requesterEmail": "jane@acme.com",
"requesterName": "Jane Doe",
"parentNumber": "F42",
"workTypeId": "1a2b3c4d-5678-90ab-cdef-1234567890ab",
"body": { "html": "<p>The reset link 404s for me.</p>" },
"externalId": "inbound-5521",
"sentAt": "2026-10-23T14:02:00Z"
}'
The response is the created ticket (data.number, data.requesterId, data.channel: "api", and the rest of the work item).
sentAtIf your tool received the message a while before it reached DevStride, send sentAt. The ticket is dated to it, and its first-response and resolution deadlines, and their at-risk warnings, count from it rather than from when DevStride received the call. A customer who wrote 20 minutes before your processor forwarded the message is measured from when they wrote.
400.sentAt older than the whole SLA window breaches on arrival, because the promise was already missed.Resend with the same externalId and the response is the ticket created the first time; nothing new is created. A key already used for a customer or staff reply is refused with 400.
Service Desk Partner API
Run Service Desk behind your own support tools: post customers' messages in, record the replies you send, report delivery, and read the customer-visible thread back out, all with an API key.
Customer Replies
Add a customer's follow-up message to their ticket through the API, exactly as an emailed reply would land.