Skip to main content
You will end this guide with a ticket opened from the command line, visible in your inbox.

1. Get an API key

1

Open your workspace settings

In the dashboard, head to Settings → API. Workspace owner access is required.
2

Create a credential

Label it with where it will run, something like billing-service or staging. That label is what you check later when deciding if a revoke is safe.
3

Copy the token

It begins with mdsk_api_ and appears only once. We keep a hash, not the token itself, so it cannot be shown again. Lost it? Revoke and create a fresh one.
Treat this token like a password. Every conversation in the workspace is readable through it, and replies can be sent from it. Keep it on a server, never inside a browser bundle or a mobile app.

2. Open a ticket

Here is the ticket you get back:
A few things were filled in that you did not send. Triage added priority and category since you left them blank, and language was detected from the message body. Values you set yourself are preserved as-is. Notice there is no subject field. That is intentional. The first message is the ticket’s description, so there is nothing for you to invent.

Verified and unverified requesters

is_verified is false here because an email address alone does not prove identity. If your own system has already authenticated this person, pass that along with external_id:
Including external_id is your assertion that you authenticated them. The requester is then stored as verified, and your agents can trust that.

3. Read the conversation

This returns the ticket along with its public messages. Internal notes are never part of this response, regardless of parameters.

4. Reply

Sam receives that on the channel the ticket came in on. To leave a note for your team instead, add "visibility": "internal" and nobody outside the workspace hears about it.

5. Close it

A reply from Sam on a resolved ticket reopens it automatically. That is the one status transition the system performs without a person.

Where to go next

API reference

Every endpoint, each with a playground on the page.

Idempotency

Read this one before putting ticket creation behind a retry.

Set up a channel

Most conversations should arrive on their own, not through the API.

Connect an AI agent

Point Claude or ChatGPT at your queue.