{"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","currency","unitAmount","createdAt"],"properties":{"event":{"type":"ref","ref":"com.atproto.repo.strongRef"},"title":{"type":"string","minLength":1,"maxGraphemes":100,"maxLength":1000},"description":{"type":"string","maxGraphemes":1000,"maxLength":10000},"currency":{"type":"string","minLength":3,"maxLength":3,"description":"Lowercase ISO 4217 currency code, matching money.atmosphere.price."},"unitAmount":{"type":"integer","minimum":0,"description":"Amount in the smallest unit of currency. 0 marks 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"},"price":{"type":"ref","ref":"com.atproto.repo.strongRef"},"saleStartsAt":{"type":"string","format":"datetime"},"saleEndsAt":{"type":"string","format":"datetime"},"archived":{"type":"boolean"},"createdAt":{"type":"string","format":"datetime"},"updatedAt":{"type":"string","format":"datetime"}}}}}}