{"info":{"title":"Ticket Place API","version":"1.0.0","license":{"url":"https://www.ticketplace.vip/","name":"Proprietary"},"description":"Organizer API for Ticket Place. Coupons, attendee messaging, per-date add/remove, featured events, venue editing, Stripe Connect onboarding and payouts, API key management, password changes, and account deletion are excluded. Human-only account and payment actions must be completed in the browser."},"paths":{"/orders/{purchase_id}":{"get":{"tags":["Orders"],"operationId":"getOrder","responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"500":{"$ref":"#/components/responses/InternalError"},"403":{"$ref":"#/components/responses/Forbidden"},"200":{"$ref":"#/components/responses/Order"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Get an organizer-owned order"},"parameters":[{"in":"path","required":true,"schema":{"type":"integer","minimum":1},"name":"purchase_id"}]},"/events/{event_id}/photos":{"post":{"description":"Accepts JPEG, PNG, or WebP bytes up to 5 MiB. The file type is detected from its magic bytes; remote URLs are not fetched.","summary":"Upload an event photo","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadPhotoRequest"}}}},"tags":["Events"],"operationId":"uploadEventPhoto","responses":{"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"422":{"$ref":"#/components/responses/ValidationError"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"500":{"$ref":"#/components/responses/InternalError"},"401":{"$ref":"#/components/responses/Unauthorized"},"201":{"$ref":"#/components/responses/Photo"},"403":{"$ref":"#/components/responses/Forbidden"}}},"parameters":[{"name":"event_id","schema":{"minimum":1,"type":"integer"},"required":true,"in":"path"}]},"/events/{event_id}/publish":{"parameters":[{"in":"path","required":true,"name":"event_id","schema":{"minimum":1,"type":"integer"}}],"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmRequest"}}}},"tags":["Events"],"responses":{"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"422":{"$ref":"#/components/responses/ValidationError"},"500":{"$ref":"#/components/responses/InternalError"},"401":{"$ref":"#/components/responses/Unauthorized"},"200":{"$ref":"#/components/responses/GenericData"},"403":{"$ref":"#/components/responses/Forbidden"}},"operationId":"publishEvent","summary":"Preview or publish an event","description":"Only events at status 6 or 7 can be published. The preview includes the public URL, dates, tiers, prices, and warnings."}},"/orders/{purchase_id}/refund":{"parameters":[{"name":"purchase_id","schema":{"minimum":1,"type":"integer"},"required":true,"in":"path"}],"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmRequest"}}}},"operationId":"refundOrder","summary":"Preview or refund an order","description":"Requires payments:write. Confirmed refunds require Idempotency-Key and count toward a daily limit of 20 per organizer. Stripe is called only when the purchase has a payment intent.","parameters":[{"schema":{"maxLength":80,"type":"string"},"name":"Idempotency-Key","in":"header"}],"tags":["Orders"],"responses":{"422":{"$ref":"#/components/responses/ValidationError"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"502":{"$ref":"#/components/responses/RefundFailed"},"500":{"$ref":"#/components/responses/InternalError"},"409":{"$ref":"#/components/responses/Conflict"},"403":{"$ref":"#/components/responses/Forbidden"},"400":{"$ref":"#/components/responses/BadRequest"},"200":{"$ref":"#/components/responses/GenericData"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/events":{"post":{"responses":{"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"400":{"$ref":"#/components/responses/BadRequest"},"403":{"$ref":"#/components/responses/Forbidden"},"201":{"$ref":"#/components/responses/Event"},"401":{"$ref":"#/components/responses/Unauthorized"}},"operationId":"createEventDraft","tags":["Events"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventRequest"}}}},"description":"Creates a status-7 draft with event dates, ticket tiers, and inventory. Online and on-demand events use venue 3. The featured field is not supported.","summary":"Create a complete draft event"},"get":{"summary":"List the authenticated organizer's events","parameters":[{"in":"query","name":"status","schema":{"type":"string","enum":["draft","published","deactivated"]}},{"schema":{"type":"integer","minimum":1},"name":"cursor","in":"query"},{"in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"name":"limit"}],"tags":["Events"],"operationId":"listEvents","responses":{"200":{"$ref":"#/components/responses/EventList"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/events/{event_id}/tiers/{tier_id}":{"parameters":[{"in":"path","required":true,"schema":{"minimum":1,"type":"integer"},"name":"event_id"},{"name":"tier_id","schema":{"minimum":1,"type":"integer"},"in":"path","required":true}],"patch":{"description":"Available only when 5 < event.status < 8. Quantity is not editable; only unsold tickets are repriced.","summary":"Update ticket tier details and price","tags":["Events"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTierRequest"}}}},"operationId":"updateTicketTier","responses":{"500":{"$ref":"#/components/responses/InternalError"},"422":{"$ref":"#/components/responses/ValidationError"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"403":{"$ref":"#/components/responses/Forbidden"},"200":{"$ref":"#/components/responses/Event"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/check-in":{"post":{"summary":"Redeem a ticket","description":"Uses the first 20 code characters and trailing ticket ID. Status 2 or 4 changes to 5. Supports Idempotency-Key.","responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"200":{"$ref":"#/components/responses/GenericData"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"$ref":"#/components/responses/Conflict"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"422":{"$ref":"#/components/responses/ValidationError"},"500":{"$ref":"#/components/responses/InternalError"}},"tags":["Orders"],"parameters":[{"schema":{"maxLength":80,"type":"string"},"name":"Idempotency-Key","in":"header"}],"operationId":"checkInTicket","requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["event_time_id","code"],"properties":{"event_time_id":{"minimum":1,"type":"integer"},"code":{"minLength":21,"type":"string"}}}}},"required":true}}},"/events/{event_id}/attendees":{"parameters":[{"schema":{"minimum":1,"type":"integer"},"name":"event_id","in":"path","required":true},{"in":"query","name":"event_time_id","schema":{"type":"integer","minimum":1}},{"in":"query","name":"cursor","schema":{"type":"integer","minimum":1}},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"get":{"operationId":"listAttendees","responses":{"422":{"$ref":"#/components/responses/ValidationError"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"403":{"$ref":"#/components/responses/Forbidden"},"200":{"$ref":"#/components/responses/AttendeeList"},"401":{"$ref":"#/components/responses/Unauthorized"}},"tags":["Attendees"],"summary":"List attendees for an owned event","description":"Returns only the fields shown on the organizer attendee page."}},"/events/{event_id}":{"patch":{"description":"Requires event status greater than 5. Event mode and venue assignment cannot be changed.","summary":"Update editable event details","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEventRequest"}}}},"tags":["Events"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"200":{"$ref":"#/components/responses/Event"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"422":{"$ref":"#/components/responses/ValidationError"}},"operationId":"updateEvent"},"get":{"summary":"Get an organizer-owned event","responses":{"429":{"$ref":"#/components/responses/RateLimited"},"404":{"$ref":"#/components/responses/NotFound"},"401":{"$ref":"#/components/responses/Unauthorized"},"500":{"$ref":"#/components/responses/InternalError"},"403":{"$ref":"#/components/responses/Forbidden"},"200":{"$ref":"#/components/responses/Event"}},"operationId":"getEvent","tags":["Events"]},"parameters":[{"required":true,"in":"path","schema":{"minimum":1,"type":"integer"},"name":"event_id"}]},"/events/{event_id}/photos/{photo_id}":{"delete":{"operationId":"deleteEventPhoto","responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"200":{"$ref":"#/components/responses/GenericData"},"429":{"$ref":"#/components/responses/RateLimited"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"500":{"$ref":"#/components/responses/InternalError"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmRequest"}}},"required":true},"tags":["Events"],"summary":"Preview or delete an event photo"},"parameters":[{"schema":{"minimum":1,"type":"integer"},"name":"event_id","in":"path","required":true},{"required":true,"in":"path","schema":{"type":"integer","minimum":1},"name":"photo_id"}]},"/account":{"get":{"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"500":{"$ref":"#/components/responses/InternalError"},"403":{"$ref":"#/components/responses/Forbidden"},"200":{"description":"Organizer profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"operationId":"getAccount","tags":["Account"],"summary":"Get the authenticated organizer profile"}},"/events/{event_id}/deactivate":{"post":{"tags":["Events"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmRequest"}}}},"responses":{"429":{"$ref":"#/components/responses/RateLimited"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"500":{"$ref":"#/components/responses/InternalError"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"200":{"$ref":"#/components/responses/GenericData"}},"operationId":"deactivateEvent","summary":"Preview or deactivate an event","description":"The preview shows tickets sold. Events with sales are hidden and their active sales end; events without sales are deactivated and reserved tickets are released."},"parameters":[{"in":"path","required":true,"schema":{"minimum":1,"type":"integer"},"name":"event_id"}]}},"servers":[{"url":"https://www.ticketplace.vip/api/v1"}],"components":{"responses":{"GenericData":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericDataResponse"}}},"description":"Operation result or confirmation preview."},"Order":{"description":"An organizer-owned order.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderResponse"}}}},"PayloadTooLarge":{"description":"The request or uploaded file exceeds its size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Forbidden":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The API key lacks the required scope."},"RefundFailed":{"description":"Stripe rejected the refund. The Stripe message is returned and recorded in refund_log.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"AttendeeList":{"description":"A paginated attendee list.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"items":{"$ref":"#/components/schemas/AttendeeResponse"},"type":"array"},"next_cursor":{"type":["integer","null"]}}}}}},"ValidationError":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The request failed validation."},"Photo":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhotoResponse"}}},"description":"The uploaded photo and its URL."},"InternalError":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Missing, invalid, expired, revoked, or inactive-organizer API key."},"NotFound":{"description":"The organizer-owned resource was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Conflict":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The request conflicts with current resource state or an idempotency key."},"Event":{"description":"An event response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}}},"RateLimited":{"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until the rate-limit window resets."}},"description":"The API key exceeded 60 requests per minute or the organizer reached the daily refund cap.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"EventList":{"description":"A paginated event list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventListResponse"}}}},"BadRequest":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Malformed or incomplete request."}},"securitySchemes":{"bearerAuth":{"bearerFormat":"Ticket Place API key","type":"http","scheme":"bearer"}},"schemas":{"GenericDataResponse":{"properties":{"data":{"type":"object"}},"required":["data"],"type":"object"},"PhotoResponse":{"properties":{"data":{"properties":{"id":{"type":"integer"},"name":{"type":"string"},"url":{"format":"uri","type":"string"}},"type":"object","required":["id","name","url"]}},"type":"object"},"EventListResponse":{"type":"object","required":["data"],"properties":{"next_cursor":{"type":["integer","null"]},"data":{"items":{"type":"object"},"type":"array"}}},"CreateEventRequest":{"properties":{"website":{"maxLength":255,"type":"string"},"tiers":{"maxItems":10,"type":"array","items":{"properties":{"sales_end":{"format":"date-time","type":"string"},"quantity":{"minimum":1,"maximum":10000,"type":"integer"},"name":{"maxLength":80,"type":"string","minLength":1},"description":{"type":"string","maxLength":500},"sales_start":{"type":"string","format":"date-time"},"price":{"minimum":0,"type":"number"}},"type":"object","required":["name","price","quantity"]},"minItems":1},"dates":{"items":{"type":"object","properties":{"sale_end":{"type":"string","format":"date-time"},"starts_at":{"type":"string","format":"date-time"}}},"minItems":1,"type":"array"},"recording_until":{"format":"date-time","type":"string"},"event_mode":{"enum":[0,1,2],"type":"integer"},"city":{"maxLength":45,"type":"string"},"venue_id":{"type":"integer","minimum":1,"default":3},"fee_to":{"enum":[1,2],"type":"integer"},"address":{"maxLength":255,"type":"string"},"zipcode":{"maxLength":45,"type":"string"},"state":{"type":"string","maxLength":45},"name":{"minLength":1,"type":"string","maxLength":255},"meeting_link":{"maxLength":500,"type":"string"},"refund_guarantee":{"type":"boolean","default":true},"recording_link":{"type":"string","maxLength":500},"description":{"minLength":1,"type":"string"},"venue_name":{"maxLength":99,"type":"string"},"country":{"maxLength":45,"type":"string"}},"type":"object","additionalProperties":false,"required":["name","description","fee_to","event_mode","dates","tiers"]},"UpdateTierRequest":{"additionalProperties":false,"type":"object","properties":{"name":{"maxLength":80,"minLength":1,"type":"string"},"description":{"type":"string","maxLength":500},"sales_end":{"format":"date-time","type":["string","null"]},"price":{"minimum":0,"type":"number"},"sales_start":{"type":["string","null"],"format":"date-time"}},"minProperties":1},"OrderResponse":{"properties":{"data":{"allOf":[{"$ref":"#/components/schemas/AttendeeResponse"},{"type":"object","properties":{"tickets":{"type":"array","items":{"type":"object"}},"amounts":{"type":"object"}}}]}},"type":"object"},"AccountResponse":{"properties":{"data":{"properties":{"name":{"type":["string","null"]},"email":{"type":["string","null"],"format":"email"},"stripe_connected":{"type":"boolean"}},"type":"object","required":["name","email","stripe_connected"]}},"type":"object"},"Error":{"properties":{"error":{"type":"object","required":["code","message"],"properties":{"settings_url":{"type":"string","format":"uri"},"code":{"type":"string"},"message":{"type":"string"}}}},"required":["error"],"type":"object"},"UploadPhotoRequest":{"properties":{"filename":{"type":"string","maxLength":255},"content_base64":{"type":"string","maxLength":6990508,"contentEncoding":"base64"}},"type":"object","additionalProperties":false,"required":["filename","content_base64"]},"AttendeeResponse":{"properties":{"name":{"type":["string","null"]},"ticket_type":{"type":"string"},"email":{"type":["string","null"],"format":"email"},"seats":{"type":["string","null"]},"purchase_id":{"type":"integer"},"purchased_at":{"type":["string","null"],"format":"date-time"},"refund_status":{"type":"string"},"ticket_count":{"type":"integer"}},"type":"object","required":["name","email","purchased_at","ticket_count","ticket_type","refund_status","purchase_id"]},"ConfirmRequest":{"properties":{"confirm":{"default":false,"type":"boolean"}},"type":"object","additionalProperties":false},"EventResponse":{"properties":{"data":{"properties":{"status":{"type":"string","enum":["draft","published","deactivated"]},"online":{"type":"object"},"name":{"type":"string"},"venue_id":{"type":"integer"},"fee_to":{"type":"integer","enum":[1,2]},"event_mode":{"enum":[0,1,2],"type":"integer"},"dates":{"type":"array","items":{"type":"object"}},"tiers":{"items":{"type":"object"},"type":"array"},"hidden":{"type":"boolean"},"public_url":{"type":"string","format":"uri"},"description":{"type":["string","null"]},"id":{"type":"integer"},"refund_guarantee":{"type":"boolean"},"setup_step":{"type":["integer","null"],"maximum":7,"minimum":2},"photos":{"items":{"type":"object"},"type":"array"},"venue":{"type":["object","null"]}},"required":["id","name","status","hidden","event_mode","dates","tiers","photos","refund_guarantee"],"type":"object"}},"type":"object"},"UpdateEventRequest":{"additionalProperties":false,"type":"object","minProperties":1,"properties":{"meeting_link":{"type":"string","maxLength":500},"name":{"maxLength":255,"minLength":1,"type":"string"},"state":{"maxLength":45,"type":"string"},"zipcode":{"type":"string","maxLength":45},"address":{"maxLength":255,"type":"string"},"city":{"type":"string","maxLength":45},"recording_until":{"format":"date-time","type":"string"},"website":{"type":"string","maxLength":255},"description":{"minLength":1,"type":"string"},"recording_link":{"maxLength":500,"type":"string"},"country":{"maxLength":45,"type":"string"},"venue_name":{"type":"string","maxLength":99},"refund_guarantee":{"type":"boolean"}}}}},"openapi":"3.1.0","tags":[{"description":"Organizer account details.","name":"Account"},{"name":"Events","description":"Read and manage organizer-owned events, ticket tiers, and photos."},{"name":"Attendees","description":"Read attendee and ticket details for organizer-owned events."},{"description":"Read orders, check in tickets, and preview or confirm refunds.","name":"Orders"}],"security":[{"bearerAuth":[]}]}