Documentation Index

Fetch the complete documentation index at: /llms.txt

Use this file to discover all available pages before exploring further.

Skip to main content
POST
/
support
/
tickets
Create ticket
curl --request POST \
  --url https://xquik.com/api/v1/support/tickets \
  --header 'Content-Type: <content-type>' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "subject": "<string>",
  "body": "<string>",
  "attachments": [
    null
  ]
}
'
import requests

url = "https://xquik.com/api/v1/support/tickets"

payload = {
"subject": "<string>",
"body": "<string>",
"attachments": [None]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "<content-type>"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': '<content-type>'},
body: JSON.stringify({subject: '<string>', body: JSON.stringify('<string>'), attachments: [null]})
};

fetch('https://xquik.com/api/v1/support/tickets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://xquik.com/api/v1/support/tickets"

payload := strings.NewReader("{\n \"subject\": \"<string>\",\n \"body\": \"<string>\",\n \"attachments\": [\n null\n ]\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "<content-type>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
Free - does not consume credits
Support tickets are free for all authenticated users.
Use JSON for text-only tickets. Use multipart/form-data when attaching media.
curl -X POST https://xquik.com/api/v1/support/tickets \
  -H "x-api-key: xq_YOUR_KEY_HERE" \
  -H "Idempotency-Key: replace-with-one-random-value" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Cannot connect X account",
    "body": "I keep getting a connection error when trying to link my account."
  }' | jq
const response = await fetch("https://xquik.com/api/v1/support/tickets", {
  method: "POST",
  headers: {
    "x-api-key": "xq_YOUR_KEY_HERE",
    "Idempotency-Key": crypto.randomUUID(),
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    subject: "Cannot connect X account",
    body: "I keep getting a connection error when trying to link my account.",
  }),
});
const data = await response.json();
import requests

response = requests.post(
    "https://xquik.com/api/v1/support/tickets",
    headers={
        "x-api-key": "xq_YOUR_KEY_HERE",
        "Idempotency-Key": "replace-with-one-random-value",
    },
    json={
        "subject": "Cannot connect X account",
        "body": "I keep getting a connection error when trying to link my account.",
    },
)
data = response.json()
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

func main() {
    body, _ := json.Marshal(map[string]interface{}{
        "subject": "Cannot connect X account",
        "body":    "I keep getting a connection error when trying to link my account.",
    })

    req, err := http.NewRequest("POST", "https://xquik.com/api/v1/support/tickets", bytes.NewReader(body))
    if err != nil {
        panic(err)
    }
    req.Header.Set("x-api-key", "xq_YOUR_KEY_HERE")
    req.Header.Set("Idempotency-Key", "replace-with-one-random-value")
    req.Header.Set("Content-Type", "application/json")

    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    var data map[string]interface{}
    if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
        panic(err)
    }
    fmt.Println(data)
}

Headers

string
required
Your API key. Session cookie authentication is also supported. Generate a key from the dashboard.
string
required
Use application/json for text only. Use multipart/form-data for media.
string
Generate one random value for this submission. Reuse it only when retrying identical text and attachments. A replay returns the original ticket with Idempotency-Replayed: true.

Body

string
required
Ticket subject. 1-500 characters.
string
required
Initial message. 1-10,000 characters.
file[]
Up to 4 JPEG, PNG, GIF, WebP, MP4, MOV, or WebM files. Images can be 10 MB each. Videos can be 25 MB each. Combined media can be 30 MB.
For a media-only ticket, omit body and include at least 1 attachment.
cURL With Media
curl -X POST https://xquik.com/api/v1/support/tickets \
  -H "x-api-key: xq_YOUR_KEY_HERE" \
  -H "Idempotency-Key: replace-with-one-random-value" \
  -F "subject=Video upload problem" \
  -F "body=The attached recording shows the failure." \
  -F "attachments=@screen.png" \
  -F "attachments=@recording.mp4" | jq

Response

  • 201 Created
  • 200 Replayed
  • 400 Invalid Input
  • 401 Unauthenticated
  • 409 Conflict
  • 429 Rate Limited
string
Unique ticket public ID.
object[]
Created media receipts.
string
Private attachment public ID.
string
Upload status: ready or failed.
{
  "publicId": "tkt_a1b2c3d4e5f6a1b2c3d4e5f6",
  "attachments": [
    {
      "publicId": "att_a1b2c3d4e5f6a1b2c3d4e5f6",
      "status": "ready"
    }
  ]
}
Next steps: Support Media explains privacy, formats, limits, status handling, and downloads.
Last modified on July 20, 2026
Morty Proxy This is a proxified and sanitized view of the page, visit original site.