Browse API docs
Tickets
Tickets are the purchasable types within an event, General Admission, VIP, Early Bird, and so on. Each event has one or more tickets, each with its own price, stock, and limits.
Stock updates set an absolute product count. Omit stock when changing unrelated fields so intervening sales and cancellations are preserved. A group package consumes its full group_size from shared event capacity.
Usetix supports two ticket kinds, exposed via the kind field:
StandardTicket: Single-use tickets. One QR per buyer.GroupTicket: Bulk tickets that redeem a configurable number of attendees per code.
GET /admin/events/:slug/tickets
Returns all tickets belonging to an event.
curl -H "Authorization: Bearer your-token-here" \
-H "Accept: application/json" \
https://app.usetix.io/admin/events/spring-showcase/tickets
Query parameters:
| Parameter | Description |
|---|---|
filter |
Set to archived to return only archived tickets. Default returns active and hidden tickets. |
Response:
{
"event": {
"id": 42,
"slug": "spring-showcase",
"title": "Spring Showcase"
},
"tickets": [
{
"id": 101,
"title": "General Admission",
"kind": "StandardTicket",
"state": "active",
"sales_closed": false,
"sales_closed_at": null,
"price": { "amount": "21.00", "currency": "EUR" },
"stock": 200,
"unlimited_stock": false,
"position": 1,
"max_per_order": 6,
"max_per_customer": null,
"access_code_required": false
}
]
}
GET /admin/events/:slug/tickets/:id
Returns a single ticket.
curl -H "Authorization: Bearer your-token-here" \
-H "Accept: application/json" \
https://app.usetix.io/admin/events/spring-showcase/tickets/101
Response:
{
"id": 101,
"title": "General Admission",
"kind": "StandardTicket",
"state": "active",
"sales_closed": false,
"sales_closed_at": null,
"price": { "amount": "21.00", "currency": "EUR" },
"stock": 200,
"unlimited_stock": false,
"position": 1,
"max_per_order": 6,
"max_per_customer": null,
"access_code_required": false
}
POST /admin/events/:slug/standard_tickets
Creates a new standard ticket on the event.
curl -X POST \
-H "Authorization: Bearer your-token-here" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"title": "Late bird", "price": "15.00", "stock": 50}' \
https://app.usetix.io/admin/events/spring-showcase/standard_tickets
Body parameters:
| Field | Required | Notes |
|---|---|---|
title |
yes | Display title. |
price |
yes | Decimal as string. |
stock |
yes | Initial stock count. Use -1 for unlimited. |
state |
no | active (default) or hidden. |
color |
no | Hex code (#RRGGBB) for scanner / PDF / admin tier recognition. |
max_per_order |
no | Cap on copies of this ticket per single order. |
max_per_customer |
no | Cap on copies of this ticket per email lifetime. |
features |
no | Array of strings describing what’s included. |
Response: 201 Created with the ticket JSON.
PATCH /admin/events/:slug/standard_tickets/:id
Updates a standard ticket. Send only the fields you want to change.
curl -X PATCH \
-H "Authorization: Bearer your-token-here" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"price": "12.00"}' \
https://app.usetix.io/admin/events/spring-showcase/standard_tickets/101
Response: 200 OK with the updated ticket JSON.
POST /admin/events/:slug/group_tickets
Creates a new group ticket. Group tickets bundle multiple admissions into a single QR code.
curl -X POST \
-H "Authorization: Bearer your-token-here" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"title": "4-pack", "price": "60.00", "stock": 25, "group_size": 4, "unit_price": "15.00"}' \
https://app.usetix.io/admin/events/spring-showcase/group_tickets
Body parameters: Same as standard_tickets, plus:
| Field | Required | Notes |
|---|---|---|
group_size |
yes | Number of admissions per code. |
unit_price |
yes | Decimal as string. Per-admission price (the bundle’s effective per-attendee cost). |
Response: 201 Created with the ticket JSON (kind: "GroupTicket").
PATCH /admin/events/:slug/group_tickets/:id
Updates a group ticket. Send only the fields you want to change.
curl -X PATCH \
-H "Authorization: Bearer your-token-here" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"group_size": 6}' \
https://app.usetix.io/admin/events/spring-showcase/group_tickets/102
Response: 200 OK with the updated ticket JSON.
POST /admin/events/:slug/tickets/:id/archival
Archives a ticket. Archived tickets disappear from the public shop and from the default admin list, but historical orders keep working.
curl -X POST \
-H "Authorization: Bearer your-token-here" \
-H "Accept: application/json" \
https://app.usetix.io/admin/events/spring-showcase/tickets/101/archival
Response: 200 OK with the ticket JSON (state: "archived").
DELETE /admin/events/:slug/tickets/:id/archival
Unarchives a ticket, restoring it to active state.
curl -X DELETE \
-H "Authorization: Bearer your-token-here" \
-H "Accept: application/json" \
https://app.usetix.io/admin/events/spring-showcase/tickets/101/archival
Response: 200 OK with the ticket JSON (state: "active").
PATCH /admin/events/:slug/tickets/:id/position
Moves a ticket type to a new display position. Lower numbers sort first.
curl -X PATCH \
-H "Authorization: Bearer your-token-here" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"position": 2}' \
https://app.usetix.io/admin/events/spring-showcase/tickets/101/position
Response: 204 No Content.
Ticket fields
| Field | Type | Notes |
|---|---|---|
id |
integer | Internal numeric ID. Path parameter. |
title |
string | Display title. |
kind |
string | StandardTicket or GroupTicket. |
state |
string | active, hidden, or archived. |
price.amount |
string | Decimal as string (e.g. "21.00"). |
price.currency |
string | ISO 4217 currency code. Inherited from the account. |
stock |
integer | Raw remaining product count: single tickets or complete group packages. -1 means unlimited product stock. Shared event capacity and seating can further limit availability. |
unlimited_stock |
boolean | Convenience flag, true when stock is -1. |
position |
integer | Display order within the event (low to high). |
max_per_order |
integer | null | Cap on how many of this ticket a single order may contain. null means unlimited. |
max_per_customer |
integer | null | Cap on how many of this ticket the same email can buy across all orders. null means unlimited. |
access_code_required |
boolean | true for hidden tickets that require a code at checkout. |
Mark a ticket type as sold out
POST /admin/events/:slug/tickets/:id/sale_closure closes sales for a ticket type. DELETE at the same URL reopens it. Both require write access and return the ticket JSON with sales_closed and nullable ISO-8601 sales_closed_at.
The admin ticket list exposes these operations in each ticket’s action menu. The ticket stays visible as sold out. Stock, price, visibility and scheduled sale dates remain unchanged. Abandoned checkout reservations still return stock, but cannot reopen the phase. Reopening restores normal stock, capacity and sale-window checks. Repeated close/reopen requests are safe.
Existing checkout reservations remain valid; new checkouts, stale unreserved carts and new public seating selections cannot purchase the closed type. Manual guest-list admissions retain their existing organizer-controlled inventory path.
curl -X POST -H "Authorization: Bearer your-write-token" \
-H "Accept: application/json" \
https://app.usetix.io/admin/events/spring-showcase/tickets/101/sale_closure
The assistant/MCP tool manage_event_tickets supports close_sales and reopen_sales with event_title and ticket_title. Both require write scope.