Create ticket
curl --request POST \
--url https://api.series.hr/tickets/create \
--header 'Content-Type: application/json' \
--header 'apikey: <api-key>' \
--data '
{
"subject": "<string>",
"category": "<string>",
"message": "<string>",
"authorUserId": 123,
"authorAvatarUrl": "<string>",
"priority": "medium",
"authorUsername": "<string>",
"authorDisplayName": "<string>"
}
'import requests
url = "https://api.series.hr/tickets/create"
payload = {
"subject": "<string>",
"category": "<string>",
"message": "<string>",
"authorUserId": 123,
"authorAvatarUrl": "<string>",
"priority": "medium",
"authorUsername": "<string>",
"authorDisplayName": "<string>"
}
headers = {
"apikey": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {apikey: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
subject: '<string>',
category: '<string>',
message: '<string>',
authorUserId: 123,
authorAvatarUrl: '<string>',
priority: 'medium',
authorUsername: '<string>',
authorDisplayName: '<string>'
})
};
fetch('https://api.series.hr/tickets/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.series.hr/tickets/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'subject' => '<string>',
'category' => '<string>',
'message' => '<string>',
'authorUserId' => 123,
'authorAvatarUrl' => '<string>',
'priority' => 'medium',
'authorUsername' => '<string>',
'authorDisplayName' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"apikey: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.series.hr/tickets/create"
payload := strings.NewReader("{\n \"subject\": \"<string>\",\n \"category\": \"<string>\",\n \"message\": \"<string>\",\n \"authorUserId\": 123,\n \"authorAvatarUrl\": \"<string>\",\n \"priority\": \"medium\",\n \"authorUsername\": \"<string>\",\n \"authorDisplayName\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("apikey", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.series.hr/tickets/create")
.header("apikey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"subject\": \"<string>\",\n \"category\": \"<string>\",\n \"message\": \"<string>\",\n \"authorUserId\": 123,\n \"authorAvatarUrl\": \"<string>\",\n \"priority\": \"medium\",\n \"authorUsername\": \"<string>\",\n \"authorDisplayName\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.series.hr/tickets/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["apikey"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"subject\": \"<string>\",\n \"category\": \"<string>\",\n \"message\": \"<string>\",\n \"authorUserId\": 123,\n \"authorAvatarUrl\": \"<string>\",\n \"priority\": \"medium\",\n \"authorUsername\": \"<string>\",\n \"authorDisplayName\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyTickets
Create Ticket
Create a new support ticket
POST
/
tickets
/
create
Create ticket
curl --request POST \
--url https://api.series.hr/tickets/create \
--header 'Content-Type: application/json' \
--header 'apikey: <api-key>' \
--data '
{
"subject": "<string>",
"category": "<string>",
"message": "<string>",
"authorUserId": 123,
"authorAvatarUrl": "<string>",
"priority": "medium",
"authorUsername": "<string>",
"authorDisplayName": "<string>"
}
'import requests
url = "https://api.series.hr/tickets/create"
payload = {
"subject": "<string>",
"category": "<string>",
"message": "<string>",
"authorUserId": 123,
"authorAvatarUrl": "<string>",
"priority": "medium",
"authorUsername": "<string>",
"authorDisplayName": "<string>"
}
headers = {
"apikey": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {apikey: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
subject: '<string>',
category: '<string>',
message: '<string>',
authorUserId: 123,
authorAvatarUrl: '<string>',
priority: 'medium',
authorUsername: '<string>',
authorDisplayName: '<string>'
})
};
fetch('https://api.series.hr/tickets/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.series.hr/tickets/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'subject' => '<string>',
'category' => '<string>',
'message' => '<string>',
'authorUserId' => 123,
'authorAvatarUrl' => '<string>',
'priority' => 'medium',
'authorUsername' => '<string>',
'authorDisplayName' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"apikey: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.series.hr/tickets/create"
payload := strings.NewReader("{\n \"subject\": \"<string>\",\n \"category\": \"<string>\",\n \"message\": \"<string>\",\n \"authorUserId\": 123,\n \"authorAvatarUrl\": \"<string>\",\n \"priority\": \"medium\",\n \"authorUsername\": \"<string>\",\n \"authorDisplayName\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("apikey", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.series.hr/tickets/create")
.header("apikey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"subject\": \"<string>\",\n \"category\": \"<string>\",\n \"message\": \"<string>\",\n \"authorUserId\": 123,\n \"authorAvatarUrl\": \"<string>\",\n \"priority\": \"medium\",\n \"authorUsername\": \"<string>\",\n \"authorDisplayName\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.series.hr/tickets/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["apikey"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"subject\": \"<string>\",\n \"category\": \"<string>\",\n \"message\": \"<string>\",\n \"authorUserId\": 123,\n \"authorAvatarUrl\": \"<string>\",\n \"priority\": \"medium\",\n \"authorUsername\": \"<string>\",\n \"authorDisplayName\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyRequires Premium or Enterprise subscription
Overview
Create a new support ticket. The author does not need to be a workspace member unless the category requires it. Author Information:authorUserIdis requiredauthorAvatarUrlis requiredauthorUsernameandauthorDisplayNameare optional but recommended for users not in the database
Request Body
string
required
Ticket subject/title
string
required
Category ID (must exist in workspace configuration)
string
required
Initial message content
string
Ticket priority:
low, medium, high, urgent (default: medium)integer
required
UserId of the ticket creator
string
Username of the author (used if not in database)
string
Display name of the author (used if not in database)
string
required
Avatar URL of the ticket author
Response
boolean
Whether the request was successful
object
Show properties
Show properties
string
The generated ticket ID
string
MongoDB document ID
string
The workspace ID
string
Ticket subject
string
Category ID
string
Assigned department ID
string
Ticket status (always “open” for new tickets)
string
Ticket priority
object
Author information including UserId, Username, DisplayName, and AvatarUrl
string
Creation timestamp (ISO 8601)
string
Last update timestamp (ISO 8601)
Example
curl -X POST https://api.series.hr/tickets/create \
-H "apikey: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"subject": "Help with ranking",
"category": "support",
"message": "I need help getting ranked in the group",
"priority": "medium",
"authorUserId": 123456789,
"authorUsername": "player123",
"authorDisplayName": "Player Name",
"authorAvatarUrl": "https://tr.rbxcdn.com/avatar-url"
}'
const response = await fetch('https://api.series.hr/tickets/create', {
method: 'POST',
headers: {
'apikey': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
subject: 'Help with ranking',
category: 'support',
message: 'I need help getting ranked in the group',
priority: 'medium',
authorUserId: 123456789,
authorUsername: 'player123',
authorDisplayName: 'Player Name',
authorAvatarUrl: 'https://tr.rbxcdn.com/avatar-url'
})
});
const data = await response.json();
local HttpService = game:GetService("HttpService")
local response = HttpService:RequestAsync({
Url = "https://api.series.hr/tickets/create",
Method = "POST",
Headers = {
["apikey"] = "YOUR_API_KEY",
["Content-Type"] = "application/json"
},
Body = HttpService:JSONEncode({
subject = "Help with ranking",
category = "support",
message = "I need help getting ranked in the group",
priority = "medium",
authorUserId = 123456789,
authorUsername = "player123",
authorDisplayName = "Player Name",
authorAvatarUrl = "https://tr.rbxcdn.com/avatar-url"
})
})
local data = HttpService:JSONDecode(response.Body)
import requests
response = requests.post(
'https://api.series.hr/tickets/create',
headers={
'apikey': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'subject': 'Help with ranking',
'category': 'support',
'message': 'I need help getting ranked in the group',
'priority': 'medium',
'authorUserId': 123456789,
'authorUsername': 'player123',
'authorDisplayName': 'Player Name',
'authorAvatarUrl': 'https://tr.rbxcdn.com/avatar-url'
}
)
data = response.json()
Response Example
{
"success": true,
"data": {
"TicketId": "TICKET-1234567890-ABCD",
"_id": "...",
"WorkspaceId": "a7d5339a-5531-4336-99c6-6f3249c9ac20",
"Subject": "Help with ranking",
"Category": "support",
"Department": "support-dept",
"Status": "open",
"Priority": "medium",
"Author": {
"UserId": 123456789,
"Username": "player123",
"DisplayName": "Player Name",
"AvatarUrl": "https://..."
},
"CreatedAt": "2025-01-15T10:30:00.000Z",
"UpdatedAt": "2025-01-15T10:30:00.000Z"
}
}
Error Responses
400 - Validation Error
400 - Validation Error
{
"success": false,
"error": {
"code": 400,
"message": "Validation error: Subject is required"
}
}
400 - Missing authorAvatarUrl
400 - Missing authorAvatarUrl
{
"success": false,
"error": {
"code": 400,
"message": "authorAvatarUrl is required"
}
}
403 - Premium Required
403 - Premium Required
{
"success": false,
"error": {
"code": 403,
"message": "Tickets module requires a Premium or Enterprise subscription"
}
}
403 - Module Not Enabled
403 - Module Not Enabled
{
"success": false,
"error": {
"code": 403,
"message": "Tickets module is not enabled for this workspace"
}
}
403 - Membership Required
403 - Membership Required
{
"success": false,
"error": {
"code": 403,
"message": "Workspace membership is required to create tickets in this category"
}
}
400 - Max Tickets Reached
400 - Max Tickets Reached
{
"success": false,
"error": {
"code": 400,
"message": "You can only have 5 open tickets in this category"
}
}
Rate Limit
25 requests per second per API keyAuthorizations
Pass your API key in the apikey header. Alternatively, the x-api-key header is also accepted.
Body
application/json
Ticket subject
Category ID
Initial message content
UserId of the ticket creator
Avatar URL of the ticket author
Available options:
low, medium, high, urgent Username of the author
Display name of the author
Response
Ticket created successfully
⌘I

