The ticketing API for developers

Not another helpdesk with an API bolted on. Tickets are the primitive. Build exactly what you need.

app.ts
import { DispatchTickets } from '@dispatchtickets/sdk';

const client = new DispatchTickets({ apiKey: 'sk_live_...' });

const ticket = await client.tickets.create(brandId, {
  title: 'Order not received',
  body: 'My order #12345 hasn\'t arrived...'
});

Built for builders

Tickets as a primitive

Create, update, query tickets via REST API. Build your own UI, or use ours. Your call.

Multi-tenant by default

One API key, unlimited brands. Perfect for platforms, marketplaces, and agencies.

Flexible schema

custom_fields accepts any JSON. No rigid forms. Store whatever your app needs.

Ship support in minutes

Create a ticket
const ticket = await dispatch.tickets.create({
  brandId: 'br_xxx',
  title: 'Cannot access my account',
  customerEmail: 'user@example.com'
});
List tickets
const tickets = await dispatch.tickets.list({
  brandId: 'br_xxx',
  status: 'open'
});

Technical features

REST API

Full CRUD on tickets, comments, attachments, webhooks

Webhooks

Real-time events for ticket.created, ticket.updated, comment.created

Multi-channel sources

Track origin: API, email, Slack, SMS, custom

Idempotency

Built-in support for safe retries

Cursor pagination

Efficient listing for large datasets

Custom fields

Arbitrary JSON, no schema restrictions

Open source admin UI

Don't want to build your own dashboard? Fork our open-source admin UI. Built with Next.js, shadcn/ui, and TanStack Query. Extend it, theme it, make it yours.

Works with your stack

TypeScript SDK

npm install @dispatchtickets/sdk

Email (Postmark/Resend)

Inbound email creates tickets automatically

Slack

Create tickets from Slack, reply from Slack

Webhooks

Push events to Zapier, n8n, or your backend