@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api OnSched Consumer API
@base https://sandbox-api.onsched.com/
@version v1
@auth OAuth2
@endpoints 38
@hint download_for_search
@toc consumer(38)

@endpoint GET /consumer/v1/appointments
@optional {locationId: str, email: str, lastname: str, phone: str, serviceId: str, calendarId: str, resourceId: str, customerId: str, serviceAllocationId: str, startDate: str(date-time), endDate: str(date-time), status: str, bookedBy: str, offset: int(int32), limit: int(int32)}
@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?}

@endpoint POST /consumer/v1/appointments
@optional {completeBooking: str, locationId: str, serviceId: str, calendarId: str, serviceAllocationId: str, resourceId: str, resourceIds: str, resourceGroupId: str, customerId: str, email: str, name: str, phone: str, phoneType: str, bookingWindowId: str, bookedBy: str, location: str, timezoneName: str, startDateTime: str(date-time), endDateTime: str(date-time), travelTimeMins: int(int32), travelAppointmentId: str, customerMessage: str, notes: str, groupSize: int(int32), customFields: map{field1: str, field2: str, field3: str, field4: str, field5: str, field6: str, field7: str, field8: str, field9: str, field10: str}, appointmentBookingFields: [map{name: str, value: str}], customerBookingFields: [map{name: str, value: str}]}
@returns(200) {object: str?, id: str?, locationId: str?, businessName: str?, calendarId: str?, serviceId: str?, serviceName: str?, serviceImageUrl: str?, resourceId: str?, resourceName: str?, resourceGroupId: str?, resourceGroupName: str?, resourceImageUrl: str?, resourceEmail: str?, customerId: str?, serviceAllocationId: str?, rescheduledId: str?, createDate: str?, startDateTime: str?, endDateTime: str?, dateInternational: str?, date: str?, time: int(int32), duration: int(int32), timezone: int(int32)?, timezoneId: str?, timezoneIana: str?, ipAddress: str?, status: str?, confirmationNumber: str?, downloadIcsUrl: str?, bookedBy: str?, onlineBooking: bool?, confirmed: bool, email: str?, name: str?, lastname: str?, firstname: str?, phone: str?, phoneType: str?, phoneExt: str?, customerMessage: str?, notes: str?, groupSize: int(int32)?, lastModifiedOn: str?, lastModifiedBy: str?, emailConfirmationSent: str?, emailReminderSent: str?, smsConfirmationSent: str?, smsReminderSent: str?, location: str?, latitude: str?, longitude: str?, stripeChargeId: str?, stripeRefundId: str?, paymentStatus: int(int32), resources: [map]?, customers: [map]?, customFields: map?, auditTrail: [map]?, appointmentBookingFields: [map]?, customerBookingFields: [map]?, bookingForms: map{bookingForm: str?, bookingConfirmationPage: str?}}

@endpoint GET /consumer/v1/appointments/{id}
@required {id: str}
@returns(200) {object: str?, id: str?, locationId: str?, businessName: str?, calendarId: str?, serviceId: str?, serviceName: str?, serviceImageUrl: str?, resourceId: str?, resourceName: str?, resourceGroupId: str?, resourceGroupName: str?, resourceImageUrl: str?, resourceEmail: str?, customerId: str?, serviceAllocationId: str?, rescheduledId: str?, createDate: str?, startDateTime: str?, endDateTime: str?, dateInternational: str?, date: str?, time: int(int32), duration: int(int32), timezone: int(int32)?, timezoneId: str?, timezoneIana: str?, ipAddress: str?, status: str?, confirmationNumber: str?, downloadIcsUrl: str?, bookedBy: str?, onlineBooking: bool?, confirmed: bool, email: str?, name: str?, lastname: str?, firstname: str?, phone: str?, phoneType: str?, phoneExt: str?, customerMessage: str?, notes: str?, groupSize: int(int32)?, lastModifiedOn: str?, lastModifiedBy: str?, emailConfirmationSent: str?, emailReminderSent: str?, smsConfirmationSent: str?, smsReminderSent: str?, location: str?, latitude: str?, longitude: str?, stripeChargeId: str?, stripeRefundId: str?, paymentStatus: int(int32), resources: [map]?, customers: [map]?, customFields: map?, auditTrail: [map]?}

