REST API

Tickets

List, create, update, check in, void, and bulk-operate on tickets. The most-trafficked endpoint for reporting and on-site operations.

A ticket is the durable artifact of a guest’s registration to an event. It carries the barcode, attendee details, custom field answers, scan/check-in state, and links to the underlying line item and order.

Default response fields

Unless ?fields= is specified:

id, kind, created_at, updated_at, number, status, name, email, barcode_id, barcode, note, event_id, ticket_type_id, event_ticket_type_id, list_id, contact_id, dispatched_at, downloaded_at, checkin_at, expires_at, source_type, source_id.

source_type is one of line_item (purchased), rsvp (registered to a free event), or invite (issued via guest list). source_id points at the corresponding record.

Relationships (contact, line_item, event_ticket_type, custom_fields, scans, emails, sessions, links, photo) are returned only when listed in ?include=.

List tickets

GET /tickets

List tickets

curl -X GET \
  'https://app.guestmanager.com/api/public/v2/tickets?page[cursor]=&page[size]=50' \
  -H 'Authorization: Token abcdefg' \
  -H 'Content-Type: application/json'

List checked-in tickets for specific events

curl -X GET \
  'https://app.guestmanager.com/api/public/v2/tickets?filter[event_ids]=12345&filter[status]=checked_in&include=contact,scans&sort[checkin_at]=desc' \
  -H 'Authorization: Token abcdefg' \
  -H 'Content-Type: application/json'

Request parameters

Parameter Type Description
page[cursor] string Opaque cursor token. Send empty for first page. See Pagination.
page[size] integer Records per page. Default 10, maximum 100.
sort[{field}] string Sort by id, created_at, updated_at, checkin_at, downloaded_at, sent_at. Value is asc or desc.
fields string Comma separated list of fields to return.
include string Comma separated relationships. See Relationships.
filter[ids] string Comma separated ticket IDs.
filter[search] string Full-text search across attendee name, email, barcode, and order number. Routes through Elasticsearch when available.
filter[status] string One of pending, sent, checked_in, checked_out, voided, expired. See Status filter.
filter[event_ids] string Comma separated event IDs.
filter[list_ids] string Comma separated list IDs.
filter[ticket_type_ids] string Comma separated ticket type IDs.
filter[kind] string Filter by ticket kind (e.g., pass, single).
filter[archived] boolean true to include only archived tickets, false to exclude them.
filter[photo] boolean true returns only tickets with a uploaded photo (e.g., for check-in identity verification).
filter[permanence] string permanent or non_permanent.

Status filter

Value Meaning
pending Created but not yet sent or downloaded.
sent Email dispatched to the attendee.
checked_in Currently checked in (most recent scan was a check-in).
checked_out Was checked in, then checked out.
voided Voided — barcode rejected at check-in.
expired Past expires_at.

Relationships

Relationship Notes
contact The attendee’s contact record.
line_item The order line item that produced this ticket (when purchased).
event_ticket_type The ticket-type-on-event link, including PDF/wallet template config.
event_ticket_type.event Above plus the event with venue.
event_ticket_type.ticket_type Above plus the underlying ticket type config.
custom_fields Form responses captured against this ticket.
scans Check-in / check-out scan history.
sessions Sub-tickets when the ticket is a parent (e.g., a multi-session pass).
sessions.scans Scans of each session ticket — useful for multi-day pass dashboards.
emails Delivery history (sent emails for this ticket).
links Includes pdf and wallet download URLs in the response.
photo Includes a transformed photo URL (use images[ticket][photo]=...).

Get ticket

GET /tickets/{id}

curl -X GET \
  'https://app.guestmanager.com/api/public/v2/tickets/8472134?include=contact,event_ticket_type.event,scans' \
  -H 'Authorization: Token abcdefg' \
  -H 'Content-Type: application/json'

Create ticket

POST /tickets

Creates a ticket directly — used for backend issuance (comps, invites, manual additions). Tickets created here have source: backend. Tickets created via the checkout flow are produced from line items and use source: line_item.

Create a comp ticket

curl -X POST \
  https://app.guestmanager.com/api/public/v2/tickets \
  -H 'Authorization: Token abcdefg' \
  -H 'Content-Type: application/json' \
  -d '{
    "ticket": {
      "event_id": 12345,
      "ticket_type_id": 2217,
      "name": "Jane Doe",
      "email": "jane@example.com",
      "list_id": 5678
    }
  }'

Request parameters

You can either pass event_id + ticket_type_id (and the API resolves them to an event_ticket_type_id), or pass event_ticket_type_id directly if you already have it.

Parameter Type Description
ticket[event_id] integer Event the ticket belongs to. Required if event_ticket_type_id is not provided.
ticket[ticket_type_id] integer Ticket type. Required if event_ticket_type_id is not provided.
ticket[event_ticket_type_id] integer The pre-resolved event-ticket-type link. Alternative to event_id + ticket_type_id.
ticket[name] string Attendee name.
ticket[email] string Attendee email.
ticket[contact_id] integer Existing contact to attach the ticket to.
ticket[list_id] integer Event list to add the ticket to. Defaults to the event’s primary list.
ticket[permanent_list_id] integer Permanent list (cross-event) to associate with this ticket.
ticket[barcode_id] integer Pre-allocated barcode pool entry. For events using enforce_barcode_pool.
ticket[barcode] string Specific barcode value to assign. Use only when intentionally overriding the auto-generated barcode.
ticket[dispatch] boolean true to immediately email the ticket on creation.
ticket[custom_fields] array Array of { id?, label, value } form responses. See Custom fields.

Custom fields

