openapi: 3.0.3 info: version: v1.0.3 title: LE-KO Coach Calendar API license: name: private url: https:/le-ko.deggex.com contact: email: denis@deggex.awsapps.com description: LE-KO Coach Calendar API servers: - url: https://booking-{env}.le-ko.deggex.com/{basePath} description: Coach Calendar API. variables: basePath: default: v1 env: default: dev security: - bearerHttpAuthentication: [] tags: - name: hubs description: Coach Hub Page-based API - name: services description: Coach Services API - name: service-photos description: Coach Photos API - name: sessions description: Coach Sessions API - name: time-slots description: Coach Slots API - name: events description: Coach Events API - name: out-of-office-periods description: Out of Office API - name: payment-methods description: Coach Payment Methods API - name: payment-cards description: Coach Payment Cards API paths: /services/{serviceId}/hubs/public: get: operationId: getCoachHubPublicTimeslotsView summary: Get timeslots for coach hub description: | ✨ Retrieves timeslots of a specific service, grouping them by eligibility, age range, address, session type (personal/group), and skill levels. tags: - hubs parameters: - name: serviceId in: path required: true description: Unique identifier of the service for which to retrieve available timeslots schema: type: string format: uuid - name: timeslotIds in: query required: false description: Array of timeslot IDs schema: type: array items: $ref: '#/components/schemas/Id' style: form explode: false - name: userLatitude in: query required: false description: User latitude. Used for calculating distances schema: type: number format: double - name: userLongitude in: query required: false description: User longitude. Used for calculating distances schema: type: number format: double - $ref: '#/components/parameters/TraceparentHeader' responses: '200': description: Summary of timeslots for given service content: application/json: schema: $ref: '#/components/schemas/HubPublicTimeslotsView' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' '404': description: Service not found content: application/json: schema: $ref: '#/components/schemas/Error' /coaches/{coachId}/hubs/public: get: operationId: getCoachHubPublicView summary: Get content for the public view of a coach in coach hub description: ✨ Get content for the public view of a coach in coach hub tags: - hubs parameters: - name: coachId in: path required: true description: Id of specified Coach. schema: $ref: '#/components/schemas/CoachId' - name: userLatitude in: query required: false description: User latitude. Used for calculating distances schema: type: number format: double - name: userLongitude in: query required: false description: User longitude. Used for calculating distances schema: type: number format: double - $ref: '#/components/parameters/TraceparentHeader' responses: '200': description: Hub Services content: application/json: schema: type: array items: $ref: '#/components/schemas/HubPublicViewItem' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/hubs/coach-view: get: operationId: getCoachView summary: Get data for coach view of calendar description: ✨ Retrieve specific data for calendar screens as seen by a coach tags: - hubs parameters: - name: coachId in: path required: true description: ID of the coach schema: type: string format: uuid - name: startDate in: query required: true description: The start moment to filter coach events. schema: type: string format: date-time - name: endDate in: query required: true description: The end moment to filter coach events. schema: type: string format: date-time responses: '200': description: Coach events along with their details. content: application/json: schema: type: array items: $ref: '#/components/schemas/CalendarDataForCoachView' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/hubs/calendar: get: operationId: getCalendarListing summary: Get coach calendar listing description: ✨ Retrieve calendar slots and overlaps for a coach between two dates tags: - hubs parameters: - name: coachId in: path required: true description: ID of the coach schema: $ref: '#/components/schemas/Id' - name: athleteId in: query required: true description: ID of the athlete schema: $ref: '#/components/schemas/Id' - name: startDate in: query required: true description: Start date (inclusive) schema: type: string format: date-time - name: endDate in: query required: true description: End date (inclusive) schema: type: string format: date-time - name: timeslotIds in: query required: true description: Array of timeslot IDs schema: type: array items: $ref: '#/components/schemas/Id' style: form explode: false responses: '200': description: Calendar listing content: application/json: schema: $ref: '#/components/schemas/CalendarListing' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/hubs/services/{serviceId}: get: operationId: getHubServiceDetails summary: Get details of Coach Service description: ✨ Get details of Coach Service tags: - hubs parameters: - name: coachId in: path required: true description: Id of specific CoachId. schema: $ref: '#/components/schemas/CoachId' - name: serviceId in: path required: true description: Id of specific Coach Service. schema: $ref: '#/components/schemas/ServiceId' responses: '200': description: Coach service details content: application/json: schema: $ref: '#/components/schemas/HubServiceDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/hubs/services/{serviceId}/calendar: get: operationId: getHubCalendarItems summary: Get items for Coach Calendar description: ✨ Get items for Coach Calendar tags: - hubs parameters: - name: coachId in: path required: true description: Id of specified Coach. schema: $ref: '#/components/schemas/CoachId' - name: serviceId in: path required: true description: Id of specific Coach Service. schema: $ref: '#/components/schemas/ServiceId' - name: athleteId in: query required: true description: Id specific Athlete. schema: $ref: '#/components/schemas/AthleteId' - name: startDate in: query required: true description: Time Slot by specific date range. schema: $ref: '#/components/schemas/Date' - name: endDate in: query required: true description: Time Slot by specific date range. schema: $ref: '#/components/schemas/Date' - name: slotMode in: query required: true description: Type of workout session, can be either Personal or Group. schema: type: string enum: - Personal - Group - name: ageFrom in: query required: true description: Time Slot Groups by specific age range. schema: type: integer - name: ageTo in: query required: true description: Time Slot Groups by specific age range. schema: type: integer - name: addressId in: query required: false description: Time Slot Groups by specific Address (or online if null). schema: $ref: '#/components/schemas/AddressId' - name: duration in: query required: false description: Time Slot by duration. schema: type: integer responses: '200': description: Calendar items content: application/json: schema: $ref: '#/components/schemas/CalendarItems' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/services: get: operationId: getAllServices summary: Get all services description: ✨ Get all services tags: - services parameters: - name: coachId in: path required: true description: ID of the Coach schema: $ref: '#/components/schemas/CoachId' - $ref: '#/components/parameters/TraceparentHeader' responses: '200': description: Service list content: application/json: schema: allOf: - $ref: '#/components/schemas/Page' - type: object properties: data: type: array items: $ref: '#/components/schemas/CalendarService' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' post: operationId: createService summary: Create a new service description: ✨ Create a new service tags: - services parameters: - name: coachId in: path required: true description: ID of the Coach schema: $ref: '#/components/schemas/CoachId' - $ref: '#/components/parameters/TraceparentHeader' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ServiceInput' responses: '200': description: Coach service has been created content: application/json: schema: $ref: '#/components/schemas/CalendarService' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/services/{serviceId}: get: operationId: getServiceById summary: Get service by id description: ✨ Get service by id tags: - services parameters: - name: coachId in: path required: true description: ID of the Coach schema: $ref: '#/components/schemas/CoachId' - name: serviceId in: path required: true description: ID of the Coach Service schema: $ref: '#/components/schemas/ServiceId' responses: '200': description: Service details content: application/json: schema: $ref: '#/components/schemas/CalendarService' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' put: operationId: updateService summary: Update service description: ✨ Update service tags: - services parameters: - name: coachId in: path required: true description: ID of the Coach schema: $ref: '#/components/schemas/CoachId' - name: serviceId in: path required: true description: ID of the Coach Service schema: $ref: '#/components/schemas/ServiceId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ServiceInput' responses: '200': description: Service has been updated content: application/json: schema: $ref: '#/components/schemas/CalendarService' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' delete: operationId: deleteService summary: Delete service description: ✨ Delete service tags: - services parameters: - name: coachId in: path required: true description: ID of the Coach schema: $ref: '#/components/schemas/CoachId' - name: serviceId in: path required: true description: ID of the Coach Service schema: $ref: '#/components/schemas/ServiceId' responses: '200': description: Service has been deleted content: application/json: schema: type: object properties: serviceId: $ref: '#/components/schemas/ServiceId' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/services/{serviceId}/photos: get: operationId: getAllPhotos summary: Get Service Photos description: ✨ Get Service Photos tags: - service-photos parameters: - name: coachId in: path required: true description: ID of the Coach schema: $ref: '#/components/schemas/CoachId' - name: serviceId in: path required: true description: ID of the Coach Service schema: $ref: '#/components/schemas/ServiceId' - $ref: '#/components/parameters/TraceparentHeader' responses: '200': description: Service Photo list content: application/json: schema: allOf: - $ref: '#/components/schemas/Page' - type: object properties: data: type: array items: $ref: '#/components/schemas/ServicePhoto' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' post: operationId: createPhoto summary: Add Service Photo description: ✨ Add Service Photo tags: - service-photos parameters: - name: coachId in: path required: true description: ID of the Coach schema: $ref: '#/components/schemas/CoachId' - name: serviceId in: path required: true description: ID of the Coach Service schema: $ref: '#/components/schemas/ServiceId' - $ref: '#/components/parameters/TraceparentHeader' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ServicePhoto' responses: '200': description: Service Photo has been created content: application/json: schema: $ref: '#/components/schemas/ServicePhoto' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/services/{serviceId}/photos/{photoId}: delete: operationId: deletePhoto summary: Delete Service Photo description: ✨ Delete Service Photo tags: - service-photos parameters: - name: coachId in: path required: true description: ID of the Coach schema: $ref: '#/components/schemas/CoachId' - name: serviceId in: path required: true description: ID of the Coach Service schema: $ref: '#/components/schemas/ServiceId' - name: photoId in: path required: true description: ID of the Service Photo schema: $ref: '#/components/schemas/ServicePhotoId' responses: '200': description: Service Photo has been deleted content: application/json: schema: type: object required: - photoId properties: photoId: $ref: '#/components/schemas/ServicePhotoId' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/services/{serviceId}/sessions: get: operationId: getAllSessions summary: Get coach sessions description: ✨ Get coach sessions tags: - sessions parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' - name: serviceId in: path required: true description: ID of the specific Service schema: $ref: '#/components/schemas/ServiceId' responses: '200': description: Session list content: application/json: schema: allOf: - $ref: '#/components/schemas/Page' - type: object properties: data: type: array items: $ref: '#/components/schemas/Session' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' post: operationId: createSession summary: Add new coach session description: ✨ Add new coach session tags: - sessions parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' - name: serviceId in: path required: true description: ID of the specific Service schema: $ref: '#/components/schemas/ServiceId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SessionInput' responses: '200': description: Session created content: application/json: schema: $ref: '#/components/schemas/Session' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/services/{serviceId}/sessions/{sessionId}: get: operationId: getSessionById summary: Get Session by Id description: ✨ Get Session by Id tags: - sessions parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' - name: serviceId in: path required: true description: ID of the specific Service. schema: $ref: '#/components/schemas/ServiceId' - name: sessionId in: path required: true description: ID of the specific Session schema: $ref: '#/components/schemas/SessionId' responses: '200': description: Session details content: application/json: schema: $ref: '#/components/schemas/Session' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' put: operationId: updateSession summary: Update Session description: ✨ Update Session tags: - sessions parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' - name: serviceId in: path required: true description: ID of the specific Service. schema: $ref: '#/components/schemas/ServiceId' - name: sessionId in: path required: true description: ID of the specific Session schema: $ref: '#/components/schemas/SessionId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SessionInput' responses: '200': description: Updated session content: application/json: schema: $ref: '#/components/schemas/Session' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' delete: operationId: deleteSession summary: Delete session description: ✨ Delete session tags: - sessions parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' - name: serviceId in: path required: true description: ID of the specific Service. schema: $ref: '#/components/schemas/ServiceId' - name: sessionId in: path required: true description: ID of the specific Session schema: $ref: '#/components/schemas/SessionId' responses: '200': description: Session has been deleted content: application/json: schema: type: object required: - sessionId properties: sessionId: $ref: '#/components/schemas/SessionId' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/sessions/{sessionId}/time-slots: get: operationId: getAllTimeSlots summary: Get all Timeslots description: ✨ Get all Timeslots tags: - time-slots parameters: - name: coachId in: path required: true description: ID of the the specific Coach. schema: $ref: '#/components/schemas/CoachId' - name: sessionId in: path required: true description: ID of the the specific Session. schema: $ref: '#/components/schemas/SessionId' responses: '200': description: Time Slot list content: application/json: schema: allOf: - $ref: '#/components/schemas/Page' - type: object properties: data: type: array items: $ref: '#/components/schemas/TimeSlot' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' post: operationId: createTimeSlot summary: Create new Timeslot description: ✨ Create new Timeslot tags: - time-slots parameters: - name: coachId in: path required: true description: ID of the the specific Coach. schema: $ref: '#/components/schemas/CoachId' - name: sessionId in: path required: true description: ID of the the specific Session. schema: $ref: '#/components/schemas/SessionId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TimeSlotInput' responses: '200': description: Time Slot has been created content: application/json: schema: $ref: '#/components/schemas/TimeSlot' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/sessions/{sessionId}/time-slots/{timeSlotId}: get: operationId: getTimeSlotById summary: Get Timeslot by id description: ✨ Get Timeslot by id tags: - time-slots parameters: - name: coachId in: path required: true description: ID of the specific coach ID schema: $ref: '#/components/schemas/CoachId' - name: sessionId in: path required: true description: ID of the specific Session schema: $ref: '#/components/schemas/SessionId' - name: timeSlotId in: path required: true description: ID of the specific Time Slot schema: $ref: '#/components/schemas/TimeSlotId' responses: '200': description: Time Slot details content: application/json: schema: $ref: '#/components/schemas/TimeSlot' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' put: operationId: updateTimeSlotFull summary: Update Timeslot fully description: ✨ Update Timeslot fully tags: - time-slots parameters: - name: coachId in: path required: true description: ID of the specific coach ID schema: $ref: '#/components/schemas/CoachId' - name: sessionId in: path required: true description: ID of the specific Session schema: $ref: '#/components/schemas/SessionId' - name: timeSlotId in: path required: true description: ID of the specific Time Slot schema: $ref: '#/components/schemas/TimeSlotId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TimeSlotInput' responses: '200': description: Timeslot has been updated content: application/json: schema: $ref: '#/components/schemas/TimeSlot' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' patch: operationId: updateTimeSlotPartial summary: Update Timeslot partially description: ✨ Update Timeslot partially tags: - time-slots parameters: - name: coachId in: path required: true description: ID of the specific coach ID schema: $ref: '#/components/schemas/CoachId' - name: sessionId in: path required: true description: ID of the specific Session schema: $ref: '#/components/schemas/SessionId' - name: timeSlotId in: path required: true description: ID of the specific Time Slot schema: $ref: '#/components/schemas/TimeSlotId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TimeSlotUpdatePartial' responses: '200': description: Time Slot has been partially updated content: application/json: schema: $ref: '#/components/schemas/TimeSlot' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' delete: operationId: deleteTimeSlot summary: Delete Timeslot description: ✨ Delete Timeslot tags: - time-slots parameters: - name: coachId in: path required: true description: ID of the specific coach ID schema: $ref: '#/components/schemas/CoachId' - name: sessionId in: path required: true description: ID of the specific Session schema: $ref: '#/components/schemas/SessionId' - name: timeSlotId in: path required: true description: ID of the specific Time Slot schema: $ref: '#/components/schemas/TimeSlotId' responses: '200': description: Time Slot has been deleted content: application/json: schema: type: object required: - timeSlotId properties: timeSlotId: $ref: '#/components/schemas/TimeSlotId' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/time-slots/{timeSlotId}/events: get: operationId: getAllEvents summary: Get all Events description: ✨ Get all Events tags: - events parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' - name: timeSlotId in: path required: true description: ID of the specific Timeslot schema: $ref: '#/components/schemas/TimeSlotId' responses: '200': description: Coach Event list content: application/json: schema: allOf: - $ref: '#/components/schemas/Page' - type: object properties: data: type: array items: $ref: '#/components/schemas/CoachEvent' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/out-of-office-periods: get: summary: Get all Out-of-Office periods description: ✨ Get all Out-of-Office periods operationId: getAllOofs tags: - out-of-office-periods parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' responses: '200': description: Out-of-Office list content: application/json: schema: allOf: - $ref: '#/components/schemas/Page' - type: object properties: data: type: array items: $ref: '#/components/schemas/Oof' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' post: operationId: createOof summary: Create Out-of-Office description: ✨ Create Out-of-Office tags: - out-of-office-periods parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OofInput' responses: '200': description: Out-of-Office has been created content: application/json: schema: $ref: '#/components/schemas/Oof' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/out-of-office-periods-affected: get: summary: Get count of affected workouts by out-of-office period description: ✨ Returns the count of workout instances (online and offline) that will be affected if an out-of-office period is registered for the coach. operationId: getAffectedWorkoutsByOof tags: - out-of-office-periods parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' - name: startDateTime in: query required: true description: Start date-time of the out-of-office period (RFC3339 with timezone) schema: type: string format: date-time - name: endDateTime in: query required: true description: End date-time of the out-of-office period (RFC3339 with timezone) schema: type: string format: date-time responses: '200': description: Count of affected workouts content: application/json: schema: $ref: '#/components/schemas/OofAffectedCount' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/out-of-office-periods/{oofId}: get: operationId: getOofById summary: Get Out-of-Office by id description: ✨ Get Out-of-Office by id tags: - out-of-office-periods parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' - name: oofId in: path required: true description: ID of the specific Out-of-Office schema: $ref: '#/components/schemas/OofId' responses: '200': description: Out-of-Office details content: application/json: schema: $ref: '#/components/schemas/Oof' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' put: operationId: updateOof summary: Update Out-of-Office description: ✨ Update Out-of-Office tags: - out-of-office-periods parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' - name: oofId in: path required: true description: ID of the specific Out-of-Office schema: $ref: '#/components/schemas/OofId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OofInput' responses: '200': description: Out-of-Office has been updated content: application/json: schema: $ref: '#/components/schemas/Oof' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' delete: operationId: deleteOof summary: Delete Out-of-Office description: ✨ Delete Out-of-Office tags: - out-of-office-periods parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' - name: oofId in: path required: true description: ID of the specific Out-of-Office schema: $ref: '#/components/schemas/OofId' responses: '200': description: Out-of-Office period has been deleted content: application/json: schema: type: object required: - oofId properties: oofId: $ref: '#/components/schemas/OofId' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/payment-methods: get: operationId: getAllPaymentMethods summary: Get payment methods description: ✨ Get payment methods tags: - payment-methods parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' responses: '200': description: Payment Method list content: application/json: schema: allOf: - $ref: '#/components/schemas/Page' - type: object properties: data: type: array items: $ref: '#/components/schemas/PaymentMethod' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' post: operationId: createPaymentMethod summary: Create a new payment method description: ✨ Create a new payment method tags: - payment-methods parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PaymentMethodInput' responses: '200': description: Payment method has been created content: application/json: schema: $ref: '#/components/schemas/PaymentMethod' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/payment-methods/{methodId}: get: operationId: getPaymentMethodById summary: Get payment method by id description: ✨ Get payment method by id tags: - payment-methods parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' - name: methodId in: path required: true description: ID of the specific Payment Method schema: $ref: '#/components/schemas/PaymentMethodId' responses: '200': description: Payment Method details content: application/json: schema: $ref: '#/components/schemas/PaymentMethod' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' put: operationId: updatePaymentMethod summary: Update Payment Method description: ✨ Update Payment Method tags: - payment-methods parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' - name: methodId in: path required: true description: ID of the specific Payment Method schema: $ref: '#/components/schemas/PaymentMethodId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PaymentMethodInput' responses: '200': description: Payment Method has been updated content: application/json: schema: $ref: '#/components/schemas/PaymentMethod' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' delete: operationId: deletePaymentMethod summary: Delete Payment Method description: ✨ Delete Payment Method tags: - payment-methods parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' - name: methodId in: path required: true description: ID of the specific Payment Method schema: $ref: '#/components/schemas/PaymentMethodId' responses: '200': description: Payment Method has been deleted content: application/json: schema: type: object required: - methodId properties: methodId: $ref: '#/components/schemas/PaymentMethodId' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/payment-cards: get: operationId: getPaymentCards summary: Get payment cards description: ✨ Get payment cards tags: - payment-cards parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' responses: '200': description: Payment Card list content: application/json: schema: allOf: - $ref: '#/components/schemas/Page' - type: object properties: data: type: array items: $ref: '#/components/schemas/PaymentCard' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' post: operationId: createPaymentCard summary: Create a new payment card description: ✨ Create a new payment card tags: - payment-cards parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PaymentCardInput' responses: '200': description: Payment card has been created content: application/json: schema: $ref: '#/components/schemas/PaymentCard' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/payment-cards/{cardId}: get: operationId: getPaymentCardById summary: Get payment card by id description: ✨ Get payment card by id tags: - payment-cards parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' - name: cardId in: path required: true description: ID of the specific Payment Card schema: $ref: '#/components/schemas/PaymentCardId' responses: '200': description: Payment Card details content: application/json: schema: $ref: '#/components/schemas/PaymentCard' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' put: operationId: updatePaymentCard summary: Update Payment Card description: ✨ Update Payment Card tags: - payment-cards parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' - name: cardId in: path required: true description: ID of the specific Payment Card schema: $ref: '#/components/schemas/PaymentCardId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PaymentCardInput' responses: '200': description: Payment card has been updated content: application/json: schema: $ref: '#/components/schemas/PaymentCard' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' delete: operationId: deletePaymentCard summary: Delete Payment Card description: ✨ Delete Payment Card tags: - payment-cards parameters: - name: coachId in: path required: true description: ID of the specific Coach schema: $ref: '#/components/schemas/CoachId' - name: cardId in: path required: true description: ID of the specific Payment Card schema: $ref: '#/components/schemas/PaymentCardId' responses: '200': description: Payment Card has been deleted content: application/json: schema: type: object required: - cardId properties: cardId: $ref: '#/components/schemas/PaymentCardId' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/time-slots/groups/sports: get: operationId: getSlotGroups summary: Get Time Slot groups description: ✨ Get Time Slot groups tags: - time-slots parameters: - name: coachId in: path required: true description: Time Slot Groups by specific CoachId. schema: $ref: '#/components/schemas/CoachId' responses: '200': description: Time Slot Groups content: application/json: schema: allOf: - $ref: '#/components/schemas/Page' - type: object properties: data: type: array items: $ref: '#/components/schemas/SlotGroup' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/time-slots/groups/audiences: get: operationId: getSlotAudiences summary: Get Time Slot audiences description: ✨ Get Time Slot audiences tags: - time-slots parameters: - name: coachId in: path required: true description: Time Slot Groups by specific CoachId. schema: $ref: '#/components/schemas/CoachId' - name: sportId in: query required: true description: Time Slot Groups by specific Sport Type. schema: $ref: '#/components/schemas/SportId' - name: slotType in: query required: true description: Type of workout session, can be either Personal or Group. schema: type: string enum: - Online - Offline - name: addressId in: query required: false description: Time Slot Groups by specific Address (or online if null). schema: $ref: '#/components/schemas/AddressId' - name: slotMode in: query required: false description: Type of workout session, can be either Personal or Group. schema: type: string enum: - Personal - Group responses: '200': description: Time Slot Audiences content: application/json: schema: allOf: - $ref: '#/components/schemas/Page' - type: object properties: data: type: array items: $ref: '#/components/schemas/SlotAudience' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' /coaches/{coachId}/events/upcoming: get: operationId: getCalendarView summary: Get upcoming Events description: ✨ Get upcoming Events tags: - events parameters: - name: coachId in: path required: true description: Events of specific Session. schema: $ref: '#/components/schemas/CoachId' - name: sportId in: query required: true description: Time Slot Groups by specific Sport Type. schema: $ref: '#/components/schemas/SportId' - name: slotType in: query required: true description: Type of workout session, can be either Personal or Group. schema: type: string enum: - Online - Offline - name: startDate in: query required: true description: Time Slot Groups by specific date range. schema: $ref: '#/components/schemas/Date' - name: endDate in: query required: true description: Time Slot Groups by specific date range. schema: $ref: '#/components/schemas/Date' - name: ageFrom in: query required: true description: Time Slot Groups by specific age range. schema: type: integer - name: ageTo in: query required: true description: Time Slot Groups by specific age range. schema: type: integer - name: addressId in: query required: false description: Time Slot Groups by specific Address (or online if null). schema: $ref: '#/components/schemas/AddressId' - name: slotMode in: query required: false description: Type of workout session, can be either Personal or Group. schema: type: string enum: - Personal - Group - name: duration in: query required: false description: Time Slot Groups by duration. schema: type: integer - $ref: '#/components/parameters/TraceparentHeader' responses: '200': description: Coach Events content: application/json: schema: allOf: - $ref: '#/components/schemas/Page' - type: object properties: data: type: array items: $ref: '#/components/schemas/CoachEvent' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Errors' components: securitySchemes: bearerHttpAuthentication: description: Bearer token using a JWT type: http scheme: bearer bearerFormat: JWT schemas: Id: type: string example: 4b72d209-debd-45e1-93cc-7640bf7d39bf description: Database entity primary key uuid format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ Service: type: object properties: id: type: string format: uuid coachId: type: string format: uuid description: type: string sportId: type: string format: uuid subsportId: type: string format: uuid nullable: true isDraft: type: boolean inventory: type: string nullable: true description: Inventory details for the service required: - id - coachId - description - sportId - subsportId - isDraft Currency: type: string enum: - RUB HubPublicTimeslotsViewDurationPrice: type: object properties: durationInMinutes: type: integer price: type: integer priceCurrency: $ref: '#/components/schemas/Currency' required: - durationInMinutes - price - priceCurrency AddressType: type: string enum: - Main Address: type: object properties: id: type: string format: uuid userId: type: string format: uuid formattedAddress: type: string addressType: $ref: '#/components/schemas/AddressType' latitude: type: number format: double longitude: type: number format: double entrance: type: string floor: type: string locationComment: type: string required: - id - userId - formattedAddress HubPublicViewAddress: type: object properties: address: $ref: '#/components/schemas/Address' metersDistanceFromUser: type: integer nullable: true required: - address - metersDistanceFromUser HubPublicTimeslotsViewItem: type: object properties: timeslotIds: type: array items: type: string format: uuid durationsAndPrices: type: array items: $ref: '#/components/schemas/HubPublicTimeslotsViewDurationPrice' address: $ref: '#/components/schemas/HubPublicViewAddress' eligibility: type: string level: type: string ageFrom: type: integer ageTo: type: integer minimumParticipantCount: type: integer maximumParticipantCount: type: integer required: - timeslotIds - durationsAndPrices - address - eligibility - level - ageFrom - ageTo - minimumParticipantCount - maximumParticipantCount HubPublicTimeslotsView: type: object properties: service: $ref: '#/components/schemas/Service' servicePhotosIds: type: array items: type: string format: uuid personalSlots: type: array items: $ref: '#/components/schemas/HubPublicTimeslotsViewItem' groupSlots: type: array items: $ref: '#/components/schemas/HubPublicTimeslotsViewItem' required: - service - servicePhotosIds - personalSlots - groupSlots Error: type: object required: - code - message - endpoint - requestId properties: code: type: string description: Error unique code enum: - validation - internal - oops - unexpected - tooManyRequests - notFound - unauthorized - forbidden message: type: string description: Error message endpoint: type: string requestId: type: string Errors: type: object required: - errors properties: errors: type: array items: $ref: '#/components/schemas/Error' CoachId: type: string example: 4b72d209-debd-45e1-93cc-7640bf7d39bf description: Coach uuid format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ HubPublicViewGroupingMode: type: string enum: - Personal - Group HubPublicViewItem: type: object properties: service: $ref: '#/components/schemas/Service' servicePhotosIds: type: array items: type: string format: uuid addresses: type: array items: $ref: '#/components/schemas/HubPublicViewAddress' nullable: true minimumAge: type: integer nullable: true maximumAge: type: integer nullable: true minimumDurationMinutes: type: integer nullable: true maximumDurationMinutes: type: integer nullable: true minimumPrice: type: integer nullable: true maximumPrice: type: integer nullable: true eligibilities: type: array items: type: string nullable: true skillLevels: type: array items: type: string nullable: true groupingModes: type: array items: $ref: '#/components/schemas/HubPublicViewGroupingMode' nullable: true required: - service - servicePhotosIds - addresses - minimumAge - maximumAge - minimumDurationMinutes - maximumDurationMinutes - minimumPrice - maximumPrice - eligibilities - skillLevels - groupingModes EventStatus: type: string enum: - Scheduled - Canceled - InProgress - Done BookedAthleteDetails: type: object required: - userId - bookedDatesForSameTimeslot properties: userId: type: string format: uuid description: Athlete's user identifier bookedDatesForSameTimeslot: type: array items: type: string format: date-time description: Dates the athlete has booked for this timeslot CalendarDataForCoachView: type: object required: - eventId - serviceId - serviceCreatedAt - coachId - eventStart - eventEnd - duration - maxParticipants - sportId - repeatDays - bookedAthletesDetails - addressId - formattedAddress - eligibility - addressCount properties: eventId: type: string format: uuid description: Unique identifier of the event serviceId: type: string format: uuid description: Identifier of the service serviceCreatedAt: type: string format: date-time description: Timestamp when the service was created coachId: type: string format: uuid description: Identifier of the coach eligibility: type: string nullable: true eventStart: type: string format: date-time description: Start of the event time range eventEnd: type: string format: date-time description: End of the event time range duration: type: integer description: The total duration in minutes addressId: type: string format: uuid nullable: true description: Optional address UUID formattedAddress: type: string nullable: true description: Optional human-readable address addressCount: type: integer description: The total number of addresses associated with the event's service serviceCardinality: type: integer nullable: true description: The cardinality of the service (1st, 2nd, 3rd service) for this coach, or null if unavailable maxParticipants: type: integer description: Maximum number of participants allowed sportId: type: string format: uuid description: Identifier of the sport repeatDays: type: array items: type: string description: Days of week for repeating events status: $ref: '#/components/schemas/EventStatus' nullable: true description: The status of the event bookedAthletesDetails: type: array items: $ref: '#/components/schemas/BookedAthleteDetails' description: Details of athletes booked into this event CalendarListingTimeslot: type: object required: - timeSlotId - sportId - startTime - endTime - duration - price - priceCurrency - subscribers - maxParticipants properties: timeSlotId: $ref: '#/components/schemas/Id' sportId: $ref: '#/components/schemas/Id' startTime: type: string endTime: type: string duration: type: integer price: type: integer priceCurrency: $ref: '#/components/schemas/Currency' subscribers: type: integer maxParticipants: type: integer CalendarListingEvent: type: object required: - eventId - date - duration - timeSlots - status properties: eventId: $ref: '#/components/schemas/Id' date: type: string format: date duration: type: integer description: Duration of the calendar slot in minutes. timeSlots: type: array items: $ref: '#/components/schemas/CalendarListingTimeslot' status: type: string CalendarListingOverlaps: type: object required: - athleteBookings - coachEvent properties: athleteBookings: $ref: '#/components/schemas/CalendarListingEvent' coachEvent: $ref: '#/components/schemas/CalendarListingEvent' CalendarListing: type: object required: - athleteBookings - coachEvents - overlaps - loggedInCoachSlots properties: athleteBookings: type: array items: $ref: '#/components/schemas/CalendarListingEvent' coachEvents: type: array items: $ref: '#/components/schemas/CalendarListingEvent' loggedInCoachSlots: type: array items: $ref: '#/components/schemas/CalendarListingEvent' overlaps: type: array items: $ref: '#/components/schemas/CalendarListingOverlaps' ServiceId: type: string example: 4b72d209-debd-45e1-93cc-7640bf7d39bf description: Service uuid format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ SportId: type: string example: 4b72d209-debd-45e1-93cc-7640bf7d39bf description: Sport Type UUID format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ PricePosition: type: object required: - duration - price properties: duration: type: integer price: type: integer PersonalSlot: type: object required: - timeSlotIds - slotMode - level - ageFrom - ageTo - durationPrice - eligibilities properties: timeSlotIds: type: array items: $ref: '#/components/schemas/Id' addressId: $ref: '#/components/schemas/Id' nullable: true slotMode: type: string level: type: string address: type: string distance: type: integer ageFrom: type: integer ageTo: type: integer prices: type: array items: $ref: '#/components/schemas/PricePosition' eligibilities: type: array items: type: string GroupSlot: type: object required: - timeSlotIds - slotMode - level - ageFrom - ageTo - participantsMaxCount - durationPrice - eligibilities properties: timeSlotIds: type: array items: $ref: '#/components/schemas/Id' addressId: $ref: '#/components/schemas/Id' nullable: true slotMode: type: string level: type: string address: type: string distance: type: integer ageFrom: type: integer ageTo: type: integer participantsMaxCount: type: integer prices: type: array items: $ref: '#/components/schemas/PricePosition' eligibilities: type: array items: type: string ServicePhotoId: type: string example: 4b72d209-debd-45e1-93cc-7640bf7d39bf description: Post Photo UUID format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ ServicePhoto: type: object required: - photoId properties: photoId: $ref: '#/components/schemas/ServicePhotoId' HubServiceDetails: type: object required: - sportId - description - rating - reviews properties: sportId: $ref: '#/components/schemas/SportId' description: type: string rating: type: number reviews: type: integer personalSlots: type: array items: $ref: '#/components/schemas/PersonalSlot' groupSlots: type: array items: $ref: '#/components/schemas/GroupSlot' photos: type: array items: $ref: '#/components/schemas/ServicePhoto' AthleteId: type: string example: 4b72d209-debd-45e1-93cc-7640bf7d39bf description: Athlete uuid format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ Date: type: string format: date description: Date in RFC-3339 format (YYYY-MM-DD) example: '2024-11-29' AddressId: type: string example: 4b72d209-debd-45e1-93cc-7640bf7d39bf description: Address UUID format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ CoachEventId: type: string example: 4b72d209-debd-45e1-93cc-7640bf7d39bf description: Event UUID format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ BookingId: type: string example: 4b72d209-debd-45e1-93cc-7640bf7d39bf description: Booking UUID format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ Time: type: string format: time description: time in RFC-3339 example: 12:09:53+00:00 TimeRange: type: object required: - start - end properties: start: $ref: '#/components/schemas/Time' end: $ref: '#/components/schemas/Time' BookingStatus: type: string enum: - Accepted - Rejected - Pending - Canceled - InDispute - DisputeDone AthleteBookingItem: type: object required: - eventId - bookingId - coachId - serviceId - sportId - timeRange - status properties: eventId: $ref: '#/components/schemas/CoachEventId' bookingId: $ref: '#/components/schemas/BookingId' coachId: $ref: '#/components/schemas/CoachId' serviceId: $ref: '#/components/schemas/ServiceId' sportId: $ref: '#/components/schemas/SportId' timeRange: $ref: '#/components/schemas/TimeRange' status: $ref: '#/components/schemas/BookingStatus' CoachEventItem: type: object required: - eventId - coachId - serviceId - sportId - duration - price - priceCurrency - timeRange - status properties: eventId: $ref: '#/components/schemas/CoachEventId' coachId: $ref: '#/components/schemas/CoachId' serviceId: $ref: '#/components/schemas/ServiceId' sportId: $ref: '#/components/schemas/SportId' duration: type: integer minimum: 15 price: type: integer minimum: 0 priceCurrency: $ref: '#/components/schemas/Currency' timeRange: $ref: '#/components/schemas/TimeRange' status: type: string CalendarItems: type: object required: - athleteBookings - coachTimeSlots - overlappings properties: athleteBookings: type: array items: $ref: '#/components/schemas/AthleteBookingItem' coachTimeSlots: type: array items: $ref: '#/components/schemas/CoachEventItem' overlappings: type: array items: type: object required: - athleteBookingId - upcomingEventId properties: athleteBookingId: $ref: '#/components/schemas/BookingId' upcomingEventId: $ref: '#/components/schemas/CoachEventId' Count: type: integer description: Page entries count example: 10 CurrentPage: type: integer deprecated: true description: Current page example: 0 minimum: 0 default: 0 PageNumber: type: integer description: Page number example: 0 minimum: 0 default: 0 PageSize: type: integer deprecated: true description: Page size default: 10 minimum: 1 maximum: 100 example: 10 PageLimit: type: integer description: Page limit default: 10 minimum: 1 maximum: 100 example: 10 TotalCount: type: integer description: Total count default: 0 minimum: 0 example: 1000 Page: type: object required: - count - page - limit - total properties: data: type: array items: type: object count: $ref: '#/components/schemas/Count' currentPage: $ref: '#/components/schemas/CurrentPage' page: $ref: '#/components/schemas/PageNumber' pageSize: $ref: '#/components/schemas/PageSize' limit: $ref: '#/components/schemas/PageLimit' total: $ref: '#/components/schemas/TotalCount' CalendarService: type: object required: - coachId - serviceId - description - sportId - hasFutureEvents properties: coachId: type: string format: uuid serviceId: $ref: '#/components/schemas/ServiceId' description: type: string sportId: $ref: '#/components/schemas/SportId' subsportId: $ref: '#/components/schemas/SportId' hasFutureEvents: type: boolean isDraft: type: boolean ServiceInput: type: object required: - sportId - description properties: description: type: string sportId: $ref: '#/components/schemas/SportId' subsportId: $ref: '#/components/schemas/SportId' isDraft: type: boolean SessionId: type: string example: 4b72d209-debd-45e1-93cc-7640bf7d39bf description: Coach Session UUID format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ Weekday: type: string enum: - Monday - Tuesday - Wednesday - Thursday - Friday - Saturday - Sunday Session: type: object required: - sessionId - startDate properties: sessionId: $ref: '#/components/schemas/SessionId' startDate: $ref: '#/components/schemas/Date' repeatDays: type: array items: $ref: '#/components/schemas/Weekday' stopDate: $ref: '#/components/schemas/Date' SessionInput: type: object required: - startDate properties: startDate: $ref: '#/components/schemas/Date' repeatDays: type: array items: $ref: '#/components/schemas/Weekday' stopDate: $ref: '#/components/schemas/Date' TimeSlotId: type: string example: 4b72d209-debd-45e1-93cc-7640bf7d39bf description: Time Slot UUID format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ TimeSlot: type: object required: - timeSlotId - startTime - endTime - numberOfParticipants - slotType - ageFrom - ageTo - duration - price - priceCurrency - paymentMethod properties: timeSlotId: $ref: '#/components/schemas/TimeSlotId' startTime: $ref: '#/components/schemas/Time' endTime: $ref: '#/components/schemas/Time' numberOfParticipants: type: integer minimum: 1 slotType: type: string enum: - Online - Offline ageFrom: type: integer minimum: 18 maximum: 99 ageTo: type: integer minimum: 18 maximum: 99 duration: type: integer minimum: 15 price: type: integer priceCurrency: $ref: '#/components/schemas/Currency' paymentMethod: type: string enum: - Cash addressId: $ref: '#/components/schemas/AddressId' public: type: boolean level: type: string enum: - Any - Beginner - Medium - Pro eligibility: type: string enum: - All - Men - Women TimeSlotInput: type: object required: - startTime - endTime - numberOfParticipants - slotType - ageFrom - ageTo - duration - price - paymentMethod properties: startTime: $ref: '#/components/schemas/Time' endTime: $ref: '#/components/schemas/Time' numberOfParticipants: type: integer minimum: 1 slotType: type: string enum: - Online - Offline ageFrom: type: integer minimum: 0 maximum: 99 ageTo: type: integer minimum: 0 maximum: 99 duration: type: integer minimum: 15 price: type: integer priceCurrency: $ref: '#/components/schemas/Currency' paymentMethod: type: string enum: - Cash addressId: $ref: '#/components/schemas/AddressId' public: type: boolean level: type: string enum: - Any - Beginner - Medium - Pro eligibility: type: string enum: - All - Men - Women TimeSlotUpdatePartial: type: object properties: startTime: $ref: '#/components/schemas/Time' endTime: $ref: '#/components/schemas/Time' numberOfParticipants: type: integer minimum: 1 slotType: type: string enum: - Online - Offline ageFrom: type: integer minimum: 18 maximum: 99 ageTo: type: integer minimum: 18 maximum: 99 duration: type: integer minimum: 15 price: type: integer paymentMethod: type: string enum: - Cash addressId: $ref: '#/components/schemas/AddressId' public: type: boolean level: type: string enum: - Any - Beginner - Medium - Pro eligibility: type: string enum: - All - Men - Women OofId: type: string example: 4b72d209-debd-45e1-93cc-7640bf7d39bf description: Out of Office (oof) period uuid format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ CoachEvent: type: object required: - eventId - timeRange - status properties: eventId: $ref: '#/components/schemas/CoachEventId' oofId: $ref: '#/components/schemas/OofId' timeRange: $ref: '#/components/schemas/TimeRange' status: type: string DateTime: type: string format: date-time description: Date and time in RFC-3339 example: '2024-11-29T12:09:53+00:00' Oof: type: object required: - oofId - cancelReason - startAt - endAt properties: oofId: $ref: '#/components/schemas/OofId' cancelReason: type: string startAt: $ref: '#/components/schemas/DateTime' endAt: $ref: '#/components/schemas/DateTime' OofInput: type: object required: - cancelReason - startAt - endAt - cancelOnline properties: cancelReason: type: string startAt: $ref: '#/components/schemas/DateTime' endAt: $ref: '#/components/schemas/DateTime' cancelOnline: type: boolean description: | Indicates whether online appointments should be cancelled during the out-of-office period. OofAffectedCount: type: object properties: onlineCount: type: integer description: Number of affected online workouts offlineCount: type: integer description: Number of affected offline workouts required: - onlineCount - offlineCount PaymentMethodId: type: string example: 4b72d209-debd-45e1-93cc-7640bf7d39bf description: Payment Method uuid format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ PaymentCardId: type: string example: 4b72d209-debd-45e1-93cc-7640bf7d39bf description: Payment Card uuid format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ PaymentMethod: type: object required: - methodId - methodType properties: methodId: $ref: '#/components/schemas/PaymentMethodId' methodType: type: string enum: - Cash - Card cardId: $ref: '#/components/schemas/PaymentCardId' PaymentMethodInput: type: object required: - methodType properties: methodType: type: string enum: - Cash - Card cardId: $ref: '#/components/schemas/PaymentCardId' CardNumber: type: string example: 4111-1111-1111-1111 description: Primary Account Number (PAN) of the payment card, formatted with hyphens format: string maxLength: 19 minLength: 19 pattern: ^\d{4}-\d{4}-\d{4}-\d{4}$ PaymentCard: type: object required: - cardId - cardNumber - holderName - expMonth - expYear - network properties: cardId: $ref: '#/components/schemas/PaymentCardId' cardNumber: $ref: '#/components/schemas/CardNumber' holderName: type: string expMonth: type: string maxLength: 2 expYear: type: string maxLength: 4 network: type: string maxLength: 16 PaymentCardInput: type: object required: - cardNumber - holderName - expMonth - expYear - network properties: cardNumber: $ref: '#/components/schemas/CardNumber' holderName: type: string expMonth: type: string maxLength: 2 expYear: type: string maxLength: 4 network: type: string maxLength: 16 SlotGroup: type: object required: - sportId - ageMin - ageMax - durationMin - durationMax - priceMin - priceMax - details properties: sportId: $ref: '#/components/schemas/SportId' addressId: $ref: '#/components/schemas/AddressId' ageMin: type: integer ageMax: type: integer durationMin: type: integer durationMax: type: integer priceMin: type: integer priceMax: type: integer details: type: string SlotAudience: type: object required: - slotMode - level - ageFrom - ageTo - participantsMaxCount - durationPrice properties: slotMode: type: string level: type: string addressId: $ref: '#/components/schemas/AddressId' ageFrom: type: integer ageTo: type: integer participantsMaxCount: type: integer durationPrice: type: string parameters: TraceparentHeader: name: traceparent in: header required: false description: W3C Trace Context traceparent header for request tracing schema: type: string pattern: ^[0-9a-f]{2}-[0-9a-f]{32}-[0-9a-f]{16}-[0-9a-f]{2}$ example: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01