@endpoint DELETE /consumer/v1/appointments/{id}
@required {id: str}
@returns(200) {object: str?, id: str?, locationId: str?, businessName: str?, calendarId: str?, serviceId: str?, serviceName: str?, serviceImageUrl: str?, resourceId: str?, resourceName: str?, resourceGroupId: str?, resourceGroupName: str?, resourceImageUrl: str?, resourceEmail: str?, customerId: str?, serviceAllocationId: str?, rescheduledId: str?, createDate: str?, startDateTime: str?, endDateTime: str?, dateInternational: str?, date: str?, time: int(int32), duration: int(int32), timezone: int(int32)?, timezoneId: str?, timezoneIana: str?, ipAddress: str?, status: str?, confirmationNumber: str?, downloadIcsUrl: str?, bookedBy: str?, onlineBooking: bool?, confirmed: bool, email: str?, name: str?, lastname: str?, firstname: str?, phone: str?, phoneType: str?, phoneExt: str?, customerMessage: str?, notes: str?, groupSize: int(int32)?, lastModifiedOn: str?, lastModifiedBy: str?, emailConfirmationSent: str?, emailReminderSent: str?, smsConfirmationSent: str?, smsReminderSent: str?, location: str?, latitude: str?, longitude: str?, stripeChargeId: str?, stripeRefundId: str?, paymentStatus: int(int32), resources: [map]?, customers: [map]?, customFields: map?, auditTrail: [map]?}

@endpoint PUT /consumer/v1/appointments/{id}/book
@required {id: str}
@optional {email: str, name: str, phone: str, phoneType: str, phoneExt: str, customerMessage: str, notes: str, groupSize: int(int32), customFields: map{field1: str, field2: str, field3: str, field4: str, field5: str, field6: str, field7: str, field8: str, field9: str, field10: str}, appointmentBookingFields: [map{name: str, value: str}], customerBookingFields: [map{name: str, value: str}]}
@returns(200) {object: str?, id: str?, locationId: str?, businessName: str?, calendarId: str?, serviceId: str?, serviceName: str?, serviceImageUrl: str?, resourceId: str?, resourceName: str?, resourceGroupId: str?, resourceGroupName: str?, resourceImageUrl: str?, resourceEmail: str?, customerId: str?, serviceAllocationId: str?, rescheduledId: str?, createDate: str?, startDateTime: str?, endDateTime: str?, dateInternational: str?, date: str?, time: int(int32), duration: int(int32), timezone: int(int32)?, timezoneId: str?, timezoneIana: str?, ipAddress: str?, status: str?, confirmationNumber: str?, downloadIcsUrl: str?, bookedBy: str?, onlineBooking: bool?, confirmed: bool, email: str?, name: str?, lastname: str?, firstname: str?, phone: str?, phoneType: str?, phoneExt: str?, customerMessage: str?, notes: str?, groupSize: int(int32)?, lastModifiedOn: str?, lastModifiedBy: str?, emailConfirmationSent: str?, emailReminderSent: str?, smsConfirmationSent: str?, smsReminderSent: str?, location: str?, latitude: str?, longitude: str?, stripeChargeId: str?, stripeRefundId: str?, paymentStatus: int(int32), resources: [map]?, customers: [map]?, customFields: map?, auditTrail: [map]?}

@endpoint PUT /consumer/v1/appointments/{id}/reserve
@required {id: str}
@optional {sendNotifications: bool, email: str, name: str, phone: str, phoneType: str, phoneExt: str, customerMessage: str, notes: str, customFields: map{field1: str, field2: str, field3: str, field4: str, field5: str, field6: str, field7: str, field8: str, field9: str, field10: str}, appointmentBookingFields: [map{name: str, value: str}], customerBookingFields: [map{name: str, value: str}]}
@returns(200)

