HelipodDocs

Tickets

Open support tickets, read the replies, answer and close them.

Support tickets belong to your account, so every route here needs a whole-account key (403 ACCOUNT_KEY_REQUIRED otherwise). They are the same tickets as in the dashboard.

The ticket object

{
  "id": "c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
  "subject": "Custom domain stuck on provisioning",
  "category": "technical",
  "priority": "normal",
  "status": "open",
  "createdAt": "2026-10-16T09:00:00.000Z",
  "updatedAt": "2026-10-16T09:00:00.000Z"
}

status is open, in_progress, waiting or closed.

List

GET/account/tickets
Your tickets.

Read one, with its messages

GET/account/tickets/{ticketId}
{
  "success": true,
  "data": {
    "id": "c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
    "subject": "Custom domain stuck on provisioning",
    "category": "technical",
    "priority": "normal",
    "status": "waiting",
    "createdAt": "2026-10-16T09:00:00.000Z",
    "updatedAt": "2026-10-16T09:40:00.000Z",
    "messages": [
      { "id": "…", "message": "www.myshop.id has been provisioning for an hour.", "createdAt": "2026-10-16T09:00:00.000Z", "from": "you", "senderName": null },
      { "id": "…", "message": "The CNAME points at an old address. Please change it to cname.helipod.app.", "createdAt": "2026-10-16T09:40:00.000Z", "from": "support", "senderName": "Helipod Support" }
    ]
  }
}

from is you or support.

Open a ticket

POST/account/tickets
Returns 201 with the ticket object.

Prop

Type

curl -X POST https://api.helipod.io/api/account/tickets \
  -H "Authorization: Bearer hel_your_key" -H "Content-Type: application/json" \
  -d '{
    "subject": "Custom domain stuck on provisioning",
    "category": "technical",
    "message": "www.myshop.id on service 9a8b7c6d-5e4f-4a3b-9c2d-1e0f9a8b7c6d has been provisioning for an hour."
  }'

You can open at most 5 tickets an hour (429 TOO_MANY_TICKETS); reply to an open ticket instead.

Reply

POST/account/tickets/{ticketId}/messages
Adds your message (1 to 10,000 characters). Returns 201.
curl -X POST https://api.helipod.io/api/account/tickets/$TICKET/messages \
  -H "Authorization: Bearer hel_your_key" -H "Content-Type: application/json" \
  -d '{ "message": "Changed the CNAME, thanks." }'
{ "success": true, "data": { "id": "…", "ticketId": "c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f", "message": "Changed the CNAME, thanks.", "from": "you", "createdAt": "2026-10-16T09:45:00.000Z" } }

A closed ticket answers 409 TICKET_CLOSED: open a new one.

Close

POST/account/tickets/{ticketId}/close
Returns the ticket object with status: "closed".

On this page