Custom fields capture event-specific responses (e.g., dietary restrictions, t-shirt size). Pass as an array of {label, value} pairs. Labels must be unique within a single ticket.

{
  "ticket": {
    "event_id": 12345,
    "ticket_type_id": 2217,
    "name": "Jane Doe",
    "custom_fields": [
      { "label": "T-shirt size", "value": "L" },
      { "label": "Dietary",       "value": "Vegetarian" }
    ]
  }
}

The API resolves each label to the appropriate ticket_field_id configured on the event. Unknown labels are silently ignored (validate field labels client-side before submitting).

Update ticket

PATCH /tickets/{id}

Same field shape as create. Common updates: changing the attendee name/email, adding/updating custom field responses, attaching a barcode.

curl -X PATCH \
  https://app.guestmanager.com/api/public/v2/tickets/8472134 \
  -H 'Authorization: Token abcdefg' \
  -H 'Content-Type: application/json' \
  -d '{
    "ticket": {
      "name": "Jane Smith",
      "custom_fields": [
        { "label": "T-shirt size", "value": "M" }
      ]
    }
  }'

Delete ticket

DELETE /tickets/{id}

Soft-deletes (discards) the ticket. Returns 204 No Content. The ticket can be restored from the admin UI; deleted tickets do not appear in GET /tickets unless ?deleted=true is set.

Void ticket

PATCH /tickets/{id}/void

Voids the ticket. The barcode will be rejected at check-in. Use this when refunding without deleting (preserves audit trail).

Resend ticket email

PATCH /tickets/{id}/email

Sends the ticket email to the current email address on the ticket. Useful for “I lost my ticket” support flows.

Set ticket photo

PATCH /tickets/{id}/photo

Attaches a photo to the ticket — typically a headshot for identity verification at check-in.

Parameter Type Description
image string Base64-encoded image data. The server processes via Base64ImageProcessor.
ticket[photo] multipart Alternative: send photo as a multipart upload field on the standard update endpoint.

Check-in operations

The check-in endpoints are designed for high-throughput on-site scanning — typically called by the iOS scanner app or a purpose-built kiosk integration.

Device, station, employee headers

All check-in endpoints accept three optional request headers that attribute the scan:

Header Description
X-Device-Id The scanning device’s ID (registered in the company’s device list).
X-Station-Id The check-in station’s ID.
X-Employee-Id The employee performing the scan.

Including these headers populates the scan record’s audit trail and enables per-station / per-employee reporting.

Check in a ticket

PATCH /tickets/{id_or_barcode}/check_in

Checks in a ticket by ID or by barcode (set ?barcode=true and pass the barcode value as the id segment).

Check in by ID

curl -X PATCH \
  https://app.guestmanager.com/api/public/v2/tickets/8472134/check_in \
  -H 'Authorization: Token abcdefg' \
  -H 'X-Device-Id: 42' \
  -H 'X-Station-Id: 7' \
  -H 'X-Employee-Id: 99' \
  -H 'Content-Type: application/json'

Check in by barcode

curl -X PATCH \
  'https://app.guestmanager.com/api/public/v2/tickets/ABC123XYZ/check_in?barcode=true' \
  -H 'Authorization: Token abcdefg' \
  -H 'X-Device-Id: 42'

Response shape

The response includes the ticket plus a meta block with the scan record, a confirmation message, and (when applicable) the linked Shopify order ID:

{
  "data": { /* ticket */ },
  "meta": {
    "scan": {
      "id": 99812,
      "action": "checkin",
      "successful": true,
      "scanned_at": "2026-09-15T20:14:33Z"
    },
    "shopify_order_id": "gid://shopify/Order/4231887",
    "message": "Jane Doe's GA (Standard Entry) to Tasting Tour on September 15, 2026"
  }
}

Status codes

Code Meaning
202 Successful scan.
412 Scan rejected — ticket voided, expired, already checked in, or barcode unrecognized. Check meta.scan.action.

If the barcode is unrecognized entirely, the response is 412 with meta.scan.action: "unknown" and no data field.

Check out a ticket

PATCH /tickets/{id_or_barcode}/check_out

Records a check-out scan. Use for events that track re-entry windows.

Undo check-in

DELETE /tickets/{id}/check_in

Reverses the most recent check-in scan. Use for accidental scans.

Bulk check-in

PATCH /tickets/check_in

Checks in many tickets in a single request — useful for “scan a group all at once” workflows.

curl -X PATCH \
  https://app.guestmanager.com/api/public/v2/tickets/check_in \
  -H 'Authorization: Token abcdefg' \
  -H 'X-Device-Id: 42' \
  -H 'Content-Type: application/json' \
  -d '{ "ids": [8472134, 8472135, 8472136] }'

Response is a collection of tickets plus a meta.scans array with one scan record per ticket.


Bulk operations

Bulk email

PATCH /tickets/bulk_email

Sends a custom email to many ticket holders in one call. Backed by an Email::CompanyEmail::TicketMultipleEmail job; the response returns the email job record.

Parameter Type Description
ids array Array (or comma separated string) of ticket IDs.
email_template_id integer Required. The email template to use.
subject string Override the template subject.
body string Optional body override (rich text / HTML).
email string Override the recipient email (defaults to each ticket’s email).

Export to CSV

GET /tickets/export

Streams a CSV of tickets matching the current filter / search params. Same query parameters as GET /tickets (no page[] — exports the full result set).

curl -X GET \
  'https://app.guestmanager.com/api/public/v2/tickets/export?filter[event_ids]=12345' \
  -H 'Authorization: Token abcdefg' \
  -o tickets.csv