{"lexicon":1,"id":"tickets.atmosphere.createTicketType","defs":{"main":{"type":"procedure","description":"Create an organizer-owned ATM ticket type and optional public ticket-type record refs for an event.","input":{"encoding":"application/json","schema":{"type":"object","required":["organizerDid","event","title","currency","unitAmount"],"properties":{"environment":{"type":"string","knownValues":["test","live"],"maxLength":16},"organizerDid":{"type":"string","format":"did"},"organizerAssertionJwt":{"type":"string","description":"Optional short-lived user service-auth JWT from organizerDid to ATM, scoped to tickets.atmosphere.createTicketType. Proves the app is configuring ticketing with organizer consent.","maxLength":8192},"event":{"type":"ref","ref":"tickets.atmosphere.defs#eventInput"},"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,"maximum":2000000,"description":"Amount in the smallest unit of currency. 0 creates a free ticket type (claimed via tickets.atmosphere.claimFreeTicket); paid ticket types must meet the processor minimum charge or the call fails with InvalidAmount."},"maxPerOrder":{"type":"integer","minimum":1,"maximum":50},"saleStartsAt":{"type":"string","format":"datetime"},"saleEndsAt":{"type":"string","format":"datetime"},"ticketTypeRef":{"type":"ref","ref":"com.atproto.repo.strongRef"},"productRef":{"type":"ref","ref":"com.atproto.repo.strongRef"},"priceRef":{"type":"ref","ref":"com.atproto.repo.strongRef"},"metadata":{"type":"unknown"},"visibility":{"type":"string","knownValues":["public","hidden"],"maxLength":16,"description":"Private buyer-facing visibility (default public). Hidden types are excluded from availability and buyer surfaces until unlocked by a ticket access code; organizer surfaces always see them."},"quantityTotal":{"type":"integer","minimum":1,"maximum":250000,"description":"Optional per-type cap. Omit for an unlimited type (the default). An event capacity set via tickets.atmosphere.setEventCapacity additionally bounds every type."}}}},"output":{"encoding":"application/json","schema":{"type":"object","required":["event","ticketType"],"properties":{"event":{"type":"ref","ref":"tickets.atmosphere.defs#eventSummary"},"ticketType":{"type":"ref","ref":"tickets.atmosphere.defs#ticketTypeSummary"}}}},"errors":[{"name":"AppNotRegistered","description":"Caller DID is not registered as an ATM app."},{"name":"TicketsModuleDisabled","description":"This app has not enabled ATM Tickets."},{"name":"OrganizerNotRegistered","description":"Organizer has not signed in to ATM yet."},{"name":"PaymentSetupIncomplete","description":"Organizer has not finished ATM payment setup."},{"name":"OrganizerConsentRequired","description":"A verified organizer authorization (organizerAssertionJwt) is required to configure ticketing for this organizer."},{"name":"OrganizerReassignmentNotAllowed","description":"This event already belongs to a different organizer; a fresh organizer authorization is required to reassign it."},{"name":"InvalidAmount","description":"Ticket price is invalid: negative, above the maximum, or a paid amount below the processor minimum charge (use 0 for free ticket types)."},{"name":"InvalidCapacity","description":"Ticket quantity must be at least 1."},{"name":"UserDidMismatch","description":"organizerAssertionJwt issuer does not match organizerDid."}]}}}