{"openapi":"3.0.0","info":{"description":"Appointment scheduling API - appointments, availability, clients, calendars, blocks, intake forms, labels, products, orders and certificates (Acuity Scheduling API v1)","version":"v1"},"servers":[{"description":"Appointment scheduling API - appointments, availability, clients, calendars, blocks, intake forms, labels, products, orders and certificates (Acuity Scheduling API v1)","url":"https://api.apirails.com/acuityscheduling"}],"paths":{"/appointments":{"get":{"tags":["Appointments"],"parameters":[{"name":"appointmentTypeID","in":"query","description":"Show only appointments of this type.","required":false,"schema":{"type":"number","example":""}},{"name":"calendarID","in":"query","description":"Show only appointments on the calendar with the specified ID.","required":false,"schema":{"type":"number","example":""}},{"name":"canceled","in":"query","description":"Get canceled appointments.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"direction","in":"query","description":"Sort direction: ASC or DESC.","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["ASC","DESC"]}}},{"name":"email","in":"query","description":"Filter appointments for client e-mail address.","required":false,"schema":{"type":"string","example":""}},{"name":"excludeForms","in":"query","description":"Don't include intake forms in the response object (speeds up the response).","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"field:id","in":"query","description":"Filter appointments matching a particular custom intake form field - the parameter name is field:<fieldID>, e.g. ?field:1234=Hello.","required":false,"schema":{"type":"string","example":""}},{"name":"firstName","in":"query","description":"Filter appointments for client first name.","required":false,"schema":{"type":"string","example":""}},{"name":"lastName","in":"query","description":"Filter appointments for client last name.","required":false,"schema":{"type":"string","example":""}},{"name":"max","in":"query","description":"Maximum number of results.","required":false,"schema":{"type":"number","example":""}},{"name":"maxDate","in":"query","description":"Only get appointments this date and before (YYYY-MM-DD).","required":false,"schema":{"type":"string","example":""}},{"name":"minDate","in":"query","description":"Only get appointments this date and after (YYYY-MM-DD).","required":false,"schema":{"type":"string","example":""}},{"name":"phone","in":"query","description":"Filter appointments for client phone number. If using a country code, ensure that the '+' is URL encoded to %2b for accurate results.","required":false,"schema":{"type":"string","example":""}},{"name":"showall","in":"query","description":"Retrieve both canceled and scheduled appointments (documented in the page's Canceled Appointments callout; not listed in the embedded spec parameter table).","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/get-appointments","api_endpoint":"https://acuityscheduling.com/api/v1/appointments"},"summary":"List appointments","description":"Get a list of appointments currently scheduled for the authenticated user. By default canceled appointments are not returned - use canceled=true for canceled only, or showall=true for both. Canceled appointments include a noShow field (true if marked a no-show by an admin, false if simply canceled).","security":[{"bearerAuth":[]}]},"post":{"tags":["Appointments"],"parameters":[{"name":"admin","in":"query","description":"Book as an admin (admin=true): disables availability and attribute validations and allows setting the notes attribute. Requires a valid calendarID in the request.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"noEmail","in":"query","description":"Don't send the confirmation e-mails or SMS (noEmail=true).","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/post-appointments","api_endpoint":"https://acuityscheduling.com/api/v1/appointments"},"summary":"Create appointment","description":"Create an appointment. By default availability and forms are validated as if the appointment were booked by a client; use /availability/dates, /availability/times or /availability/classes to find valid slots, and admin=true to book as an admin (disables validation, allows notes, requires calendarID). Validation errors return 400 with an error code (e.g. required_first_name, not_available, invalid_certificate).","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"addonIDs":{"type":"array","description":"ID(s) of the addon(s) to include in the scheduled appointment. Get IDs from GET /appointment-addons. The embedded spec types this as a single integer, but the docs prose refers to the list of addonIDs - an array is what the API accepts.","items":{"type":"number"}},"appointmentTypeID":{"type":"number","description":"Appointment type id.","required":true},"calendarID":{"type":"number","description":"Calendar ID. If not provided Acuity will try to find an available calendar automatically."},"certificate":{"type":"string","description":"Package or coupon certificate code."},"datetime":{"type":"string","description":"Required date and time for the appointment, parsed by strtotime in the business or calendar timezone.","required":true},"email":{"type":"string","description":"Client e-mail address. Required for client bookings; optional for admins.","required":true},"fields":{"type":"array","description":"Intake form values: an array of {\"id\": fieldId, \"value\": fieldValue} objects. Field IDs come from GET /forms. checkboxlist values are a single comma-delimited string (include a space after each comma). File intake fields take a string URL for the file's location - files cannot be uploaded through the API.","items":{"type":"object","properties":{"id":{"type":"number","description":"Intake form field ID (from GET /forms)","required":true},"value":{"type":"string","description":"Value to set on the field","required":true}}}},"firstName":{"type":"string","description":"Client first name.","required":true},"labels":{"type":"array","description":"An array of label objects. The API currently only accepts one label per appointment, passed as an array of length 1. Label IDs come from GET /labels.","items":{"type":"object","properties":{"color":{"type":"string","description":"Label color, e.g. \"pink\""},"id":{"type":"number","description":"Label ID (from GET /labels)","required":true},"name":{"type":"string","description":"Label name, e.g. \"Completed\""}}}},"lastName":{"type":"string","description":"Client last name.","required":true},"notes":{"type":"string","description":"Settable only when booking as an admin (admin=true)."},"phone":{"type":"string","description":"Client phone number, may be required in account settings. Optional for admins."},"smsOptIn":{"type":"boolean","description":"Indicates whether the client has explicitly given permission to receive SMS messages. Only applicable to appointment types that require opt-in; omitted/false means no SMS reminder.","enum":[true,false]},"timezone":{"type":"string","description":"Client timezone (IANA timezone identifier, e.g. America/New_York)."}}},"example":{"addonIDs":[1],"appointmentTypeID":1,"calendarID":1,"certificate":"ABC123","datetime":"2016-02-03T14:00:00-0800","email":"bob.mctest@example.com","fields":[{"id":1,"value":"Party time!"}],"firstName":"Bob","labels":[{"id":1}],"lastName":"McTest","notes":"My notes.","phone":"1231231234","smsOptIn":"","timezone":"America/New_York"}}}}}},"/appointments/{id}":{"get":{"tags":["Appointments"],"parameters":[{"name":"id","in":"path","description":"Appointment ID.","required":true,"schema":{"type":"number","example":""}},{"name":"pastFormAnswers","in":"query","description":"Include previous answers given to the intake forms of that appointment.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/get-appointments-id","api_endpoint":"https://acuityscheduling.com/api/v1/appointments/{id}"},"summary":"Get appointment","description":"Get a single appointment by ID. Canceled appointments include a noShow field (true if marked a no-show by an admin, false if simply canceled). The scheduledBy field contains the username of the user or logged-in client who scheduled the appointment (null when booked by an anonymous client).","security":[{"bearerAuth":[]}]},"put":{"tags":["Appointments"],"parameters":[{"name":"id","in":"path","description":"Appointment ID.","required":true,"schema":{"type":"number","example":""}},{"name":"admin","in":"query","description":"Book/update as an admin (pass admin=true). Booking as an admin disables availability and attribute validations; see the route description for exactly what it enables here.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/put-appointments-id","api_endpoint":"https://acuityscheduling.com/api/v1/appointments/{id}"},"summary":"Update appointment","description":"Update appointment details from a white-list of updatable attributes: firstName, lastName, phone, email, certificate, fields, notes, labels, smsOptIn. Attributes not in the body or not on the white-list are ignored; required attributes such as firstName and lastName may not be cleared. Send only the attributes to update. notes and certificate require admin=true. Rescheduling and canceling use their own endpoints.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"certificate":{"type":"string","description":"Package or coupon certificate code (admin only)."},"email":{"type":"string","description":"Client e-mail address."},"fields":{"type":"array","description":"Intake form values: an array of {\"id\": fieldId, \"value\": fieldValue} objects. Field IDs come from GET /forms. checkboxlist values are a single comma-delimited string (include a space after each comma). File intake fields take a string URL for the file's location - files cannot be uploaded through the API.","items":{"type":"object","properties":{"id":{"type":"number","description":"Intake form field ID (from GET /forms)","required":true},"value":{"type":"string","description":"Value to set on the field","required":true}}}},"firstName":{"type":"string","description":"Client first name (may not be cleared)."},"labels":{"type":"array","description":"An array of label objects. The API currently only accepts one label per appointment, passed as an array of length 1. Label IDs come from GET /labels.","items":{"type":"object","properties":{"color":{"type":"string","description":"Label color, e.g. \"pink\""},"id":{"type":"number","description":"Label ID (from GET /labels)","required":true},"name":{"type":"string","description":"Label name, e.g. \"Completed\""}}}},"lastName":{"type":"string","description":"Client last name (may not be cleared)."},"notes":{"type":"string","description":"Settable only when updating as an admin (admin=true)."},"phone":{"type":"string","description":"Client phone number."},"smsOptIn":{"type":"boolean","description":"Indicates whether the client has explicitly given permission to receive SMS messages.","enum":[true,false]}}},"example":{"certificate":"ABC123","email":"bob.mctest@example.com","fields":[{"id":1,"value":"Party time!"}],"firstName":"Bob","labels":[{"id":1}],"lastName":"McTest","notes":"These are my notes.","phone":"1231231234","smsOptIn":""}}}}}},"/appointments/{id}/cancel":{"put":{"tags":["Appointments"],"parameters":[{"name":"id","in":"path","description":"Appointment ID.","required":true,"schema":{"type":"number","example":""}},{"name":"admin","in":"query","description":"Cancel as an admin (admin=true): allows setting the noShow field and disables cancellation rules.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"noEmail","in":"query","description":"Skip sending the cancellation e-mail and SMS (noEmail=true).","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/put-appointments-id-cancel","api_endpoint":"https://acuityscheduling.com/api/v1/appointments/{id}/cancel"},"summary":"Cancel appointment","description":"Cancel an appointment. Once canceled the appointment has a noShow attribute that may be updated; it is not possible to un-cancel. Client cancellations can be rejected with cancel_not_allowed / cancel_too_close; admin=true disables cancellation rules and allows setting noShow.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"cancelNote":{"type":"string","description":"Note recorded when canceling the appointment."},"noShow":{"type":"boolean","description":"Mark the appointment as a no-show (settable when canceling as an admin).","enum":[true,false]}}},"example":{"cancelNote":"Canceled by phone.","noShow":""}}}}}},"/appointments/{id}/reschedule":{"put":{"tags":["Appointments"],"parameters":[{"name":"id","in":"path","description":"Appointment ID.","required":true,"schema":{"type":"number","example":""}},{"name":"admin","in":"query","description":"Reschedule as an admin (admin=true): disables availability validations.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"noEmail","in":"query","description":"Skip sending the rescheduling e-mail and SMS (noEmail=true).","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/put-appointments-id-reschedule","api_endpoint":"https://acuityscheduling.com/api/v1/appointments/{id}/reschedule"},"summary":"Reschedule appointment","description":"Reschedule an appointment to a different date, calendar, or both. To reschedule to an overlapping time, fetch availability with ignoreAppointmentIDs[] set to the current appointment's ID. Client reschedules can be rejected with reschedule_not_allowed / reschedule_too_close / reschedule_series / reschedule_canceled; admin=true disables availability validations.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"calendarID":{"type":"number","description":"Calendar ID to move the appointment to."},"datetime":{"type":"string","description":"New date and time for the appointment, parsed by strtotime in the business or calendar timezone.","required":true},"timezone":{"type":"string","description":"Client timezone (IANA timezone identifier, e.g. America/New_York)."}}},"example":{"calendarID":1,"datetime":"2016-02-10T14:00:00-0800","timezone":"America/New_York"}}}}}},"/appointments/{id}/payments":{"get":{"tags":["Appointments"],"parameters":[{"name":"id","in":"path","description":"Appointment ID.","required":true,"schema":{"type":"number","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/get-appointments-id-payments","api_endpoint":"https://acuityscheduling.com/api/v1/appointments/{id}/payments"},"summary":"List appointment payments","description":"Retrieve a list of payment transactions for a particular appointment. The processor key is stripe, paypal, paypal_pro, braintree or authorizenet (authorizenet and braintree are legacy, no longer supported).","security":[{"bearerAuth":[]}]}},"/appointment-types":{"get":{"tags":["Appointment Types"],"parameters":[{"name":"includeDeleted","in":"query","description":"Also include deleted appointment types in the response.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/appointment-types","api_endpoint":"https://acuityscheduling.com/api/v1/appointment-types"},"summary":"List appointment types","description":"Return appointment types. The response includes the appointment type ID needed for booking (appointmentTypeID), whether the type is active, its name and description, duration and price.","security":[{"bearerAuth":[]}]}},"/appointment-addons":{"get":{"tags":["Appointment Addons"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/appointments-addons","api_endpoint":"https://acuityscheduling.com/api/v1/appointment-addons"},"summary":"List appointment addons","description":"Get a full list of addons from the authenticated user. Addons can add time and duration to an appointment before it is booked; pass their IDs as addonIDs when creating an appointment.","security":[{"bearerAuth":[]}]}},"/availability/dates":{"get":{"tags":["Availability"],"parameters":[{"name":"addonIDs[]","in":"query","description":"Addon IDs to use when calculating availability for this appointment type; addons must be associated with the appointment type. Send as repeated addonIDs[] query parameters (addonIDs[]=1&addonIDs[]=2).","required":false,"schema":{"type":"array","example":""}},{"name":"appointmentTypeID","in":"query","description":"Numeric id of the appointment type to check availability for.","required":true,"schema":{"type":"number","example":""}},{"name":"calendarID","in":"query","description":"Numeric id of the calendar to check availability for. By default, availability is checked for all calendars the appointment type is offered on.","required":false,"schema":{"type":"number","example":""}},{"name":"month","in":"query","description":"Month to check available dates (must be parsable by strtotime, e.g. 2016-02).","required":true,"schema":{"type":"string","example":""}},{"name":"timezone","in":"query","description":"Long timezone id for availability time conversion (e.g. America/New_York).","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/get-availability-dates","api_endpoint":"https://acuityscheduling.com/api/v1/availability/dates"},"summary":"List availability dates","description":"Return dates with availability for a month and an appointment type - the same dates shown on the client scheduling page. Use together with /availability/times to find bookable slots for POST /appointments.","security":[{"bearerAuth":[]}]}},"/availability/times":{"get":{"tags":["Availability"],"parameters":[{"name":"addonIDs[]","in":"query","description":"Addon IDs to use when calculating availability for this appointment type; addons must be associated with the appointment type. Send as repeated addonIDs[] query parameters.","required":false,"schema":{"type":"array","example":""}},{"name":"appointmentTypeID","in":"query","description":"Numeric id of the appointment type to check availability for.","required":true,"schema":{"type":"number","example":""}},{"name":"calendarID","in":"query","description":"Numeric id of the calendar to check availability for. By default, availability is checked for all calendars the appointment type is offered on.","required":false,"schema":{"type":"number","example":""}},{"name":"date","in":"query","description":"Date to check available times (must be parsable by strtotime).","required":true,"schema":{"type":"string","example":""}},{"name":"ignoreAppointmentIDs[]","in":"query","description":"Appointment IDs to ignore, allowing slots that overlap the appointment - useful when rescheduling. Send as repeated ignoreAppointmentIDs[] query parameters.","required":false,"schema":{"type":"array","example":""}},{"name":"timezone","in":"query","description":"Long timezone id for availability time conversion (e.g. America/New_York).","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/get-availability-times","api_endpoint":"https://acuityscheduling.com/api/v1/availability/times"},"summary":"List availability times","description":"Return available times for a date and an appointment type - the same times shown on the client scheduling page. Use together with /availability/dates to find bookable slots for POST /appointments.","security":[{"bearerAuth":[]}]}},"/availability/classes":{"get":{"tags":["Availability"],"parameters":[{"name":"appointmentTypeID","in":"query","description":"Numeric id of the appointment type to check availability for. By default, availability is checked for all class appointment types.","required":false,"schema":{"type":"number","example":""}},{"name":"calendarID","in":"query","description":"Numeric id of the calendar to check availability for. By default, availability is checked for all calendars the appointment type is offered on.","required":false,"schema":{"type":"number","example":""}},{"name":"includePrivate","in":"query","description":"List all classes, including those marked as private.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"includeUnavailable","in":"query","description":"List all classes, including those that are no longer available.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"maxDate","in":"query","description":"The latest date to return classes for. Overridden by month.","required":false,"schema":{"type":"string","example":""}},{"name":"minDate","in":"query","description":"The earliest date to return classes for. Overridden by month.","required":false,"schema":{"type":"string","example":""}},{"name":"month","in":"query","description":"Month to check available classes (must be parsable by strtotime, e.g. 2016-02). Overrides minDate/maxDate when set.","required":false,"schema":{"type":"string","example":""}},{"name":"timezone","in":"query","description":"Long timezone id for availability time conversion (e.g. America/New_York).","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/get-availability-classes","api_endpoint":"https://acuityscheduling.com/api/v1/availability/classes"},"summary":"List availability classes","description":"Return available classes for a given month. By default all class appointment types on all calendars are checked; filter with appointmentTypeID and calendarID. The response includes slots and slotsAvailable per class.","security":[{"bearerAuth":[]}]}},"/availability/check-times":{"post":{"tags":["Availability"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/availability-check-times","api_endpoint":"https://acuityscheduling.com/api/v1/availability/check-times"},"summary":"Check availability times","description":"Validate available times for an appointment: the response includes \"valid\": true for a valid, available slot, or \"valid\": false with a reason. Checking times on separate calendars at once is supported, but validation happens per-calendar and global limits like resources are only considered for individual calendars.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"checks":{"type":"array","description":"SEND THE BARE JSON ARRAY ITSELF as the request body, NOT wrapped in an object: an array of time-check objects (a single object is accepted for one check). This endpoint takes a root JSON array, e.g. [{\"datetime\": \"2017-11-15T16:00:00-0800\", \"appointmentTypeID\": 1, \"calendarID\": 1}].","required":true,"items":{"type":"object","properties":{"appointmentTypeID":{"type":"number","description":"Appointment type id to validate the slot for.","required":true},"calendarID":{"type":"number","description":"Calendar id to validate the slot on. Optional - Acuity will try to find an available calendar."},"datetime":{"type":"string","description":"Date and time to check, parsed by strtotime in the business or calendar timezone.","required":true}}}}}},"example":{"checks":[{"appointmentTypeID":1,"calendarID":1,"datetime":"2017-11-15T16:00:00-0800"}]}}}}}},"/clients":{"get":{"tags":["Clients"],"parameters":[{"name":"search","in":"query","description":"Filter client list by first name, last name, phone number.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/clients","api_endpoint":"https://acuityscheduling.com/api/v1/clients"},"summary":"List clients","description":"List clients, optionally filtered by search string.","security":[{"bearerAuth":[]}]},"post":{"tags":["Clients"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/post-clients","api_endpoint":"https://acuityscheduling.com/api/v1/clients"},"summary":"Create client","description":"Create a new client within your client list. If the client already exists, a 400 error \"That client already exists\" is returned.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"email":{"type":"string","description":"Client e-mail address."},"firstName":{"type":"string","description":"Client first name.","required":true},"lastName":{"type":"string","description":"Client last name.","required":true},"notes":{"type":"string","description":"Notes about the client."},"phone":{"type":"string","description":"Client phone number."}}},"example":{"email":"bob.mctest@example.com","firstName":"Bob","lastName":"McTest","notes":"Prefers mornings.","phone":"1231231234"}}}}},"put":{"tags":["Clients"],"parameters":[{"name":"firstName","in":"query","description":"Client first name (used to look up the existing client).","required":true,"schema":{"type":"string","example":""}},{"name":"lastName","in":"query","description":"Client last name (used to look up the existing client).","required":true,"schema":{"type":"string","example":""}},{"name":"phone","in":"query","description":"Client phone number (used to look up the existing client).","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/put-clients","api_endpoint":"https://acuityscheduling.com/api/v1/clients"},"summary":"Update client","description":"Update a current client. Query params look up the existing client; body params update the client information on file. If the client does not exist, 400 client_not_found is returned.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"email":{"type":"string","description":"Client e-mail address."},"firstName":{"type":"string","description":"Client first name.","required":true},"lastName":{"type":"string","description":"Client last name.","required":true},"notes":{"type":"string","description":"Notes about the client."},"phone":{"type":"string","description":"Client phone number."}}},"example":{"email":"bob.mctest@example.com","firstName":"Bob","lastName":"McTest","notes":"Prefers mornings.","phone":"1231231234"}}}}},"delete":{"tags":["Clients"],"parameters":[{"name":"firstName","in":"query","description":"Client first name.","required":true,"schema":{"type":"string","example":""}},{"name":"lastName","in":"query","description":"Client last name.","required":true,"schema":{"type":"string","example":""}},{"name":"phone","in":"query","description":"Client phone number.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/delete-clients","api_endpoint":"https://acuityscheduling.com/api/v1/clients"},"summary":"Delete client","description":"Delete an existing client, looked up by name (and optionally phone). If the client does not exist, a 400 error \"Client does not exist\" is returned.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/calendars":{"get":{"tags":["Calendars"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/get-calendars","api_endpoint":"https://acuityscheduling.com/api/v1/calendars"},"summary":"List calendars","description":"Retrieves a list of calendars this user has access to, including each calendar's ID, name, timezone and location.","security":[{"bearerAuth":[]}]}},"/blocks":{"get":{"tags":["Blocks"],"parameters":[{"name":"calendarID","in":"query","description":"Only get blocks on the calendar with this ID.","required":false,"schema":{"type":"number","example":""}},{"name":"max","in":"query","description":"Maximum number of results.","required":false,"schema":{"type":"number","example":""}},{"name":"maxDate","in":"query","description":"Only get blocks this date and before (YYYY-MM-DD).","required":false,"schema":{"type":"string","example":""}},{"name":"minDate","in":"query","description":"Only get blocks this date and after (YYYY-MM-DD).","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/blocks","api_endpoint":"https://acuityscheduling.com/api/v1/blocks"},"summary":"List blocks","description":"Get a list of blocks (blocked-off time) for the authenticated user.","security":[{"bearerAuth":[]}]},"post":{"tags":["Blocks"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/post-blocks","api_endpoint":"https://acuityscheduling.com/api/v1/blocks"},"summary":"Create block","description":"Block off time on your calendar. Returns 201 with the new block, or 422 Unprocessable Entity when the data cannot be parsed or a parameter is invalid (e.g. end before start - a legacy quirk kept from before RFC 7231 widened 400).","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"calendarID":{"type":"number","description":"Calendar ID to block the time on.","required":true},"end":{"type":"string","description":"End of the blocked-off time.","required":true},"notes":{"type":"string","description":"Notes for the block."},"start":{"type":"string","description":"Start of the blocked-off time.","required":true}}},"example":{"calendarID":1,"end":"2015-07-08T12:00:00-0700","notes":"Blocked time.","start":"2015-07-08T11:00:00-0700"}}}}}},"/blocks/{id}":{"get":{"tags":["Blocks"],"parameters":[{"name":"id","in":"path","description":"Blocked time ID.","required":true,"schema":{"type":"number","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/get-blocks-id","api_endpoint":"https://acuityscheduling.com/api/v1/blocks/{id}"},"summary":"Get block","description":"Given an ID of a blocked-off time, get the details about it. Returns 404 when the block does not exist.","security":[{"bearerAuth":[]}]},"delete":{"tags":["Blocks"],"parameters":[{"name":"id","in":"path","description":"Blocked time ID.","required":true,"schema":{"type":"number","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/delete-blocks-id","api_endpoint":"https://acuityscheduling.com/api/v1/blocks/{id}"},"summary":"Delete block","description":"Delete a blocked-off time by ID. Returns 200 on success and 404 when the block does not exist.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/forms":{"get":{"tags":["Forms"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/forms","api_endpoint":"https://acuityscheduling.com/api/v1/forms"},"summary":"List intake forms","description":"Return intake forms with their fields (id, name, options, required, type). Field IDs are the ids used in the fields array when creating or updating an appointment.","security":[{"bearerAuth":[]}]}},"/labels":{"get":{"tags":["Labels"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/labels","api_endpoint":"https://acuityscheduling.com/api/v1/labels"},"summary":"List labels","description":"List appointment labels (id, name, color), e.g. Checked In, Completed, Confirmed, plus custom labels. Label IDs are used in the labels array when creating or updating an appointment.","security":[{"bearerAuth":[]}]}},"/products":{"get":{"tags":["Products"],"parameters":[{"name":"deleted","in":"query","description":"Retrieve deleted products.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/get-products","api_endpoint":"https://acuityscheduling.com/api/v1/products"},"summary":"List products and packages","description":"Get a list of products and packages (id, name, description, price, type, appointmentTypeIDs, minutes, ...).","security":[{"bearerAuth":[]}]}},"/orders":{"get":{"tags":["Orders"],"parameters":[{"name":"max","in":"query","description":"Maximum number of results.","required":false,"schema":{"type":"number","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/get-orders","api_endpoint":"https://acuityscheduling.com/api/v1/orders"},"summary":"List orders","description":"Retrieves a list of orders from the online store, most recent first. Status is paid or unpaid; title is a semi-colon separated list of the product names ordered.","security":[{"bearerAuth":[]}]}},"/orders/{id}":{"get":{"tags":["Orders"],"parameters":[{"name":"id","in":"path","description":"Order ID.","required":true,"schema":{"type":"number","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/ordersid","api_endpoint":"https://acuityscheduling.com/api/v1/orders/{id}"},"summary":"Get order","description":"Get details about a single order by ID.","security":[{"bearerAuth":[]}]}},"/certificates":{"get":{"tags":["Certificates"],"parameters":[{"name":"appointmentTypeID","in":"query","description":"Get certificate codes for a particular appointment type.","required":false,"schema":{"type":"string","example":""}},{"name":"email","in":"query","description":"Get valid codes for a particular email address. Combine this with appointmentTypeID to suggest certificates to a client.","required":false,"schema":{"type":"string","example":""}},{"name":"orderID","in":"query","description":"Get certificate codes for a particular order.","required":false,"schema":{"type":"string","example":""}},{"name":"productID","in":"query","description":"Get certificate codes for a particular product.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/get-certificates","api_endpoint":"https://acuityscheduling.com/api/v1/certificates"},"summary":"List certificates","description":"Get package/coupon certificates with their remaining uses and expiration.","security":[{"bearerAuth":[]}]},"post":{"tags":["Certificates"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/post-certificates","api_endpoint":"https://acuityscheduling.com/api/v1/certificates"},"summary":"Create certificate","description":"Create certificate codes for packages, coupons, etc. Either productID (for packages) or couponID must be submitted. Submit certificate to choose the code (e.g. \"FOOBAR\"), otherwise a random certificate is generated. Submitting email for a package assigns the certificate to that client email address.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"certificate":{"type":"string","description":"Chosen certificate code (e.g. FOOBAR); a random certificate is generated when omitted."},"couponID":{"type":"number","description":"Coupon ID to create a certificate for. Either productID or couponID must be submitted."},"email":{"type":"string","description":"Assigns the certificate to this client email address (packages)."},"productID":{"type":"number","description":"Product ID of the package to create a certificate for. Either productID or couponID must be submitted."}}},"example":{"certificate":"FOOBAR","couponID":1,"email":"bob.mctest@example.com","productID":1}}}}}},"/certificates/check":{"get":{"tags":["Certificates"],"parameters":[{"name":"appointmentTypeID","in":"query","description":"The appointment type ID to check.","required":true,"schema":{"type":"number","example":""}},{"name":"certificate","in":"query","description":"The certificate code to check.","required":true,"schema":{"type":"string","example":""}},{"name":"email","in":"query","description":"An optional email address to check if the certificate is valid for (eg. for coupon use).","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/get-certificates-check","api_endpoint":"https://acuityscheduling.com/api/v1/certificates/check"},"summary":"Check certificate","description":"Check that a certificate code is valid for a particular appointment type before setting it on an appointment. Optionally also check that the code is still valid for a particular client e-mail address, e.g. for single-use coupons.","security":[{"bearerAuth":[]}]}},"/certificates/{id}":{"delete":{"tags":["Certificates"],"parameters":[{"name":"id","in":"path","description":"Certificate ID (numeric id from GET /certificates).","required":true,"schema":{"type":"number","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/delete-certificates-id","api_endpoint":"https://acuityscheduling.com/api/v1/certificates/{id}"},"summary":"Delete certificate","description":"Delete a certificate code by its numeric certificate ID (from GET /certificates). The embedded spec omits the path parameter, but the documented path is /certificates/:id - the id is required in the URL.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/me":{"get":{"tags":["Account"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/get-me","api_endpoint":"https://acuityscheduling.com/api/v1/me"},"summary":"Get account information","description":"Get basic account information for the authenticated user. firstDayOfWeek is 0 or 1 (Sunday or Monday) and timeFormat is ampm or 24h, both set under Customize Appearance.","security":[{"bearerAuth":[]}]}},"/meta":{"get":{"tags":["Account"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://developers.acuityscheduling.com/reference/meta","api_endpoint":"https://acuityscheduling.com/api/v1/meta"},"summary":"Get service metadata","description":"Metadata for Acuity services. The response's hooks field is a list of IPv4 or IPv6 CIDRs from which webhooks will originate. This endpoint is documented with no authentication requirement (the embedded spec marks it security: []).","security":[{"bearerAuth":[]}]}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}},"security":[{"bearerAuth":[]}]}