Acuity Scheduling Appointments API

The Appointments API from Acuity Scheduling — 3 operation(s) for appointments.

OpenAPI Specification

acuity-appointments-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Acuity Scheduling Appointments API
  description: 'The Acuity Scheduling REST API allows developers to programmatically manage appointments, appointment types, availability, client records, calendar integrations, packages, gift certificates, and forms. Authentication is supported via HTTP Basic Auth using a User ID and API Key, or via OAuth2 for multi-account integrations. All responses are JSON. Webhooks allow receiving real-time push notifications for appointment lifecycle events.

    '
  version: '1.1'
  contact:
    url: https://developers.acuityscheduling.com/
  x-provider: Acuity Scheduling
  x-subsidiary: Squarespace
servers:
- url: https://acuityscheduling.com/api/v1
  description: Acuity Scheduling API v1
security:
- basicAuth: []
tags:
- name: Appointments
paths:
  /appointments:
    get:
      summary: List appointments
      description: Get a list of appointments currently scheduled for the authenticated user.
      operationId: get-appointments
      tags:
      - Appointments
      parameters:
      - name: max
        in: query
        description: Maximum number of results
        schema:
          type: integer
          format: int32
          default: 100
      - name: minDate
        in: query
        description: Only get appointments this date and after
        schema:
          type: string
          format: date
      - name: maxDate
        in: query
        description: Only get appointments this date and before
        schema:
          type: string
          format: date
      - name: calendarID
        in: query
        description: Show only appointments on calendar with specified ID
        schema:
          type: integer
          format: int32
      - name: appointmentTypeID
        in: query
        description: Show only appointments of this type
        schema:
          type: integer
          format: int32
      - name: canceled
        in: query
        description: Get canceled appointments (include noShow field in response)
        schema:
          type: boolean
          default: false
      - name: showall
        in: query
        description: Retrieve both canceled and scheduled appointments
        schema:
          type: boolean
          default: false
      - name: firstName
        in: query
        description: Filter appointments for client first name
        schema:
          type: string
      - name: lastName
        in: query
        description: Filter appointments for client last name
        schema:
          type: string
      - name: email
        in: query
        description: Filter appointments for client e-mail address
        schema:
          type: string
      - name: phone
        in: query
        description: Filter appointments for client phone number. If using a country code, ensure that the '+' is URL encoded to %2b
        schema:
          type: string
      - name: field:id
        in: query
        description: Filter appointments matching a particular custom intake form field e.g. ?field:1234=Hello
        schema:
          type: string
      - name: excludeForms
        in: query
        description: Don't include intake forms in the response object (speeds up the response)
        schema:
          type: boolean
          default: false
      - name: direction
        in: query
        description: Sort direction
        schema:
          type: string
          default: DESC
          enum:
          - ASC
          - DESC
      responses:
        '200':
          description: List of appointments
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Appointment'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
    post:
      summary: Create an appointment
      description: 'Create an appointment. By default, availability and forms are validated as if the appointment is being booked by a client. Use admin=true to disable availability and attribute validations and to allow setting notes.

        '
      operationId: post-appointments
      tags:
      - Appointments
      parameters:
      - name: admin
        in: query
        description: Book as admin — disables availability and attribute validations, allows setting notes. Requires a valid calendarID in the request body.
        schema:
          type: boolean
          default: false
      - name: noEmail
        in: query
        description: Don't send confirmation e-mails or SMS
        schema:
          type: boolean
          default: false
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - datetime
              - appointmentTypeID
              - firstName
              - lastName
              - email
              properties:
                datetime:
                  type: string
                  description: Required date and time for the appointment, parsed by strtotime in the business or calendar timezone.
                  example: 2016-02-03T14:00:00-0800
                appointmentTypeID:
                  type: integer
                  format: int32
                  description: Appointment type ID
                  example: 1
                calendarID:
                  type: integer
                  format: int32
                  description: Calendar ID. If not provided, an available calendar will be found automatically.
                firstName:
                  type: string
                  description: Client first name
                  example: Bob
                lastName:
                  type: string
                  description: Client last name
                  example: McTest
                email:
                  type: string
                  description: Client e-mail address. Optional for admins.
                  example: bob.mctest@example.com
                phone:
                  type: string
                  description: Client phone number. May be required in account settings. Optional for admins.
                timezone:
                  type: string
                  description: Client timezone
                  example: America/New_York
                certificate:
                  type: string
                  description: Package or coupon certificate code
                fields:
                  type: array
                  description: A special field for setting form field values
                  items:
                    $ref: '#/components/schemas/FormField'
                notes:
                  type: string
                  description: Settable only when booking as an admin
                addonIDs:
                  type: array
                  description: IDs of addons to be included in the scheduled appointment
                  items:
                    type: integer
                    format: int32
                labels:
                  type: array
                  description: An array of label objects. Currently only accepts an array of length 1.
                  items:
                    $ref: '#/components/schemas/Label'
                smsOptIn:
                  type: boolean
                  description: Whether the client has explicitly given permission to receive SMS messages. Only applicable when the appointment type requires opt-in.
                  default: false
      responses:
        '200':
          description: Created appointment
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Appointment'
        '400':
          description: Validation or availability error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
  /appointments/{id}:
    put:
      summary: Update an appointment
      description: 'Update appointment details from a whitelist of updatable attributes. Attributes not included in the request body or not on the whitelist will be ignored. Appointments can be rescheduled and canceled with separate APIs.

        '
      operationId: put-appointments-id
      tags:
      - Appointments
      parameters:
      - name: id
        in: path
        description: Appointment ID
        required: true
        schema:
          type: integer
          format: int32
      - name: admin
        in: query
        description: Update as admin — allows setting notes and certificate, disables attribute validations.
        schema:
          type: boolean
          default: false
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                firstName:
                  type: string
                  description: Client first name; may not be removed
                lastName:
                  type: string
                  description: Client last name; may not be removed
                email:
                  type: string
                  description: Client email. May not be removed for clients; optional for admins.
                phone:
                  type: string
                  description: Client phone. May not be removed for clients depending on account settings; optional for admins.
                certificate:
                  type: string
                  description: Package or coupon certificate code. May only be set by admins.
                fields:
                  type: array
                  description: A special field for updating form field values
                  items:
                    $ref: '#/components/schemas/FormField'
                notes:
                  type: string
                  description: May only be set by admins.
                labels:
                  type: array
                  description: An array of label objects. Currently only accepts an array of length 1.
                  items:
                    $ref: '#/components/schemas/Label'
                smsOptIn:
                  type: boolean
                  description: Whether the client has explicitly given permission to receive SMS messages. Omit to leave unchanged.
                  default: false
      responses:
        '200':
          description: Updated appointment
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Appointment'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
  /appointments/{id}/payments:
    get:
      summary: Get appointment payments
      description: Retrieve a list of payment transactions for a particular appointment.
      operationId: get-appointments-id-payments
      tags:
      - Appointments
      parameters:
      - name: id
        in: path
        description: Appointment ID
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: List of payment transactions
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Payment'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
components:
  schemas:
    AppointmentForm:
      type: object
      properties:
        id:
          type: integer
          format: int32
          example: 1
        name:
          type: string
          example: Example Intake Form
        values:
          type: array
          items:
            type: object
            properties:
              value:
                type: string
                example: 'yes'
              name:
                type: string
                example: Is this your first visit?
              fieldID:
                type: integer
                format: int32
                example: 1
              id:
                type: integer
                format: int32
                example: 21502993
    ErrorResponse:
      type: object
      properties:
        status_code:
          type: integer
          example: 400
        message:
          type: string
          example: We could not find an available calendar.
        error:
          type: string
          example: no_available_calendar
    Appointment:
      type: object
      properties:
        id:
          type: integer
          format: int32
          example: 54321
        firstName:
          type: string
          example: Bob
        lastName:
          type: string
          example: McTest
        phone:
          type: string
          example: ''
        email:
          type: string
          example: bob.mctest@example.com
        date:
          type: string
          example: July 2, 2013
        time:
          type: string
          example: 10:15am
        endTime:
          type: string
          example: 11:15am
        dateCreated:
          type: string
          example: June 17, 2013
        datetime:
          type: string
          format: date-time
          example: 2013-07-02T10:15:00-0700
        price:
          type: string
          example: '10.00'
        paid:
          type: string
          example: 'no'
        amountPaid:
          type: string
          example: '0.00'
        type:
          type: string
          example: Regular Visit
        appointmentTypeID:
          type: integer
          format: int32
          example: 1
        addonIDs:
          type: array
          items:
            type: integer
            format: int32
        classID:
          type: integer
          format: int32
          nullable: true
        category:
          type: string
          example: ''
        duration:
          type: string
          example: '60'
        calendar:
          type: string
          example: My Calendar
        calendarID:
          type: integer
          format: int32
          example: 27238
        canClientCancel:
          type: boolean
          example: false
        canClientReschedule:
          type: boolean
          example: false
        location:
          type: string
          example: ''
        certificate:
          type: string
          nullable: true
        confirmationPage:
          type: string
          example: https://acuityscheduling.com/schedule.php?owner=11145481&id[]=1220aa9f41091c50c0cc659385cfa1d0&action=appt
        formsText:
          type: string
          example: '...'
        notes:
          type: string
          example: Notes
        noShow:
          type: boolean
          description: True if admin has marked the canceled appointment as a no-show
        timezone:
          type: string
          example: America/New_York
        forms:
          type: array
          items:
            $ref: '#/components/schemas/AppointmentForm'
        labels:
          type: array
          items:
            $ref: '#/components/schemas/Label'
    Payment:
      type: object
      properties:
        transactionID:
          type: string
          example: pi_123456abcdef
          description: The 3rd-party processor transaction ID
        created:
          type: string
          format: date-time
          example: 2016-01-22T09:27:51-0800
          description: Date the transaction was created
        processor:
          type: string
          example: stripe
          description: 'Payment processor key: stripe, paypal, paypal_pro, braintree, or authorizenet'
          enum:
          - stripe
          - paypal
          - paypal_pro
          - braintree
          - authorizenet
        amount:
          type: string
          example: '300.00'
          description: Amount of the processed transaction
    Label:
      type: object
      properties:
        id:
          type: integer
          format: int32
          example: 3
        name:
          type: string
          example: Completed
        color:
          type: string
          example: pink
    UnauthorizedError:
      type: object
      properties:
        status_code:
          type: integer
          example: 401
        message:
          type: string
          example: Unauthorized
        error:
          type: string
          example: unauthorized
    FormField:
      type: object
      properties:
        id:
          type: integer
          format: int32
          description: Form field ID
        value:
          type: string
          description: Field value; use comma-delimited string for checkboxlist fields
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: HTTP Basic Auth using Acuity User ID and API Key
    oauth2:
      type: oauth2
      description: OAuth2 for multi-account integrations
      flows:
        authorizationCode:
          authorizationUrl: https://acuityscheduling.com/oauth2/authorize
          tokenUrl: https://acuityscheduling.com/oauth2/token
          scopes:
            api: Full API access