Guest list admissions are complimentary named parties. They consume real ticket inventory, skip checkout, and are not customers. Use this API instead of a hidden 0€ promo code.

The JSON shape is pinned to the integration tests in Usetix. If a test fails with “API payload shape drifted”, update this page.

Writes with an API token (no signed-in user) are attributed to the account owner. Numbered seats are never auto-assigned: send event_place_ids from ticket_options.available_places. Group tickets, whole tables, and numbered-seat walk-ins are not available here. Scanner walk-ins stay a door action.

Related: orders (origin, delivery_email, staff_note), events (guest-list counts), and scanner tickets.

GET /admin/events/:event_slug/guest_list

Lists guest parties for an event, plus eligible ticket types and currently available inventory.

curl -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  "https://app.usetix.io/admin/events/spring-showcase/guest_list"

Query parameters:

Parameter Description
query Guest name, companion name, or delivery email.
filter all (default), expected, or arrived.

Response:

{
  "query": "",
  "filter": "all",
  "expected_count": 2,
  "arrived_count": 0,
  "admission_count": 2,
  "ticket_options": [
    {
      "id": 12,
      "title": "General Admission",
      "inventory_kind": "ga",
      "available_stock": 48,
      "unlimited_stock": false,
      "standing_areas": [],
      "available_places": []
    }
  ],
  "guest_parties": [
    {
      "public_id": "gst_abc123",
      "order_code": "7K3Q9D2A",
      "display_number": "7K3Q-9D2A",
      "status": "paid",
      "origin": "guest_list",
      "customer_name": "Anna Müller",
      "delivery_email": null,
      "staff_note": "Use the side entrance",
      "arrival_state": "expected",
      "arrived_count": 0,
      "party_size": 2,
      "cancellable": true,
      "ticket_id": 12,
      "ticket_title": "General Admission",
      "creator_name": "Alex Organizer",
      "paid_at": "2026-08-22T10:15:00Z",
      "created_at": "2026-08-22T10:15:00Z",
      "admissions": [
        {
          "public_id": "itm_lead",
          "attendee_name": "Anna Müller",
          "place_label": null,
          "check_in_code": "9M5V2H8C",
          "display_check_in_code": "9M5V-2H8C",
          "redeemed": false,
          "redeemed_at": null,
          "admission_status": "active",
          "cancellable": true,
          "seat_exchangeable": false
        },
        {
          "public_id": "itm_plus_one",
          "attendee_name": "Guest of Anna Müller",
          "place_label": null,
          "check_in_code": "4P8R1L6N",
          "display_check_in_code": "4P8R-1L6N",
          "redeemed": false,
          "redeemed_at": null,
          "admission_status": "active",
          "cancellable": true,
          "seat_exchangeable": false
        }
      ]
    }
  ]
}

inventory_kind is ga, standing, or places. Unlimited stock returns "available_stock": null and "unlimited_stock": true. For standing tickets, standing_areas lists open pools. For numbered tickets, available_places lists currently free seats as { "id", "key", "label" }. key is the stable seat logical key (the same identifier MCP’s places action returns).

GET /admin/events/:event_slug/guest_parties/:public_id

Returns one guest party. HTML requests redirect to the edit screen.

curl -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  https://app.usetix.io/admin/events/spring-showcase/guest_parties/gst_abc123

Response: 200 OK with the guest party JSON.

POST /admin/events/:event_slug/guest_parties

Creates a complimentary party and takes inventory immediately.

curl -X POST \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"guest_party": {"customer_name": "Anna Müller", "party_size": 2, "ticket_id": 12, "staff_note": "Use the side entrance"}}' \
  https://app.usetix.io/admin/events/spring-showcase/guest_parties

Numbered seats:

curl -X POST \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"guest_party": {"customer_name": "Anna Müller", "ticket_id": 15, "event_place_ids": [401, 402]}}' \
  https://app.usetix.io/admin/events/spring-showcase/guest_parties

Body parameters (inside guest_party):

Field Required Notes
customer_name yes Door-search name.
ticket_id yes An eligible standard ticket from ticket_options.
party_size no 1–20. Ignored when event_place_ids is present (size is the number of places). Defaults to 1.
event_place_ids numbered tickets IDs from ticket_options.available_places. Required for places tickets. Do not invent them.
event_capacity_pool_id standing, if more than one area From ticket_options.standing_areas. When the ticket has a single standing area, Usetix picks it.
delivery_email no Optional ticket delivery. Not the guest’s identity.
send_to_creator no If true, delivers to the acting organizer (API tokens: the account owner).
staff_note no Internal hint, max 500 characters. Scanner-only.