@endpoint PUT /consumer/v1/appointments/{id}/cancel
@required {id: str}
@returns(200) {object: str?, id: str?, locationId: str?, businessName: str?, calendarId: str?, serviceId: str?, serviceName: str?, serviceImageUrl: str?, resourceId: str?, resourceName: str?, resourceGroupId: str?, resourceGroupName: str?, resourceImageUrl: str?, resourceEmail: str?, customerId: str?, serviceAllocationId: str?, rescheduledId: str?, createDate: str?, startDateTime: str?, endDateTime: str?, dateInternational: str?, date: str?, time: int(int32), duration: int(int32), timezone: int(int32)?, timezoneId: str?, timezoneIana: str?, ipAddress: str?, status: str?, confirmationNumber: str?, downloadIcsUrl: str?, bookedBy: str?, onlineBooking: bool?, confirmed: bool, email: str?, name: str?, lastname: str?, firstname: str?, phone: str?, phoneType: str?, phoneExt: str?, customerMessage: str?, notes: str?, groupSize: int(int32)?, lastModifiedOn: str?, lastModifiedBy: str?, emailConfirmationSent: str?, emailReminderSent: str?, smsConfirmationSent: str?, smsReminderSent: str?, location: str?, latitude: str?, longitude: str?, stripeChargeId: str?, stripeRefundId: str?, paymentStatus: int(int32), resources: [map]?, customers: [map]?, customFields: map?, auditTrail: [map]?}

@endpoint PUT /consumer/v1/appointments/{id}/reschedule
@required {id: str}
@optional {serviceId: str, resourceId: str, resourceIds: str, startDateTime: str(date-time), endDateTime: str(date-time), travelTimeMins: int(int32), travelAppointmentId: str}
@returns(200) {object: str?, id: str?, locationId: str?, businessName: str?, calendarId: str?, serviceId: str?, serviceName: str?, serviceImageUrl: str?, resourceId: str?, resourceName: str?, resourceGroupId: str?, resourceGroupName: str?, resourceImageUrl: str?, resourceEmail: str?, customerId: str?, serviceAllocationId: str?, rescheduledId: str?, createDate: str?, startDateTime: str?, endDateTime: str?, dateInternational: str?, date: str?, time: int(int32), duration: int(int32), timezone: int(int32)?, timezoneId: str?, timezoneIana: str?, ipAddress: str?, status: str?, confirmationNumber: str?, downloadIcsUrl: str?, bookedBy: str?, onlineBooking: bool?, confirmed: bool, email: str?, name: str?, lastname: str?, firstname: str?, phone: str?, phoneType: str?, phoneExt: str?, customerMessage: str?, notes: str?, groupSize: int(int32)?, lastModifiedOn: str?, lastModifiedBy: str?, emailConfirmationSent: str?, emailReminderSent: str?, smsConfirmationSent: str?, smsReminderSent: str?, location: str?, latitude: str?, longitude: str?, stripeChargeId: str?, stripeRefundId: str?, paymentStatus: int(int32), resources: [map]?, customers: [map]?, customFields: map?, auditTrail: [map]?}

@endpoint PUT /consumer/v1/appointments/{id}/noshow
@required {id: int(int32)}
@returns(200)

@endpoint PUT /consumer/v1/appointments/{id}/confirm
@required {id: int(int32)}
@optional {undo: bool}
@returns(200)

@endpoint GET /consumer/v1/appointments/customfields
@optional {locationId: str}
@returns(200) {object: str?, total: int(int32), customFields: [map]?}

@endpoint GET /consumer/v1/appointments/bookingfields
@optional {locationId: str}
@returns(200) {object: str?, total: int(int32), bookingFields: [map]?}

