Create an event ticket type
Dates use the event timezone. Maximum per order must be at least the effective minimum. Omitted fields are preserved when updating. Requires the event management capability; all referenced records must belong to this event and organization.
curl --request POST \
--url https://api.gratona.com/v1/admin/events/{eventId}/ticket-types \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Annual Gala",
"code": "Example",
"description": "Example",
"price": 1,
"fair_market_value": 1,
"quantity_available": 1,
"admissions_per_unit": 1,
"registration_group_kind": "individual",
"group_label_prompt": "Example",
"attendee_details_timing": "checkout",
"waitlist_enabled": false,
"min_per_order": 1,
"max_per_order": 1,
"attendee_details_required": false,
"is_active": false,
"visibility": "public",
"sale_starts_at": "2026-12-20T18:00:00Z",
"sale_ends_at": "2026-12-20T18:00:00Z",
"sort_order": 1,
"settings": {}
}
'import requests
url = "https://api.gratona.com/v1/admin/events/{eventId}/ticket-types"
payload = {
"name": "Annual Gala",
"code": "Example",
"description": "Example",
"price": 1,
"fair_market_value": 1,
"quantity_available": 1,
"admissions_per_unit": 1,
"registration_group_kind": "individual",
"group_label_prompt": "Example",
"attendee_details_timing": "checkout",
"waitlist_enabled": False,
"min_per_order": 1,
"max_per_order": 1,
"attendee_details_required": False,
"is_active": False,
"visibility": "public",
"sale_starts_at": "2026-12-20T18:00:00Z",
"sale_ends_at": "2026-12-20T18:00:00Z",
"sort_order": 1,
"settings": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Annual Gala',
code: 'Example',
description: 'Example',
price: 1,
fair_market_value: 1,
quantity_available: 1,
admissions_per_unit: 1,
registration_group_kind: 'individual',
group_label_prompt: 'Example',
attendee_details_timing: 'checkout',
waitlist_enabled: false,
min_per_order: 1,
max_per_order: 1,
attendee_details_required: false,
is_active: false,
visibility: 'public',
sale_starts_at: '2026-12-20T18:00:00Z',
sale_ends_at: '2026-12-20T18:00:00Z',
sort_order: 1,
settings: {}
})
};
fetch('https://api.gratona.com/v1/admin/events/{eventId}/ticket-types', 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.gratona.com/v1/admin/events/{eventId}/ticket-types",
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([
'name' => 'Annual Gala',
'code' => 'Example',
'description' => 'Example',
'price' => 1,
'fair_market_value' => 1,
'quantity_available' => 1,
'admissions_per_unit' => 1,
'registration_group_kind' => 'individual',
'group_label_prompt' => 'Example',
'attendee_details_timing' => 'checkout',
'waitlist_enabled' => false,
'min_per_order' => 1,
'max_per_order' => 1,
'attendee_details_required' => false,
'is_active' => false,
'visibility' => 'public',
'sale_starts_at' => '2026-12-20T18:00:00Z',
'sale_ends_at' => '2026-12-20T18:00:00Z',
'sort_order' => 1,
'settings' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.gratona.com/v1/admin/events/{eventId}/ticket-types"
payload := strings.NewReader("{\n \"name\": \"Annual Gala\",\n \"code\": \"Example\",\n \"description\": \"Example\",\n \"price\": 1,\n \"fair_market_value\": 1,\n \"quantity_available\": 1,\n \"admissions_per_unit\": 1,\n \"registration_group_kind\": \"individual\",\n \"group_label_prompt\": \"Example\",\n \"attendee_details_timing\": \"checkout\",\n \"waitlist_enabled\": false,\n \"min_per_order\": 1,\n \"max_per_order\": 1,\n \"attendee_details_required\": false,\n \"is_active\": false,\n \"visibility\": \"public\",\n \"sale_starts_at\": \"2026-12-20T18:00:00Z\",\n \"sale_ends_at\": \"2026-12-20T18:00:00Z\",\n \"sort_order\": 1,\n \"settings\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.gratona.com/v1/admin/events/{eventId}/ticket-types")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Annual Gala\",\n \"code\": \"Example\",\n \"description\": \"Example\",\n \"price\": 1,\n \"fair_market_value\": 1,\n \"quantity_available\": 1,\n \"admissions_per_unit\": 1,\n \"registration_group_kind\": \"individual\",\n \"group_label_prompt\": \"Example\",\n \"attendee_details_timing\": \"checkout\",\n \"waitlist_enabled\": false,\n \"min_per_order\": 1,\n \"max_per_order\": 1,\n \"attendee_details_required\": false,\n \"is_active\": false,\n \"visibility\": \"public\",\n \"sale_starts_at\": \"2026-12-20T18:00:00Z\",\n \"sale_ends_at\": \"2026-12-20T18:00:00Z\",\n \"sort_order\": 1,\n \"settings\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/events/{eventId}/ticket-types")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Annual Gala\",\n \"code\": \"Example\",\n \"description\": \"Example\",\n \"price\": 1,\n \"fair_market_value\": 1,\n \"quantity_available\": 1,\n \"admissions_per_unit\": 1,\n \"registration_group_kind\": \"individual\",\n \"group_label_prompt\": \"Example\",\n \"attendee_details_timing\": \"checkout\",\n \"waitlist_enabled\": false,\n \"min_per_order\": 1,\n \"max_per_order\": 1,\n \"attendee_details_required\": false,\n \"is_active\": false,\n \"visibility\": \"public\",\n \"sale_starts_at\": \"2026-12-20T18:00:00Z\",\n \"sale_ends_at\": \"2026-12-20T18:00:00Z\",\n \"sort_order\": 1,\n \"settings\": {}\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": 1,
"client_id": 1,
"event_id": 1,
"name": "Annual Gala",
"code": "Example",
"description": "Example",
"price": "25.00",
"fair_market_value": "25.00",
"quantity_available": 1,
"quantity_sold": 1,
"quantity_reserved": 1,
"admissions_per_unit": 1,
"registration_group_kind": "Example",
"group_label_prompt": "Example",
"attendee_details_timing": "Example",
"waitlist_enabled": false,
"min_per_order": 1,
"max_per_order": 1,
"attendee_details_required": false,
"is_active": false,
"visibility": "public",
"sale_starts_at": "2026-10-20T12:00:00Z",
"sale_ends_at": "2026-10-20T12:00:00Z",
"sort_order": 1,
"settings": {},
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z",
"deleted_at": "2026-10-20T12:00:00Z"
}
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Not Found",
"status": "error"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}Authorizations
Passport bearer token authentication for legacy admin sessions.
Path Parameters
Record ID in the authenticated organization.
42
Body
Name.
255"Annual Gala"
Code.
255"Example"
Description.
"Example"
Price.
x >= 01
Fair market value.
x >= 01
Quantity available.
x >= 01
Admissions per unit.
1 <= x <= 1001
Registration group kind.
individual, team, table, household, sponsor_guests, other, null "individual"
Group label prompt.
255"Example"
Attendee details timing.
checkout, before_event, optional, null "checkout"
Waitlist enabled.
false
Min per order.
x >= 11
Max per order. Must be at least min_per_order. Must remain at least the effective minimum even in partial updates.
x >= 11
Attendee details required.
false
Is active.
false
Visibility.
public, private, null "public"
Sale starts at. Date without offset is interpreted in the event timezone.
"2026-12-20T18:00:00Z"
Sale ends at. Date without offset is interpreted in the event timezone. Must be at least sale_starts_at.
"2026-12-20T18:00:00Z"
Sort order.
1
Settings.
Response
Create an event ticket type completed.
Show child attributes
Show child attributes
curl --request POST \
--url https://api.gratona.com/v1/admin/events/{eventId}/ticket-types \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Annual Gala",
"code": "Example",
"description": "Example",
"price": 1,
"fair_market_value": 1,
"quantity_available": 1,
"admissions_per_unit": 1,
"registration_group_kind": "individual",
"group_label_prompt": "Example",
"attendee_details_timing": "checkout",
"waitlist_enabled": false,
"min_per_order": 1,
"max_per_order": 1,
"attendee_details_required": false,
"is_active": false,
"visibility": "public",
"sale_starts_at": "2026-12-20T18:00:00Z",
"sale_ends_at": "2026-12-20T18:00:00Z",
"sort_order": 1,
"settings": {}
}
'import requests
url = "https://api.gratona.com/v1/admin/events/{eventId}/ticket-types"
payload = {
"name": "Annual Gala",
"code": "Example",
"description": "Example",
"price": 1,
"fair_market_value": 1,
"quantity_available": 1,
"admissions_per_unit": 1,
"registration_group_kind": "individual",
"group_label_prompt": "Example",
"attendee_details_timing": "checkout",
"waitlist_enabled": False,
"min_per_order": 1,
"max_per_order": 1,
"attendee_details_required": False,
"is_active": False,
"visibility": "public",
"sale_starts_at": "2026-12-20T18:00:00Z",
"sale_ends_at": "2026-12-20T18:00:00Z",
"sort_order": 1,
"settings": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Annual Gala',
code: 'Example',
description: 'Example',
price: 1,
fair_market_value: 1,
quantity_available: 1,
admissions_per_unit: 1,
registration_group_kind: 'individual',
group_label_prompt: 'Example',
attendee_details_timing: 'checkout',
waitlist_enabled: false,
min_per_order: 1,
max_per_order: 1,
attendee_details_required: false,
is_active: false,
visibility: 'public',
sale_starts_at: '2026-12-20T18:00:00Z',
sale_ends_at: '2026-12-20T18:00:00Z',
sort_order: 1,
settings: {}
})
};
fetch('https://api.gratona.com/v1/admin/events/{eventId}/ticket-types', 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.gratona.com/v1/admin/events/{eventId}/ticket-types",
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([
'name' => 'Annual Gala',
'code' => 'Example',
'description' => 'Example',
'price' => 1,
'fair_market_value' => 1,
'quantity_available' => 1,
'admissions_per_unit' => 1,
'registration_group_kind' => 'individual',
'group_label_prompt' => 'Example',
'attendee_details_timing' => 'checkout',
'waitlist_enabled' => false,
'min_per_order' => 1,
'max_per_order' => 1,
'attendee_details_required' => false,
'is_active' => false,
'visibility' => 'public',
'sale_starts_at' => '2026-12-20T18:00:00Z',
'sale_ends_at' => '2026-12-20T18:00:00Z',
'sort_order' => 1,
'settings' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.gratona.com/v1/admin/events/{eventId}/ticket-types"
payload := strings.NewReader("{\n \"name\": \"Annual Gala\",\n \"code\": \"Example\",\n \"description\": \"Example\",\n \"price\": 1,\n \"fair_market_value\": 1,\n \"quantity_available\": 1,\n \"admissions_per_unit\": 1,\n \"registration_group_kind\": \"individual\",\n \"group_label_prompt\": \"Example\",\n \"attendee_details_timing\": \"checkout\",\n \"waitlist_enabled\": false,\n \"min_per_order\": 1,\n \"max_per_order\": 1,\n \"attendee_details_required\": false,\n \"is_active\": false,\n \"visibility\": \"public\",\n \"sale_starts_at\": \"2026-12-20T18:00:00Z\",\n \"sale_ends_at\": \"2026-12-20T18:00:00Z\",\n \"sort_order\": 1,\n \"settings\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.gratona.com/v1/admin/events/{eventId}/ticket-types")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Annual Gala\",\n \"code\": \"Example\",\n \"description\": \"Example\",\n \"price\": 1,\n \"fair_market_value\": 1,\n \"quantity_available\": 1,\n \"admissions_per_unit\": 1,\n \"registration_group_kind\": \"individual\",\n \"group_label_prompt\": \"Example\",\n \"attendee_details_timing\": \"checkout\",\n \"waitlist_enabled\": false,\n \"min_per_order\": 1,\n \"max_per_order\": 1,\n \"attendee_details_required\": false,\n \"is_active\": false,\n \"visibility\": \"public\",\n \"sale_starts_at\": \"2026-12-20T18:00:00Z\",\n \"sale_ends_at\": \"2026-12-20T18:00:00Z\",\n \"sort_order\": 1,\n \"settings\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/events/{eventId}/ticket-types")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Annual Gala\",\n \"code\": \"Example\",\n \"description\": \"Example\",\n \"price\": 1,\n \"fair_market_value\": 1,\n \"quantity_available\": 1,\n \"admissions_per_unit\": 1,\n \"registration_group_kind\": \"individual\",\n \"group_label_prompt\": \"Example\",\n \"attendee_details_timing\": \"checkout\",\n \"waitlist_enabled\": false,\n \"min_per_order\": 1,\n \"max_per_order\": 1,\n \"attendee_details_required\": false,\n \"is_active\": false,\n \"visibility\": \"public\",\n \"sale_starts_at\": \"2026-12-20T18:00:00Z\",\n \"sale_ends_at\": \"2026-12-20T18:00:00Z\",\n \"sort_order\": 1,\n \"settings\": {}\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": 1,
"client_id": 1,
"event_id": 1,
"name": "Annual Gala",
"code": "Example",
"description": "Example",
"price": "25.00",
"fair_market_value": "25.00",
"quantity_available": 1,
"quantity_sold": 1,
"quantity_reserved": 1,
"admissions_per_unit": 1,
"registration_group_kind": "Example",
"group_label_prompt": "Example",
"attendee_details_timing": "Example",
"waitlist_enabled": false,
"min_per_order": 1,
"max_per_order": 1,
"attendee_details_required": false,
"is_active": false,
"visibility": "public",
"sale_starts_at": "2026-10-20T12:00:00Z",
"sale_ends_at": "2026-10-20T12:00:00Z",
"sort_order": 1,
"settings": {},
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z",
"deleted_at": "2026-10-20T12:00:00Z"
}
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Not Found",
"status": "error"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}