Home Features Pricing Blog Docs
Log in Start for Free
English | Deutsch

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.

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",
      "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",
  "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").

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 Current stock count. -1 means unlimited (see unlimited_stock).
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.