@endpoint GET /consumer/v1/availability/{serviceId}/{startDate}/{endDate}
@required {serviceId: str, startDate: str(date-time), endDate: str(date-time)}
@optional {startTime: int(int32), endTime: int(int32), locationId: str, resourceId: str, resourceGroupId: str, resourceIds: str, roundRobin: str, duration: int(int32), interval: int(int32), timezoneName: str, tzOffset: int(int32), destination: str, dayAvailabilityStartDate: str(date-time), dayAvailability: int(int32), firstDayAvailable: bool}
@returns(200) {url: str?, object: str?, businessName: str?, locationId: str?, serviceId: str?, serviceName: str?, serviceDescription: str?, serviceDuration: int(int32), startDate: str?, endDate: str?, resourceId: str?, resourceIds: str?, resourceName: str?, resourceDescription: str?, calendarId: str?, calendarResourceGroupId: str?, timezoneName: str?, tzRequested: int(int32)?, firstAvailableDate: str?, availableDays: [map]?, availableTimes: [map]?}

@endpoint GET /consumer/v1/availability/{serviceId}/{startDate}/{endDate}/days
@required {serviceId: str, startDate: str(date-time), endDate: str(date-time)}
@optional {locationId: str, resourceId: str, tzOffset: int(int32)}
@returns(200) {url: str?, object: str?, serviceId: str?, serviceName: str?, serviceDescription: str?, resourceId: str?, resourceName: str?, resourceDescription: str?, tzRequested: int(int32)?, availableDays: [map]?}

@endpoint GET /consumer/v1/availability/{serviceId}/{startDate}/{endDate}/unavailable
@required {serviceId: str, startDate: str(date-time), endDate: str(date-time)}
@optional {locationId: str, resourceId: str, resourceIds: str, duration: int(int32), tzOffset: int(int32), skipTimePastUnavailability: bool}
@returns(200) {object: str?, url: str?, unavailableTimes: [map]?}

@endpoint GET /consumer/v1/customers
@optional {locationId: str, groupId: str, email: str, lastname: str, firstname: str, deleted: bool, offset: int(int32), limit: int(int32)}
@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?}

@endpoint POST /consumer/v1/customers
@optional {locationId: str, email: str, name: str, lastname: str, firstname: str, type: int(int32), stripeCustomerId: str, notificationType: str, sendLeadNotification: bool, address: map{addressLine1: str, addressLine2: str, city: str, state: str, country: str, postalCode: str}, contact: map{preferredPhoneType: str, homePhone: str, mobilePhone: str, businessPhone: str, businessPhoneExt: str, skypeUsername: str, conferenceInfo: str}, customFields: map{field1: str, field2: str, field3: str, field4: str, field5: str, field6: str, field7: str, field8: str, field9: str, field10: str}}
@returns(200) {object: str?, id: str?, locationId: str?, businessName: str?, email: str?, name: str?, lastname: str?, firstname: str?, companyName: str?, gender: str?, birthdate: str?, lastVisitDate: str?, groupId: str?, resourceId: str?, createdOn: str?, createdBy: str?, registeredBy: str?, verifiedBy: str?, modifiedBy: str?, modifiedOn: str?, verificationDate: str?, registrationDate: str?, emailInfo: bool?, emailPromotion: bool?, disabled: bool?, inviteEmailSent: str?, welcomeEmailSent: str?, deletedStatus: bool, deletedTime: str?, notificationType: str?, subscriptionId: str?, latitude: str?, longitude: str?, stripeCustomerId: str?, contact: map{phoneType: str?, homePhone: str?, mobilePhone: str?, businessPhone: str?, businessPhoneExt: str?, skypeUsername: str?, conferenceInfo: str?}, address: map{addressLine1: str?, addressLine2: str?, city: str?, state: str?, country: str?, postalCode: str?}, customFields: map?}

