Sign in

API reference / ZiloDesk

ZiloDesk

Tickets and replies.

Base URL https://api.zilomail.in

List tickets#

GET/v1/desk/tickets
desk.read

Latest activity first.

Query

statusstring
Up to 30 characters.
mineboolean
qstring
Up to 200 characters.
limitinteger
How many to return (1–200). Default 50.
cursorstring
The next value from the previous page. Up to 500 characters.

Answer · 200 OK

dataarray of object
idstring
numberstring
subjectstring
statusstring
NEW, OPEN, PENDING, RESOLVED or CLOSED.
prioritystring
requesterobject
emailstring
namestring | null
customerIdstring | null
assigneeobject | null
idstring | null
Their ZiloOne user id.
emailstring | null
namestring
tagsarray of string
channelstring
firstResponseDuestring | null
resolveDuestring | null
lastMessageAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
messagesarray of object
On GET /v1/desk/tickets/{id}.
idstring
kindenum | string
One of CUSTOMER, AGENT, NOTE.
fromstring | null
textstring
atstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
nextstring | null
Pass as cursor for the next page; null on the last.
curl "https://api.zilomail.in/v1/desk/tickets?limit=20" \
  -H "Authorization: Bearer $ZILO_TOKEN"
Answer · 200 OK
{
  "data": [
    {
      "id": "string",
      "number": "string",
      "subject": "string",
      "status": "string",
      "priority": "string",
      "requester": {
        "email": "string",
        "name": "string"
      },
      "customerId": "string",
      "assignee": {
        "id": "string",
        "email": "string",
        "name": "string"
      },
      "tags": [
        "string"
      ],
      "channel": "string",
      "firstResponseDue": "2026-10-17T09:30:00.000Z",
      "resolveDue": "2026-10-17T09:30:00.000Z",
      "lastMessageAt": "2026-10-17T09:30:00.000Z",
      "createdAt": "2026-10-17T09:30:00.000Z",
      "messages": [
        {
          "id": "string",
          "kind": "CUSTOMER",
          "from": "string",
          "text": "string",
          "at": "2026-10-17T09:30:00.000Z"
        }
      ]
    }
  ],
  "next": "string"
}
Try it

Sign in to call it as yourself.

Get a ticket#

GET/v1/desk/tickets/{id}
desk.readETag · If-Match

With its conversation (notes included).

Path

idstringrequired
An id this API gave out. Up to 64 characters.

Answer · 200 OK

idstring
numberstring
subjectstring
statusstring
NEW, OPEN, PENDING, RESOLVED or CLOSED.
prioritystring
requesterobject
emailstring
namestring | null
customerIdstring | null
assigneeobject | null
idstring | null
Their ZiloOne user id.
emailstring | null
namestring
tagsarray of string
channelstring
firstResponseDuestring | null
resolveDuestring | null
lastMessageAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
messagesarray of object
On GET /v1/desk/tickets/{id}.
idstring
kindenum | string
One of CUSTOMER, AGENT, NOTE.
fromstring | null
textstring
atstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
curl "https://api.zilomail.in/v1/desk/tickets/ID" \
  -H "Authorization: Bearer $ZILO_TOKEN"
Answer · 200 OK
{
  "id": "string",
  "number": "string",
  "subject": "string",
  "status": "string",
  "priority": "string",
  "requester": {
    "email": "string",
    "name": "string"
  },
  "customerId": "string",
  "assignee": {
    "id": "string",
    "email": "string",
    "name": "string"
  },
  "tags": [
    "string"
  ],
  "channel": "string",
  "firstResponseDue": "2026-10-17T09:30:00.000Z",
  "resolveDue": "2026-10-17T09:30:00.000Z",
  "lastMessageAt": "2026-10-17T09:30:00.000Z",
  "createdAt": "2026-10-17T09:30:00.000Z",
  "messages": [
    {
      "id": "string",
      "kind": "CUSTOMER",
      "from": "string",
      "text": "string",
      "at": "2026-10-17T09:30:00.000Z"
    }
  ]
}
Try it

Sign in to call it as yourself.

Open a ticket#

POST/v1/desk/tickets
desk.writeIdempotency-Key

A request that didn't come by mail (a call, a visit, your own form).

Body

subjectstringrequired
Up to 300 characters.
emailstringrequired
The customer's email: replies go there. Up to 254 characters.
namestring
Up to 120 characters.
bodystringrequired
Up to 20000 characters.
priorityenum
One of LOW, NORMAL, HIGH, URGENT.
assignToMeboolean
Default false.

Answer · 201 Created

