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