Tickets
Once an event has dates and a location, you set up the ticket SKUs people will buy. The schema models four distinct concepts here that often get conflated — keep them straight:
TicketSpecification— the SKU. "Member ticket — 250 DKK". You configure these.EventTicket— one purchased ticket. Created when someone buys.BuyOrder— the cart-like order that produced one or more tickets. Tracks payment state.EventTicketHolder— the buyer (a platform user) — surfaced for this event by theticketHoldersquery.
Plus inspectors, who validate tickets at the gate.
TicketSpecification
Fields:
id,name,description.price— in øre / cents (i.e.25000= 250 DKK). TypeNonNegativeInt(a non-negative integer scalar).includeVat— resolver field;truewhen VAT is included in the price (currently any non-zero VAT means "included with 25%").ticketPlatFormFee,ticketPercentageFee,percentageFeeAmount— Unioo's platform fees.numberOfTicketsForSale— quota for this SKU (ornullfor unlimited).maximumNumberOfTicketsPerUser— per-buyer cap.numberOfTicketsSold— resolver field; live count of sold tickets for this spec.isActive— whether this SKU is currently for sale.
Validation on create / edit:
price(when set and non-zero) must be>= 1000(minimum 10 DKK).numberOfTicketsForSalemust be>= maximumNumberOfTicketsPerUserif both are set.editTicketSpecificationonly works while the spec is inactive and the event is draft. Once you flipisActive: true(viaeditTicketSpecificationActiveState), prices and quotas freeze.removeTicketSpecificationrequires no tickets sold/reserved against the spec.
Adding the first paid ticket specification (price > 0) automatically enables the organization's billing profile for events.
EventTicket and EventTicketDate
A purchased ticket. Fields:
id,purchaseDate.ticketSpecification— back-reference to the SKU.eventDates—[EventTicketDate!]— one entry per date the ticket grants access to. Each carriesid,isRedeemed,timeOfRedemption,redeemedBy(the inspector who scanned).isRefunded,isRefundInProgress.
BuyOrder
Wraps the purchase. Fields:
id,state(Pending,Paid,Expired),comment.created,expires— pending orders auto-expire if not paid in time.eventId,eventTickets,tickets.chargeSessionId— the payment processor session ID.ticketHolder— reference back to theEventTicketHolder.
tickets and eventTickets distinguish the line items the buyer requested (eventTickets: [BuyOrderEventTicketItem!] — { id, ticketSpecificationId, ticketSpecification, amount }) from the actual ticket rows issued (tickets: [EventTicket!]). For paid orders these align; pending orders only have line items.
EventTicketHolder
The buyer-side projection — one row per platform user who's purchased at least one ticket for the event. Fields: id, issueTime, userId, user, tickets, buyOrders. Buy orders are filterable by state.
User exposes name, email, phone, and an avatar URL. See Querying ticket holders for the full projection.
TicketInspector (interface)
Someone authorized to validate (scan) tickets. Two concrete types:
ExternalTicketInspector— a one-off person not on the board (e.g. door staff). Created with aname,email,phoneNumber.BoardMemberTicketInspectorType— a board member, identified at create time by an internalboardMemberId. The server pulls name/email/phone from the linked board-member's user record automatically.
Common fields exposed on the interface: id, name, email, phoneNumber.
Note:
boardMemberIdrefers to an internalAdministratorrecord — not the same thing as aMemberyou see in themembersquery. The administrator IDs are managed in the Unioo platform; you'll need to obtain them through the platform UI or a separate channel before you can calladdTicketInspectorwithtype: BoardMember. For typical integrations, prefer external inspectors with explicit name/email/phone unless you have a workflow that produces the administrator ID.
You can't remove a ticket inspector who has already checked in tickets — the server rejects with Cannot remove ticket inspector, who has already checked-in tickets.
Where to query / mutate
- Read: Querying ticket holders. Ticket specifications and inspectors are exposed as fields on
Event— see Querying events. - Write: Ticket specifications, Ticket inspectors.