Create support ticket
Creates a support ticket: request body contains type, reply address (e.g. email), and message. The backend enriches with current user id, subscription plan, and token balance; persists the ticket in the database (support_tickets); and sends the same content to the support address (SUPPORT_EMAIL). Email backend is chosen by SUPPORT_EMAIL_SENDER: "sendgrid" (default) or "google" (Gmail/Workspace SMTP). If no backend is configured, only DB persistence is performed.
curl -X POST "//v1/support/tickets" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN (API Key)" \
-d '{
"type": "example_string",
"reply_address": "123 Main St",
"message": "example_string"
}'
import requests
import json
url = "//v1/support/tickets"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN (API Key)"
}
data = {
"type": "example_string",
"reply_address": "123 Main St",
"message": "example_string"
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const response = await fetch("//v1/support/tickets", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN (API Key)"
},
body: JSON.stringify({
"type": "example_string",
"reply_address": "123 Main St",
"message": "example_string"
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"type": "example_string",
"reply_address": "123 Main St",
"message": "example_string"
}`)
req, err := http.NewRequest("POST", "//v1/support/tickets", bytes.NewBuffer(data))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN (API Key)")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('//v1/support/tickets')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN (API Key)'
request.body = '{
"type": "example_string",
"reply_address": "123 Main St",
"message": "example_string"
}'
response = http.request(request)
puts response.body
{
"id": "example_string",
"created_at": "2024-12-25T10:00:00Z",
"status": "sent",
"sent_at": "2024-12-25T10:00:00Z"
}
{
"error": "Bad Request",
"message": "The request contains invalid parameters or malformed data",
"code": 400,
"details": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
{
"error": "Unauthorized",
"message": "Authentication required. Please provide a valid API token",
"code": 401
}
{
"error": "Internal Server Error",
"message": "An unexpected error occurred on the server",
"code": 500,
"requestId": "req_1234567890"
}
/v1/support/tickets
User API Key. Create in the Ctxfy dashboard or via POST /v1/api-keys. Use Bearer <api_key> in Authorization header.
The media type of the request body
Ticket type (e.g. billing, technical, feedback)
Email or address for support reply
User message
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token (API Key). User API Key. Create in the Ctxfy dashboard or via POST /v1/api-keys. Use Bearer <api_key> in Authorization header.
Body
Ticket type (e.g. billing, technical, feedback)
Email or address for support reply
User message
Responses
Last updated Feb 19, 2026
Built with Documentation.AI