The Service Desk Partner API is for organizations that own every customer touchpoint themselves: their own mail processor, chat widget or customer portal. Your systems write tickets and customer replies into DevStride, record the replies your own tools sent, and read the customer-facing part of each ticket back out. DevStride keeps doing what it does best inside: queues, SLA clocks, the public/internal split, automations, dashboards and time tracking.
Use it together with Webhooks: webhooks tell your systems that something happened (a ticket was created, a staff member replied, an SLA is at risk); this API is how your systems write back and read the detail.
| You want to | Call | Page |
|---|---|---|
| Open a ticket for a customer, dated when they wrote | POST /service-desk/requests | Creating requests |
| Add a customer's follow-up to their ticket | POST /service-desk/items/{itemNumber}/requester-replies | Customer replies |
| Record a staff reply your own tool already delivered | POST /service-desk/items/{itemNumber}/staff-replies | Staff replies |
| Tell staff whether your tool delivered a reply | POST /service-desk/comments/{commentId}/delivery-receipt | Delivery receipts |
| Show the customer-visible thread and status in your portal | GET /item-comments?visibility=public, GET /work-items/{itemNumber}?includeCustomerStatus=true | Reading tickets and threads |
| Attach files | the upload operations | Attachments and a full round trip |
| Send every customer message from your own tool instead of DevStride | PATCH /service-desk/settings with headlessMode, then the customer.message webhook | Headless mode |
| Release a held request once your tool has confirmed the customer's address | POST /service-desk/requesters/confirm | Confirming requesters |
Every path is under https://api.devstride.com/v1/organizations/{organizationId}. Authenticate with an API key: the key acts with its owner's permissions in that one organization, so create it for a member whose role holds the permissions each page lists. The full schemas are in the API reference under Service Desk.
To stop DevStride emailing your customers about anything at all, turn on headless mode: every message it would have sent arrives at your webhook endpoint instead.
externalIdEvery write takes an optional externalId, usually your own message id. Send the same value again (a retry after a timeout, a re-run of a failed job) and DevStride returns what it created the first time instead of creating it twice. Keys are scoped to your organization. A key is refused, rather than replayed, when it was already used for something else: a ticket creation, or a reply on a different ticket.
| Status | Means |
|---|---|
400 | The request is malformed or refused by a rule: an empty body, a blocked requester, a sentAt in the future, a reused externalId. The message says which. |
401 / 403 | The key is missing or invalid, or its owner lacks the permission or access the call needs. The message names the permission. |
404 | The ticket or comment does not exist in this organization. |
409 | The item exists but is not a Service Desk ticket, or a receipt names an internal comment. |
Troubleshooting & Best Practices
Build a webhook receiver that never loses or double-counts an event: acknowledge fast, verify first, deduplicate by event id, cope with ordering, keep secrets safe, and fix the common failures: signature mismatches, clock skew, redirects, timeouts and refused URLs.
Creating Requests
Open a Service Desk ticket for a customer through the API, dated to when they actually wrote, with safe retries.