idstring
numberstring
subjectstring
statusstring
NEW, OPEN, PENDING, RESOLVED or CLOSED.
prioritystring
requesterobject
emailstring
namestring | null
customerIdstring | null
assigneeobject | null
idstring | null
Their ZiloOne user id.
emailstring | null
namestring
tagsarray of string
channelstring
firstResponseDuestring | null
resolveDuestring | null
lastMessageAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
messagesarray of object
On GET /v1/desk/tickets/{id}.
idstring
kindenum | string
One of CUSTOMER, AGENT, NOTE.
fromstring | null
textstring
atstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
curl -X POST "https://api.zilomail.in/v1/desk/tickets" \
  -H "Authorization: Bearer $ZILO_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "subject": "string",
  "email": "string",
  "body": "string"
}'
Answer · 201 Created
{
  "id": "string",
  "number": "string",
  "subject": "string",
  "status": "string",
  "priority": "string",
  "requester": {
    "email": "string",
    "name": "string"
  },
  "customerId": "string",
  "assignee": {
    "id": "string",
    "email": "string",
    "name": "string"
  },
  "tags": [
    "string"
  ],
  "channel": "string",
  "firstResponseDue": "2026-10-17T09:30:00.000Z",
  "resolveDue": "2026-10-17T09:30:00.000Z",
  "lastMessageAt": "2026-10-17T09:30:00.000Z",
  "createdAt": "2026-10-17T09:30:00.000Z",
  "messages": [
    {
      "id": "string",
      "kind": "CUSTOMER",
      "from": "string",
      "text": "string",
      "at": "2026-10-17T09:30:00.000Z"
    }
  ]
}
Try it

Sign in to call it as yourself.

Reply#

POST/v1/desk/tickets/{id}/replies
desk.writeIdempotency-Key

Mailed to the customer from the support mailbox, in the ticket's thread. note: true keeps it inside the team.

Path

idstringrequired
An id this API gave out. Up to 64 characters.

Body

bodystringrequired
Up to 20000 characters.
noteboolean
Default false.
statusenum
The ticket's status after a reply (default PENDING). One of OPEN, PENDING, RESOLVED, CLOSED.

Answer · 201 Created

idstring
numberstring
subjectstring
statusstring
NEW, OPEN, PENDING, RESOLVED or CLOSED.
prioritystring
requesterobject
emailstring
namestring | null
customerIdstring | null
assigneeobject | null
idstring | null
Their ZiloOne user id.
emailstring | null
namestring
tagsarray of string
channelstring
firstResponseDuestring | null
resolveDuestring | null
lastMessageAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
messagesarray of object
On GET /v1/desk/tickets/{id}.
idstring
kindenum | string
One of CUSTOMER, AGENT, NOTE.
fromstring | null
textstring
atstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
curl -X POST "https://api.zilomail.in/v1/desk/tickets/ID/replies" \
  -H "Authorization: Bearer $ZILO_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "body": "string"
}'
Answer · 201 Created
{
  "id": "string",
  "number": "string",
  "subject": "string",
  "status": "string",
  "priority": "string",
  "requester": {
    "email": "string",
    "name": "string"
  },
  "customerId": "string",
  "assignee": {
    "id": "string",
    "email": "string",
    "name": "string"
  },
  "tags": [
    "string"
  ],
  "channel": "string",
  "firstResponseDue": "2026-10-17T09:30:00.000Z",
  "resolveDue": "2026-10-17T09:30:00.000Z",
  "lastMessageAt": "2026-10-17T09:30:00.000Z",
  "createdAt": "2026-10-17T09:30:00.000Z",
  "messages": [
    {
      "id": "string",
      "kind": "CUSTOMER",
      "from": "string",
      "text": "string",
      "at": "2026-10-17T09:30:00.000Z"
    }
  ]
}
Try it

Sign in to call it as yourself.

Change a ticket#

PATCH/v1/desk/tickets/{id}
desk.writeETag · If-Match

Path

idstringrequired
An id this API gave out. Up to 64 characters.

Body

statusstring
Up to 20 characters.
prioritystring
Up to 20 characters.
assigneestring | null
tagsarray of string

Answer · 200 OK

idstring
numberstring
subjectstring
statusstring
NEW, OPEN, PENDING, RESOLVED or CLOSED.
prioritystring
requesterobject
emailstring
namestring | null
customerIdstring | null
assigneeobject | null
idstring | null
Their ZiloOne user id.
emailstring | null
namestring
tagsarray of string
channelstring
firstResponseDuestring | null
resolveDuestring | null
lastMessageAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
createdAtstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
messagesarray of object
On GET /v1/desk/tickets/{id}.
idstring
kindenum | string
One of CUSTOMER, AGENT, NOTE.
fromstring | null
textstring
atstring
ISO 8601 date and time, UTC, e.g. 2026-10-17T09:30:00.000Z.
curl -X PATCH "https://api.zilomail.in/v1/desk/tickets/ID" \
  -H "Authorization: Bearer $ZILO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
Answer · 200 OK
{
  "id": "string",
  "number": "string",
  "subject": "string",
  "status": "string",
  "priority": "string",
  "requester": {
    "email": "string",
    "name": "string"
  },
  "customerId": "string",
  "assignee": {
    "id": "string",
    "email": "string",
    "name": "string"
  },
  "tags": [
    "string"
  ],
  "channel": "string",
  "firstResponseDue": "2026-10-17T09:30:00.000Z",
  "resolveDue": "2026-10-17T09:30:00.000Z",
  "lastMessageAt": "2026-10-17T09:30:00.000Z",
  "createdAt": "2026-10-17T09:30:00.000Z",
  "messages": [
    {
      "id": "string",
      "kind": "CUSTOMER",
      "from": "string",
      "text": "string",
      "at": "2026-10-17T09:30:00.000Z"
    }
  ]
}
Try it

Sign in to call it as yourself.