@endpoint GET /consumer/v1/customers/{id}
@required {id: str}
@returns(200) {object: str?, id: str?, locationId: str?, businessName: str?, email: str?, name: str?, lastname: str?, firstname: str?, companyName: str?, gender: str?, birthdate: str?, lastVisitDate: str?, groupId: str?, resourceId: str?, createdOn: str?, createdBy: str?, registeredBy: str?, verifiedBy: str?, modifiedBy: str?, modifiedOn: str?, verificationDate: str?, registrationDate: str?, emailInfo: bool?, emailPromotion: bool?, disabled: bool?, inviteEmailSent: str?, welcomeEmailSent: str?, deletedStatus: bool, deletedTime: str?, notificationType: str?, subscriptionId: str?, latitude: str?, longitude: str?, stripeCustomerId: str?, contact: map{phoneType: str?, homePhone: str?, mobilePhone: str?, businessPhone: str?, businessPhoneExt: str?, skypeUsername: str?, conferenceInfo: str?}, address: map{addressLine1: str?, addressLine2: str?, city: str?, state: str?, country: str?, postalCode: str?}, customFields: map?}

@endpoint PUT /consumer/v1/customers/{id}
@required {id: str}
@optional {locationId: str, type: int(int32), email: str, name: str, lastname: str, firstname: str, stripeCustomerId: str, notificationType: str, address: map{addressLine1: str, addressLine2: str, city: str, state: str, country: str, postalCode: str}, contact: map{preferredPhoneType: str, homePhone: str, mobilePhone: str, businessPhone: str, businessPhoneExt: str, skypeUsername: str, conferenceInfo: str}, customFields: map{field1: str, field2: str, field3: str, field4: str, field5: str, field6: str, field7: str, field8: str, field9: str, field10: str}}
@returns(200)

@endpoint DELETE /consumer/v1/customers/{id}
@required {id: str}
@returns(200)

@endpoint GET /consumer/v1/customers/customfields
@optional {locationId: str, leadQuestions: bool}
@returns(200) {object: str?, total: int(int32), customFields: [map]?}

@endpoint GET /consumer/v1/customers/bookingfields
@optional {locationId: str}
@returns(200) {object: str?, total: int(int32), bookingFields: [map]?}

@endpoint GET /consumer/v1/customers/countries
@returns(200)

@endpoint GET /consumer/v1/customers/states
@optional {country: str}
@returns(200)

@endpoint GET /consumer/v1/locations
@optional {name: str, nearestTo: str, proximity: int(int32), units: str, serviceId: str, friendlyId: str, regionId: str, ignorePrimary: bool, offset: int(int32), limit: int(int32)}
@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?}

@endpoint GET /consumer/v1/locations/{id}
@required {id: str}
@returns(200) {object: str?, id: str?, friendlyId: str?, companyId: str?, companyName: str?, name: str?, adminEmail: str?, adminName: str?, phone: str?, fax: str?, email: str?, website: str?, regionId: str?, logo: str?, imageUrl: str?, timezoneId: str?, timezoneIana: str?, timezoneOffset: int(int32)?, primaryBusiness: bool, primaryCalendarId: str?, latitude: num(double), longitude: num(double), travel: map{startAddress: str?, startLat: str?, startLon: str?, distance: str?, proximity: str?, units: str?}, address: map{addressLine1: str?, addressLine2: str?, city: str?, state: str?, country: str?, postalCode: str?}, businessHours: map{mon: map{isOpen: bool, startTime: int(int32), endTime: int(int32), is24Hours: bool}, tue: map{isOpen: bool, startTime: int(int32), endTime: int(int32), is24Hours: bool}, wed: map{isOpen: bool, startTime: int(int32), endTime: int(int32), is24Hours: bool}, thu: map{isOpen: bool, startTime: int(int32), endTime: int(int32), is24Hours: bool}, fri: map{isOpen: bool, startTime: int(int32), endTime: int(int32), is24Hours: bool}, sat: map{isOpen: bool, startTime: int(int32), endTime: int(int32), is24Hours: bool}, sun: map{isOpen: bool, startTime: int(int32), endTime: int(int32), is24Hours: bool}}, businessHolidays: [map]?, services: [map]?, settings: map{object: str?, companyId: str?, businessId: str?, locationId: str?, enabled: bool, familyMembersEnabled: bool, customerVerification: bool, serviceLabel: str?, resourceSelection: bool, resourceLabel: str?, resourceAnyLabel: str?, id: int(int32), defaultService: bool?, liveMode: bool?, firstAvailable: bool?, formFlow: int(int32), availabilityForm: int(int32), showServiceGroups: bool, bookWithAccount: bool, bookingPolicy: str?, bookingMessage: str?, showOnSchedLogo: bool, showBusinessLogo: bool, enableWorldTimezones: bool?, disableAuthorization: bool?, hideNavBar: bool?, hideLocationNav: bool?, hideServiceGroupsNav: bool?, hideServicesNav: bool?, hideContinueBooking: bool?, defaultToCustomerTimezone: bool, returnToService: bool, returnToAvailability: bool, hideBreadCrumbNav: bool, bookingTimerMins: int(int32), bookAheadUnit: int(int32), bookAheadValue: int(int32), bookInAdvance: int(int32), customerBookingsPerDay: int(int32), lateCancelHours: int(int32), lateCancelAction: int(int32), lateRescheduleHours: int(int32), lateRescheduleAction: int(int32), bookingConfirmationMessage: str?}, defaults: map{object: str?, enableUtcTimezone: bool?, customerState: bool?, customerCity: bool?, autoUpdateCustomer: bool?, businessNotification: bool?, emailInfo: bool?}, appointmentReminders: map{emailFirstReminder: int(int32), emailFirstReminderInterval: int(int32), emailSecondReminder: int(int32), emailSecondReminderInterval: int(int32), smsFirstReminder: int(int32), smsFirstReminderInterval: int(int32), smsSecondReminder: int(int32), smsSecondReminderInterval: int(int32)}}

