Skip to main content
All endpoints require authentication.

GET /v1/tickets

List all support tickets for the authenticated user. Response (200):
{
  "success": true,
  "data": [
    {
      "id": 1,
      "subject": "Cannot connect to server",
      "status": "open",
      "created_at": "2026-01-05T14:00:00Z",
      "last_reply_at": "2026-01-05T15:30:00Z"
    }
  ]
}

POST /v1/tickets

Create a new support ticket. Request:
{
  "subject": "Cannot connect to New York server",
  "message": "I keep getting a timeout when connecting to NYC-1. I've tried reinstalling the config."
}
Response (201):
{
  "success": true,
  "data": {
    "id": 2,
    "subject": "Cannot connect to New York server",
    "status": "open",
    "created_at": "2026-01-10T09:00:00Z"
  }
}
Rate limit: 10 requests / minute

GET /v1/tickets/

Get a ticket and its full reply thread. Path parameter: ticket — ticket ID Response (200):
{
  "success": true,
  "data": {
    "id": 2,
    "subject": "Cannot connect to New York server",
    "status": "open",
    "replies": [
      {
        "id": 1,
        "message": "I keep getting a timeout...",
        "is_admin": false,
        "created_at": "2026-01-10T09:00:00Z"
      },
      {
        "id": 2,
        "message": "Hi Jane, please try switching to TCP mode.",
        "is_admin": true,
        "created_at": "2026-01-10T10:15:00Z"
      }
    ]
  }
}

POST /v1/tickets//reply

Add a reply to an existing ticket. Request:
{
  "message": "Switching to TCP mode fixed it, thank you!"
}
Response (201):
{
  "success": true,
  "data": {
    "id": 3,
    "message": "Switching to TCP mode fixed it, thank you!",
    "is_admin": false,
    "created_at": "2026-01-10T11:00:00Z"
  }
}
Rate limit: 10 requests / minute

PUT /v1/tickets//close

Close a ticket. Response (200):
{
  "success": true,
  "message": "Ticket closed."
}

GET /v1/faq

List all public FAQ entries. No authentication required. Response (200):
{
  "success": true,
  "data": [
    {
      "id": 1,
      "question": "How do I connect on iOS?",
      "answer": "Download the WireGuard app from the App Store..."
    }
  ]
}