{"files":{"SKILL.md":"---\nname: onsched-consumer-api\ndescription: \"OnSched Consumer API skill. Use when working with OnSched Consumer for consumer. Covers 38 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# OnSched Consumer API\nAPI version: v1\n\n## Auth\nOAuth2\n\n## Base URL\nhttps://sandbox-api.onsched.com/\n\n## Setup\n1. Configure auth: OAuth2\n2. GET /consumer/v1/appointments -- get appointments\n3. POST /consumer/v1/appointments -- create first appointment\n\n## Endpoints\n38 endpoints across 1 group. See references/api-spec.lap for full details.\n\n### Consumer\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /consumer/v1/appointments | Get Appointments |\n| POST | /consumer/v1/appointments | Create Appointment |\n| GET | /consumer/v1/appointments/{id} | Get Appointment |\n| DELETE | /consumer/v1/appointments/{id} | Delete Appointment |\n| PUT | /consumer/v1/appointments/{id}/book | Book Appointment |\n| PUT | /consumer/v1/appointments/{id}/reserve | Reserve Appointment |\n| PUT | /consumer/v1/appointments/{id}/cancel | Cancel Appointment |\n| PUT | /consumer/v1/appointments/{id}/reschedule | Reschedule Appointment |\n| PUT | /consumer/v1/appointments/{id}/noshow | Set NoShow Status |\n| PUT | /consumer/v1/appointments/{id}/confirm | Confirm Appointment |\n| GET | /consumer/v1/appointments/customfields | Get Custom Fields List |\n| GET | /consumer/v1/appointments/bookingfields | Get Custom Fields Labels |\n| GET | /consumer/v1/availability/{serviceId}/{startDate}/{endDate} | Get Available Times |\n| GET | /consumer/v1/availability/{serviceId}/{startDate}/{endDate}/days | Get Available Days |\n| GET | /consumer/v1/availability/{serviceId}/{startDate}/{endDate}/unavailable | Get Unavailable Times |\n| GET | /consumer/v1/customers | List Customers |\n| POST | /consumer/v1/customers | Create Customer |\n| GET | /consumer/v1/customers/{id} | Get Customer |\n| PUT | /consumer/v1/customers/{id} | Update Customer |\n| DELETE | /consumer/v1/customers/{id} | Delete Customer |\n| GET | /consumer/v1/customers/customfields | Get Customer Custom Fields |\n| GET | /consumer/v1/customers/bookingfields | Get Customer Booking Fields |\n| GET | /consumer/v1/customers/countries | List Country Codes |\n| GET | /consumer/v1/customers/states | List Country States |\n| GET | /consumer/v1/locations | List Locations |\n| GET | /consumer/v1/locations/{id} | Get Location |\n| GET | /consumer/v1/resourcegroups | List Resource Groups |\n| GET | /consumer/v1/resourcegroups/{id} | Get Resource Group |\n| GET | /consumer/v1/resources | List Resources |\n| GET | /consumer/v1/resources/{id} | Get Resource |\n| GET | /consumer/v1/resources/{id}/services | Get Resource Linked Services |\n| GET | /consumer/v1/servicegroups | List Service Groups |\n| GET | /consumer/v1/servicegroups/{id} | Get Service Group |\n| GET | /consumer/v1/services | List Services |\n| GET | /consumer/v1/services/{id} | Get Service |\n| GET | /consumer/v1/services/{id}/resources | List Resources for Service |\n| GET | /consumer/v1/services/{id}/allocations | List Service Allocations |\n| GET | /consumer/v1/services/allocations/{id} | Get Service Allocation |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"List all appointments?\" -> GET /consumer/v1/appointments\n- \"Create a appointment?\" -> POST /consumer/v1/appointments\n- \"Get appointment details?\" -> GET /consumer/v1/appointments/{id}\n- \"Delete a appointment?\" -> DELETE /consumer/v1/appointments/{id}\n- \"List all customfields?\" -> GET /consumer/v1/appointments/customfields\n- \"List all bookingfields?\" -> GET /consumer/v1/appointments/bookingfields\n- \"Get availability details?\" -> GET /consumer/v1/availability/{serviceId}/{startDate}/{endDate}\n- \"List all days?\" -> GET /consumer/v1/availability/{serviceId}/{startDate}/{endDate}/days\n- \"List all unavailable?\" -> GET /consumer/v1/availability/{serviceId}/{startDate}/{endDate}/unavailable\n- \"List all customers?\" -> GET /consumer/v1/customers\n- \"Create a customer?\" -> POST /consumer/v1/customers\n- \"Get customer details?\" -> GET /consumer/v1/customers/{id}\n- \"Update a customer?\" -> PUT /consumer/v1/customers/{id}\n- \"Delete a customer?\" -> DELETE /consumer/v1/customers/{id}\n- \"List all countries?\" -> GET /consumer/v1/customers/countries\n- \"List all states?\" -> GET /consumer/v1/customers/states\n- \"List all locations?\" -> GET /consumer/v1/locations\n- \"Get location details?\" -> GET /consumer/v1/locations/{id}\n- \"List all resourcegroups?\" -> GET /consumer/v1/resourcegroups\n- \"Get resourcegroup details?\" -> GET /consumer/v1/resourcegroups/{id}\n- \"List all resources?\" -> GET /consumer/v1/resources\n- \"Get resource details?\" -> GET /consumer/v1/resources/{id}\n- \"List all services?\" -> GET /consumer/v1/resources/{id}/services\n- \"List all servicegroups?\" -> GET /consumer/v1/servicegroups\n- \"Get servicegroup details?\" -> GET /consumer/v1/servicegroups/{id}\n- \"Get service details?\" -> GET /consumer/v1/services/{id}\n- \"List all allocations?\" -> GET /consumer/v1/services/{id}/allocations\n- \"Get allocation details?\" -> GET /consumer/v1/services/allocations/{id}\n- \"How to authenticate?\" -> See Auth section above\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Paginated endpoints accept limit/offset or cursor parameters\n- Create/update endpoints return the modified resource on success\n- Error responses include status codes and descriptions in the spec\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api OnSched Consumer API\n@base https://sandbox-api.onsched.com/\n@version v1\n@auth OAuth2\n@endpoints 38\n@hint download_for_search\n@toc consumer(38)\n\n@endpoint GET /consumer/v1/appointments\n@desc Get Appointments\n@optional {locationId: str # id of business location, email: str # Filter by email address, lastname: str # Filter by lastname or part of it, phone: str # Filter by phone number or part of it, serviceId: str # Filter by service, calendarId: str # Filter by calendar, resourceId: str # Filter by resource, customerId: str # Filter by customer, serviceAllocationId: str # Filter by service allocation, startDate: str(date-time) # Format YYYY-MM-DD. Filter by on/after startDate, endDate: str(date-time) # Format YYYY-MM-DD. Filter on/before endDate, status: str # Filter by status: IN, BK, CN, RE, RS, bookedBy: str # Filter by the email of who booked, offset: int(int32) # Starting row of page, default 0, limit: int(int32) # Page limit, default 20, max 100}\n@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?} # Success\n\n@endpoint POST /consumer/v1/appointments\n@desc Create Appointment\n@optional {completeBooking: str # Options are \"BK\", \"RS\" or \"IN\", 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}]}\n@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?}} # Success\n\n@endpoint GET /consumer/v1/appointments/{id}\n@desc Get Appointment\n@required {id: str # id of appointment requested}\n@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]?} # Success\n\n@endpoint DELETE /consumer/v1/appointments/{id}\n@desc Delete Appointment\n@required {id: str # appointment id to delete}\n@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]?} # Success\n\n@endpoint PUT /consumer/v1/appointments/{id}/book\n@desc Book Appointment\n@required {id: str # appointment id to book}\n@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}]}\n@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]?} # Success\n\n@endpoint PUT /consumer/v1/appointments/{id}/reserve\n@desc Reserve Appointment\n@required {id: str # appointment id to reserve}\n@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}]}\n@returns(200) Success\n\n@endpoint PUT /consumer/v1/appointments/{id}/cancel\n@desc Cancel Appointment\n@required {id: str # appointment id to cancel}\n@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]?} # Success\n\n@endpoint PUT /consumer/v1/appointments/{id}/reschedule\n@desc Reschedule Appointment\n@required {id: str # appointment id to reschedule}\n@optional {serviceId: str, resourceId: str, resourceIds: str, startDateTime: str(date-time), endDateTime: str(date-time), travelTimeMins: int(int32), travelAppointmentId: str}\n@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]?} # Success\n\n@endpoint PUT /consumer/v1/appointments/{id}/noshow\n@desc Set NoShow Status\n@required {id: int(int32) # appointment id to mark as NoShow}\n@returns(200) Success\n\n@endpoint PUT /consumer/v1/appointments/{id}/confirm\n@desc Confirm Appointment\n@required {id: int(int32) # appointment id to confirm}\n@optional {undo: bool # Use this parameter to undo the confirmed status}\n@returns(200) Success\n\n@endpoint GET /consumer/v1/appointments/customfields\n@desc Get Custom Fields List\n@optional {locationId: str # id of business location}\n@returns(200) {object: str?, total: int(int32), customFields: [map]?} # Success\n\n@endpoint GET /consumer/v1/appointments/bookingfields\n@desc Get Custom Fields Labels\n@optional {locationId: str # id of business location}\n@returns(200) {object: str?, total: int(int32), bookingFields: [map]?} # Success\n\n@endpoint GET /consumer/v1/availability/{serviceId}/{startDate}/{endDate}\n@desc Get Available Times\n@required {serviceId: str # Service Id for availability search, startDate: str(date-time) # Format YYYY-MM-DD: Start Date for availability search, endDate: str(date-time) # Format YYYY-MM-DD: End Date for availability search}\n@optional {startTime: int(int32) # Format Military Time Start Time for availability search. Defaults to Business Hours Start, endTime: int(int32) # Format Military Time. End Time for availability search. Defaults to Business Hours End, locationId: str # Id of business location, defaults to primary business location, resourceId: str # Resource Id for availability search, resourceGroupId: str # Resource Group Id for availability search, resourceIds: str # Comma separated Resource Id's for availability search, roundRobin: str # Round robin choice 0=none, 1=random, 2=balanced, duration: int(int32) # Duration of the service if different from default, interval: int(int32) # Booking Interval if different than the default, timezoneName: str # Requested IANA timezone Id to view availability, tzOffset: int(int32) # Request timezone offset to view availability, destination: str # For calculating travel based availability, requires distance scope, dayAvailabilityStartDate: str(date-time) # Format YYYY-DD-YY: Start date for day availability, defaults to startDate, dayAvailability: int(int32) # Number of days of day availability to return, firstDayAvailable: bool # Return available times for the first available day}\n@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]?} # Success\n\n@endpoint GET /consumer/v1/availability/{serviceId}/{startDate}/{endDate}/days\n@desc Get Available Days\n@required {serviceId: str # Service Id for day availability search, startDate: str(date-time) # Format YYYY-MM-DD: Start Date for availability search, endDate: str(date-time) # Format YYYY-MM-DD: End Date for availability search}\n@optional {locationId: str # Id of business location, defaults to primary business location, resourceId: str # Resource Id to filter on, tzOffset: int(int32) # Timezone offset to view availability for}\n@returns(200) {url: str?, object: str?, serviceId: str?, serviceName: str?, serviceDescription: str?, resourceId: str?, resourceName: str?, resourceDescription: str?, tzRequested: int(int32)?, availableDays: [map]?} # Success\n\n@endpoint GET /consumer/v1/availability/{serviceId}/{startDate}/{endDate}/unavailable\n@desc Get Unavailable Times\n@required {serviceId: str # Service Id for availability search, startDate: str(date-time) # Format YYYY-MM-DD: Start Date for unavailable time search, endDate: str(date-time) # Format YYYY-MM-DD: End Date for unavailable time search}\n@optional {locationId: str # Id of business location, defaults to primary business location, resourceId: str # Resource Id to filter on, resourceIds: str # Comma separated Resource Id(s) for availability search, duration: int(int32) # Duration of the service if different from default, tzOffset: int(int32) # Request timezone offset to view unavailable times, skipTimePastUnavailability: bool # Set as true to remove Time Past (TP) blocks in the response}\n@returns(200) {object: str?, url: str?, unavailableTimes: [map]?} # Success\n\n@endpoint GET /consumer/v1/customers\n@desc List Customers\n@optional {locationId: str # id of business location, defaults to primary business location, groupId: str # Filter by groupId, email: str # Filter by email address, lastname: str # Filter by last name, firstname: str # Filter by first name, deleted: bool # Filter by deleted status, offset: int(int32) # Starting row of page, default 0, limit: int(int32) # Page limit default 20, max 100}\n@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?} # Success\n\n@endpoint POST /consumer/v1/customers\n@desc Create Customer\n@optional {locationId: str, email: str, name: str, lastname: str, firstname: str, type: int(int32), stripeCustomerId: str, notificationType: str # 0 = default(Email), 1 = Email, 2 = SMS, 3 = Email and SMS, 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}}\n@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?} # Success\n\n@endpoint GET /consumer/v1/customers/{id}\n@desc Get Customer\n@required {id: str # id of customer object}\n@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?} # Success\n\n@endpoint PUT /consumer/v1/customers/{id}\n@desc Update Customer\n@required {id: str # id of customer object}\n@optional {locationId: str, type: int(int32), email: str, name: str, lastname: str, firstname: str, stripeCustomerId: str, notificationType: str # 0 = default(Email), 1 = Email, 2 = SMS, 3 = Email and SMS, 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}}\n@returns(200) Success\n\n@endpoint DELETE /consumer/v1/customers/{id}\n@desc Delete Customer\n@required {id: str # id of customer object}\n@returns(200) Success\n\n@endpoint GET /consumer/v1/customers/customfields\n@desc Get Customer Custom Fields\n@optional {locationId: str # id of business location, defaults to primary business location, leadQuestions: bool # A true/false indicator to filter on custom fields used for lead questions}\n@returns(200) {object: str?, total: int(int32), customFields: [map]?} # Success\n\n@endpoint GET /consumer/v1/customers/bookingfields\n@desc Get Customer Booking Fields\n@optional {locationId: str # id of business location, defaults to primary business location}\n@returns(200) {object: str?, total: int(int32), bookingFields: [map]?} # Success\n\n@endpoint GET /consumer/v1/customers/countries\n@desc List Country Codes\n@returns(200) Success\n\n@endpoint GET /consumer/v1/customers/states\n@desc List Country States\n@optional {country: str}\n@returns(200) Success\n\n@endpoint GET /consumer/v1/locations\n@desc List Locations\n@optional {name: str # Location name (full or partial), nearestTo: str # Search by distance nearest Geocoords, City, Postal/Zip Code, proximity: int(int32) # Maximum distance to display, units: str # Distance either imperial(miles), metric(kilometers), serviceId: str # Locations that offer this service, friendlyId: str # Frienldy Id of location, regionId: str # Locations within a specific region, ignorePrimary: bool # Don't include the Primary Location, offset: int(int32) # Starting row of page, default 0, limit: int(int32) # Page limit, default 20, max 100}\n@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?} # Success\n\n@endpoint GET /consumer/v1/locations/{id}\n@desc Get Location\n@required {id: str # id of business location}\n@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)}} # Success\n\n@endpoint GET /consumer/v1/resourcegroups\n@desc List Resource Groups\n@optional {locationId: str # id of business location, defaults to primary business location, deleted: bool # Filter results by deleted status, offset: int(int32) # Starting row of page, default 0, limit: int(int32) # Page limit default 20, max 100}\n@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?} # Success\n\n@endpoint GET /consumer/v1/resourcegroups/{id}\n@desc Get Resource Group\n@required {id: str # id of the resourceGroup object}\n@returns(200) {object: str?, id: str?, locationId: str?, name: str?, description: str?, email: str?, bookingNotification: int(int32), deletedStatus: bool, deletedTime: str(date-time)?} # Success\n\n@endpoint GET /consumer/v1/resources\n@desc List Resources\n@optional {locationId: str # id of business location, defaults to primary business location, resourceGroupId: int(int32) # Filter by groupId, email: str # Filter by email address, name: str # Search by name, supports Partial name search, sortOrder: str # Specify sort order of response, offset: int(int32) # Starting row of page, default 0, limit: int(int32) # Page limit default 20, max 100}\n@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?} # resource object\n@errors {400: Missing or invalid values in the request, 404: Resource was not found}\n\n@endpoint GET /consumer/v1/resources/{id}\n@desc Get Resource\n@required {id: int(int32) # id of resource object}\n@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?}} # Success\n\n@endpoint GET /consumer/v1/resources/{id}/services\n@desc Get Resource Linked Services\n@required {id: int(int32) # id of resource object}\n@optional {offset: int(int32) # Starting row of page, default 0, limit: int(int32) # Page limit default 20, max 100}\n@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?} # list of resource services\n@errors {400: Missing or invalid values in the request, 401: Unauthorized request, 404: Resource was not found}\n\n@endpoint GET /consumer/v1/servicegroups\n@desc List Service Groups\n@optional {locationId: str # id of business location, defaults to primary business location, offset: int(int32) # Starting row of page, default 0, limit: int(int32) # Page limit default 20, max 100}\n@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?} # Success\n\n@endpoint GET /consumer/v1/servicegroups/{id}\n@desc Get Service Group\n@required {id: int(int32) # id of the serviceGroup object}\n@returns(200) {object: str?, imageUrl: str?, id: str?, companyId: str?, locationId: str?, name: str?, type: int(int32), description: str?, isDeleted: bool} # Success\n\n@endpoint GET /consumer/v1/services\n@desc List Services\n@optional {locationId: str # id of business location, defaults to primary business location, serviceGroupId: int(int32) # Filter by groupId, defaultService: bool # Filter by default service, default is false, allLocations: bool # Search All Locations, default is false, scope: str # Filter by scope, Company, Location or All, default is All, name: str # Filter by Name, supports Partial name search, serviceId: str # Filter by ServiceId, using this parameter would ignore all other parameters, offset: int(int32) # Starting row of page, default 0, limit: int(int32) # Page limit default 20, max 100, sortOrder: str # Sort results using Natural Sort or Sorted alphabetically by Service Names, default is natural, sortDescending: bool # Sort results in Descending Order, default true}\n@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?} # Success\n\n@endpoint GET /consumer/v1/services/{id}\n@desc Get Service\n@required {id: int(int32) # id of service object}\n@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?}} # Success\n\n@endpoint GET /consumer/v1/services/{id}/resources\n@desc List Resources for Service\n@required {id: str # id of service object}\n@optional {locationId: str # id of business location, defaults to primary business location, offset: int(int32) # Starting row of page, default 0, limit: int(int32) # Page limit default 20, max 100}\n@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?} # Success\n\n@endpoint GET /consumer/v1/services/{id}/allocations\n@desc List Service Allocations\n@required {id: str # id of service to list allocations for, 0 for all}\n@optional {locationId: str # id of the location, defaults to the primary location, resourceId: str # id of the resource to filter on, startDate: str(date-time) # Format YYYY-MM-DD: Filter allocations on/after startDate, endDate: str(date-time) # Format YYYY-MM-DD. Filter allocations on/before endDate, offset: int(int32) # Starting row of page, default 0, limit: int(int32) # Page limit default 20, max 100}\n@returns(200) {object: str?, url: str?, hasMore: bool, count: int(int32), total: int(int32), data: [map]?} # service alloaction object\n@errors {400: Missing or invalid values in the request, 401: Authorization error., 404: Service was not found}\n\n@endpoint GET /consumer/v1/services/allocations/{id}\n@desc Get Service Allocation\n@required {id: str # id of serviceAllocation object}\n@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?}} # Success\n\n@end\n"}}