@endpoint GET /consumer/v1/resourcegroups
@optional {locationId: str, deleted: bool, offset: int(int32), limit: int(int32)}
@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?}

@endpoint GET /consumer/v1/resourcegroups/{id}
@required {id: str}
@returns(200) {object: str?, id: str?, locationId: str?, name: str?, description: str?, email: str?, bookingNotification: int(int32), deletedStatus: bool, deletedTime: str(date-time)?}

@endpoint GET /consumer/v1/resources
@optional {locationId: str, resourceGroupId: int(int32), email: str, name: str, sortOrder: str, offset: int(int32), limit: int(int32)}
@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?}
@errors {400, 404}

@endpoint GET /consumer/v1/resources/{id}
@required {id: int(int32)}
@returns(200) {object: str?, id: str?, locationId: str?, name: str?, email: str?, groupId: str?, description: str?, imageUrl: str?, deletedStatus: bool, deletedTime: str(date-time)?, notificationType: int(int32), bookingNotification: int(int32), googleCalendarId: str?, outlookCalendarId: str?, ignoreBusinessHours: bool, gender: str?, recurringAvailability: bool?, hourly: num(double)?, calendarAvailability: int(int32), sortKey: int(int32), skypeName: str?, bioLink: str?, timezoneOffset: int(int32)?, timezoneId: str?, timezoneIana: str?, effectiveDate: str(date-time)?, contact: map{phoneType: str?, homePhone: str?, mobilePhone: str?, businessPhone: str?, businessPhoneExt: str?, skypeUsername: str?, conferenceInfo: str?}, address: map{addressLine1: str?, addressLine2: str?, city: str?, state: str?, country: str?, postalCode: str?}, availability: map{mon: map{startTime: int(int32), endTime: int(int32)}, tue: map{startTime: int(int32), endTime: int(int32)}, wed: map{startTime: int(int32), endTime: int(int32)}, thu: map{startTime: int(int32), endTime: int(int32)}, fri: map{startTime: int(int32), endTime: int(int32)}, sat: map{startTime: int(int32), endTime: int(int32)}, sun: map{startTime: int(int32), endTime: int(int32)}}, services: [map]?, customFields: map{field1: str?, field2: str?, field3: str?, field4: str?, field5: str?, field6: str?, field7: str?, field8: str?, field9: str?, field10: str?}}

@endpoint GET /consumer/v1/resources/{id}/services
@required {id: int(int32)}
@optional {offset: int(int32), limit: int(int32)}
@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?}
@errors {400, 401, 404}