Response: 201 Created with the guest party JSON and a Location header. 422 Unprocessable Entity with { "errors": { "field": ["..."] } } when the name is blank, the ticket is ineligible, stock is gone, or the seats are no longer free.

PATCH /admin/events/:event_slug/guest_parties/:public_id

Updates names, delivery email, and staff note. Omitted fields stay as they are. Send deliver: true at the top level (not inside guest_party) to email tickets after saving.

curl -X PATCH \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"deliver": true, "guest_party": {"delivery_email": "guest@example.com", "staff_note": "Notify the event manager", "attendee_names": {"itm_plus_one": "Berta Meier"}}}' \
  https://app.usetix.io/admin/events/spring-showcase/guest_parties/gst_abc123

attendee_names is a map of admission public_id → companion name. The lead name is customer_name. Empty delivery_email or staff_note clears the field.

Response: 200 OK with the updated party. 422 if deliver is true and there is still no delivery address.

POST /admin/events/:event_slug/guest_parties/:public_id/cancellation

Removes an untouched party and restores inventory. Fails once anyone in the party has checked in.

curl -X POST \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  https://app.usetix.io/admin/events/spring-showcase/guest_parties/gst_abc123/cancellation

Response: 200 OK with the party (status is booking_cancelled). 422 if the party is no longer cancellable.

POST /admin/events/:event_slug/guest_parties/:public_id/admissions/:admission_public_id/cancellation

Releases one unredeemed admission. Standing parties split the remaining capacity instead of trapping it.

curl -X POST \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  https://app.usetix.io/admin/events/spring-showcase/guest_parties/gst_abc123/admissions/itm_plus_one/cancellation

Response: 200 OK with the updated party. 422 if that admission cannot be released (already in, accessibility pair, and so on).

Seat moves

Numbered guest-list seats use the same seat-exchange endpoints as paid seated orders.

GET /admin/order_items/:public_id/seat_exchange

curl -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  https://app.usetix.io/admin/order_items/itm_lead/seat_exchange
{
  "public_id": "itm_lead",
  "place_label": "Ground floor · Stalls · A · 1",
  "current_place_id": 401,
  "available_places": [
    { "id": 402, "key": "seat-a-2", "label": "Ground floor · Stalls · A · 2" }
  ]
}

POST /admin/order_items/:public_id/seat_exchange

curl -X POST \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"seat_exchange": {"event_place_id": 402}}' \
  https://app.usetix.io/admin/order_items/itm_lead/seat_exchange
{
  "public_id": "itm_lead",
  "place_label": "Ground floor · Stalls · A · 2",
  "previous_place_label": "Ground floor · Stalls · A · 1"
}

Linked wheelchair/companion places cannot be moved individually. Wallet passes update when installed. Email is sent only when the party has a delivery address.

Guest party fields

Field Type Notes
public_id string Stable party ID. Use it in URLs.
order_code string Human-readable order code.
display_number string Formatted code, typically XXXX-XXXX.
status string Usually paid. booking_cancelled after a whole-party cancel.
origin string Always guest_list.
customer_name string Lead name used at the door.
delivery_email string | null Ticket delivery only. Null for door-list-only parties.
staff_note string | null Internal scanner hint.
arrival_state string expected, partially_arrived, or arrived.
arrived_count integer Checked-in admissions.
party_size integer Active admissions remaining.
cancellable boolean Whole party can still be removed.
ticket_id integer | null Ticket type of the admissions.
ticket_title string | null Snapshot title.
creator_name string | null Who added the party. API tokens use the account owner.
paid_at string | null ISO 8601 UTC.
created_at string ISO 8601 UTC.
admissions array See below.

Admission fields

Field Type Notes
public_id string Use for companion updates, admission cancel, and seat exchange.
attendee_name string Display name at the door, including “Guest of …” when unnamed.
place_label string | null Numbered or standing label, when assigned.
check_in_code string Human-readable ticket code.
display_check_in_code string Formatted code.
redeemed boolean Checked in.
redeemed_at string | null ISO 8601 UTC.
admission_status string active, cancelled, or a refund-style status. Guest list does not take payment.
cancellable boolean This admission can be released.
seat_exchangeable boolean This numbered place can be moved.

AI and MCP

The same operations exist on manage_guest_list for the in-app assistant and MCP. Actions: list, tickets, places, add, update, cancel, cancel_admission, move_seat. Numbered add/move use place_keys (the key values above), not invented labels. See MCP.