{"lexicon":1,"id":"tickets.atmosphere.ticketType","defs":{"main":{"type":"record","key":"any","description":"Organizer-owned portable ticket type metadata for an AT Protocol event. Apps can read the ticket type config, but current availability, holds, issued tickets, and scan state remain private ATM service state.","record":{"type":"object","required":["event","title","createdAt"],"properties":{"event":{"type":"ref","ref":"com.atproto.repo.strongRef","description":"CID-pinned strongRef to the canonical public community.lexicon.calendar.event record."},"title":{"type":"string","minLength":1,"maxGraphemes":100,"maxLength":1000},"description":{"type":"string","maxGraphemes":1000,"maxLength":10000},"currency":{"type":"string","minLength":3,"maxLength":3,"description":"Deprecated display copy retained for readers of early records; canonical pricing belongs on the money.atmosphere.price referenced by defaultPrice. Lowercase currency code."},"unitAmount":{"type":"integer","minimum":0,"description":"Deprecated display copy retained for readers of early records; canonical pricing belongs on the money.atmosphere.price referenced by defaultPrice. 0 continues to mark a free ticket type (claimed via tickets.atmosphere.claimFreeTicket, not checkout)."},"quantityTotal":{"type":"integer","minimum":1,"maximum":250000,"description":"Display hint: the type's configured cap. Omitted when uncapped or undisclosed. Authoritative availability always comes from the availability query; capacity is enforced only in private ATM service state."},"maxPerOrder":{"type":"integer","minimum":1,"maximum":50,"description":"Organizer-configured per-order limit for this ticket type. Apps must still check live ATM availability before checkout."},"product":{"type":"ref","ref":"com.atproto.repo.strongRef","description":"Optional CID-pinned strongRef to the canonical money.atmosphere.product with kind=ticket for this ticket type in the organizer repo. Optional in the record so free/RSVP ticket types stay a single record, but tickets.atmosphere.createTicketType requires it for a PAID type. When present the Product owns catalog presentation and points at the current immutable money.atmosphere.price; checkout still lists on this ticketType record URI, never on the Product or the price."},"defaultPrice":{"type":"ref","ref":"com.atproto.repo.strongRef","description":"Optional CID-pinned strongRef to the current money.atmosphere.price for this ticket type in the organizer repo. Legacy direct pricing retained for readers of records written before ticket types could carry a Product: when product is present, economics resolve through that Product's current defaultPrice and this field is not additionally authoritative. Absent means the type is published without catalog pricing; ATM private configuration remains settlement truth. Checkout always lists on this ticketType record URI, never on the price."},"saleStartsAt":{"type":"string","format":"datetime"},"saleEndsAt":{"type":"string","format":"datetime"},"archived":{"type":"boolean","description":"True when this ticket type is archived. Omitted or false means it is not archived."},"archivedAt":{"type":"string","format":"datetime"},"createdAt":{"type":"string","format":"datetime"},"updatedAt":{"type":"string","format":"datetime"}}}}}}