Skip to content

REST API

The REST API lets your own scripts and tools read clients and tickets and create tickets. Every request uses an API key that you issue in the admin portal.

Issue an API key

  1. Open Access › API Keys and create a key.
  2. Name it after the system that will use it, such as "Monitoring script".
  3. Choose its scopes (below), and optionally an expiry date and a rate limit.
  4. Copy the key straight into the other system's secret store. It is shown once. Only a hash is stored, so it cannot be shown again.

Use one key per integration. Then you can revoke one without breaking the others, and the audit log shows which system did what.

Scopes

Scope Allows
read Listing clients and tickets
write Creating tickets and posting to the inbound webhook. Use it together with read
full Everything above

Authentication

Send the key as a bearer token:

Authorization: Bearer YOUR_API_KEY

The base address is https://your-domain/api/v1.

Endpoints

List clients

GET /api/v1/clients

Optional parameters: q (search), type, per_page (default 25, maximum 100), page. Each client includes its count of open tickets.

List tickets

GET /api/v1/tickets

Optional parameters: status, priority, client_id, unassigned=1 (tickets with no client), q (searches the subject), per_page, page.

Create a ticket

POST /api/v1/tickets
Content-Type: application/json

{
  "subject": "Backup job failed on FS01",
  "body": "Job reported error 0x80070005 at 02:14.",
  "client_id": 12,
  "priority": "high"
}
Field Required Notes
subject Yes Up to 191 characters
priority Yes urgent, high, normal or low
body No The ticket description
client_id No Without it, the ticket goes to the unassigned inbox
billable No true or false
source No A short label for where it came from
sensitive No true marks the ticket sensitive, so it is never sent to AI

The new ticket goes through the same triage, SLA and notification steps as a ticket from any other source.

Rate limits

Each key has a limit in requests per minute. The default is 120, and you can set a different limit per key or change the default for all keys. A key over its limit gets HTTP 429 with a Retry-After header saying how many seconds to wait.

Errors

A refused request says which check failed:

Status Meaning
401 The key is missing, wrong, revoked or expired. The message says which, with the date for a revoked or expired key
403 The key does not have the scope this endpoint needs
422 The request body failed validation
429 The key went over its rate limit

Rotate a key without downtime

  1. Create a second key with the same scopes.
  2. Put it into the other system.
  3. Check that requests are arriving on the new key.
  4. Revoke the old key. A revoked key can be restored if you find something still using it.

Edit or report a problem