@endpoint GET /consumer/v1/servicegroups
@optional {locationId: str, offset: int(int32), limit: int(int32)}
@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?}

@endpoint GET /consumer/v1/servicegroups/{id}
@required {id: int(int32)}
@returns(200) {object: str?, imageUrl: str?, id: str?, companyId: str?, locationId: str?, name: str?, type: int(int32), description: str?, isDeleted: bool}

@endpoint GET /consumer/v1/services
@optional {locationId: str, serviceGroupId: int(int32), defaultService: bool, allLocations: bool, scope: str, name: str, serviceId: str, offset: int(int32), limit: int(int32), sortOrder: str, sortDescending: bool}
@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?}

@endpoint GET /consumer/v1/services/{id}
@required {id: int(int32)}
@returns(200) {object: str?, id: str?, companyId: str?, locationId: str?, name: str?, description: str?, type: str?, imageUrl: str?, mediaPageUrl: str?, serviceGroupId: int(int32)?, serviceGroupName: str?, calendarId: str?, calendarResourceGroupId: str?, bookingLimit: int(int32), bookingInterval: int(int32), bookAheadUnit: int(int32), bookAheadValue: int(int32), bookInAdvance: int(int32), roundRobin: int(int32), showOnline: bool, defaultService: bool, duration: int(int32), durationSelect: bool, durationMin: int(int32), durationMax: int(int32), durationInterval: int(int32), padding: int(int32), consumerPadding: bool, feeAmount: num(double), feeTaxable: bool, cancellationFeeAmount: num(double), cancellationFeeTaxable: bool, nonRefundable: bool, dailyBookingLimitCount: int(int32), dailyBookingLimitMinutes: int(int32), maxBookingLimit: int(int32), maxResourceBookingLimit: int(int32), maxCapacity: int(int32), maxGroupSize: int(int32), availability: map{mon: map{startTime: int(int32), endTime: int(int32)}, tue: map{startTime: int(int32), endTime: int(int32)}, wed: map{startTime: int(int32), endTime: int(int32)}, thu: map{startTime: int(int32), endTime: int(int32)}, fri: map{startTime: int(int32), endTime: int(int32)}, sat: map{startTime: int(int32), endTime: int(int32)}, sun: map{startTime: int(int32), endTime: int(int32)}}, customFields: map{field1: str?, field2: str?, field3: str?, field4: str?, field5: str?, field6: str?, field7: str?, field8: str?, field9: str?, field10: str?}}

@endpoint GET /consumer/v1/services/{id}/resources
@required {id: str}
@optional {locationId: str, offset: int(int32), limit: int(int32)}
@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?}

@endpoint GET /consumer/v1/services/{id}/allocations
@required {id: str}
@optional {locationId: str, resourceId: str, startDate: str(date-time), endDate: str(date-time), offset: int(int32), limit: int(int32)}
@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?}
@errors {400, 401, 404}

@endpoint GET /consumer/v1/services/allocations/{id}
@required {id: str}
@returns(200) {object: str?, id: str?, locationId: str?, timezoneOffset: int(int32)?, timezoneName: str?, serviceId: str?, serviceName: str?, serviceDescription: str?, serviceImageUrl: str?, serviceDuration: int(int32), reason: str?, bookingLimit: int(int32), bookingCount: int(int32), startDate: str?, endDate: str?, startTime: int(int32), endTime: int(int32), repeats: bool, repeat: map{frequency: str?, interval: int(int32), weekdays: str?, monthDay: str?, monthType: str?}, deletedStatus: bool, deletedTime: str?, resourceId: str?, resourceName: str?, resourceDescription: str?, resourceImageUrl: str?, resourcePhone: map{phoneType: str?, homePhone: str?, mobilePhone: str?, businessPhone: str?, businessPhoneExt: str?}, resourceAddress: map{addressLine1: str?, addressLine2: str?, city: str?, state: str?, country: str?, postalCode: str?}}

@end
