Monesize Desk

Developer API

Build your own customer support experience on top of Desk.

Back to Desk

Overview

Desk exposes the same support infrastructure the Desk portal uses — customers, tickets, conversations, attachments, status, priority, teams, assignments, escalations, and knowledge base — as a public API. Your product owns the customer-facing experience; your agents keep using the normal Desk workspace at desk.monesize.com.

Base URL:

https://api.desk.monesize.com/v1/api

Authentication

Every request must include a bearer API key. Keys are created in Desk under Settings → API keys by an organization administrator.

Authorization: Bearer dsk_live_0123456789…

The X-Desk-Api-Key header is accepted as an alternative.

Environments

Each organization has separate test and production keys.

EnvironmentKey prefixNotes
Testdsk_test_…For development and integration testing. Writes to a hidden test tenant that never appears in the agent workspace.
Productiondsk_live_…For your live application. Operates on your real tenant and appears in the agent workspace.

Error handling

Errors use the standard Desk envelope:

{
  "message": "Ticket subject is required.",
  "code": "VALIDATION_ERROR",
  "details": null
}
StatusCodeCondition
400VALIDATION_ERRORMissing or malformed fields
401API_KEY_INVALIDMissing, unknown, or revoked key
403FORBIDDENPlan restriction (e.g. attachments)
404NOT_FOUNDResource does not exist in your organization
429RATE_LIMITEDOver 300 requests/minute

Customers

MethodPathDescription
GET/customers?q=&page=&perPage=List customers (search on name/email/phone)
POST/customersCreate a customer — { email, name, phone? }
GET/customers/:customerIdCustomer with their ticket history
PATCH/customers/:customerIdUpdate — { name?, phone?, email? }

Tickets

MethodPathDescription
GET/tickets?status=&priority=&category=&teamId=&agentId=&unassigned=Queue-style list
POST/ticketsCreate — { customerEmail, customerName?, subject, description, category?, priority? }
GET/tickets/:ticketIdFull ticket with conversation, attachments, escalations, audit trail
PATCH/tickets/:ticketIdUpdate status/priority/category/subject
POST/tickets/:ticketId/assignAssign — { userId?, teamId? }
POST/tickets/:ticketId/escalateEscalate — { toTeamId?, fromTeamId?, reason }
POST/tickets/:ticketId/reopenReopen a resolved/closed ticket

Create example:

curl -X POST https://api.desk.monesize.com/v1/api/tickets \
  -H "Authorization: Bearer dsk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"customerEmail":"ada@acme.example","customerName":"Ada","subject":"Cannot sign in","description":"Getting a 500 on login","priority":"HIGH"}'

Conversations

MethodPathDescription
POST/tickets/:ticketId/messagesPost a public reply — { body, customerEmail? }. Authored by the ticket's customer (or the customer matched by email); reopens resolved/closed tickets and notifies the assigned agent.

Attachments

Uploads use presigned S3 URLs, same as the Desk portal (10 MB max, whitelisted MIME types, requires an eligible plan).

MethodPathDescription
POST/attachments/tickets/:ticketIdStart upload — { fileName, mimeType, sizeBytes } → returns a presigned PUT URL
GET/attachments/:attachmentIdResolve a presigned GET URL

Teams

MethodPathDescription
GET/teamsList teams with members
POST/teamsCreate — { name, memberIds? }
GET/teams/:teamIdFetch a team
PATCH/teams/:teamIdRename — { name }
POST/teams/:teamId/membersAdd members — { memberIds }
DELETE/teams/:teamId/membersRemove members — { memberIds }
DELETE/teams/:teamIdDelete a team

Knowledge base

MethodPathDescription
GET/kb?q=&visibility=&page=&perPage=List articles (visibility: published | draft | all)
POST/kbCreate — { title, body, isPublished?, portalVisible?, slug? }
GET/kb/:articleSlugFetch an article
PATCH/kb/:articleIdUpdate article fields
DELETE/kb/:articleIdDelete an article