openapi: 3.1.0 info: title: TicketSource API version: '1.1' description: The OpenAPI specification for the TicketSource API contact: name: TicketSource Support url: 'https://www.ticketsource.co.uk/help' email: support@ticketsource.co.uk termsOfService: 'https://www.ticketsource.co.uk/kb/terms-of-use/terms-and-conditions' servers: - url: 'https://api.ticketsource.io' description: Live Server paths: /events: get: summary: List all Events responses: '200': description: OK content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Event' operationId: get-events description: List paginated Events. security: - BearerToken: [] parameters: - $ref: '#/components/parameters/per_page' - $ref: '#/components/parameters/page' tags: - Events '/events/{EventId}': parameters: - $ref: '#/components/parameters/EventId' get: summary: Get an Event tags: - Events responses: '200': description: OK content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Event' '404': $ref: '#/components/responses/NotFound' operationId: get-event description: Get an individual Event record security: - BearerToken: [] '/events/{EventId}/venues': parameters: - $ref: '#/components/parameters/EventId' get: summary: List all Venues for an Event tags: - Events - Venues responses: '200': description: OK content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Venue' '404': $ref: '#/components/responses/NotFound' operationId: get-event-venues security: - BearerToken: [] description: List paginated Venues for a given Event parameters: - $ref: '#/components/parameters/per_page' - $ref: '#/components/parameters/page' '/events/{EventId}/dates': parameters: - name: EventId in: path required: true schema: type: string description: The unique identifier for a Event record get: summary: List all Dates for an Event responses: '200': description: OK content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Date' '404': $ref: '#/components/responses/NotFound' operationId: get-event-dates security: - BearerToken: [] description: List paginated Dates for a given Event parameters: - $ref: '#/components/parameters/per_page' - $ref: '#/components/parameters/page' tags: - Events - Performances '/venues/{VenueId}': parameters: - $ref: '#/components/parameters/VenueId' get: summary: Get a Venue responses: '200': description: OK content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Venue' '404': $ref: '#/components/responses/NotFound' operationId: get-venue description: Get an individual Venue record security: - BearerToken: [] tags: - Events - Venues '/venues/{VenueId}/dates': parameters: - $ref: '#/components/parameters/VenueId' get: summary: List all Dates for a Venue responses: '200': description: OK content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Date' '404': $ref: '#/components/responses/NotFound' operationId: get-venue-dates security: - BearerToken: [] description: List paginated Dates for a given Venue parameters: - $ref: '#/components/parameters/per_page' - $ref: '#/components/parameters/page' tags: - Events - Performances '/dates/{DateId}': parameters: - $ref: '#/components/parameters/DateId' get: summary: Get a Date responses: '200': description: OK content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Date' '404': $ref: '#/components/responses/NotFound' operationId: get-date description: Get an individual Date record security: - BearerToken: [] tags: - Events - Performances '/dates/{DateId}/bookings': parameters: - $ref: '#/components/parameters/DateId' get: summary: List all Bookings for a Date responses: '200': description: OK content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Booking' links: type: object properties: first: type: string last: type: string prev: type: string next: type: string meta: type: object properties: current_page: type: integer from: type: integer path: type: string per_page: type: integer to: type: integer '404': $ref: '#/components/responses/NotFound' operationId: get-date-bookings description: List paginated Bookings for a given Date parameters: - $ref: '#/components/parameters/per_page' - $ref: '#/components/parameters/page' security: - BearerToken: [] tags: - Bookings - Tickets /customers: get: summary: List all Customers responses: '200': description: OK content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Customer' operationId: get-customers description: List paginated Customers. security: - BearerToken: [] parameters: - $ref: '#/components/parameters/per_page' - $ref: '#/components/parameters/page' tags: - Customers parameters: [] post: summary: Create Customer operationId: post-customer responses: '201': description: Created content: application/json: schema: type: object description: The created Customer record properties: data: $ref: '#/components/schemas/Customer' '400': $ref: '#/components/responses/BadRequest' description: Create a Customer record tags: - Customers security: - BearerToken: [] requestBody: content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Customer' description: '' '/customers/{CustomerId}': parameters: - $ref: '#/components/parameters/CustomerId' get: summary: Get a Customer tags: - Customers responses: '200': description: OK content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Customer' '404': $ref: '#/components/responses/NotFound' operationId: get-customer description: Get an individual Customer record security: - BearerToken: [] patch: summary: Update Customer operationId: patch-customer responses: '200': description: OK content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Customer' '400': $ref: '#/components/responses/BadRequest' '404': $ref: '#/components/responses/NotFound' description: Update an existing Customer record security: - BearerToken: [] requestBody: content: application/json: schema: type: object properties: data: allOf: - $ref: '#/components/schemas/Customer' x-stoplight: id: ccmnlojcyy7ws - type: object x-stoplight: id: mmko6mknegpsc properties: id: type: string x-stoplight: id: 0px63wher8uu1 writeOnly: true tags: - Customers delete: summary: Delete Customer operationId: delete-customer responses: '204': $ref: '#/components/responses/NoContent' '404': $ref: '#/components/responses/NotFound' description: Delete an existing Customer record security: - BearerToken: [] tags: - Customers '/customers/{CustomerId}/notes': parameters: - $ref: '#/components/parameters/CustomerId' get: summary: List all Notes for a Customer responses: '200': description: OK content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/CustomerNote' links: type: object properties: first: type: string last: type: string prev: type: string next: type: string meta: type: object properties: current_page: type: integer from: type: integer path: type: string per_page: type: integer to: type: integer '404': $ref: '#/components/responses/NotFound' operationId: get-customer-notes description: List paginated Notes for a given Customer record parameters: - $ref: '#/components/parameters/per_page' - $ref: '#/components/parameters/page' security: - BearerToken: [] tags: - Customers post: summary: Create Customer Note operationId: post-customer-note responses: '201': description: Created content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/CustomerNote' '400': $ref: '#/components/responses/BadRequest' '404': $ref: '#/components/responses/NotFound' description: Create a Customer Note record for a given Customer security: - BearerToken: [] tags: - Customers requestBody: content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/CustomerNote' '/customers/{CustomerId}/notes/{CustomerNoteId}': parameters: - $ref: '#/components/parameters/CustomerId' - $ref: '#/components/parameters/CustomerNoteId' get: summary: Get a Customer Note tags: - Customers responses: '200': description: OK content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/CustomerNote' '404': $ref: '#/components/responses/NotFound' operationId: get-customer-note description: Get an individual Customer record security: - BearerToken: [] delete: summary: Delete Customer operationId: delete-customer-note responses: '204': $ref: '#/components/responses/NoContent' '404': $ref: '#/components/responses/NotFound' description: Delete an existing Customer Note record security: - BearerToken: [] tags: - Customers '/customers/{CustomerId}/bookings': parameters: - $ref: '#/components/parameters/CustomerId' get: summary: List all Bookings for a Customer responses: '200': description: OK content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Booking' links: type: object properties: first: type: string last: type: string prev: type: string next: type: string meta: type: object properties: current_page: type: integer from: type: integer path: type: string per_page: type: integer to: type: integer '404': $ref: '#/components/responses/NotFound' operationId: get-customer-bookings description: List paginated Bookings for a given Customer parameters: - $ref: '#/components/parameters/per_page' - $ref: '#/components/parameters/page' security: - BearerToken: [] tags: - Bookings - Tickets '/bookings/{BookingId}': parameters: - $ref: '#/components/parameters/BookingId' get: summary: Get a Booking tags: - Bookings - Tickets responses: '200': description: OK content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Booking' '404': $ref: '#/components/responses/NotFound' operationId: get-booking description: Get an individual Booking record security: - BearerToken: [] '/bookings/{BookingId}/seats': parameters: - $ref: '#/components/parameters/BookingId' get: summary: List all Seats for a Booking responses: '200': description: OK content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Seat' links: type: object properties: first: type: string last: type: string prev: type: string next: type: string meta: type: object properties: current_page: type: integer from: type: integer path: type: string per_page: type: integer to: type: integer '404': $ref: '#/components/responses/NotFound' operationId: get-booking-seats description: List paginated Seats for a given Booking parameters: - $ref: '#/components/parameters/per_page' - $ref: '#/components/parameters/page' security: - BearerToken: [] tags: - Bookings - Tickets - Seats '/seats/{SeatId}': parameters: - $ref: '#/components/parameters/SeatId' get: summary: Get a Seat tags: - Bookings - Tickets - Seats responses: '200': description: OK content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Seat' '404': $ref: '#/components/responses/NotFound' operationId: get-seat description: Get an individual Seat record security: - BearerToken: [] components: schemas: Event: title: Event type: object properties: id: type: string type: type: string attributes: type: object properties: name: type: string reference: type: string description: type: string comment: type: string keywords: type: string terms: type: string category: type: string genre: type: string images: type: array items: type: object properties: type: type: string src: type: string third_party_consent: type: object properties: capture: type: boolean name: type: string show_consent: type: object properties: email: type: boolean post: type: boolean sms: type: boolean activated: type: boolean archived: type: boolean public: type: boolean created_at: type: string example: '2022-09-26T09:00:00+00:00' format: date-time readOnly: true updated_at: type: - string - 'null' example: '2022-09-26T09:00:00+00:00' format: date-time readOnly: true links: type: object properties: self: type: string readOnly: true venues: type: string readOnly: true dates: type: string readOnly: true readOnly: true description: An Event which can have multiple Venues and Dates associated with it. Venue: title: Venue type: object description: A Venue belonging to an Event that can have multiple Dates associated with it. properties: id: type: string type: type: string attributes: type: object properties: name: type: string address: type: object properties: line_1: type: string line_2: type: string line_3: type: string line_4: type: string postcode: type: string boxoffice: type: object properties: telephone: type: string email: type: string created_at: type: string example: '2022-09-26T09:00:00+00:00' format: date-time readOnly: true updated_at: type: - string - 'null' example: '2022-09-26T09:00:00+00:00' format: date-time readOnly: true links: type: object properties: self: type: string readOnly: true dates: type: string readOnly: true event: type: string readOnly: true readOnly: true Date: title: Date type: object description: A Date representing a single datetime performance of an Event at a Venue properties: id: type: string type: type: string attributes: type: object properties: doors_open: type: string start: type: string end: type: string on_sale: type: boolean on_sale_start: type: string on_sale_end: type: string public: type: boolean cancelled: type: boolean created_at: type: string example: '2022-09-26T09:00:00+00:00' format: date-time readOnly: true updated_at: type: - string - 'null' example: '2022-09-26T09:00:00+00:00' format: date-time readOnly: true links: type: object properties: self: type: string readOnly: true book_now: type: string readOnly: true bookings: type: string readOnly: true event: type: string readOnly: true venue: type: string readOnly: true readOnly: true Booking: type: object title: Booking examples: [] description: 'A Booking including cost, discount and donation details.' properties: id: type: string pattern: 'bkg-[a-zA-Z0-9]+' example: bkg-xZVrM6valQGb3gPq readOnly: true type: type: string example: booking default: booking enum: - booking readOnly: true attributes: type: object properties: ref: type: string pattern: '[a-zA-Z0-9]{6}' example: A12BCD lines: type: array items: type: object properties: line_type: type: string enum: - TICKETS - DONATION - SUNDRY example: TICKETS readOnly: true payment_method: type: string enum: - TS - STRIPE example: TS readOnly: true is_refund: type: boolean default: false readOnly: true amount: type: object properties: gross: type: number example: 10 format: double readOnly: true fee: type: number example: 0.65 format: double readOnly: true fee_vat: type: number example: 0.65 format: double readOnly: true net: type: number format: double example: 9.22 readOnly: true discounts: type: object properties: automatic: type: number readOnly: true code: type: object properties: description: type: string example: '' readOnly: true amount: type: number format: double example: 0 readOnly: true created_at: type: string format: date-time example: '2022-09-26T09:00:00+00:00' readOnly: true updated_at: type: - string - 'null' format: date-time example: '2022-09-27T09:00:00+00:00' readOnly: true created_at: type: string example: '2022-09-26T09:00:00+00:00' format: date-time readOnly: true updated_at: type: string example: '2022-09-27T09:00:00+00:00' format: date-time readOnly: true consent: type: object properties: third_party: type: string example: Visiting Company email: type: boolean post: type: boolean sms: type: boolean user_booked_by: type: string example: Staff Member links: type: object properties: self: type: string format: uri example: 'https://api.ticketsource.io/bookings/bkg-xZVrM6valQGb3gPq' readOnly: true seats: type: string format: uri example: 'https://api.ticketsource.io/bookings/bkg-xZVrM6valQGb3gPq/seats' readOnly: true customer: type: string format: uri example: 'https://api.ticketsource.io/customers/cst-dQyWKER4Orw5glVX' readOnly: true date: type: string format: uri example: 'https://api.ticketsource.io/dates/dat-41wq7kmW7YxRp2ov' readOnly: true Seat: title: Seat type: object description: A Seat representing a seat or place in a booking with or without reference. properties: id: type: string pattern: 'sea-[a-zA-Z0-9]+' example: sea-ALd2DZ1AWyrBlz5o type: type: string default: seat pattern: ^seat$ example: seat enum: - seat attributes: type: object properties: is_booked: type: boolean is_cancelled: type: boolean reference: type: object properties: row: type: - string - 'null' seat: type: - string - 'null' price_category: type: string attendee: type: object properties: title: type: string first_name: type: string last_name: type: string company: type: object properties: name: type: string title: type: string telephone: type: string email: type: string created_at: type: string example: '2022-09-26T09:00:00+00:00' format: date-time readOnly: true updated_at: type: - string - 'null' example: '2022-09-26T09:00:00+00:00' format: date-time readOnly: true links: type: object properties: self: type: string readOnly: true booking: type: string readOnly: true readOnly: true Customer: title: Customer type: object description: 'A Customer including contact details, membership information and marketing consent.' properties: id: type: string example: cst-dQyWKER4Orw5glVX readOnly: true type: type: string example: customer enum: - customer default: customer pattern: ^customer$ attributes: type: object properties: title: type: - string - 'null' deprecated: true description: No longer in use in the TicketSource system. example: null first_name: type: - string - 'null' example: Ticket last_name: type: - string - 'null' example: Purchaser address: type: - object - 'null' properties: line_1: type: - string - 'null' example: TicketSource line_2: type: - string - 'null' example: Off Edge line_3: type: - string - 'null' example: Station Approach line_4: type: - string - 'null' example: Penarth postcode: type: - string - 'null' example: CF64 3EE telephone: type: - string - 'null' example: '+443336664466' phone: type: - string - 'null' description: See 'telephone' deprecated: true email: type: - string - 'null' format: email example: support@ticketsource.co.uk membership: type: - object - 'null' properties: identifier: type: - string - 'null' example: AMEMBER042 maxLength: 20 start_date: type: - string - 'null' format: date-time example: '2022-09-26T09:00:00+00:00' end_date: type: - string - 'null' example: '2023-09-26T09:00:00+00:00' format: date-time consent: type: object properties: email: type: boolean default: false post: type: boolean default: false sms: type: boolean default: false created_at: type: string example: '2022-09-26T09:00:00+00:00' format: date-time readOnly: true updated_at: type: - string - 'null' example: '2022-09-26T09:00:00+00:00' format: date-time readOnly: true links: type: object properties: self: type: string format: uri example: 'https://api.ticketsource.io/customers/cst-dQyWKER4Orw5glVX' readOnly: true bookings: type: string format: uri example: 'https://api.ticketsource.io/customers/cst-dQyWKER4Orw5glVX/bookings' readOnly: true notes: type: string format: uri example: 'https://api.ticketsource.io/customers/cst-dQyWKER4Orw5glVX/notes' readOnly: true readOnly: true CustomerNote: title: CustomerNote type: object description: A Customer Note against a specific Customer record. properties: id: type: string example: csn-47azjpMWXREgVQN8 pattern: 'csn-[a-zA-Z0-9]+' readOnly: true type: type: string pattern: ^customer_note$ example: customer_note enum: - customer_note default: customer_note attributes: type: object properties: description: type: string example: Customer requires extra leg room created_by: type: string example: Staff Member created_at: type: string example: '2022-09-26T09:00:00+00:00' format: date-time readOnly: true updated_at: type: - string - 'null' format: date-time default: null readOnly: true links: type: object properties: self: type: string format: uri example: 'https://api.ticketsource.io/customers/cst-dQyWKER4Orw5glVX/notes/csn-47azjpMWXREgVQN8' readOnly: true customer: type: string example: 'https://api.ticketsource.io/customers/cst-dQyWKER4Orw5glVX' format: uri readOnly: true readOnly: true securitySchemes: BearerToken: type: http scheme: bearer description: Your TicketSource API key can be used as a bearer token. examples: {} parameters: DateId: name: DateId in: path required: true schema: type: string pattern: 'dat-[a-zA-Z0-9]+' example: dat-7QKrj94mdZXO5qJ8 description: The unique identifier for a Date record per_page: name: per_page in: query required: false schema: type: integer default: 10 format: int32 example: 15 maximum: 100 minimum: 1 description: Number of results to return in each paginated list response style: form page: name: page in: query required: false schema: type: integer default: 1 format: int32 example: 2 minimum: 1 description: The page requested in a paginated list request style: form BookingId: name: BookingId in: path required: true schema: type: string pattern: 'bkg-[a-zA-Z0-9]+' example: bkg-xZVrM6valQGb3gPq description: The unique identifier for a Booking record CustomerId: name: CustomerId in: path required: true schema: type: string pattern: 'cst-[a-zA-Z0-9]+' example: cst-dQyWKER4Orw5glVX description: The unique identifier for a Customer record CustomerNoteId: name: CustomerNoteId in: path required: true schema: type: string pattern: 'csn-[a-zA-Z0-9]+' example: csn-47azjpMWXREgVQN8 description: The unique identifier for a Customer Note record EventId: name: EventId in: path required: true schema: type: string example: evt-v4ExP8k8N1AQ5NgB pattern: 'evt-[a-zA-Z0-9]+' description: The unique identifier for a Event record VenueId: name: VenueId in: path required: true schema: type: string example: ven-v3y0OG7oml9QRjZ5 pattern: 'ven-[a-zA-Z0-9]+' description: The unique identifier for a Venue record SeatId: name: SeatId in: path required: true schema: type: string example: sea-ALd2DZ1AWyrBlz5o pattern: 'sea-[a-zA-Z0-9]+' description: The unique identifier for a Seat record responses: BadRequest: description: 400 Bad Request content: application/json: schema: type: object properties: errors: type: array items: type: object properties: id: type: string links: type: object properties: about: type: string status: type: integer default: 400 readOnly: true code: type: string default: validation_failed readOnly: true title: type: string default: Bad Request readOnly: true detail: type: string readOnly: true examples: {} headers: {} NotFound: description: 404 Not Found content: application/json: schema: type: object properties: errors: type: array items: type: object properties: id: type: string links: type: object properties: about: type: string status: type: integer default: 404 readOnly: true code: type: string default: not_found readOnly: true title: type: string default: Not Found readOnly: true detail: type: string default: The item you are looking for can't be found. readOnly: true examples: {} headers: {} TooManyRequests: description: 429 Too Many Requests content: application/json: schema: type: object properties: errors: type: array items: type: object properties: id: type: string links: type: object properties: about: type: string status: type: integer default: 429 readOnly: true code: type: string default: rate_limit readOnly: true title: type: string default: Too Many Requests readOnly: true detail: type: string default: 'You have made too many requests, check the response headers for more details.' headers: {} NoContent: description: Example response content: application/json: schema: properties: id: type: string tags: - name: Booking - name: Bookings - name: Customer - name: Customers - name: Date - name: Dates - name: Event - name: Events - name: Performance - name: Performances - name: Seat - name: Seats - name: Ticket - name: Tickets - name: Venue - name: Venues security: - BearerToken: []